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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > pytorch >内容正文

pytorch

通俗理解深度学习梯度累加(Gradient Accumulation)的原理

發(fā)布時(shí)間:2023/12/8 pytorch 85 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通俗理解深度学习梯度累加(Gradient Accumulation)的原理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先你得明白什么是梯度,可以看我之前寫(xiě)的一篇博客 :

微分與梯度的概念理解

本質(zhì)上,梯度是一種方向?qū)?shù),是一個(gè)矢量,因此這里的梯度累加并不是簡(jiǎn)單的相加,而是類(lèi)似于初高中物理學(xué)的力的合成,梯度作為一種方向?qū)?shù)(矢量)的其累加的效果就是將各個(gè)小的梯度合成為一個(gè)指向Loss function 最終優(yōu)化方向的梯度。

這里結(jié)合代碼理解一下:

正常訓(xùn)練的過(guò)程

for i, (images, labels) in enumerate(train_data):# 1. forwared 前向計(jì)算outputs = model(images)loss = criterion(outputs, labels)# 2. backward 反向傳播計(jì)算梯度optimizer.zero_grad()loss.backward()optimizer.step()

梯度累加的訓(xùn)練過(guò)程

# 梯度累加參數(shù) accumulation_steps = 4for i, (images, labels) in enumerate(train_data):# 1. forwared 前向計(jì)算outputs = model(imgaes)loss = criterion(outputs, labels)# 2.1 loss regularization loss正則化loss += loss / accumulation_steps# 2.2 backward propagation 反向傳播計(jì)算梯度loss.backward()# 3. update parameters of netif ((i+1) % accumulation)==0:# optimizer the netoptimizer.step()optimizer.zero_grad() # reset grdient

以上代碼來(lái)自:

https://www.zhihu.com/question/435093513/answer/2302992975

可以看出,梯度累加的訓(xùn)練過(guò)程中,每次反向傳播都會(huì)計(jì)算出一個(gè)梯度,但是并不會(huì)使用optimizer.step() 更新參數(shù),直到達(dá)到設(shè)定的累計(jì)次數(shù)后,才一次性的將參數(shù)依據(jù)累積的梯度進(jìn)行更新。(殊途同歸,每次計(jì)算出來(lái)的梯度可以看作是一個(gè)具有微弱方向變化的矢量,不斷疊加,最終合成一個(gè)具有特定方向的矢量。每次變化一點(diǎn)點(diǎn),和將每次一點(diǎn)點(diǎn)的變化累積起來(lái)形成一個(gè)最終的變化方向,這在效果上是沒(méi)有太大差異的),梯度累積可以實(shí)現(xiàn)和使用大的Batch Size 接近的效果,但是消耗的GPU顯存卻不會(huì)顯著增加,這在GPU顯存有限的情況下,是一種較為不錯(cuò)的訓(xùn)練方法。

總結(jié)

以上是生活随笔為你收集整理的通俗理解深度学习梯度累加(Gradient Accumulation)的原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。