?
代表該節點在目前階段尚未被算出對應數值,不是預先填好答案,而是誠實反映「目前狀態」。
橘色(current)=本幀正在處理的節點;藍色外框(frontier)=前向已知輸入節點,或反向本幀
正在推送貢獻的來源節點;紫色(visited)=前向已求值的節點集合,或反向已推送完自己全部
貢獻的來源節點集合;綠色(finalized)=終幀三方梯度對照已對整張圖定案。
誠實揭露 1——教學縮尺:本頁計算圖僅 7 個節點,純粹是為了讓每一步 adjoint 累加都能 逐幀看清楚;真實神經網路的計算圖可達百萬甚至十億個節點,前向拓撲序求值 + 反向逆拓撲序推送 adjoint 貢獻的原理完全相同,只是規模無法逐幀視覺化。
誠實揭露 2——中央差分僅驗證用、非生產:下方三方對照表的中央差分數值梯度
(f(x+h)−f(x−h))/2h 只用來驗證 AD 反向傳播的結果是否正確;它對每個輸入變數各需
重新跑兩次完整前向傳值,n 個參數就要 2n 次前向,百萬參數規模下完全不可行——這正是 AD 的價值:
一次前向 + 一次反向就能同時拿到所有輸入變數的梯度,數值差分在真正的模型訓練中不會被使用。
誠實揭露 3——v1/v2 雙路徑累加是 backprop 核心:v1 是 v3=ln(v1) 與 v4=v1·v2 的共同 上游,在計算圖中有 v1→v3→v6→v7 與 v1→v4→v6→v7 兩條通往輸出的路徑;v2 同理有兩條路徑。反向 傳播依逆拓撲序逐節點推送,v1 的 adjoint 先由處理 v4 時推送一次(v̄1=5.0),再由處理 v3 時推送 一次(累加後 v̄1=5.5)——下方 adjoint 表與 opLog 逐幀分列這兩筆貢獻,刻意不合併成一步,凸顯 「adjoint = 所有下游貢獻加總」而非「只走一條路徑」。
前向值表(forwardVals,v1..v7)
adjoint 表(v̄1..v̄7,v̄=∂f/∂v,Σ 下游貢獻累加)
三方梯度對照(AD 反向傳播 / 解析偏導 / 中央差分,僅終幀齊備)
| 方法 | ∂f/∂x1 | ∂f/∂x2 |
|---|