ディープラーニングについてディープにラーニング。

思いっきり、自分が学んだことのアウトプットしていきますが、何分初心者。もし何かアドバイス等頂けましたら幸いです!

最適化の種類について

今日もアウトプット。

f:id:kawam0t0:20191214170937p:plain

第6章まで来た
今日は第6章の①のアウトプット。


ここまではニューラルネットワークの学習の目的は損失関数(ソフトマックスの交差エントロピー誤差とか)の数値をいかに減らして、どうやって最適なパラメータを見つけるのか?が学習の目的。(最適化)
その先には精度の向上があげられる。

でも前出の記事でSGDなるものを学んだ。そうだ…確率的勾配降下法ってやつで、傾きを指標にして
最適地を探していくって話だ。

最適なパラメータ探しはまじで目隠し&地図無しの状態。
お先真っ暗。
だから、SGDのように傾きを頼りにした。

SGD

f:id:kawam0t0:20191221131430p:plain

具体的な数式はいらんけど、
イメージだけアウトプット。
傾きをめざしていくから、結構色々ぶつかりながら最適な値を見つけに行ってる。
ギザギザ感がある。最短ルートを行ってない。

Momentum

f:id:kawam0t0:20191221131502p:plain

モーメンタムの意味自体は運動量って意味らしい。
そう、これは運動量と関係ある。
SGDを知った人はこう考えた。
え?手探り?それよりも一番傾きが少ないところを探す方法あるよ!
ボールを転がす、だった。
f:id:kawam0t0:20191221131724p:plain

見た感じ、ギザギザ、なくなって、多少x / y軸ともに緩やかになった。
SGDよりかは無駄な経路を踏まなくなった。

AdaGrad

f:id:kawam0t0:20191221131521p:plain

前出のSGD、Momentumは勾配に目を向けて最適値を探しに行った。
AdaGradはちょっと変わったところに目を向けた。
ラーニングレート(学習係数)だ。
学習係数とは一回の処理で進む学習の度合いってことらしいが、ぶっちゃけよくわからん。

イメージとしては、
パラメータの要素の中で大きく更新された要素(大きく異なった値を持っていた要素)は
学習係数が小さくなって(学習を進める度合いを小さくして、良く学習させる)ようにして、
調節できるようになった。これを学習係数の減衰っていうらしい。

Adam

f:id:kawam0t0:20191221131703p:plain

Momentumはお椀の中のボールのイメージ。
AdaGradは学習係数の調整をした。
この二つを掛け合わせてもっと良い最適化の手法はないのか?と生まれたのが、
Adamだった。

ちょっと複雑なんで、取り急ぎ、僕はよく使う。
でも図だけをみるとAdaGradがよさげだけど、
こればっかりは解くモデルの問題、学習率や他のパラメータでも変わるので、
なんとも言えない…
おおよそ、この4つがいい感じらしい。