深度学习进阶文档深度页
反向传播
从损失开始按链式法则逆序计算每个参数对损失的影响。
学习目标
- 手算链式梯度
- 理解 backward 职责
- 检查参数梯度
为什么需要这个概念
深层复合函数的导数需要复用各操作局部梯度。
- 神经网络学习核心
- 连接损失与优化器
学习前需要掌握
导数内容待补充前向传播
背景与问题
深层复合函数的导数需要复用各操作局部梯度。
概念定义
反向传播是高效的向量—雅可比乘积过程,本身不更新参数。
直观理解
从最终误差倒查每层责任,并把下游影响乘回上游。
核心原理
局部导数沿依赖路径相乘并汇总;优化器在 afterward 读取 .grad。
非标量输出需提供上游 gradient;高阶梯度需 create_graph。
数学表达
核心公式
链式法则连接损失和权重。
变量含义
L损失w权重z中间值
计算步骤
- 1dL/dw=2z×x
代码对应位置
示例 1反向传播 · PyTorch 示例:验证反向传播的输入、计算和输出。
变量解释
| 变量 | 含义 |
|---|---|
L | 损失 |
w | 权重 |
z | 中间值 |
完整数值示例
z=wx+b,L=z²
已知条件
- x=2,w=.5,b=1
- z=2
- 1
dL/dw=2z×x
梯度 8
处理前后对比
计算与实现步骤
- 1
前向
- 2
保存依赖
- 3
初始化上游梯度
- 4
逆序局部求导
- 5
累加叶子 grad
代码实现
示例 1
反向传播 · PyTorch 示例
反向传播 · PyTorch 示例
PyTorch
example_01.py用途:验证反向传播的输入、计算和输出。
x=torch.tensor(2.)
w=torch.tensor(.5,requires_grad=True)
b=torch.tensor(1.,requires_grad=True)
loss=(w*x+b).square();loss.backward();print(w.grad,b.grad)代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
验证反向传播的输入、计算和输出。
loss- 当前预测与目标之间的损失值。
w- 模型权重或当前待优化参数。
b- 偏置项。
Step 1 · 1–4 行
计算损失对参数的梯度,对应数学表达中的 ∇J;梯度只给出局部变化方向。
x=torch.tensor(2.)
w=torch.tensor(.5,requires_grad=True)
b=torch.tensor(1.,requires_grad=True)
loss=(w*x+b).square();loss.backward();print(w.grad,b.grad)代码与数学原理
平方误差代码对应均方损失。
预期输出或运行结果
w.grad=8,b.grad=4。
常见错误 · 4 条
- 反向等于更新
- 同图重复 backward
- 意外 detach
- 原地破坏图
实际应用
- 所有神经网络训练
常见错误
反向等于更新
同图重复 backward
意外 detach
原地破坏图
文档来源
12_自动微分与反向传播详解原始文档
学习资料/deeplearning/12_自动微分与反向传播详解.md- §1 自动微分
- §4 标量 backward
- §13 链式验证
常见问题
backward 会更新参数吗?
不会,只计算梯度。
为何 loss 常归约为标量?
可直接从上游梯度 1 反传。
推荐学习资料
官方文档A 级
PyTorch Tutorials
从张量、数据加载、自动微分和网络训练逐步进入视觉、NLP、性能与部署。
PyTorch Contributors · PyTorch