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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

pytorch adagrad_【学习笔记】Pytorch深度学习—优化器(二)

發布時間:2023/12/19 pytorch 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch adagrad_【学习笔记】Pytorch深度学习—优化器(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊文末 閱讀原文,體驗感更好哦!

前面學習過了Pytorch中優化器optimizer的基本屬性和方法,優化器optimizer的主要功能是 “管理模型中的可學習參數,并利用參數的梯度grad以一定的策略進行更新”。本節內容分為4部分,(1)、(2)首先了解2個重要概念Learning rate學習率和momentum動量,(3)在此基礎上,學習Pytorch中的SGD隨機梯度下降優化器;(4)最后,了解Pytorch提供的十種優化器。

learning rate 學習率

上節課優化器(一)講過梯度下降法的更新思路,也就是要求損失函數Loss或者參數朝著梯度的負方向去變化。為了更好的理解梯度下降法,下面給出一個例子。

引例:

圖1 梯度下降法公式應用

然而,從上面的例子中可以看出梯度下降法不僅沒能使得y(或Loss值)降低至0甚至使得y變得更大了。

引例實驗

代碼演示梯度下降法全過程。

構造“損失函數”繪制函數$y=4x^2$圖像,該y值可類比為Loss值,梯度下降法的目的在于使得Loss值逐步降低至0。

圖2 構造損失函數曲線

迭代更新部分此外,當前梯度下降法公式還沒有考慮到學習率lr的影響,因此下述實驗學習率不設置即為lr=1,最大迭代參數為4。

# -------------- gradient descent -------------

flag = 1

if flag:

iter_rec, loss_rec, x_rec = list(), list(), list()

//當前公式還沒有考慮學習率的影響,因此該參數lr設為 1

lr = 1 # /1. /.5 /.2 /.1 /.125

//迭代次數設為 4

max_iteration = 4 # /1. 4 /.5 4 /.2 20 200

for i in range(max_iteration):

//輸入x 計算 Loss

y = func(x)

//反向傳播計算梯度

y.backward()

print("Iter:{}, X:{:8}, X.grad:{:8}, loss:{:10}".format(

i, x.detach().numpy()[0], x.grad.detach().numpy()[0], y.item()))

x_rec.append(x.item())

//這里的x.data.sub_的 inplace操作可完成參數的更新

x.data.sub_(lr * x.grad) # x -= x.grad 數學表達式意義: x = x - x.grad # 0.5 0.2 0.1 0.125

//執行更新之后,對參數的梯度進行清零

x.grad.zero_()

iter_rec.append(i)

loss_rec.append(y)

對損失函數使用梯度下降法的輸出結果

從圖3可以看出,迭代4次,Loss值不僅沒有降低反而升高到了188萬,同時最終參數x的梯度值也達到了$10^3$,直接引發了梯度爆炸現象

圖3 對上述函數使用梯度下降法輸出結果

學習率為什么使用了梯度下降法,Loss值并沒有減小反而增大?觀察圖1所示梯度下降法的求解過程,可以看出每次迭代時由于梯度grad()較大,從而引起新的參數變大進而導致Loss函數值不降反升,梯度爆炸等現象。因此,為了控制參數更新的步伐,就在原本的公式基礎上引入了學習率LR,如下所示。

實驗

依次設置學習率為0.5、0.2、0.1、0.125,觀察Loss函數值及函數曲線變化情況

# ------------------ gradient descent -------------

flag = 1

if flag:

iter_rec, loss_rec, x_rec = list(), list(), list()

//當前公式還沒有考慮學習率的影響,因此該參數lr設為 1

lr = 0.5 # /0.5 /0.2 /0.1 /0.125

//迭代次數設為 4

max_iteration = 4 # /1. 4 /.5 4 /.2 20 200

for i in range(max_iteration):

//輸入x 計算 Loss

y = func(x)

//反向傳播計算梯度

y.backward()

print("Iter:{}, X:{:8}, X.grad:{:8}, loss:{:10}".format(

i, x.detach().numpy()[0], x.grad.detach().numpy()[0], y.item()))

x_rec.append(x.item())

//這里的x.data.sub_的 inplace操作可完成參數的更新

x.data.sub_(lr * x.grad) # x -= x.grad 數學表達式意義: x = x - x.grad # 0.5 0.2 0.1 0.125

//執行更新之后,對參數的梯度進行清零

x.grad.zero_()

iter_rec.append(i)

loss_rec.append(y)

實驗結果

如果預先能知道損失函數Loss的函數表達式,就可以預先求得在學習率為0.125時,Loss就可以直接下降為0。但是通常,是不可能獲得損失函數表達式的,因此0.125并不能直接求得。那么,該如何設置學習率呢?下面觀察多個學習率之間Loss的變化情況。

多個學習率之間Loss變化情況

實驗結果

圖4 多學習率Loss曲線的變化情況

< 總結 >

學習率

功能:用來控制更新的步伐

使用:設置學習率時,不能過大否則導致梯度爆炸、Loss值激增現象,也不能太小,這樣就導致Loss值很難收斂。

通常設置為0.01.

學習率用來控制更新的步伐;在設置學習率時,不能過大比如0.5、0.3如圖4(1)可能導致梯度爆炸、Loss值激增現象;學習率也不能太小,這樣就導致Loss值很難收斂,進入收斂需要花費大量時間。

momentum 動量

在優化器中除了學習率還有momentum動量

Momentum(動量、沖量)

結合當前梯度與上一次更新信息,用于當前更新

< 預備知識 >指數加權平均是在時間序列中經常使用的求取平均值的方法,其思想:求取當前時刻的平均值,距離當前時刻越近的參數值參考性越大,所占的權重也就越大,這些權重隨著時間間隔增大是成指數下降的。如下圖5所示討論了指數加權平均的計算原理,根據一溫度散點圖,列寫了其計算式。

圖5 指數加權平均計算原理

圖6 距離當前時刻越遠權重成指數衰減下降

由于$\beta$控制著權重的記憶周期,$\beta$值越小,記憶周期越長,作用越遠;通常,會設置beta=0.9,beta=0.9的物理意義是更加關注當前時刻10天左右的數據。($\frac{1}{(1-\beta)}=\frac{1}{1-0.9}=10$)

通過上述例子,了解到指數加權平均中具有1個非常重要的參數$\beta$,該$\beta$對應到梯度下降中就是momentum系數。

< momentum加入,隨機梯度下降公式更新 >了解了momentum系數,下面就給出Pytorch中加入了momentum系數后,隨機梯度下降中更新公式:

①僅考慮學習率的梯度下降:$$ w{i+1}=wi-lrg(w_i) $$ ②加入momentum系數后隨機梯度下降更新公式:$$ v_{i}=mv{i-1}+*g(wi) $$$$ w{i+1}=wi+lr*v{i} $$ $w{i+1}$:第i+1次更新的參數;$lr$:學習率;$vi$:更新量,$m$:momentum系數,對應指數加權平均就是$\beta$值;$g(wi)$:$w_i的梯度$

更新公式不再乘以梯度而是更新量$vi$,該更新量$vi$由兩部分構成,不僅有當前的梯度信息$g(w_i)$還有上一時刻的更新信息。


下面進行帶上momentum的隨機梯度下降實驗,觀察Loss的變化。具體操作是:觀察1個較小學習率0.01和1個較大學習率0.03 和 其中1個加了momentum后,觀察兩種情況下的Loss曲線。

圖7 實驗結果分析

圖8 實驗結果分析

最后,嘗試了多次momentum,直到momentum=0.63時,學習率為0.01的Loss比學習率為0.03的Loss更快收斂。設置合適mometum系數,考慮當前梯度信息結合之前的梯度信息,可以加速更新模型參數。

Momentum(動量、沖量)

結合當前梯度與上一次更新信息,用于當前參數,從而實現慣性思想,加速模型收斂。

torch.optim.SGD

Pytorch中提供的最常用、實用的優化器SGD

optim.SGD(params,lr=<object object>,

momentum=0,dampening=0,

weight_decay=0,nesterov=False)

主要參數:

params:管理的參數組

lr:初始學習率

momentum:動量系數,beta

weight_decay:L2正則化系數

nesterov:是否采用NAG

解釋(1)params(optimizer屬性paramgroups):管理的參數組參數組是1個list,其中的每1個元素是dict,dict中又很多key,這些key中最重要的是 params——其中的value就是管理的參數;(2)weightdecay:用來設置L2正則化系數;(3)nesterov:布爾變量,通常設置為False,控制是否采用NAG這一梯度下降方法,參考 《 On the importance of initialization and momentum in deep learning》

Pytorch的十種優化器

1、optim.SGD:隨機梯度下降法 2、optim.Adagrad:自適應學習率梯度下降法(對每個可學習參數具有1個自適應學習率) 3、optim.RMSprop:Adagrad的改進 4、optim.Adadelta:Adagrad的改進 5、optim.Adam:RMSprop結合Momentum 6、optim.Adamax:Adam增加學習率上限 7、optim.SparseAdam:稀疏版Adam 8、optim.ASGD:隨機平均梯度下降 9、optim.Rprop:彈性反向傳播(優化器應用場景在所有樣本full_batch 一起計算梯度) 10、optim.LBFGS:BFGS的改進

圖9 其他優化器相關文獻

總結

以上是生活随笔為你收集整理的pytorch adagrad_【学习笔记】Pytorch深度学习—优化器(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: jizz国产在线观看 | 国产suv一区二区 | 国产精品无码久久久久一区二区 | 欧美日韩一区二区精品 | 久久国产免费观看 | 好吊操免费视频 | 少妇高潮淫片免费观看 | 大象传媒成人在线观看 | 日韩欧美理论片 | 性生交大片免费看女人按摩 | 免费aa视频 | 亚洲一卡一卡 | 久久久精 | 国产精品h| 国产视频在线观看免费 | 青草视频在线看 | 一区二区在线播放视频 | 欧美日韩1区2区3区 亚洲日本精品视频 | 91天天看| 国产无套在线观看 | 久久精品国产亚洲av无码娇色 | 男女激情网 | 欧美群妇大交群 | 69视频在线播放 | 欧美精品123 | 9i看片成人免费看片 | 51精品国产 | 爱情岛论坛成人av | www在线观看国产 | 精品播放| 人妻内射一区二区在线视频 | 国产精品wwww | 淫欲av| 密臀久久 | 国产夫妻久久 | 青娱乐精品视频 | 国产真实偷伦视频 | 伊人网av在线 | 亚洲一区二区蜜桃 | 波多野结衣a级片 | 国产在线播放av | 91免费看黄 | 国产理论一区 | 什么网站可以看毛片 | 亚洲中文一区二区三区 | 免费极品av一视觉盛宴 | 国产精品国产三级国产 | 成人免费毛片网站 | 在线观看免费中文字幕 | 欧美人妻精品一区二区免费看 | 最新av | 国产精品高潮呻吟久久久久久 | 91色在线播放 | 黄色小视频免费 | 香蕉综合网 | 天天操网站 | 蜜桃av一区 | jizz欧美性11| 久久精品美女 | 狠狠干狠狠操视频 | 国产熟女高潮视频 | 精品免费看 | 国产亚洲av综合人人澡精品 | 一级爱爱免费视频 | 蜜臀aⅴ免费一区二区 | av无码久久久久久不卡网站 | 91久久精品无码一区二区 | 丰满少妇毛片 | av香港经典三级级 在线 | 国产精品福利导航 | 久久福利一区 | 国产吃瓜黑料一区二区 | 色日韩| 99在线视频免费观看 | 手机在线看片日韩 | 亚洲乱码国产乱码精品 | 精品国产鲁一鲁一区二区三区 | 欧美性猛交一区二区三区精品 | 亚洲欧美日韩国产精品 | 操碰人人 | 我要看18毛片| 日韩成人免费视频 | 国产成人在线免费观看 | 看黄网站在线 | 成年人国产精品 | 欧美少妇色图 | 激情久久久久久 | av日韩在线免费观看 | 中文字幕一区在线播放 | 色婷久久 | av视屏在线 | 欧美日韩色综合 | jizz日本少妇 | av动漫网站 | 国产免费自拍 | 老色批永久免费网站www | 久久接色 | 国产理论精品 | 禁欲天堂 |