反向傳播算法的數學解釋
反向傳播算法是深度學習中用于訓練神經網絡的核心算法。它通過計算損失函數相對于網絡權重的梯度來更新權重,從而最小化損失。
反向傳播的基本原理
反向傳播算法基于鏈式法則,它按層反向傳遞誤差,從輸出層開始,逐層向后至輸入層。
1. 損失函數
- 假設損失函數為 L L L,用于衡量預測輸出 y ^ \hat{y} y^? 和實際標簽 y y y 之間的差異。
2. 鏈式法則
-
鏈式法則用于計算損失函數相對于網絡中每個權重的梯度。對于每個權重 W W W:
? L ? W = ? L ? y ^ × ? y ^ ? W \frac{\partial L}{\partial W} = \frac{\partial L}{\partial \hat{y}} \times \frac{\partial \hat{y}}{\partial W} ?W?L?=?y^??L?×?W?y^??
3. 梯度傳播
-
在多層網絡中,梯度需要通過每一層反向傳播。對于層 l l l 的權重 W l W_l Wl?:
? L ? W l = ? L ? y ^ × ? y ^ ? a l × ? a l ? W l \frac{\partial L}{\partial W_l} = \frac{\partial L}{\partial \hat{y}} \times \frac{\partial \hat{y}}{\partial a_l} \times \frac{\partial a_l}{\partial W_l} ?Wl??L?=?y^??L?×?al??y^??×?Wl??al??
其中 a l a_l al? 是層 l l l 的激活輸出。
4. 權重更新
-
權重通過梯度下降法更新:
W new = W old ? η × ? L ? W W_{\text{new}} = W_{\text{old}} - \eta \times \frac{\partial L}{\partial W} Wnew?=Wold??η×?W?L?
其中 η \eta η 是學習率。
反向傳播的步驟
- 前向傳播:計算每層的激活輸出直至輸出層。
- 損失計算:計算預測輸出與實際標簽的損失。
- 反向傳播:從輸出層開始,逐層向后計算損失函數相對于每個權重的梯度。
- 更新權重:根據計算得到的梯度更新網絡的權重。
反向傳播使得深度神經網絡能夠通過學習數據中的復雜模式來優化其性能,這是現代深度學習應用的基石。
代碼
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential# 創建一個簡單的神經網絡
model = Sequential([Dense(10, activation='relu', input_shape=(784,)),Dense(10, activation='softmax')
])# 編譯模型,使用交叉熵損失函數和SGD優化器
model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])# 假設有訓練數據 X_train, y_train
# X_train = ... # 輸入數據
# y_train = ... # 標簽數據# 訓練模型
# model.fit(X_train, y_train, epochs=10)# 在這個過程中,TensorFlow 自動執行前向傳播、損失計算、反向傳播和權重更新
在這個示例中,我們定義了一個含有兩層的簡單神經網絡,并使用隨機梯度下降(SGD)作為優化器。在訓練過程中,TensorFlow 會自動處理前向傳播、損失計算、反向傳播和權重更新的步驟