学習を上手く行うために Optimization
学習を行う際、重みwの傾きから損失関数を減らす方向に重みを調整していくが
重みが何次元もあると
local minima(極小値)や
saddle point(鞍点)と呼ばれる、重みの傾きが局所的に0になってしまうところが生じてしまい上手く学習が進まない場合がある
この場合どのように最適な重みを探していくか
まず従来の方法を見返すと、
このように傾きに対し、損失関数の値を下げる方向に重みを更新して行く
より良い重みの更新はないかと様々な手法が研究されている。
Momentumという 最適かする際にvelocityと呼ばれる速度、勢いをつけて探していくアプローチがある
vの初期設定は0で、muは0.9と設定されている
イメージとしてボールを転がすという感じである
このボールの位置が最適な重みを表すということになる
ボールが勢いを持っていればlocal minimaやsaddle pointに入ったとしてもそこにボールが止まることを防げるようになる
Nestrov momentum という手法もある
この手法は普通のmomentumの更新の仕方が異なる。
違いは次のようになる
違いはボールを転がす前それとも後に、傾きへ向かって値を更新するかの違いである。
他にもRMSpropなどと呼ばれる手法もある
これらは従来が全パラメーターに対し一定のLearning Rateで重みの更新をしていたのに対し、パラメーターごとにLearning Rateを変えて学習を行うというものである。
RMSProp,Adagrad,Adamがそれらの手法である。
Adagrad
RMSprop
Adam
AdamはRmspropとmomentumの考え方の融合のような形である
まとめ
実用上は
Recommended values in the paper are
eps = 1e-8
,beta1 = 0.9
,beta2 = 0.999
.
のように設定したAdamを用いるのが良いらしい
また
SGD+Nesterov Momentum も試してみる価値があるようだ。