日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【TensorFlow】优化方法optimizer总结(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)解析(十三)

發布時間:2024/7/5 编程问答 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【TensorFlow】优化方法optimizer总结(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)解析(十三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/brucewong0516/article/details/78838124

本文僅對一些常見的優化方法進行直觀介紹和簡單的比較,主要是一階的梯度法,包括SGD, Momentum, Nesterov Momentum, AdaGrad, RMSProp, Adam。 其中SGD,Momentum,Nesterov Momentum是手動指定學習速率的,而后面的AdaGrad, RMSProp, Adam,就能夠自動調節學習速率。

1、SGD

SGD全名 stochastic gradient descent, 即隨機梯度下降。不過這里的SGD其實跟MBGD(minibatch gradient descent)是一個意思,現在的SGD一般都指mini-batch gradient descent,即隨機抽取一批樣本,以此為根據來更新參數。

具體實踐:

需要:學習速率 ?, 初始參數 θ
每步迭代過程:

  • 從訓練集中的隨機抽取一批容量為m的樣本{x1,…,xm},以及相關的輸出yi
  • 計算梯度和誤差并更新參數:
  • 優點:

  • 訓練速度快,對于很大的數據集,也能夠以較快的速度收斂.SGD應用于凸問題時,k次迭代后泛化誤差的數量級是O(1/sqrt(k)),強凸下是O(1/k)。
  • 可能由于SGD在學習中增加了噪聲,有正則化的效果
  • 缺點: 由于是抽取,因此不可避免的,得到的梯度肯定有誤差.因此學習速率需要逐漸減小.否則模型無法收斂 ,因為誤差,所以每一次迭代的梯度受抽樣的影響比較大,也就是說梯度含有比較大的噪聲,不能很好的反映真實梯度.

    ?學習率如何衰減以保證SGD收斂,在實踐中,一般是進行線性衰減:

    其中?0是初始學習率, ?τ是最后一次迭代的學習率. τ自然代表迭代次數.一般來說,?τ 設為?0的1%比較合適.而τ一般設為讓訓練集中的每個數據都輸入模型上百次比較合適.那么初始學習率?0怎么設置呢?書上說,你先用固定的學習速率迭代100次,找出效果最好的學習速率,然后?0設為比它大一點就可以了.

    2、Momentum

    SGD方法的一個缺點是,其更新方向完全依賴于當前的batch,因而其更新十分不穩定,每次迭代計算的梯度含有比較大的噪音。解決這一問題的一個簡單的做法便是引入momentum。

    momentum即動量,它模擬的是物體運動時的慣性,即更新的時候在一定程度上保留之前更新的方向,同時利用當前batch的梯度微調最終的更新方向。這樣一來,可以在一定程度上增加穩定性,從而學習地更快,并且還有一定擺脫局部最優的能力。

    具體實現:

    需要:學習速率 ?, 初始參數 θ, 初始速率v, 動量衰減參數α

    每步迭代過程:

  • 從訓練集中的隨機抽取一批容量為m的樣本{x1,…,xm},以及相關的輸出yi
  • 計算梯度和誤差,并更新速度v和參數θ:
  • 其中參數α表示每回合速率v的衰減程度.如果每次迭代得到的梯度都是g,那么最后得到的v的穩定值為:

    也就是說,Momentum最好情況下能夠將學習速率加速1/(1?α)倍.一般α的取值有0.5,0.9,0.99這幾種,分別表示最大速度2倍,10倍,100倍于SGD的算法。.當然,也可以讓α的值隨著時間而變化,一開始小點,后來再加大.不過這樣一來,又會引進新的參數.

    特點:
    - 前后梯度方向一致時,能夠加速學習
    - 前后梯度方向不一致時,能夠抑制震蕩

    3、Nesterov Momentum

    這是對傳統momentum方法的一項改進,由Ilya Sutskever(2012 unpublished)在Nesterov工作的啟發下提出的。

    具體實現:

    需要:學習速率 ?, 初始參數 θ, 初始速率v, 動量衰減參數α
    每步迭代過程:

  • 從訓練集中的隨機抽取一批容量為m的樣本{x1,…,xm},以及相關的輸出yi
  • 計算梯度和誤差,并更新速度v和參數θ:
    注意在估算梯度g的時候,參數變成了θ+αv而不是之前的θ,與Momentum唯一區別就是,計算梯度的不同,Nesterov先用當前的速度v更新一遍參數,在用更新的臨時參數計算梯度。
  • 其基本思路如下圖(轉自Hinton的coursera公開課lecture 6a):

    4、AdaGrad

    AdaGrad可以自動變更學習速率,只是需要設定一個全局的學習速率?,但是這并非是實際學習速率,實際的速率是與以往參數的模之和的開方成反比的.也許說起來有點繞口,不過用公式來表示就直白的多:

    其中δ是一個很小的常亮,大概在10^?7,防止出現除以0的情況.

    具體實現:
    需要:全局學習速率 ?, 初始參數 θ, 數值穩定量δ
    中間變量: 梯度累計量r(初始化為0)

    每步迭代過程:

  • 從訓練集中的隨機抽取一批容量為m的樣本{x1,…,xm},以及相關的輸出yi
  • 計算梯度和誤差,更新r,再根據r和梯度計算參數更新量:
  • 優點: 能夠實現學習率的自動更改。如果這次梯度大,那么學習速率衰減的就快一些;如果這次梯度小,那么學習速率衰減的慢一些。對于每個參數,隨著其更新的總距離增多,其學習速率也隨之變慢。

    缺點: 任然要設置一個變量? ,經驗表明,在普通算法中也許效果不錯,但在深度學習中,深度過深時會造成訓練提前結束。

    5、RMSProp

    RMSProp通過引入一個衰減系數,讓r每回合都衰減一定比例,類似于Momentum中的做法,是對AdaGrad算法的改進。

    具體實現:
    需要:全局學習速率 ?, 初始參數 θ, 數值穩定量δ,衰減速率ρ
    中間變量: 梯度累計量r(初始化為0)

    每步迭代過程:

  • 從訓練集中的隨機抽取一批容量為m的樣本{x1,…,xm},以及相關的輸出yi
  • 計算梯度和誤差,更新r,再根據r和梯度計算參數更新量:
  • 優點:
    - 相比于AdaGrad,這種方法很好的解決了深度學習中過早結束的問題
    - 適合處理非平穩目標,對于RNN效果很好

    缺點:
    - 又引入了新的超參,衰減系數ρ
    - 依然依賴于全局學習速率

    6、RMSProp with Nesterov Momentum

    此方法是將RMSProp和Nesterov Momentum結合起來

    具體實現:
    需要:全局學習速率 ?, 初始參數 θ, 初始速率v,動量衰減系數α, 梯度累計量衰減速率ρ
    中間變量: 梯度累計量r(初始化為0)

    每步迭代過程:

  • 從訓練集中的隨機抽取一批容量為m的樣本{x1,…,xm},以及相關的輸出yi
  • 計算梯度和誤差,更新r,再根據r和梯度計算參數更新量 :
  • 7、Adam

    Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率。Adam的優點主要在于經過偏置校正后,每一次迭代學習率都有個確定范圍,使得參數比較平穩。

    具體實現:
    需要:步進值 ?, 初始參數 θ, 數值穩定量δ,一階動量衰減系數ρ1, 二階動量衰減系數ρ2
    其中幾個取值一般為:δ=10^?8,ρ1=0.9,ρ2=0.999
    中間變量:一階動量s,二階動量r,都初始化為0

    每步迭代過程:

  • 從訓練集中的隨機抽取一批容量為m的樣本{x1,…,xm},以及相關的輸出yi
  • 計算梯度和誤差,更新r和s,再根據r和s以及梯度計算參數更新量 :
  • 8、各個方法的比較

    Karpathy做了一個這幾個方法在MNIST上性能的比較,其結論是:

    adagrad相比于sgd和momentum更加穩定,即不需要怎么調參。而精調的sgd和momentum系列方法無論是收斂速度還是precision都比adagrad要好一些。在精調參數下,一般Nesterov優于momentum優于sgd。而adagrad一方面不用怎么調參,另一方面其性能穩定優于其他方法。

    Loss vs. Number of examples seen

    Testing Accuracy vs. Number of examples seen

    Training Accuracy vs. Number of examples seen

    總結

    以上是生活随笔為你收集整理的【TensorFlow】优化方法optimizer总结(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)解析(十三)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。