adam 參數解析
參考
https://zhuanlan.zhihu.com/p/91166049
https://zhuanlan.zhihu.com/p/32626442
偽代碼
參數解釋
- Mt
- Mt 提供了需要增大學習率的參數加速訓練的能力.
*. 累計的一階動量(梯度)越大 代表在這個方向上歷史向單一方向更新的越多. 越需要收斂.
- Mt 提供了需要增大學習率的參數加速訓練的能力.
- Vt
- vt提供了需要減小學習率衰減的能力.
- vt越大代表歷史累計的二階動量(梯度平方)越大, 代表這個參數更新越頻繁,震盪越嚴重. 所以需要衰減學習率.
- t
- 代表時間步, 每個epoch更新一次.
- 所以在每個epoch開始時loss可能會有震盪.
- ß1, ß2,
- 起到了對一二階動量指數衰減的作用. 避免vt 累計過大, 導致參數學習率太小無法更新. 克服了adagrad 累計梯度導致分母過大參數無法更新的問題.
- 下圖展示出時間步1~20時,各個時間步的梯度隨着時間的累積占比情況。(ß1,ß2的作用, 指數衰減 )
- epsilon
- 避免gt除數(vt+epsilon) 為0. 注意如果vt過小會導致學習率過大, 這時可以調大epsilon值, 避免震盪.
adam的參數學習率理解
- 由於引入了一階&二階動量. adam的每個參數學習率都是不同的.
- 狹義上的學習率是固定的. 即alpha本身不會改變.
- 但梯度的系數等於 $ alpha * \frac{m_t}{\sqrt{v_t} + epsilon} $ 即通過累計的一二階動量對梯度做更新.
- 所以打印adam的learning rate 會發現並沒有變化.
- 有必要也可以為adam引入學習率衰減, 以保證不過擬合, 二者並不矛盾.