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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

pytorch梯度下降函数_Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam

發布時間:2025/3/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch梯度下降函数_Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:AINLPer微信公眾號
編輯: ShuYini
校稿: ShuYini
時間: 2019-8-16

引言

????很多人在使用pytorch的時候都會遇到優化器選擇的問題,今天就給大家介紹對比一下pytorch中常用的四種優化器。SGD、Momentum、RMSProp、Adam。

隨機梯度下降法(SGD)

算法介紹

????對比批量梯度下降法,假設從一批訓練樣本

中隨機選取一個樣本 。模型參數為 ,代價函數為 ,梯度為 ,學習率為 ,則使用隨機梯度下降法更新參數表達式為:

???其中,

, 表示隨機選擇的一個梯度方向, 表示t時刻的模型參數。 ,這里雖然引入了隨機性和噪聲,但期望仍然等于正確的梯度下降。

????基本策略可以理解為隨機梯度下降像是一個盲人下山,不用每走一步計算一次梯度,但是他總能下到山底,只不過過程會顯得扭扭曲曲。

算法評價

優點:

????雖然SGD需要走很多步的樣子,但是對梯度的要求很低(計算梯度快)。而對于引入噪聲,大量的理論和實踐工作證明,只要噪聲不是特別大,SGD都能很好地收斂。應用大型數據集時,訓練速度很快。比如每次從百萬數據樣本中,取幾百個數據點,算一個SGD梯度,更新一下模型參數。相比于標準梯度下降法的遍歷全部樣本,每輸入一個樣本更新一次參數,要快得多。

缺點:

????SGD在隨機選擇梯度的同時會引入噪聲,使得權值更新的方向不一定正確。此外,SGD也沒能單獨克服局部最優解的問題。

標準動量優化算法(Momentum)

算法介紹

????使用動量(Momentum)的隨機梯度下降法(SGD),主要思想是引入一個積攢歷史梯度信息動量來加速SGD。從訓練集中取一個大小為n的小批量

樣本,對應的真實值分別為 ,則Momentum優化表達式為:

其中,

表示t時刻積攢的加速度。α表示動力的大小,一般取值為0.9(表示最大速度10倍于SGD)。 含義見SGD算法。 表示t時刻模型參數。

算法的理解

????動量主要解決SGD的兩個問題:一是隨機梯度的方法(引入的噪聲);二是Hessian矩陣病態問題(可以理解為SGD在收斂過程中和正確梯度相比來回擺動比較大的問題)。

????簡單理解:由于當前權值的改變會受到上一次權值改變的影響,類似于小球向下滾動的時候帶上了慣性。這樣可以加快小球向下滾動的速度。

RMSProp算法

算法介紹

????與動量梯度下降一樣,都是消除梯度下降過程中的擺動來加速梯度下降的方法。 梯度更新公式:

????更新權重的時候,使用除根號的方法,可以使較大的梯度大幅度變小,而較小的梯度小幅度變小,這樣就可以使較大梯度方向上的波動小下來,那么整個梯度下降的過程中擺動就會比較小,就能設置較大的learning-rate,使得學習步子變大,達到加快學習的目的。

????在實際的應用中,權重W或者b往往是很多維度權重集合,就是多維的,在進行除根號操作中,會將其中大的維度的梯度大幅降低,不是說權重W變化趨勢一樣。

????RMSProp算法在經驗上已經被證明是一種有效且實用的深度神經網絡優化算法。目前它是深度學習從業者經常采用的優化方法之一。

Adam算法

算法介紹

????Adam中動量直接并入了梯度一階矩(指數加權)的估計。其次,相比于缺少修正因子導致二階矩估計可能在訓練初期具有很高偏置的RMSProp,Adam包括偏置修正,修正從原點初始化的一階矩(動量項)和(非中心的)二階矩估計。Adam算法策略可以表示為:

????其中,

和 分別為一階動量項和二階動量項。 為動力值大小通常分別取0.9和0.999; , 分別為各自的修正值。 表示t時刻即第t迭代模型的參數, 表示t次迭代代價函數關于W的梯度大小;?是一個取值很小的數(一般為1e-8)為了避免分母為0。

算法分析

????該方法和RMSProp很像,除了使用的是平滑版的梯度m,而不是原始梯度dx。推薦參數值eps=1e-8, beta1=0.9, beta2=0.999。在實際操作中,推薦Adam作為默認算法,一般比RMSProp要好一點。

算法比較

????為了驗證四種算法的性能,在pytorch中的對同一個網絡進行優化,比較四種算法損失函數隨著時間的變化情況。代碼如下:

opt_SGD=torch.optim.SGD(net_SGD.parameters(),lr=LR) opt_Momentum=torch.optim.SGD(net_Momentum.parameters(),lr=LR,momentum=0.8) opt_RMSprop=torch.optim.RMSprop(net_RMSprop.parameters(),lr=LR,alpha=0.9) opt_Adam=torch.optim.Adam(net_Adam.parameters(),lr=LR,betas=(0.9,0.99))

????SGD 是最普通的優化器, 也可以說沒有加速效果, 而 Momentum 是 SGD 的改良版, 它加入了動量原則. 后面的 RMSprop 又是 Momentum 的升級版. 而 Adam 又是 RMSprop 的升級版. 不過從這個結果中我們看到, Adam 的效果似乎比 RMSprop 要差一點. 所以說并不是越先進的優化器, 結果越佳。

參考:

https://blog.csdn.net/weixin_40170902/article/details/80092628

Attention

更多自然語言處理相關知識,還請關注AINLPer公眾號,極品干貨即刻送達。

總結

以上是生活随笔為你收集整理的pytorch梯度下降函数_Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam的全部內容,希望文章能夠幫你解決所遇到的問題。

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