けの〜のブログ

ガッキーでディープラーニングして教育界に革命を起こす

学習を上手く行うために Optimization

学習を行う際、重みwの傾きから損失関数を減らす方向に重みを調整していくが
重みが何次元もあると

local minima(極小値)や
saddle point(鞍点)と呼ばれる、重みの傾きが局所的に0になってしまうところが生じてしまい上手く学習が進まない場合がある

 

この場合どのように最適な重みを探していくか

まず従来の方法を見返すと、

f:id:keno-lasalle-kagoshima:20171117233501p:plain

このように傾きに対し、損失関数の値を下げる方向に重みを更新して行く

 

より良い重みの更新はないかと様々な手法が研究されている。

 

Momentumという 最適かする際にvelocityと呼ばれる速度、勢いをつけて探していくアプローチがある

f:id:keno-lasalle-kagoshima:20171117233727p:plain

vの初期設定は0で、muは0.9と設定されている

 

イメージとしてボールを転がすという感じである

このボールの位置が最適な重みを表すということになる

 

ボールが勢いを持っていればlocal minimaやsaddle pointに入ったとしてもそこにボールが止まることを防げるようになる

 

Nestrov momentum  という手法もある

f:id:keno-lasalle-kagoshima:20171117234113p:plain

 

この手法は普通のmomentumの更新の仕方が異なる。

違いは次のようになる

f:id:keno-lasalle-kagoshima:20171117234144p:plain

違いはボールを転がす前それとも後に、傾きへ向かって値を更新するかの違いである。

 

他にもRMSpropなどと呼ばれる手法もある

これらは従来が全パラメーターに対し一定のLearning Rateで重みの更新をしていたのに対し、パラメーターごとにLearning Rateを変えて学習を行うというものである。

RMSProp,Adagrad,Adamがそれらの手法である。

Adagrad

f:id:keno-lasalle-kagoshima:20171117235119p:plain

RMSprop

f:id:keno-lasalle-kagoshima:20171117235225p:plain


Adam

f:id:keno-lasalle-kagoshima:20171117235435p:plain

AdamはRmspropとmomentumの考え方の融合のような形である

 

 

まとめ

実用上は

Recommended values in the paper are eps = 1e-8, beta1 = 0.9, beta2 = 0.999.

のように設定したAdamを用いるのが良いらしい

また

SGD+Nesterov Momentum も試してみる価値があるようだ。

cs231n.github.io