為何需要逆向計算?
在訓練 神經網路 時,我們的目標是求得每一個 權重 θ 的偏微分 ∂f/∂θ,以便以 梯度下降 更新參數。直觀上,神經網路只是一個由多層組合函數組成的映射,依照 鏈式法則(chain rule)理論,我們完全可以在前向傳遞(forward pass)時同時累積所有偏微分。事實卻是,反向傳播(backpropagation)必須從輸出層向輸入層逆向計算,這並非偶然,而是效率的必然選擇。
逆向傳播的核心機制
考慮任意一個節點 v,其前向運算為
u = θ1·t1 + θ2·t2 + … + θn·tn
v = σ(u)
其中 σ 為激活函數,u 為加權和。根據單變量鏈式法則,我們有
[
\frac{\partial f}{\partial \theta_1}= \frac{\partial f}{\partial v};
\frac{\partial v}{\partial u};
\frac{\partial u}{\partial \theta_1}
]
- ∂v/∂u 只與 σ 的形式有關,可於局部直接求得。
- ∂u/∂θ1 = t1,亦是局部資訊。
因此,只要知道 ∂f/∂v(即「上游」的誤差訊號),就能在該節點即時計算出所有與之相連的權重梯度。問題的關鍵在於 ∂f/∂v 如何取得。下游節點的輸出同樣依賴 v,根據多變量鏈式法則:
[
\frac{\partial f}{\partial v}= \sum_{j}\frac{\partial f}{\partial w_j};
\frac{\partial w_j}{\partial v}
]
其中 w_j 為所有直接受 v 影響的後續節點。這個求和正好在逆向的方向上完成:從最終損失 f 開始,逐層把誤差訊號傳回,讓每個節點在收到自己的 ∂f/∂v 後即可完成局部梯度計算。整個過程只需一次前向傳遞(取得各層輸出)加一次逆向傳遞(傳遞誤差),時間複雜度為 O(參數數量)。
前向梯度的限制與未來方向
如果嘗試在前向傳遞中同步累積所有偏微分,必須為每條邊保存一個「中間梯度」並在每個分支上重複計算,等同於在 指數級 的路徑上展開鏈式乘積,計算量將遠高於逆向傳播。因此,前向累積梯度在實務上是次優(sub‑optimal)的。
未來的研究仍在探索 前向自動微分(forward‑mode autodiff)在特定稀疏結構或小規模模型中的效能,但對於大規模深度學習模型而言,逆向傳播仍是最佳選擇。了解其背後的 局部鏈式計算 與 誤差逆傳 原理,對於設計更高效的優化器、調整模型結構,乃至於開發自訂層(custom layer)都有實質幫助。
結語:逆向傳播之所以「必須」逆向,根本原因在於鏈式法則允許我們把全局梯度拆解為每個節點的局部貢獻,而這種局部化只能透過從輸出回溯的方式高效完成。掌握這一點,才能在日益複雜的 神經網路 研發中,保持計算資源與研發效率的最佳平衡。
