从直觉到证明3Blue1Brown 中文导学教材
3.4 反向传播的直觉

3.4 反向传播的直觉

沿每条影响路径相乘,在汇合处相加,留意共享参数不能漏掉分支。

例题练习Lean 对照原课

一步一步建立直观

先预测,再点“演示本步”核对右图。每一步都重设到指定情形,随后可以自由修改参数。

01先沿计算方向记下中间量

从输入计算加权和,再计算激活输出,最后得到平方损失。反向传播需要这些前向中间量,因为每个局部导数都要在当前输入处求值。先在右图核对 zz、输出和目标,才能解释梯度读数为什么具有当前的符号与大小。

02从输出误差追问谁该改变

损失先告诉输出应该增大还是减小,再通过激活函数传到加权和,最后乘以各输入,得到各权重应承担的变化率。这个连乘是链式法则。若一个参数通往损失的路径不止一条,各条路径的贡献还要相加,而不能任选其中一条。

03局部通路可能暂时关闭

当 ReLU 输入严格小于零时,这条通路的局部导数为零,即使当前损失很大,也不会通过它传回非零梯度。在零点本身,经典导数不存在,程序需选定实现约定。这里展示单个节点的机制;大型网络只是把同样的依赖关系按图重复计算。

3.4.1 从最后的误差倒推每个中间量的影响

前向计算从输入走向预测,反向传播则从损失出发,询问每个中间量改变一点会让损失怎样变。输出端已经知道“希望预测往哪里改”,链式法则把这份敏感性逐层传回更早的节点。

沿一条路径,每经过一个运算都乘上它的局部导数;若一个中间量通过多条路径影响损失,要把贡献相加。这个规则来自复合与和的求导法则,并不是神经网络额外发明的数学。

3.4.2 共享参数为什么必须累加贡献

让同一参数出现在 L(w)=(w−1)2+(2w)2L(w)=(w-1)^2+(2w)^2 两个分支中。第一条路径贡献 2(w−1)2(w-1),第二条贡献 8w8w。只看第一条会把最优点误判为一;两条相加得到 10w−210w-2,真正最优点为 1/51/5。

反向计算的效率来自复用:同一个中间节点到最终损失的敏感性算一次,就能继续传给它的多个输入。若每个参数都从头展开整个损失,会重复大量共同计算。计算图把这些共享结构明确地记录下来。

一次反向传播给出梯度,还没有改变参数;优化器之后才使用梯度更新。若批量损失取平均,梯度也要平均,否则批量大小一变就暗中改变了更新尺度。下一节将把“沿路径乘、汇合时加”写成一个完整的小例子。

数学表述 3.4.1

从输出误差倒推每个中间量的责任:一个节点影响损失的每条路径都要计入,路径上的导数相乘,汇合处相加。

若 L=L1+L2L=L_1+L_2,则 ∂L/∂w=∂L1/∂w+∂L2/∂w\partial L/\partial w=\partial L_1/\partial w+\partial L_2/\partial w。批量损失为平均值时,梯度也必须取平均。

例 3.4.1 把概念用于具体计算

同一个参数 ww 出现在 L(w)=(w−1)2+(2w)2L(w)=(w-1)^2+(2w)^2 中,导数为 2(w−1)+8w=10w−22(w-1)+8w=10w-2。只沿第一条路径回传会漏掉 8w8w。

练习 3.4.1

上例最小点?

展开解答与检查

解 10w−2=010w-2=0 得 w=1/5w=1/5,二阶导数 10>010>0。

Lean 对照 3.4.1 命题、证明与适用边界

完整证明两条可导损失分支相加时导数相加,作为共享梯度累积的标量核心。

NeuralNetworks.gradient_accumulation

theorem gradient_accumulation (f g : ℝ → ℝ) (x df dg : ℝ)
    (hf : HasDerivAt f df x) (hg : HasDerivAt g dg x) :
    HasDerivAt (fun t => f t+g t) (df+dg) x := hf.add hg

查看完整定义与上下文 ↗ · 全书证明范围

原课对照 观课问题、视频与图示

沿每条影响路径相乘,在汇合处相加,留意共享参数不能漏掉分支。

官方课程与图示 ↗ · 原视频 ↗

点击后连接 YouTube;播放器不可用时可通过上方原链接观看。