Author: 下山竜矢

NN

この記事はKCS AdventCalendar 10日目の記事です.

前書き

昨今,AIというものが非常に盛り上がりを見せていますね.例えば,AIが曲を自動で生成したり,自然な人間な顔を生成したりすることができます.このAIというものはどのような方法で曲を作ったり画像を生成したりできるのでしょうか.ここでは,その方法をすべて説明することはできないので,その基礎となるニューラルネットワークというものを数式なしで雑に説明しようと思います.(本当は数式ありのほうがわかりやすいと思うのですが,諸事情で数式がなくなりました)

 

ニューラルネットワークとは?

ニューラルネットワークは一体何をしているのでしょうか.これは,一言でいえば目的となるデータに関数を近似することをしています.(詳しくは後述)これだけでは機械学習の線形回帰などと何ら変わらないのですが,ニューラルネットワークの特徴として非線形変換を何度も繰り返して関数の表現能力を高めていることがあげられます.重回帰と比較すると,入力データに対して

非線形か線形変換をしてから「重み」をかけて線形に和をとります.しかし,ニューラルネットワークではこの和をとって非線形変換をおこなった値を新たなデータとして同じことを何回も繰り返します.この和と非線形変換をとる回数がそのニューラルネットワークの「」の数となります.

以下の図を見て下さい.

7259d68d4aa0fc9d6250b5b73ae4cafc

 

これは簡単な3層ニューラルネットワークの図です.図では青が入力データ,赤が線形和に非線形変換をした新たなデータを表しています.矢印はデータに重みをかけることを表しています.それぞれの重みがかけられたデータの和をとって非線形変換されます.ここで作られたデータは隠れ層とよばれここのデータ数によってニューラルネットワークの表現能力が変わります.最後に出力された緑のデータは,ニューラルネットワークのタスクの種類によって変わります.例えば,0~9の文字を分類するタスクであれば最後にソフトマックス関数という非線形関数によって10個のデータを出力させます.そうして得られた出力と用意した目的のデータとの損失を計算します.その損失情報をもとに「重み」を更新していくことでデータに関数を最適化していきます.以下にこれまでのニューラルネットワークの流れをまとめます.

 

  1. 入力データ,目的とするデータを用意する.
  2. 入力データ(or 新たなデータ)に重みをかけて線形に和をとる.
  3. その線形和に非線形変換をとり新たなデータを作る.
  4. 2~3を一定回数繰り返す.
  5. 最終的に出力された値と目的データとの損失を計算する.
  6. その損失をもとに重みを更新させる.

ここからは,6の方法が特徴的なので具体的に見ていくことにします.

 

重みの損失情報(勾配情報)をどう渡すか?

ニューラルネットワークでは,勾配法という手法を用います.これは,簡単に言えば微分して得られた勾配にある定数をかけた分だけ,変数を更新するという方法です.ある定数は学習率と呼ばれたりします.

ニューラルネットワークの場合は,出力した値をそれぞれの重みで偏微分することになります.勾配は出力した値から得られるため,勾配情報は先ほどの図で言えば右から伝わることになります.そのため,この更新方法は誤差逆伝播法と呼ばれます.

 

おわりに

今回は,数式なしでニューラルネットワークを解説してみたのですが,かえってわかりにくくなってしまいましたね.個人的な好みなのですが,ニューラルネットワークをベイズ的に取り扱う,つまり各パラメータを確率変数として計算していく見方が好きです.皆さんもベイズに入門して計算してみてください.

 

 

 

 

9日目 11日目

一年を振り返る

これはKCS AdventCalendar2019 2日目の記事です。”2日目”の記事です。

 

こんにちは、2019年の日吉代表のsupercellです。さて、今年も色々と限界な一年でしたね。ということで、この記事では一年を振り返っていきたいと思います!!!!!

 

4月

  • 新歓でKCSちゃんのショーを披露。新歓担当、手伝ってくださった先輩方に圧倒的感謝。
  • 技術書典6に参加。某先輩には大変お世話になりました。また、風邪をひきながらも命を燃やして参加した某、途中から参加してくれた某に圧倒的感謝。

D4E71fzUIAAuNyM

  • web班、Unity班、AI班、DTM班、(Blender班)に分かれ活動開始。Unity班、AI班はAICの活動の一環として活動。
  • ソファ、デスクトップ、椅子、机、スピーカーを買い替えることに。

5月

  • 新歓合宿を実施、湯河原へ。多くの一年生が参加してくれたので圧倒的感謝。
  • DMMLT会を開催。開催してくださった先輩とDMMの方々に圧倒的感謝。

6月

  • 中間試験・・・

7月

  • 期末試験・・・

8月

  • 第二回総会実施。
  • 技術交流会実施。私は不参加でした、申し訳ありません。

9月

  • 夏合宿を実施。去年と同じく土善旅館へ。やはり開発には最適な環境だった。参加者には圧倒的感謝。
  • ついにデスクトップを買おうと動き出す。
  • Wi-Fiを止められる。(え?)

10月

  • ルーターはだめで有線でしか利用できなかったため、Wi-Fiを契約しようという流れに。
  • 限 界 矢 上 祭。展示しようと頑張ってくれた方々に圧倒的感謝。特に矢上祭担当に圧倒的感謝。
  • M3に参加。DTM班の方々に圧倒的感謝。

EH2hW1UUcAAilh7

11月

  • ルーターが届く。Wi-Fiが復活。会計担当には感謝しかありません。
  • 三田祭に参加。一年生が積極的に展示に参加してくれて圧倒的感謝。例によって三田祭担当にお世話になりました。EJ3U9kZU8AII8dNEJ3U9rMUcAE5s-d

 

以上が振り返りとなります。案外書いてみるとあっけないですね。急遽この記事を書くことになり低クオリティですが見てくださった読者の皆様に圧倒的感謝。また、サークル活動に関わってくださった方々に感謝します。

 

1日目 3日目

Vuexについて説明したい

※この記事は、KCSアドベントカレンダー12月23日の記事です。

はじめに

はじめまして、一年のsupercell(twitter: @undermountainafu)です。この記事では自分が学習しているvuexについて説明していきます。

vue.jsについて

vuexの説明に入る前に、まずはvue.jsについて簡潔に説明しようと思います。vue.jsとは、フロントエンドで用いられるJavaScriptのフレームワークです。他のフレームワークとしては、ReactやAngularがあります。vue.jsの面白いなと思った特徴は、コンポーネント指向です。この指向は、アプリケーションをコンポーネント機能ごとに分割することで、コードの再利用、保守を容易にすることができます。他にも色々な機能がありますが、詳しくはドキュメント見てください。
vuexドキュメント

vuexとは

お待たせしました(?)、vuexについて説明していきます。これは、vue.jsを用いたアプリケーション開発の際に用いられる開発フローです。要するに、データの流れを一方向に決めようってことです。vuexでは、stateをグローバル変数のように設定します。そのため、どのコンポーネントからでもstateの値を参照することができます。stateの状態を変更したい場合は、action->mutation->stateという流れで行います。下図は一連の流れの参考図です。

vuex
図. vuexの流れ

なぜ使う?

アプリケーションでは、view、action、stateで一方向の流れになっています。しかし、共通の値を共有するコンポーネントがある場合や、一つの値を複数のviewに表示させたい場合などでは、コードが複雑になってしまいますし、状態の管理が煩雑になってしまいます。具体的には、vuexを使わない場合propsとして状態を渡しますが、その状態は親から子にしか渡すことができません。
そこで、状態の管理を楽にするためにvuexを使うのです。
vuexがどんなもので、なぜ使うかを理解した後は、各機能について簡潔に説明していきます。

state

stateは、ストアで管理される状態であり、mutation以外では変更できません。

action

actionでは、mutationの登録(commit)や、データの加工などの非同期処理を行います。actionはdispatchにより呼び出されます。また、外部APIとの通信もここで行います。蛇足になりますが、APIとの通信は、axiosを用いることが公式により推奨されています。

mutation

mutationでは、stateを変更する処理や、同期的な処理を行います。commitメソッドによって呼び出すことができます。唯一stateを変更することができる機能となっています。

おわりに

余談ですが、この記事のためにvuexのサンプルコードを書いていたのですが、そのコードが動かなかったため、のせれませんでした(雑魚)。コードを直してくれる方募集しています->Missionapp
では、おつかれ三下~!