反向傳播 backpropagation
反向傳播(Backpropagation) 是神經網絡訓練中的一種核心算法,用于通過計算誤差并將其傳播回網絡,從而更新神經網絡的參數。通過反向傳播,網絡能夠在每次迭代中逐步調整其參數(例如權重和偏置),以最小化預測誤差,從而學習到合適的特征表示。
基本原理
反向傳播算法基于鏈式法則(鏈式求導法則),這意味著它通過計算誤差梯度逐層傳播回網絡,并逐步更新每一層的權重和偏置。具體來說,反向傳播的目標是通過最小化網絡的損失函數(例如平方誤差,交叉熵等)來優化網絡的參數。
反向傳播的步驟
-
前向傳播 (Forward Pass):
- 輸入數據通過神經網絡的每一層傳遞,直到輸出層。
- 在每一層,數據通過加權和、激活函數等操作,最終得出網絡的預測結果。
-
計算損失函數的誤差:
- 損失函數(如均方誤差、交叉熵等)是網絡輸出與實際標簽之間的差異度量。目標是最小化損失函數。
- 損失函數的梯度表示損失函數相對于網絡每個參數(例如權重和偏置)的變化率。
-
反向傳播過程:
-
從輸出層開始,通過鏈式法則將損失函數的誤差逐層傳播回網絡。
-
使用鏈式法則(鏈式求導法則)計算每一層的梯度。鏈式法則幫助我們理解誤差是如何通過各層的權重傳播的。
-
具體來說,反向傳播通過逐層計算每個節點(神經元)對損失的貢獻,將誤差梯度從輸出層傳遞到輸入層。
-
-
參數更新:
- 得到每個參數的梯度后,通過梯度下降或其他優化算法(如Adam優化器)來更新參數。
- 權重的更新公式為:
w = w ? η ? ? L ? w w = w - \eta \cdot \frac{\partial L}{\partial w} w=w?η??w?L?
其中: - w w w 是權重。
- η \eta η 是學習率,決定了每次更新的步長。
- ? L ? w \frac{\partial L}{\partial w} ?w?L? 是損失函數相對于權重 w w w 的梯度。
-
重循環步驟:
- 反向傳播和參數更新是通過多次迭代(或稱訓練周期)進行的。每次迭代后,網絡的權重都會得到更新,網絡的預測結果會更準確。
舉例說明
假設我們有一個簡單的三層神經網絡,輸入為 x x x,通過隱藏層進行處理,最終輸出為 y ^ \hat{y} y^?(網絡的預測值)。目標是通過反向傳播最小化損失函數 L ( y ^ , y ) L(\hat{y}, y) L(y^?,y),其中 y y y 是實際標簽。
-
前向傳播:計算輸出 y ^ \hat{y} y^?。
-
損失計算:計算 L ( y ^ , y ) L(\hat{y}, y) L(y^?,y)。
-
反向傳播:
- 計算輸出層損失相對于輸出層參數的梯度 ? L ? w 3 \frac{\partial L}{\partial w_3} ?w3??L? 和 ? L ? b 3 \frac{\partial L}{\partial b_3} ?b3??L?。
- 利用鏈式法則,將梯度傳播到前一層(隱藏層),計算隱藏層的梯度 ? L ? w 2 \frac{\partial L}{\partial w_2} ?w2??L? 和 ? L ? b 2 \frac{\partial L}{\partial b_2} ?b2??L?。
- 繼續反向傳播,直到輸入層。
-
參數更新:利用計算得到的梯度更新所有層的權重和偏置。
梯度消失 vanishing gradient
梯度消失問題通常出現在訓練深層神經網絡時,尤其是當使用反向傳播算法時。在訓練神經網絡時,我們通過反向傳播計算每個參數的梯度,并使用梯度下降法更新這些參數。但是,隨著網絡層數的增加,梯度值可能會逐漸變得非常小,甚至接近零。這個問題通常出現在深層網絡和使用某些激活函數(如sigmoid或tanh)時。
原因:在反向傳播過程中,梯度需要通過每一層逐層傳遞。如果激活函數的導數很小(如sigmoid的導數最大為0.25),那么梯度在每一層都會被縮小,導致靠近網絡輸入的層幾乎無法接收到有效的梯度信號。這樣,網絡的前幾層更新速度非常慢,甚至停止更新,從而導致網絡訓練不充分,無法學習有效的特征。