最適化手法、モーメンタム・AdaGrad・RMSprop・AdaDelta・Adam・AdaBound・AMSBoundと多すぎる
どれが何を直したのか、つながりで覚えたい
【疑問】Adamって結局何を組み合わせてるん?モーメンタムからAdaBoundまで最適化手法の系譜【G検定】
前提のおさらい。SGDは、一部のデータで出した勾配の逆向きに、学習率 をかけて重みを動かす。問題は、谷の形によって進みが遅かったり、行ったり来たりしたりすること
>>1
系譜は2本の流れで見ると分かりやすい
1本目:前の動きの勢いを使う(モーメンタム)
2本目:重みごとに学習率を変える(AdaGrad → RMSprop・AdaDelta)
Adamはこの2本を合わせたもので、AdaBound・AMSBoundはAdamの弱点を直したもの
>>3
モーメンタムは、ボールが坂を転がるように、前の動きを少し残す
同じ向きの勾配が続くと加速する。 が続き、、 なら、1歩はやがて になって、SGDの10倍の速さで進む
向きがころころ変わる方向では打ち消しあって、行ったり来たりが減る
>>1
AdaGradは、重みごとに「これまでの勾配の2乗の合計」で学習率を割る
よく動いた重みほど学習率が下がる。勾配がいつも1なら、1歩は で、 なら1回目0.1、4回目0.05、100回目0.01
>>5
それやと、学習が長くなると学習率が0に近づいて止まってまうやん
>>6
そこを直したのがRMSprop。合計の代わりに、古い勾配ほど薄める平均を使うから、学習率が下がりっぱなしにならん
AdaDeltaも同じ問題を直したもので、学習率そのものを決めなくてええ形にしてある
Adamは、モーメンタムのように勾配の平均(向き)を、RMSpropのように勾配の2乗の平均(大きさ)を持って、向きを大きさで割って進む
キングマとバの2014年の論文で発表された
割り算のおかげで、最初の1歩は勾配の大きさによらずだいたい 。勾配が0.001でも100でも、 ならどちらも約0.001進む
>>8
そんなに便利なら、Adamだけ覚えとけばええやん
>>9
Adamは学習の初めは速いけど、最後の精度ではSGDに負けることがある、という報告がある。学習率が重みごとに大きくなりすぎたり小さくなりすぎたりするのが一因とされてる
AdaBoundは、学習率に上限と下限をつけて、その幅を学習が進むほど狭めて、最後はSGDに近づける。AMSBoundは、同じことをAdamの改良版のAMSGradでやったもの。どちらもルオらの2019年の論文
>>10
実際の現場では、まずAdamで動かしてみて、精度を詰めたいときにSGDとモーメンタムも試す、という使い分けをよく見る
管理人のひとこと
- 系譜は2本:前の動きの勢いを使うモーメンタム、重みごとに学習率を変えるAdaGrad → RMSprop・AdaDelta。Adamはその両方。
- モーメンタムは同じ向きが続くと加速し、 なら1歩が1.0(SGDの10倍)になる。
- AdaGradは勾配の2乗の合計で割るので1歩が に縮み(0.1、0.05、0.01)、やがて止まる。RMSpropは古い勾配を薄めて直した。
- Adam(キングマとバ、2014年の論文)は向きを大きさで割るので、最初の1歩は勾配の大きさによらず約 。AdaBound・AMSBound(ルオら、2019年の論文)は学習率に上限・下限をつけて最後はSGDに近づける。