最適化の種類について
今日もアウトプット。
第6章まで来た
今日は第6章の①のアウトプット。
ここまではニューラルネットワークの学習の目的は損失関数(ソフトマックスの交差エントロピー誤差とか)の数値をいかに減らして、どうやって最適なパラメータを見つけるのか?が学習の目的。(最適化)
その先には精度の向上があげられる。
でも前出の記事でSGDなるものを学んだ。そうだ…確率的勾配降下法ってやつで、傾きを指標にして
最適地を探していくって話だ。
最適なパラメータ探しはまじで目隠し&地図無しの状態。
お先真っ暗。
だから、SGDのように傾きを頼りにした。
Momentum
モーメンタムの意味自体は運動量って意味らしい。
そう、これは運動量と関係ある。
SGDを知った人はこう考えた。
え?手探り?それよりも一番傾きが少ないところを探す方法あるよ!
ボールを転がす、だった。
見た感じ、ギザギザ、なくなって、多少x / y軸ともに緩やかになった。
SGDよりかは無駄な経路を踏まなくなった。
AdaGrad
前出のSGD、Momentumは勾配に目を向けて最適値を探しに行った。
AdaGradはちょっと変わったところに目を向けた。
ラーニングレート(学習係数)だ。
学習係数とは一回の処理で進む学習の度合いってことらしいが、ぶっちゃけよくわからん。
イメージとしては、
パラメータの要素の中で大きく更新された要素(大きく異なった値を持っていた要素)は
学習係数が小さくなって(学習を進める度合いを小さくして、良く学習させる)ようにして、
調節できるようになった。これを学習係数の減衰っていうらしい。
Adam
Momentumはお椀の中のボールのイメージ。
AdaGradは学習係数の調整をした。
この二つを掛け合わせてもっと良い最適化の手法はないのか?と生まれたのが、
Adamだった。
ちょっと複雑なんで、取り急ぎ、僕はよく使う。
でも図だけをみるとAdaGradがよさげだけど、
こればっかりは解くモデルの問題、学習率や他のパラメータでも変わるので、
なんとも言えない…
おおよそ、この4つがいい感じらしい。