反向傳播(Back Propagation)
通常在設計好一個神經網絡后,參數的數量可能會達到百萬級別。而我們利用梯度下降去跟新參數的過程如(1)。但是在計算百萬級別的參數時,需要一種有效計算梯度的方法,這種方法就是反向傳播(簡稱BP), 因此BP並不是一種新的算法,使用BP就是能夠使計算梯度時更加有效率。
其中θ為神經網絡的參數,為梯度。
鏈式法則
設有兩個函數為y=g(x),z=h(y),那么要計算z對x導數,則計算過程如(2)
設有三個函數為x=g(s),y=h(s),z=k(x,y),那么要計算z對x導數,則計算過程如(3)
BP計算過程
假定我們設計的神經網絡結構如圖1-1所示,其中yj神經網絡為輸出值,dh為隱藏層神經元的輸出值,xi為輸入值,bj、mh分別是隱藏層和輸出層神經元的偏置;
圖1-1 神經網絡結構
設神經網絡的損失函數為L(θ)(L(θ)具體的結構根據實際情況來確定,θ表示所有參數);wjh的更新形式為
由於wjh是通過影響,繼而影響yj,最終影響L(θ)。因此wjh的更新計算可以通過(2)的鏈式法則進行展開。
其中,需要在確定激活函數和損失函數的具體結果后才就可以進行微分。而
則可以在神經網絡前向傳播的過程中就可以計算,因此這一項的計算是自下向上,因此也稱作forward pass。
類比於wjh的更新情況,bj的更新計算為
再計算vhi的的更新情況,跟wjh的更新情況沒有太大差別。vhi通過影響輸入,繼而影響dh,dh通過影響所有的輸出層神經元的輸入
,繼而影響輸出值Y={y1,y2,...yl},最終影響L(θ),因此需要運用(3)進行鏈式法則展開
其中(8)中的跟計算
的部分項相同。因此,要計算下層參數的微積分,就需要計算上層參數的微積分。整個參數的更新計算自上向下,這個計算過程也稱作backward pass。
參考資料
[2]《機器學習》-周志華