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

機器學習的常見優化方法在最近的學習中常常遇到,可是仍是不夠精通.將本身的學習記錄下來,以備不時之需git

基礎知識:


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

這個提高的過程就叫作優化(Optimizer)

下面這個內容主要就是介紹能夠用來優化損失函數的經常使用方法github

經常使用的優化方法(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繼續進行.

參考文獻:

相關文章
相關標籤/搜索