老規矩–妹妹鎮樓:
得到損失函式以後,我們要根據損失函式來優化我們的模型,即優化w引數,更新w引數,使得損失值越低越好。這是反向傳播的過程。
那麼,我們如何來優化w引數呢?這裡,我們就要計算每個w引數對於最終的損失值的重要程度。若某個w引數越大,損失值也越大,則說明應該將w引數減小。若某個w引數越大,損失值也越小,則說明應將w值增大。
舉例:f(x, y, z) = (x + y)z
有三個樣本:
x = -2, y = 5, z = -4
畫出計算圖:
現在開始計算x,y,z分別對f值的貢獻程度:
我們設q = x + y,可以先求出x和y分別對q的貢獻程度,即
dq / dx = 1
dq / dy = 1
然後,計算q對於f的貢獻程度:
f = (x+y)z = qz
df / dq = z = -4
則根據鏈式法則,可以求出x,y分別對f的貢獻程度:
df / dx = df / dq * dq / dx = -4 * 1 = -4
即x的值增大一倍,f的值就要減小4倍
df / dy = df/ dq * dq / dy = -4 * 1 = -4
即y的值增大一倍,f的值就要減小4倍
計算z對f的貢獻程度,即計算f對於z的偏導:
df / dz = q = x+y = -2 + 5 = 3
即z的值增大一倍,f的值就要增大三倍
這是乙個sigmoid函式的計算圖,前向傳播用綠色數字標識在箭頭上面,反向傳播用紅色數字標識箭頭下面。
注意:我們從反向傳播來看,結尾處的計算是 f = 1/x,則 df/ dx =-1/x2,且前向傳播輸入的x是1.37,則反向傳播就要用輸入的x來計算,df / dx = -1 / (1.37)2,得到的結果是 -0.53。
這是乙個需要注意的地方,通過這樣運算,反向傳播梯度就能夠從損失值一直傳回到各個引數,計算出各個引數對於損失值的影響程度。
均勻分配,各個引數的反向傳播梯度是一樣的。
前向傳播中max門單元將最大值傳播了過去,那麼反向傳播,梯度只會分配給最大值
反向傳播的梯度分配是按照前向傳播的引數互換後的比值來分配的,
三 PyTorch 深度學習 反向傳播
import torch x data 1.0 2.0 3.0 y data 2.0 4.0 6.0 w torch.tensor 1.0 w的初值為1.0 w.requires grad true 需要計算梯度 defforward x return x w w是乙個tensor defloss ...
深度學習之反向傳播演算法
反向傳播演算法是用來求那個複雜到爆的梯度的。上一集中提到一點,13000維的梯度向量是難以想象的。換個思路,梯度向量每一項的大小,是在說代價函式對每個引數有多敏感。如上圖,我們可以這樣裡理解,第乙個權重對代價函式的影響是是第二個的32倍。我們來考慮乙個還沒有被訓練好的網路。我們並不能直接改動這些啟用...
PyTorch深度學習實踐 反向傳播
pytorch深度學習實踐 完結合集 嗶哩嗶哩 bilibili 目錄在之前課程中介紹的線性模型就是乙個最簡單的神經網路的結構,其內部引數的更新過程如下 對於簡單的模型來說可以直接使用表示式的方式來更新權重,但是如果網路結構比較複雜 如下圖 直接使用解析式的方式來更新顯然有些複雜且不太可能實現。反向...