1. 程式人生 > >Adam 算法

Adam 算法

更新 es2017 來源 cte mage 2-2 ria 否則 ans

簡介

Adam 是一種可以替代傳統隨機梯度下降(SGD)過程的一階優化算法,它能基於訓練數據叠代地更新神經網絡權重。Adam 最開始是由 OpenAI 的 Diederik Kingma 和多倫多大學的 Jimmy Ba 在提交到 2015 年 ICLR 論文(Adam: A Method for Stochastic Optimization)中提出的。

「Adam」,其並不是首字母縮寫,也不是人名。它的名稱來源於適應性矩估計(adaptive moment estimation)。在介紹這個算法時,原論文列舉了將 Adam 優化算法應用在非凸優化問題中所獲得的優勢:

1.直截了當地實現
2.高效的計算
3.所需內存少
4.梯度對角縮放的不變性(第二部分將給予證明)
5.適合解決含大規模數據和參數的優化問題
6.適用於非穩態(non-stationary)目標
7.適用於解決包含很高噪聲或稀疏梯度的問題
8.超參數可以很直觀地解釋,並且基本上只需極少量的調參


Adam 優化算法的基本機制

Adam 算法和傳統的隨機梯度下降不同。隨機梯度下降保持單一的學習率(即 alpha)更新所有的權重,學習率在訓練過程中並不會改變。而 Adam 通過計算梯度的一階矩估計和二階矩估計而為不同的參數設計獨立的自適應性學習率 Adam 算法的提出者描述其為兩種隨機梯度下降擴展式的優點集合,即:

適應性梯度算法(AdaGrad)為每一個參數保留一個學習率以提升在稀疏梯度(即自然語言和計算機視覺問題)上的性能。

均方根傳播(RMSProp)基於權重梯度最近量級的均值為每一個參數適應性地保留學習率。這意味著算法在非穩態和在線問題上有很有優秀的性能。

Adam 算法同時獲得了 AdaGrad 和 RMSProp 算法的優點。Adam 不僅如 RMSProp 算法那樣基於一階矩均值計算適應性參數學習率,它同時還充分利用了梯度的二階矩均值(即有偏方差/uncentered variance)。具體來說,算法計算了梯度的指數移動均值(exponential moving average),超參數 beta1 和 beta2 控制了這些移動均值的衰減率。移動均值的初始值和 beta1、beta2 值接近於 1(推薦值),因此矩估計的偏差接近於 0。該偏差通過首先計算帶偏差的估計而後計算偏差修正後的估計而得到提升。



Adam算法


技術分享圖片


如上算法所述,在確定了參數α、β1、β2 和隨機目標函數 f(θ) 之後,我們需要初始化參數向量、一階矩向量、二階矩向量和時間步。然後當參數θ沒有收斂時,循環叠代地更新各個部分。即時間步 t 加 1、更新目標函數在該時間步上對參數θ所求的梯度、更新偏差的一階矩估計和二階原始矩估計,再計算偏差修正的一階矩估計和偏差修正的二階矩估計,然後再用以上計算出來的值更新模型的參數θ。


上圖偽代碼為展現了 Adam 算法的基本步驟。假定 f(θ) 為噪聲目標函數:即關於參數θ可微的隨機標量函數。我們對怎樣減少該函數的期望值比較感興趣,即對於不同參數θ,f 的期望值 E[f(θ)]。其中 f1(θ), ..., , fT

(θ) 表示在隨後時間步 1, ..., T 上的隨機函數值。這裏的隨機性來源於隨機子樣本(小批量)上的評估和固有的函數噪聲。而

技術分享圖片

表示 ft(θ) 關於θ的梯度,即在實踐步驟 t下ft對θ的偏導數向量。


該算法更新梯度的指數移動均值(mt)和平方梯度(vt),而參數 β1、β2 ∈ [0, 1) 控制了這些移動均值(moving average)指數衰減率。移動均值本身使用梯度的一階矩(均值)和二階原始矩(有偏方差)進行估計。然而因為這些移動均值初始化為 0 向量,所以矩估計值會偏差向 0,特別是在初始時間步中和衰減率非常小(即β接近於 1)的情況下是這樣的。但好消息是,初始化偏差很容易抵消,因此我們可以得到偏差修正(bias-corrected)的估計 mt hat 和 vt hat。
註意算法的效率可以通過改變計算順序而得到提升,例如將偽代碼最後三行循環語句替代為以下兩個:
技術分享圖片

Adam 的更新規則

Adam 算法更新規則的一個重要特征就是它會很謹慎地選擇步長的大小。假定ε=0,則在時間步 t 和參數空間上的有效下降步長為技術分享圖片

有效下降步長有兩個上確界:即在技術分享圖片情況下,有效步長的上確界滿足技術分享圖片和其他情況下滿足 |?t| ≤ α。第一種情況只有在極其稀疏的情況下才會發生:即梯度除了當前時間步不為零外其他都為零。而在不那麽稀疏的情況下,有效步長將會變得更小。當技術分享圖片時,我們有

技術分享圖片,因此可以得出上確界 |?t| < α。在更通用的場景中,因為 |E[g]/ p E[g^2]| ≤ 1,我們有技術分享圖片。每一個時間步的有效步長在參數空間中的量級近似受限於步長因子α,即技術分享圖片。這個可以理解為在當前參數值下確定一個置信域,因此其要優於沒有提供足夠信息的當前梯度估計。這正可以令其相對簡單地提前知道α正確的範圍。

對於許多機器學習模型來說,我們知道好的最優狀態是在參數空間內的集合域上有極高的概率。這並不罕見,例如我們可以在參數上有一個先驗分布。因為α確定了參數空間內有效步長的量級(即上確界),我們常常可以推斷出α的正確量級,而最優解也可以從θ0 開始通過一定量的叠代而達到。我們可以將技術分享圖片稱之為信噪比(signal-to-noise ratio/SNR)。如果 SNR 值較小,那麽有效步長?t 將接近於 0,目標函數也將收斂到極值。這是非常令人滿意的屬性,因為越小的 SNR 就意味著算法對方向技術分享圖片是否符合真實梯度方向存在著越大的不確定性。例如,SNR 值在最優解附近趨向於 0,因此也會在參數空間有更小的有效步長:即一種自動退火(automatic annealing)的形式。有效步長?t 對於梯度縮放來說仍然是不變量,我們如果用因子 c 重縮放(rescaling)梯度 g,即相當於用因子 c 重縮放技術分享圖片和用因子 c^2 縮放技術分享圖片,而在計算信噪比時縮放因子會得到抵消技術分享圖片.

  • 初始化偏差修正

    正如本論文第二部分算法所述,Adam 利用了初始化偏差修正項。本部分將由二階矩估計推導出這一偏差修正項,一階矩估計的推導完全是相似的。首先我們可以求得隨機目標函數 f 的梯度,然後我們希望能使用平方梯度(squared gradient)的指數移動均值和衰減率β2 來估計它的二階原始矩(有偏方差)。令 g1, ..., gT 為時間步序列上的梯度,其中每個梯度都服從一個潛在的梯度分布 gt ~ p(gt)。現在我們初始化指數移動均值 v0=0(零向量),而指數移動均值在時間步 t 的更新可表示為:技術分享圖片其中 gt^2 表示 Hadamard 積 gt⊙gt,即對應元素之間的乘積。同樣我們可以將其改寫為在前面所有時間步上只包含梯度和衰減率的函數,即消去 v:

    技術分享圖片 我們希望知道時間步 t 上指數移動均值的期望值 E[vt] 如何與真實的二階矩技術分享圖片相關聯,所以我們可以對這兩個量之間的偏差進行修正。下面我們同時對表達式(1)的左邊和右邊去期望,即如下所示:

    技術分享圖片 如果真實二階矩 E[gi2] 是靜態的(stationary),那麽ζ=0。否則ζ可以保留一個很小的值,這是因為我們應該選擇指數衰減率 β1 以令指數移動均值分配很小的權重給梯度。所以初始化均值為零向量就造成了只留下了 (1 ? βt^2 ) 項。我們因此在算法 1 中除以了ζ項以修正初始化偏差。 在稀疏矩陣中,為了獲得一個可靠的二階矩估計,我們需要選擇一個很小的 β2 而在許多梯度上取均值。然而正好是這種小β2 值的情況導致了初始化偏差修正的缺乏,因此也就令初始化步長過大。

  • 總結

    技術分享圖片

    常規操作

    技術分享圖片

    技術分享圖片

    技術分享圖片

    技術分享圖片
    技術分享圖片
    技術分享圖片
    技術分享圖片
    技術分享圖片


    參考文獻:
    https://www.jianshu.com/p/3e363f5e1a79
    http://blog.csdn.net/BVL10101111/article/details/72616516
    
    http://blog.csdn.net/zj360202/article/details/70262874

    Adam 算法