Adam是一種梯度下降優化技術的算法。 當處理涉及大量資料或參數的大問題時,該方法非常有效。 它需要更少的記憶體并且效率更高。 直覺上,它是“動量梯度下降”算法和“RMSP”算法的結合。
推薦:用 NSDT設計器 快速搭建可程式設計3D場景。
1、Adam優化器簡介
Adam 優化器涉及兩種梯度下降方法的組合:
1、Momentum
該算法通過考慮梯度的“指數權重平均值”來加速梯度下降算法。 使用平均值可以使算法以更快的速度收斂到最小值。
其中:
- mt = 時間 t [目前] 時的梯度聚合(最初,mt = 0)
- mt-1 = 時間 t-1 時的梯度總和 [previous]
- Wt = 時間 t 時的權重
- Wt+1 = 時間 t+1 時的權重
- αt = 時間 t 時的學習率
- ∂L = 損失函數的導數
- ∂Wt = 時間 t 時權重的導數
- β = 移動平均參數(常量,0.9)
2、均方根傳播 (RMSP)
均方根 prop 或 RMSprop 是一種試圖改進 AdaGrad 的自适應學習算法。 它不像 AdaGrad 那樣采用梯度平方的累積和,而是采用“指數移動平均值”。
其中:
- Wt = 時間 t 時的權重
- Wt+1 = 時間 t+1 時的權重
- αt = 時間 t 時的學習率
- ∂L = 損失函數的導數
- ∂Wt = 時間 t 時權重的導數
- Vt = 過去梯度的平方和。 [即 sum(∂L/∂Wt-1)](最初,Vt = 0)
- β = 移動平均參數(常量,0.9)
- ϵ = 一個小的正常數 (10-8)
Adam Optimizer 繼承了上述兩種方法的優點或積極屬性,并在此基礎上建構了更優化的梯度下降。
在這裡,我們控制梯度下降的速率,使其達到全局最小值時振蕩最小,同時采取足夠大的步長(步長),以便一路通過局部最小值障礙。 是以,結合上述方法的特點可以有效地達到全局最小值。
2、Adam優化算法的數學
代入上述兩種方法中使用的公式,我們得到
- ϵ = 一個小的 +ve 常數,以避免 (vt -> 0) 時出現“除以 0”錯誤。 (10-8)
- β1 & β2 = 上述兩種方法中梯度平均值的衰減率。 (β1 = 0.9 & β2 = 0.999)
- α——步長參數/學習率(0.001)
由于 mt 和 vt 都初始化為 0(基于上述方法),是以觀察到它們有“偏向 0”的趨勢,因為 β1 和 β2 ≈ 1。此優化器通過計算“偏向”來解決此問題 更正' mt 和 vt。 這樣做也是為了在達到全局最小值時控制權重,以防止接近它時出現高振蕩。 使用的公式是:
直覺上,我們在每次疊代後适應梯度下降,使其在整個過程中保持受控且無偏差,是以得名 Adam。
現在,我們采用偏差校正權重參數 (m_hat)t 和 (v_hat)t,而不是正常的權重參數 mt 和 vt 。 将它們代入我們的一般方程,我們得到
3、Adam優化器的性能
基于先前模型的優勢,Adam 優化器提供了比先前使用的模型更高的性能,并且在提供優化的梯度下降方面大幅優于它們。 下圖清楚地描繪了 Adam 優化器如何在訓練成本(低)和性能(高)方面大幅優于其他優化器。
原文連結:http://www.bimant.com/blog/adam-optimizer-intuition/