Adam優化算法詳細解析

本文轉載於以下博客地址:http://www.atyun.com/2257.html

如有冒犯,還望諒解!

Adam優化算法是一種對隨機梯度下降法的擴展,最近在計算機視覺和自然語言處理中廣泛應用於深度學習應用。在引入該算法時,OpenAI的Diederik Kingma和多倫多大學的Jimmy Ba在他們的2015 ICLR發表了一篇名爲“Adam: A Method for Stochastic Optimization”的論文,列出了使用亞當在非凸優化問題上的誘人好處,如下:

  • 簡單直接的實施
  • 計算上講究效率
  • 小內存要求
  • 不變量對梯度的對角線重新調節
  • 非常適合於數據和/或參數方面的問題
  • 適合非平穩的目標
  • 適用於非常稀梳梯度的問題。
  • 超參數具有直觀的解釋,通常需要很少的調諧。

Adam如何工作?

Adam與經典的隨機梯度下降法是不同的。隨機梯度下降保持一個單一的學習速率(稱爲alpha),用於所有的權重更新,並且在訓練過程中學習速率不會改變。每一個網絡權重(參數)都保持一個學習速率,並隨着學習的展開而單獨地進行調整。該方法從梯度的第一次和第二次矩的預算來計算不同參數的自適應學習速率。

作者描述Adam時將隨機梯度下降法兩種擴展的優勢結合在一起。

具體地說:

自適應梯度算法(AdaGrad)維護一個參數的學習速率,可以提高在稀疏梯度問題上的性能(例如,自然語言和計算機視覺問題)。

均方根傳播(RMSProp)也維護每個參數的學習速率,根據最近的權重梯度的平均值(例如變化的速度)來調整。這意味着該算法在線上和非平穩問題上表現良好(如:噪聲)。

Adam意識到AdaGrad和RMSProp的好處。與在RMSProp中基於平均第一個時刻(平均值)的參數學習速率不同,Adam也使用了梯度的第二個時刻的平均值(非中心方差)。

具體地說,該算法計算了梯度和平方梯度的指數移動平均值,並且參數beta1和beta2控制了這些移動平均的衰減率。移動平均值和beta1和beta2的初始值接近1.0(推薦值),這導致了估計時間的偏差爲0。這種偏差是通過第一次計算偏差估計然後再計算比可用偏差校正估計來克服的。

Adam是有效的

Adam在深度學習領域是一種很受歡迎的算法,因爲它能很快取得好的成果。實證結果表明:在實踐中,Adam的工作表現良好,並優於其他隨機優化方法。

在原論文中,通過實證證明了該方法的收斂性滿足了理論分析的期望。

在MNIST的字符識別和IMDB情緒分析數據集上,Adam採用了邏輯迴歸算法,對MNIST的數據集進行了多層感知器算法,並在CIFAR-10圖像識別數據集上進行了卷積神經網絡。

他們的結論是:

  “利用大型模型和數據集,我們證明了Adam可以有效地解決實際的深度學習問題。”

對深度學習中Adam優化算法的簡單介紹

在斯坦福大學關於計算機視覺的深度學習課程中,Andrej Karpathy等人開發了一種名爲“CS231n:卷積神經網絡”的課程,這是一種被認爲是深度學習應用的默認優化方法。

在實踐中,Adam被推薦爲使用的默認算法,並且通常比RMSProp稍微好一點。然而,作爲一種替代方法,SGD+Nesterov Momentum也值得嘗試。

Adam配置參數

  • alpha也被稱爲學習速率或步長。權重比例被校正(例如001)。更大的值(例如0.3)在速率校正之前會加快初始學習速度。較小的值(例如1.0e-5)在培訓期間降低學習速度
  • beta1。第一次估計的指數衰減率(如9)。
  • beta2。第二次估計的指數衰次減率(例如999)。在稀疏梯度問題(例如NLP和計算機視覺問題)上,這個值應該接近1.0。
  • epsilon是一個非常小的數字,可以防止任何在實施中被0劃分(例如,10e-8)。

最後,這裏推薦一些比較受歡迎的使用默認參數的深度學習庫:

  • TensorFlow: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08.
    Keras: lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0.
  • Blocks: learning_rate=0.002, beta1=0.9, beta2=0.999, epsilon=1e-08, decay_factor=1.
  • Lasagne: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08
  • Caffe: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08
  • MxNet: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8
  • Torch: learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章