ニューラルネットワークの学習(その2)

「ゼロから作るDeep Learning」の続きの「6章 学習に関するテクニック」に関するメモ。

学習時の手法やハイパラメータについて書いてある。

取り敢えず、学習時のコードを読む時に覚えておいた方がよいものとして、

optimization(最適化)という単語とSGDという手法。あと似たものとして、Adamを覚えとけば何とかなる気がする。困った時に読み直せばよい。

過学習対策の正則化の手法として、weight decayが記載されているが、これはLINEの中の人が書いた以下の本がわかりやすかった。

www.amazon.co.jp

ディープラーニングのための数学の本はいろいろ出ているけれど、これが一番わかりやすい気がする。

数学は知っていた方がよいけど、まずは実際に使ってみて、ソースコードを読んでみてからもっと理論的に深堀したくなってから数学に触れた方が良い気がする。

しかし、その段になって、ある程度の数学の知識がないと積み上げるのが大変なので、準備はしておかないといけないのが辛い。

正則化の手法としてもうひとつ「Dropout」がでてくる。このパラメータもよく見かける。

またよく似たものとして、枝刈り(Pruning)という、モデルのサイズを圧縮する手法がある。この枝刈りは、学習済みモデルのネットワークを物理的に切断する手法である。

それに対して「Dropout」は、学習時にランダムにノードを消して学習させる論理的な手法である。

なんにしろ、実際に学習を動かしてみて、困らないとここら辺は身につかない気がする。

「7章 畳み込みニューラルネットワーク」画像関係の処理によく使われるCNNが登場する。しかし、CNNは画像処理だけではなく、セルの関連性を見たい場合に他でも使われる。後で、Attentionと対比して見ていきたい。

CNNの良いところは、説明に画像処理が使われるのでイメージしやすい所だと思う。

「7.6 CNNの可視化」がイメージしやすいので、取り敢えずここまで流し読みするのがオススメ。画像処理なので、フィルタを作成して、データと掛け合わせて反応具合をみて、特徴点を抽出する。フィルタには、縦方向に反応するエッジや横方向に反応するエッジがある。このフィルタは予め用意しているわけではなく、学習していくうちにたまたま縦や横に反応するフィルタができあがり、それが強く反応して、よい結果を得るからそのフィルタ構成がよい重みとなり、モデルとして残っていく。つまり、CNNの学習は、そのデータにあったフィルタを作ることである。

学習のために、微分で勾配を計算する仕組みは、他のニューラルネットワーク学習と同様。

https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/common/layers.py#L232