深度學習常見的優化方法(Optimizer)總結:Adam,SGD,Momentum,AdaGard等


機器學習的常見優化方法在最近的學習中經常遇到,但是還是不夠精通.將自己的學習記錄下來,以備不時之需

基礎知識:


機器學習幾乎所有的算法都要利用損失函數 lossfunction 來檢驗算法模型的優劣,同時利用損失函數來提升算法模型.

這個提升的過程就叫做優化(Optimizer)

下面這個內容主要就是介紹可以用來優化損失函數的常用方法

常用的優化方法(Optimizer):

  • 1.SGD&BGD&Mini-BGD:

    SGD(stochastic gradient descent):隨機梯度下降,算法在每讀入一個數據都會立刻計算loss function的梯度來update參數.假設loss function為L(w),下同.$$w-=\eta \bigtriangledown_{w_{i}}L(w_{i}) $$

    Pros:收斂的速度快;可以實現在線更新;能夠跳出局部最優

    Cons:很容易陷入到局部最優,困在馬鞍點.

    BGD(batch gradient descent):批量梯度下降,算法在讀取整個數據集后累加來計算損失函數的的梯度

\[w-=\eta \bigtriangledown_{w}L(w) \]


Pros:如果loss function為convex,則基本可以找到全局最優解

Cons:數據處理量大,導致梯度下降慢;不能實時增加實例,在線更新;訓練占內存

Mini-BGD(mini-batch gradient descent):顧名思義,選擇小批量數據進行梯度下降,這是一個折中的方法.采用訓練集的子集(mini-batch)來計算loss function的梯度.$$w-=\eta \bigtriangledown_{w_{i:i+n}}L(w_{i:i+n})$$

這個優化方法用的也是比較多的,計算效率高而且收斂穩定,是現在深度學習的主流方法.

上面的方法都存在一個問題,就是update更新的方向完全依賴於計算出來的梯度.很容易陷入局部最優的馬鞍點.能不能改變其走向,又保證原來的梯度方向.就像向量變換一樣,我們模擬物理中物體流動的動量概念(慣性).引入Momentum的概念.

  • 2.Momentum

    在更新方向的時候保留之前的方向,增加穩定性而且還有擺脫局部最優的能力$$\Delta w=\alpha \Delta w- \eta \bigtriangledown L(w)$$ $$w=w+\Delta w$$

    若當前梯度的方向與歷史梯度一致(表明當前樣本不太可能為異常點),則會增強這個方向的梯度,若當前梯度與歷史梯方向不一致,則梯度會衰減。一種形象的解釋是:我們把一個球推下山,球在下坡時積聚動量,在途中變得越來越快,\(\eta\)可視為空氣阻力,若球的方向發生變化,則動量會衰減。
  • 3.Adagrad:(adaptive gradient)自適應梯度算法,是一種改進的隨機梯度下降算法.
    以前的算法中,每一個參數都使用相同的學習率\(\alpha\). Adagrad算法能夠在訓練中自動對learning_rate進行調整,出現頻率較低參數采用較大的\(\alpha\)更新.出現頻率較高的參數采用較小的\(\alpha\)更新.根據描述這個優化方法很適合處理稀疏數據.$$G=\sum ^{t}{\tau=1}g{\tau} g_{\tau}^{T}  其中 s.t. g_{\tau}=\bigtriangledown L(w_{i})$$ 對角線矩陣$$G_{j,j}=\sum {\tau=1}^{t} g{\tau,j\cdot}^{2}$$ 這個對角線矩陣的元素代表的是參數的出現頻率.每個參數的更新$$w_{j}=w_{j}-\frac{\eta}{\sqrt{G_{j,j}}}g_{j}$$
  • 4.RMSprop:(root mean square propagation)也是一種自適應學習率方法.不同之處在於,Adagrad會累加之前所有的梯度平方,RMProp僅僅是計算對應的平均值.可以緩解Adagrad算法學習率下降較快的問題.$$v(w,t)=\gamma v(w,t-1)+(1-\gamma)(\bigtriangledown L(w_{i}))^{2} ,其中 \gamma 是遺忘因子$$  參數更新$$w=w-\frac{\eta}{\sqrt{v(w,t)}}\bigtriangledown L(w_{i})$$
  • 5.Adam:(adaptive moment estimation)是對RMSProp優化器的更新.利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率.
    優點:每一次迭代學習率都有一個明確的范圍,使得參數變化很平穩.

\[m_{w}^{t+1}=\beta_{1}m_{w}^{t}+(1-\beta_{1}) \bigtriangledown L^{t} ,m為一階矩估計 \]

\[v_{w}^{t+1}=\beta_{2}m_{w}^{t}+(1-\beta_{2}) (\bigtriangledown L^{t})^{2},v為二階矩估計 \]

\[\hat{m}_{w}=\frac{m_{w}^{t+1}}{1-\beta_{1}^{t+1}},估計校正,實現無偏估計 \]

\[\hat{v}_{w}=\frac{v_{w}^{t+1}}{1-\beta_{2}^{t+1}} \]

\[w^{t+1} \leftarrow=w^{t}-\eta \frac{\hat{m}_{w}}{\sqrt{\hat{v}_{w}}+\epsilon} \]

Adam是實際學習中最常用的算法

優化方法在實際中的直觀體驗

損失曲面的輪廓和不同優化算法的時間演化。 注意基於動量的方法的“過沖”行為,這使得優化看起來像一個滾下山的球

優化環境中鞍點的可視化,其中沿不同維度的曲率具有不同的符號(一維向上彎曲,另一維向下)。 請注意,SGD很難打破對稱性並陷入困境。 相反,諸如RMSprop之類的算法將在鞍座方向上看到非常低的梯度。 由於RMSprop更新中的分母術語,這將提高此方向的有效學習率,從而幫助RMSProp繼續進行.

參考文獻:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM