はじめに
最近、optimizerについて勉強する機会がありました(E資格対策)
Adamや最急降下法、SGDなど名前やぼやっとした印象は持っていたものの、
数式含めての理解はあまりできてはいなかったんですよね
参考:非常にわかりやすくまとめてあります
https://qiita.com/omiita/items/1735c1d048fe5f611f80
詳細な説明はすでにまとめてありますので、
ここでは図と表を使って、「覚えるために」まとめなおしたいと思います
※図はブログに以前掲載したものからの修正です
図でまとめる
まとめてみると分かりますが、
w_t = w_{t-1} - \alpha' \nu_t
でどのアルゴリズムも基本的に表すことができることが分かります
(まあ更新式なのでそれはそうなんですが…)
※表現として適切かは怪しいところがあります
例えば $(\nabla_w\mathcal{L}(w))^2 $ は
本来なら $\nabla_w\mathcal{L}(w) \odot \nabla_w\mathcal{L}(w)$ の方が適切だと思います
※SGDは定義における勾配を取る時刻が違う気がします
SGDの更新式は $ w_{t+1} = w_t - \alpha \nabla_w \mathcal{L}(w) $ ですが、
$ \beta=0 $の場合のMomentumの式は $ w_t = w_{t-1} - \alpha \nabla_w \mathcal{L}(w) $ です
表でまとめる
w_t = w_{t-1} - \alpha' \nu_t
としたときの学習率 $\alpha'$ ,勾配 $\nu_t$ を表にしてみます
optimizer | 学習率 $\alpha'$ | 勾配 $\nu_t$ |
---|---|---|
SGD | $\alpha$ | $\nabla_w\mathcal{L}(w)$ |
Momentum | $\alpha$ | $\beta\nu_{t-1} + (1-\beta)\nabla_w\mathcal{L}(w)$ |
NAG | $\alpha$ | $\beta\nu_{t-1} +(1-\beta)\nabla_w\mathcal{L}(w-\beta\nu_{t-1})$ |
RMSProp | $s_t = \beta s_{t-1} + (1-\beta)(\nabla_w\mathcal{L}(w))^2$ $\alpha' = \frac{\alpha}{\sqrt{s_t + \epsilon}}$ |
$\nabla_w\mathcal{L}(w)$ |
Adam | $s_t = \beta s_{t-1} + (1-\beta)(\nabla_w\mathcal{L}(w))^2$ $\alpha' = \frac{\alpha}{\sqrt{s_t + \epsilon}}$ |
$\beta\nu_{t-1} + (1-\beta)\nabla_w\mathcal{L}(w)$ |
表でまとめると、一目瞭然ですね
AdamがMomentum + RMSPropで成り立っているのが分かりやすいです
(この表、数式途中で改行をしない良い方法ないんでしょうか…?)