第十四章:Backpropagation — 知识点笔记
综合来源:Lecture 14 PDF(38页)、课堂笔记(CSDN)
占位图
14.1 梯度计算:三种方法对比 ⭐
(1) 数值微分(Numerical Differentiation)
∂E∂wi≈E(w+ϵIi)−E(w−ϵIi)2ϵ\frac{\partial E}{\partial w_i} \approx \frac{E(w + \epsilon I_i) - E(w - \epsilon I_i)}{2\epsilon}∂wi∂E≈2ϵE(w+ϵIi)−E(w−ϵIi)
| 优点 | 缺点 |
|---|---|
| 适用于任何函数 | 近似(非精确) |
| 易于实现 | 极贵:需2D2D2D次误差计算→O(ND2)\mathcal{O}(ND^2)O(ND2)总代价 |
(2) 符号微分(Symbolic Differentiation)
- 用求导规则推导解析梯度表达式
- 优点:精确 | 缺点:表达式膨胀(Expression Swell)→大量冗余重复子表达式
(3) 自动微分(Autodiff)⭐
| 特点 | 说明 |
|---|---|
| 自动 | 追踪前向计算图→自动生成导数程序 |
| 精确 | 机器精度(非近似) |
| 高效 | 重用冗余计算 |
两种模式
| 模式 | 方向 | 适用 |
|---|---|---|
| Forward Mode | 输入→输出 | f:R→RMf: \mathbb{R} \to \mathbb{R}^Mf:R→RM(少输入多输出) |
| Backward Mode | 输出→输入 | f:RD→Rf: \mathbb{R}^D \to \mathbb{R}f:RD→R(多输入少输出)→DL专用 |
14.2 前向追踪:计算图 ⭐
将计算分解为基本操作的序列:
v1 = x1 v4 = exp(v3) v2 = x2 v5 = sin(v2) v3 = v1 * v2 v6 = v4 + v3 v7 = v6 - v5 (= f)每个变量viv_ivi是计算图的一个节点,操作是有向边。
14.3 反向传播:伴随变量 ⭐⭐⭐
核心递归公式
定义伴随变量(Adjoint):ai=∂f∂via_i = \frac{\partial f}{\partial v_i}ai=∂vi∂f
ai=∑j∈Ch[i]∂vj∂vi⋅aja_i = \sum_{j \in \mathbf{Ch}[i]} \frac{\partial v_j}{\partial v_i} \cdot a_jai=j∈Ch[i]∑∂vi∂vj⋅aj
- Ch[i]\mathbf{Ch}[i]Ch[i]:viv_ivi的子节点集合(被viv_ivi影响的后继变量)
- 从输出向输入递归!
算法步骤
- 前向:计算所有viv_ivi的值并缓存
- 初始化:afinal=1a_{final} = 1afinal=1(∂f∂f=1\frac{\partial f}{\partial f}=1∂f∂f=1)
- 反向遍历:按拓扑逆序计算每个aia_iai
- 梯度:输入变量对应的aia_iai即所求梯度
关键观察
- 单输出→只需维护一个伴随变量
- 多路径→梯度累加(sum over children)
- 需缓存/重算中间变量值
14.4 神经网络中的反向传播
单隐藏层网络梯度
y=σ(W(2)σ(W(1)x))y = \sigma(W^{(2)}\sigma(W^{(1)}x))y=σ(W(2)σ(W(1)x))
对W(1)W^{(1)}W(1)的偏导:
∂E∂Wij(1)=∂E∂y⋅∂y∂z⋅∂z∂Wij(1)\frac{\partial E}{\partial W^{(1)}_{ij}} = \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial W^{(1)}_{ij}}∂Wij(1)∂E=∂y∂E⋅∂z∂y⋅∂Wij(1)∂z
- 外层导数→内层导数→链式法则嵌套
- Autodiff自动处理所有嵌套
为什么反向模式高效
- 深度网络:f:RD→Rf: \mathbb{R}^D \to \mathbb{R}f:RD→R(百万参数→单一损失)
- 反向模式一次遍历→O(D)\mathcal{O}(D)O(D)计算所有梯度
- 前向模式需O(D)\mathcal{O}(D)O(D)次遍历→不适合DL
14.5 PyTorch中的Autograd
loss.backward()# 自动反向传播→计算所有参数的.grad- 追踪
requires_grad=True的tensor - 构建动态计算图
backward()触发反向遍历→填充.grad属性
笔记中的图片索引
| 序号 | 图片内容描述 | 来源位置 |
|---|---|---|
| 图1 | 三种微分方法对比 | Lecture 14 第10-18页 |
| 图2 | 前向计算图追踪 | Lecture 14 第20页 |
| 图3 | 反向伴随变量传播全过程 | Lecture 14 第24-34页 |
笔记整理时间:2026年6月29日