从直觉到证明3Blue1Brown 中文导学教材
3.5 反向传播的微积分

3.5 反向传播的微积分

分开计算损失、激活与权重之间的局部导数,最后检查符号和矩阵形状。

例题练习Lean 对照原课

一步一步建立直观

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

01把复合函数拆成可求导的环节

记 z=w1x1+w2x2+bz=w_1x_1+w_2x_2+b,输出为 a=max(0,z)a=\max(0,z),损失为 L=(a−y)2L=(a-y)^2。对 w1w_1 求导时,依次经过 LL、aa、zz 三个环节。右图同时给出中间量,方便逐项核对链式法则中的每个因子,而不是只看最后一个梯度数字。每一环的输入位置都来自同一次前向计算。

02用符号解释参数应该向哪边走

在激活区域,权重梯度为 2(a−y)x12(a-y)x_1。如果输出过大且输入为正,梯度为正,梯度下降就减小这个权重;若输入为负,改变方向随之反转。这种符号推理是检查求导的有效方法。偏置对应的局部输入恒为一,所以少了输入因子。

03不可导点需要单独处理

把单元切到关闭侧,再靠近边界。严格负侧梯度为零,严格正侧使用前面的公式;边界两侧一般不一致。右图在零点明确提示折点,不给出通常导数;某些训练程序会约定传回零,但这不是证明 ReLU 在零点可导。形式化命题与手算推导的适用条件应按各自陈述逐一核对。

3.5.1 把长表达式拆成三个短问题

考虑 z=wa+bz=wa+b、输出 ŷ=σ(z)\hat y=\sigma(z)、损失 L=(ŷ−y)2L=(\hat y-y)^2。若直接对嵌套式求导,容易漏项。先分别问:损失对输出多敏感,输出对预激活多敏感,预激活对权重多敏感?答案是 2(ŷ−y)2(\hat y-y)、σ′(z)\sigma'(z)、aa。

把三个响应倍率按路径相乘,就得到权重梯度。输入激活 aa 越大,同一权重变化越能改变预激活;激活函数若进入饱和区,σ′(z)\sigma'(z) 很小,梯度会被削弱。公式因此也解释了训练现象,而不仅给出可执行运算。

3.5.2 先检查最简单的线性输出

让 σ\sigma 为恒等函数,取 a=2,b=1,y=4,w=1a=2,b=1,y=4,w=1。预测为三,误差为负一,权重梯度为负四。梯度下降减去负数,使权重增加,预测向目标移动,符号与直觉一致。偏置梯度为负二,因为偏置改变一个单位只使预测改变一个单位。

对多层情形,上一层的一个单元通常影响下一层多个单元,因而误差信号需要求和;矩阵转置正好把下一层的影响汇集回上一层。权重梯度的外积则把“接收端敏感性”和“发送端激活”配成所有连接的贡献。

推导时先固定向量是行还是列,再检查每个矩阵形状。损失是否带二分之一、是否按样本平均,也会改变系数。用一个可手算的标量例子核对符号和尺度,往往比只盯着大矩阵更有效。

定义 3.5.1 单个 ReLU 单元与平方损失

记 z=w1x1+w2x2+bz=w_1x_1+w_2x_2+b、a=max(0,z)a=\max(0,z)、L=(a−y)2L=(a-y)^2。输入与目标固定时,损失是参数的复合函数。

命题 3.5.1 严格激活区域中的权重梯度

在 z>0z>0 的邻域中,∂L/∂w1=2(a−y)x1\partial L/\partial w_1=2(a-y)x_1。在 z<0z<0 的邻域中,该梯度为零。

证明 · 展开纸笔推导

当 z>0z>0 时,ReLU 在邻域内就是恒等函数,链式法则给出 2(a−y)⋅1⋅x12(a-y)\cdot1\cdot x_1。当 z<0z<0 时,它在邻域内恒为零,局部损失因而不随该参数变化。

结论刻意避开 z=0z=0。ReLU 在零处没有经典导数,复合损失是否恰好可导还要另看具体参数与目标;程序采用的反向传播约定不能替代这项数学判断。

□

数学表述 3.5.1

将损失拆成短小的可导计算,再用链式法则组合,避免对整个表达式盲目展开。

对 z=wa+b,aout=σ(z),L=(aout−y)2z=wa+b,a_{\mathrm{out}}=\sigma(z),L=(a_{\mathrm{out}}-y)^2, ∂L∂w=2(aout−y)σ′(z)a.\frac{\partial L}{\partial w}=2(a_{\mathrm{out}}-y)\sigma'(z)a. 多层网络写作 δ(ℓ)=((W(ℓ+1))Tδ(ℓ+1))⊙σ′(z(ℓ))\delta^{(\ell)}=((W^{(\ell+1)})^T\delta^{(\ell+1)})\odot\sigma'(z^{(\ell)}),权重梯度为 δ(ℓ)(a(ℓ−1))T\delta^{(\ell)}(a^{(\ell-1)})^T。

例 3.5.1 把概念用于具体计算

线性输出时取 a=2,b=1,y=4,w=1a=2,b=1,y=4,w=1,预测为 33,权重导数为 2(3−4)2=−42(3-4)2=-4;减去负梯度使权重上升。

练习 3.5.1

上例偏置导数是多少?

展开解答与检查

2(3−4)=−22(3-4)=-2。

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

完整证明线性输出的平方损失对权重的导数。非线性层及矩阵反传公式在正文推导,未由此单命题覆盖。

NeuralNetworks.squared_loss_weight_gradient

theorem squared_loss_weight_gradient (a b y w : ℝ) :
    HasDerivAt (fun t : ℝ => (t*a+b-y)^2) (2*(w*a+b-y)*a) w := by
  convert ((((hasDerivAt_id w).mul_const a).add_const b).sub_const y).pow 2 using 1
  simp only [id_eq]
  ring

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

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

分开计算损失、激活与权重之间的局部导数,最后检查符号和矩阵形状。

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

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