文 | 蘇劍林(追一科技,人稱蘇神)
美 | 人美心細小謹思密達
來自 | 夕小瑤的賣萌屋
前言 這篇文章簡單介紹一個叫做AdaX的優化器,來自《AdaX: Adaptive Gradient Descent with Exponential Long Term Memory》。介紹這個優化器的原因是它再次印證了之前在《硬核推導Google AdaFactor:一個省顯存的寶藏優化器 》一文中提到的一個結論,兩篇文章可以對比着閱讀。
Adam & AdaX AdaX的更新格式是
其中 的默認值是0.0001。對了,順便附上自己的Keras實現:https://github.com/bojone/adax
作爲比較,Adam的更新格式是
其中 的默認值是0.999。
等價形式變換 可以看到,兩者的第一個差別是AdaX去掉了動量的偏置校正 (這一步),但這其實影響不大,AdaX最大的改動是在 處,本來 是滑動平均格式,而 不像是滑動平均了,而且 ,似乎有指數爆炸的風險?
原論文稱之爲“with Exponential Long Term Memory”,就是指β 導致歷史累積梯度的比重不會越來越小,反而會越來越大,這就是它的長期記憶性。
事實上,學習率校正用的是 ,所以有沒有爆炸我們要觀察的是 。對於Adam,我們有
所以如果設 ,那麼更新公式就是
基於同樣的道理,如果設 ,那麼AdaX的 的更新公式也可以寫成上式。
衰減策略比較 所以,從真正用來校正梯度的 來看,不管是Adam還是AdaX,其更新公式都是滑動平均的格式,只不過對應的衰減係數 不一樣。
對於Adam來說,當時t = 0, ,這時候 就是 ,也就是用實時梯度來校正學習率,這時候校正力度最大;當 時, ,這時候 是累積梯度平方與當前梯度平方的加權平均,由於 ,所以意味着當前梯度的權重 不爲0,這可能導致訓練不穩定,因爲訓練後期梯度變小,訓練本身趨於穩定,校正學習率的意義就不大了,因此學習率的校正力度應該變小,並且 ,學習率最好恆定爲常數(這時候相當於退化爲SGD),這就要求 時, 。
對於AdaX來說,當t = 0時 ,當 , ,滿足上述的理想性質,因此,從這個角度來看,AdaX確實是Adam的一個改進。在AdaFactor中使用的則是 ,它也是從這個角度設計的。至於AdaX和AdaFactor的策略孰優孰劣,筆者認爲就很難從理論上解釋清楚了,估計只能靠實驗。
就這樣結束了 嗯,文章就到這兒結束了。開頭就說了,本文只是簡單介紹一下AdaX,因爲它再次印證了之前的一個結論—— 應當滿足條件“ ”,這也許會成爲日後優化器改進的基本條件之一。
添加個人微信,備註: 暱稱-學校(公司)-方向 , 即可獲得
1. 快速學習深度學習五件套資料
2. 進入高手如雲DL&NLP交流羣
記得備註呦