pytorch 梯度下降與反向傳播

2021-10-02 19:33:30 字數 967 閱讀 8531

在模型訓練中,損失函式用來衡量**值與真實值之間的誤差,數值越小表示誤差越小。乙個常見的選擇是平方函式。 它在評估索引為 i 的樣本誤差的表示式為

可能有人想問這裡為什麼要除以1/2,其實有沒有1/2對於損失函式來說效果是一樣的,加上1/2是為了求導方便(把平方求導的係數變成1)。

批量樣本的損失函式是單個樣本損失函式的均值。假設批量大小為 n,則:

權重w的大小直接影響損失函式值的大小。假設準確的回歸模型為

則權重w越接近2損失函式越小,當w=2時損失函式值為0。二者關係如下圖。

那麼在實際情況中,如何選取合適的w呢?一般來說,我們都是隨機初始化w的值,然後根據loss函式對w求梯度。通過不斷減小梯度的值,最終達到損失函式最小化,這就是梯度下降法的思想。

在pytorch框架中,反向傳播是利用backward方法實現的。官網上對於這個方法的解釋比較晦澀難懂,這裡我們舉例說明一下反向傳播的過程。

通俗來說,前向傳播和反向傳播就是正推和逆推。

依然是y=w*x+b,假設 x=1,w=1,y=2(實際值),b=0,則

假設學習率η=0.03,則由上文梯度更新公式可得,權重w=1-0.03*(-2)=1.006,一次迭代結束。

可以推測,在後續的梯度下降過程中,w會不斷接近準確的權重值2,適當增加學習率可以加快這一過程。

在pytorch中,反向傳播的過程用loss.backward()方法完成。該函式可以自動計算反向傳播階段的各個梯度。w的梯度用w.grad.data獲取。則梯度更新的**為:

就這樣。

pytorch梯度累加反向傳播

傳統的訓練函式,乙個batch是這麼訓練的 for i,images,target in enumerate train loader 1.input output images images.cuda non blocking true target torch.from numpy np.arr...

反向傳播以及梯度下降法

反向傳播 從後向前,逐層求損失函式對每層神經元引數的偏導數,迭代更新所有引數。我們訓練網路的目的就是不斷優化引數,尋找最小的損失函式,我們通過梯度下降函式來實現這個目標 乙個函式沿梯度方向下降最快 初始化引數w為5,學習率為0.2,則 1次 引數w 5 5 0.2 2 5 2 2.6 2次 引數w ...

Pytorch 分析反向梯度檢查網路

當訓練時loss下降效果不理想或自定義損失函式時,需要檢查反向回傳梯度是否正常,網路權重是否在更新。參考pytorch 列印網路回傳梯度,在loss.backward 後,取出網路各層屬性,並分析權重及其梯度資訊。for name,weight in net.named parameters pri...