ニューラルネットワークの学習(その1)
ニューラル機械翻訳の理論的な所を見ていきたい。
まずは、Attentionを理解することを目標とする。
いきなりAttentionを理解することはできないので、まずニューラルネットワークから始める。
これを読めばいいんじゃねと思うが、あくまで目標はAttentionを理解することなので、ひとまず、端折って良い所をあげたいと思う。
あと、Sonyのクラウドニューラルネットワークサービスの「Neural Network Console」の説明動画が参考になる。
結構数があるが、以下の3つぐらいを見ておくとよいと思う。
Deep Learningの概要がなんとなくわかればよい。
- Deep Learning入門:ニューラルネットワーク学習の仕組み
ニューラルネットワークの学習(誤差逆伝播法)の動作がイメージできるとよい。
- Deep Learning入門:ニューラルネットワーク設計の基礎
Affine結合/Tanh(活性化関数)/Convolution(畳み込み)/Pooling/Softmaxとかの単語がそれぞれ何をさしているかが、何となくわかればよい。
使い分けは、以下のページがわかりやすい。
「ゼロから作るDeep Learning」は、まずは細かい所は置いといて「5章 誤差逆伝播法」までを一気に読んでしまうのが良いと思う。
ニューラルネットワークの学習で何を行っているのかをまずイメージできることが重要だと思う。
ニューラルネットワークの最適な重みパラメータを見つけるのが学習である。そのために、評価関数を定義して、重みパラメータを調整していく。調整をバッチ処理的にできるように微分計算で勾配を求めてその方向に調整していく。なので、いろいろな層が微分可能であることが重要である。
ここら辺がイメージできて、後の細かい手法は必要に迫られた時に見ていけばよいのではないかと思う。
以下、目次毎のコメント
1章 Python入門
流し読みでOK
2章 パーセプトロン
なんとなくニューラルネットワークの構成物がこんな物だとわかればOK
今の段階では、バイアスは無視しておいてよい。
3章 ニューラルネットワーク
どんな種類の活性化関数があり(ReLu/Sigmoid/Tanh等)それが何をするのか?
ニューラルネットワークでどんな計算をしているのか?(単なる行列計算)
※行列の内積は、後々「単語の分散表現」の比較等でよく出てくる。
ソフトマックス関数とは何をしているのか?(結果を確率で表現している)
(ニューラルネットワークとしては、INとOUTのサイズは固定でそれに併せたデータを入れれば、OUTのサイズの確率が出力される。)
4章 ニューラルネットワークの学習
損失関数とは何か?
(関数としては、2乗和誤差と交差エントロピー誤差を覚えておけばOK)
勾配と学習処理のイメージがわけばOK
5章 誤差逆伝播法
計算グラフと合成関数がでてくるが、各レイヤとしては、foward()とbackward()を実装すればよい。
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch05/layer_naive.py
実装する際にfoward()は、自分の通常の計算を行い、backward()は微分計算を実装すればよい。