Adam那么棒,为什么还对SGD念念不忘 (2)—— Adam的两宗罪
在上篇文章中,我們用一個框架來回顧了主流的深度學習優化算法。可以看到,一代又一代的研究者們為了我們能煉(xun)好(hao)金(mo)丹(xing)可謂是煞費苦心。從理論上看,一代更比一代完善,Adam/Nadam已經登峰造極了,為什么大家還是不忘初心SGD呢?
?
舉個栗子。很多年以前,攝影離普羅大眾非常遙遠。十年前,傻瓜相機開始風靡,游客幾乎人手一個。智能手機出現以后,攝影更是走進千家萬戶,手機隨手一拍,前后兩千萬,照亮你的美(咦,這是什么亂七八糟的)。但是專業攝影師還是喜歡用單反,孜孜不倦地調光圈、快門、ISO、白平衡……一堆自拍黨從不care的名詞。技術的進步,使得傻瓜式操作就可以得到不錯的效果,但是在特定的場景下,要拍出最好的效果,依然需要深入地理解光線、理解結構、理解器材。
?
優化算法大抵也如此。在上一篇中,我們用同一個框架讓各類算法對號入座。可以看出,大家都是殊途同歸,只是相當于在SGD基礎上增加了各類學習率的主動控制。如果不想做精細的調優,那么Adam顯然最便于直接拿來上手。
?
但這樣的傻瓜式操作并不一定能夠適應所有的場合。如果能夠深入了解數據,研究員們可以更加自如地控制優化迭代的各類參數,實現更好的效果也并不奇怪。畢竟,精調的參數還比不過傻瓜式的Adam,無疑是在挑戰頂級研究員們的煉丹經驗!
?
最近,不少paper開懟Adam,我們簡單看看都在說什么:
?
Adam罪狀一:可能不收斂
?
這篇是正在深度學習領域頂級會議之一 ICLR 2018 匿名審稿中的?On the Convergence of Adam and Beyond,探討了Adam算法的收斂性,通過反例證明了Adam在某些情況下可能會不收斂。
?
回憶一下上文提到的各大優化算法的學習率:
其中,SGD沒有用到二階動量,因此學習率是恒定的(實際使用過程中會采用學習率衰減策略,因此學習率遞減)。AdaGrad的二階動量不斷累積,單調遞增,因此學習率是單調遞減的。因此,這兩類算法會使得學習率不斷遞減,最終收斂到0,模型也得以收斂。
?
但AdaDelta和Adam則不然。二階動量是固定時間窗口內的累積,隨著時間窗口的變化,遇到的數據可能發生巨變,使得??可能會時大時小,不是單調變化。這就可能在訓練后期引起學習率的震蕩,導致模型無法收斂。
?
這篇文章也給出了一個修正的方法。由于Adam中的學習率主要是由二階動量控制的,為了保證算法的收斂,可以對二階動量的變化進行控制,避免上下波動。
通過這樣修改,就保證了??,從而使得學習率單調遞減。
?
?
Adam罪狀二:可能錯過全局最優解
?
深度神經網絡往往包含大量的參數,在這樣一個維度極高的空間內,非凸的目標函數往往起起伏伏,擁有無數個高地和洼地。有的是高峰,通過引入動量可能很容易越過;但有些是高原,可能探索很多次都出不來,于是停止了訓練。
?
近期Arxiv上的兩篇文章談到這個問題。
?
第一篇就是前文提到的吐槽Adam最狠的?The Marginal Value of Adaptive Gradient Methods in Machine Learning?。文中說到,同樣的一個優化問題,不同的優化算法可能會找到不同的答案,但自適應學習率的算法往往找到非常差的答案。他們通過一個特定的數據例子說明,自適應學習率算法可能會對前期出現的特征過擬合,后期才出現的特征很難糾正前期的擬合效果。
?
另外一篇是?Improving Generalization Performance by Switching from Adam to SGD,進行了實驗驗證。他們CIFAR-10數據集上進行測試,Adam的收斂速度比SGD要快,但最終收斂的結果并沒有SGD好。他們進一步實驗發現,主要是后期Adam的學習率太低,影響了有效的收斂。他們試著對Adam的學習率的下界進行控制,發現效果好了很多。
?
于是他們提出了一個用來改進Adam的方法:前期用Adam,享受Adam快速收斂的優勢;后期切換到SGD,慢慢尋找最優解。這一方法以前也被研究者們用到,不過主要是根據經驗來選擇切換的時機和切換后的學習率。這篇文章把這一切換過程傻瓜化,給出了切換SGD的時機選擇方法,以及學習率的計算方法,效果看起來也不錯。
?
到底該用Adam還是SGD?
?
所以,談到現在,到底Adam好還是SGD好?這可能是很難一句話說清楚的事情。去看學術會議中的各種paper,用SGD的很多,Adam的也不少,還有很多偏愛AdaGrad或者AdaDelta。可能研究員把每個算法都試了一遍,哪個出來的效果好就用哪個了。
?
而從這幾篇怒懟Adam的paper來看,多數都構造了一些比較極端的例子來演示了Adam失效的可能性。這些例子一般過于極端,實際情況中可能未必會這樣,但這提醒了我們,理解數據對于設計算法的必要性。優化算法的演變歷史,都是基于對數據的某種假設而進行的優化,那么某種算法是否有效,就要看你的數據是否符合該算法的胃口了。
?
算法固然美好,數據才是根本。
?
另一方面,Adam之流雖然說已經簡化了調參,但是并沒有一勞永逸地解決問題,默認參數雖然好,但也不是放之四海而皆準。因此,在充分理解數據的基礎上,依然需要根據數據特性、算法特性進行充分的調參實驗,找到自己煉丹的最優解。而這個時候,不論是Adam,還是SGD,于你都不重要了。
?
少年,好好煉丹吧。
?
關于優化算法的選擇和tricks,歡迎繼續移步閱讀:
Adam那么棒,為什么還對SGD念念不忘 (3)
總結
以上是生活随笔為你收集整理的Adam那么棒,为什么还对SGD念念不忘 (2)—— Adam的两宗罪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python究竟要不要使用多线程
- 下一篇: 一个框架看懂优化算法之异同 SGD/Ad