反向傳播(Backpropagation)是大模型(如GPT、BERT等)訓練過程中的核心算法,用于高效計算損失函數對神經網絡中所有參數的梯度。這些梯度隨后被用于優化器(如Adam)更新參數,使模型逐漸減小預測誤差。
1. 大模型微調的核心目標:學習如何調整參數
- 大模型有數十億甚至數萬億參數(權重和偏置)。
- 訓練時,模型通過輸入數據生成預測結果,并與真實標簽比較產生損失值(衡量預測有多差)。
- 目標:找到一組參數,使損失值最小化 → 即模型預測更準確。
- 關鍵問題: 如何知道每個參數應該增大還是減小?改變多少?
→ 反向傳播就是解決這個問題的算法。
2. 工作流程:分兩步走
步驟1:前向傳播(Forward Pass)
- 輸入數據從網絡底層(輸入層)逐層向上計算,最終得到預測輸出。
- 計算過程中記錄所有中間結果(每一層的輸出值)。
- 結果: 得到預測值,并計算出損失函數值(如交叉熵損失)。
步驟2:反向傳播(Backward Pass)
- 核心: 從輸出層開始,逆向逐層計算損失函數對每個參數的梯度。
- 原理: 利用鏈式法則(Chain Rule)(微積分中的復合函數求導規則):
- 先計算損失函數對輸出層輸出的梯度。
- 將這個梯度傳遞給前一層的參數和輸入,計算該層的梯度。
- 重復此過程,直到傳播回輸入層。
- 結果: 得到損失函數對所有參數(權重
W
、偏置b
)的梯度?Loss/?W
和?Loss/?b
。
3. 梯度下降:使用梯度更新參數
- 得到梯度后,優化器執行梯度下降:
新參數 = 舊參數 - 學習率 × 梯度
- 梯度方向:指示參數應如何調整以減小損失(負梯度方向是下降最快的方向)。
- 學習率:控制每次更新的步長。
4. 為什么要“反向”?
- 高效性:
反向傳播利用鏈式法則,只需一次前向傳播 + 一次反向傳播,即可計算網絡中所有參數的梯度。如果手動為每個參數單獨計算梯度,計算量將爆炸式增長(對大模型完全不可行)。 - 復用中間結果:
反向傳播重復使用前向傳播中計算的中間值(如激活值),避免重復計算,極大提升效率。
5. 在大模型中的特殊意義
- 規模挑戰:模型參數達千億級別,反向傳播的分布式實現至關重要(如數據并行、模型并行)。
- 顯存優化:反向傳播需存儲前向傳播的中間結果,催生了梯度檢查點(Gradient Checkpointing)等技術,用時間換顯存。
- 自動微分框架:PyTorch/TensorFlow 等框架自動實現反向傳播,開發者只需定義前向計算。
總結
步驟 | 輸入 → 輸出 | 核心作用 |
---|---|---|
前向傳播 | 原始數據 → 預測值 + 損失值 | 計算當前預測效果 |
反向傳播 | 損失值 → 所有參數的梯度 | 計算每個參數該如何調整 |
參數更新 | 梯度 → 新的參數值 | 沿梯度方向優化模型 |