某大学生の機械学習日記

趣味はでぃーぷらーにんぐ

Optimizerに関する備忘録(自分用)

SGD

 w^{t+1} ← w^{t} - \eta \frac{\partial(w^{t})}{\partial w^{t}}
ランダムサンプリングから勾配計算を行う。ランダム性を持つことから計算ごとに勾配が変化して解が揺さぶられることにより局所解に落ち着くことを防ぐ。

momentum SGD

 w^{t+1} ← w^{t} - \eta \frac{\partial(w^{t})}{\partial w^{t}} + \alpha \Delta w^{t}
SGDの持つ特徴に加えて慣性項を入れることで大局的な勾配の平均方向に勾配更新して行くようなイメージ。複雑なLossのパラメータ空間を持つ場合に使えそう。

AdaGrad

 h_0 = \epsilon
 h_t = h_{t-1} + \Delta E {w^{t}}^2
 \eta_t = \frac{\eta_t}{\sqrt{h_n}}
 w^{t+1} = w^{t} - \eta_t \nabla E (w^{t})
tの時の勾配の大きさによってt+1の学習係数を自動調節する。学習回数を大きくするに連れて学習係数が徐々に小さくなっていくとともに勾配が小さくなっていく(パラメータが収束しだす)に連れて学習係数も0に近づいていくことがわかる。

RMSprop

 h_t =\alpha h_{t-1} +(1 - \alpha) \Delta E {w^{t}}^2
 \eta_t = \frac{\eta_0}{\sqrt{h_n} + \epsilon}
 w^{t+1} = w^{t} - \eta_t \nabla E (w^{t})
 \alphaを導入して過去の勾配の影響を抑えてと現在の勾配の影響をより反映させやすくさせた。 \epsilonを分母に加えたのは初期勾配が0だった時に分母が0になるのを防ぐため。

AdaDelta

RMSpropでは過去の勾配:現在の勾配= \alpha : (1 - \alpha)と過去の勾配を1つのくくりにまとめていたのに対して、過去の勾配の中でも直近の勾配をより注視できるようにした。

Adam

RMSpropとAdaGradの良いとこどり。AdaGradではバイアス訂正項( \epsilonによる調整のことかな??)がないため更新が大きくなる場合がある。RMSpropでもバイアス訂正項が悪影響を及ぼすことがある??? これを改善したのがAdamっぽい。

Adam-amsgrad

勾配のノルムの二乗から計算される値の最大値で勾配を抑えることでAdamの収束性を改善した。なぜそうなるかはよくわからん。

参考