40 分钟
大模型内核:从经典机器学习到对齐与前沿

反向传播精读:计算图、链式法则与梯度的流动

彻底讲清神经网络是怎么「知道每个参数该往哪调」的:前向传播算结果与损失,反向传播沿计算图用链式法则把误差梯度一层层传回去,这是所有深度学习框架自动求导的底层原理

  • 理解前向传播与反向传播各自的方向和任务
  • 能用链式法则解释一个参数的梯度是怎么来的
  • 理解计算图与自动微分,明白框架的 backward() 在做什么
  • 从梯度流动角度初步理解梯度消失/爆炸的成因

训练 = 前向算误差,反向分责任

神经网络的训练每一轮做两件方向相反的事。前向传播:数据从输入层逐层算到输出,得到预测,再和标签比较算出损失。反向传播:从损失出发,反着往回算「每个参数对最终损失贡献了多少」,也就是损失对每个参数的偏导数(梯度);优化器再按梯度更新参数。

一轮迭代的完整方向

前向:x → 各层 → 预测 ŷ

用 ŷ 与 y 算损失 L

反向:从 L 逐层求偏导 ∂L/∂w

优化器按梯度更新所有 w,b

链式法则:反向传播的数学内核

复合函数的导数可以层层相乘:若 y=f(u)、u=g(x),则 dy/dx = (dy/du)(du/dx)。神经网络正是一个超长复合函数,损失对某层权重的梯度,等于「损失对该层输出的梯度」乘「该层输出对权重的梯度」,并把后面各层的导数一路连乘回来。反向传播本质就是链式法则在计算图上的高效执行——每个局部导数只算一次、反向复用,避免了重复求导的指数级开销。

ℹ️一个直观比喻

把最终误差想象成团队项目出的错。反向传播就是自上而下追责:先看输出层错多少,再按每个人(参数)的贡献比例把责任分回去,每个人据此调整自己。层级越深,责任经过的「传递系数」越多——这埋下了梯度消失/爆炸的伏笔。

💡梯度矩阵就是雅可比,stage11 讲透

这里把「损失对该层输出的梯度」乘「该层输出对权重的梯度」——一旦输入输出不止一个数,这些偏导数就要排成一整张表,这就是雅可比矩阵。stage11〈雅可比矩阵:多入多出的偏导数排一张表〉从「多个输入→多个输出,把所有偏导数排成一张表」讲起,连到形状规则,再讲反向传播里这张梯度矩阵怎么流,与本节正好对齐。

计算图与自动微分

框架(PyTorch、TensorFlow)会把你的运算记录成一张计算图:节点是运算(加、乘、激活),边是数据张量。前向时它顺便记下每个局部运算的导数;调用 backward() 时就在这张图上反向走一遍,按链式法则把梯度累积到每个叶子参数的 .grad 上。你几乎从不手写导数,但理解这张图能让你看懂「为什么 loss 不降」「为什么梯度是 NaN」。

自动微分(Autograd)在做什么

前向时:记录每一步运算与局部导数

backward():从损失节点出发反向遍历

链式连乘,梯度在节点间复用

梯度累积到每个参数,交给优化器

梯度为什么会消失或爆炸

反向传播要把一连串层的导数连乘。如果每层导数都小于 1,乘很多层后梯度趋近 0,浅层几乎学不动,这叫梯度消失,Sigmoid/Tanh 在饱和区导数极小会加剧它;反之每层导数都大于 1,连乘后梯度爆炸式增大,参数剧烈震荡甚至变 NaN。理解了「连乘」这个机制,就懂了后续一系列手段的动机:用 ReLU(正区间导数为 1)、批归一化(稳定每层数值分布)、残差连接(给梯度一条直达的高速路)、梯度裁剪(给总梯度设上限)。

选择题

反向传播所依赖的核心数学法则是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

先查数据:标签是否正确、有没有特征和标签泄漏、是否做了归一化;再查损失与学习率:学习率太大震荡、太小几乎不动;接着看批量大小和优化器,最后才怀疑模型结构。一个极好用的冒烟测试是:用极少量样本训练,看损失能不能被压到接近零——能,说明整条代码链路是通的;不能,问题一定在实现里,先别谈调参。