訓練神經網路的核心演算法,透過鏈式法則高效計算梯度
反向傳播(Backpropagation)是訓練神經網路的核心演算法,透過鏈式法則計算損失函數對每個參數的梯度,實現高效的神經網路學習。神經網路的前饋傳播構成一個計算圖:輸入 → Linear → ReLU → Linear → Softmax → Loss,每個節點代表一個運算,邊代表資料流動。
對於複合函數 y = f(g(x)),dy/dx = (dy/du) × (du/dx)。在多層網路中,損失對參數的梯度可表示為:∂L/∂W = ∂L/∂out × ∂out/∂z × ∂z/∂W。反向傳播由後往前逐層計算梯度,前饋傳播時快取中間結果供反向傳播使用。
梯度消失:激活函數導數 < 1,連乘後趨近於 0。解決方法包括使用 ReLU 激活函數、殘差連接 (Residual Connection) 和 Batch Normalization。 梯度爆炸:權重過大導致連乘後趨近無窮大。解決方法包括梯度裁剪 (Gradient Clipping)、權重初始化以及 Xavier/He 初始化。
Xavier 初始化:適用於 sigmoid/tanh,公式為 W = np.random.randn(n_in, n_out) * np.sqrt(2.0 / (n_in + n_out))。 He 初始化:適用於 ReLU,公式為 W = np.random.randn(n_in, n_out) * np.sqrt(2.0 / n_in)。正確的初始化對訓練深層網路至關重要。
手動實現所有層的梯度計算十分繁瑣,現代框架使用自動微分 (Autograd)。以 PyTorch 為例,只需呼叫 loss.backward() 即可自動計算所有參數的梯度。自動微分透過追蹤計算圖中的每個運算來建構反向傳播路徑,大幅簡化了深度學習的開發流程。