本页说明 PyTorch autograd 如何实现 04 反向传播,以及如何自定义梯度。
段末注释:autograd(automatic differentiation,自动微分)通过追踪
requires_grad=True张量上的运算构建 DAG,调用backward()自动执行反向模式求导。
系列入口:00.系列规划 | 前置:04 反向传播、06 层梯度手册
1. 核心机制(D2–D3)

| 概念 | 说明 |
|---|---|
Tensor |
数据 + requires_grad 标志 |
Function |
每个运算对应 forward/backward |
grad_fn |
指向创建该 tensor 的 Function |
.grad |
叶子节点累积梯度 |
backward() |
从标量 loss 反向 |
叶子节点:用户创建且 requires_grad=True 的参数(nn.Parameter 默认)。
2. 常用 API(D7)

1 | loss.backward() # 默认 grad 累加到 .grad |
detach():返回同数据无梯度 tensor,阻断反向。
3. 自定义 Function(D3–D7)

1 | import torch |
ctx.save_for_backward 存 forward 中间量;backward 返回与 forward 输入同数量的梯度。
4. gradcheck(D8)

1 | from torch.autograd import gradcheck |
注意:用 float64;自定义层开发必测。
5. 与训练循环(D6)
衔接 Math-04:
1 | for batch in loader: |
6. 局限(D8)
| 问题 | 说明 |
|---|---|
| 非可微 op | 次梯度;ReLU 在 0 处 |
| 高阶导 | create_graph=True |
| 内存 | 存全图 → checkpoint 重算 |
@once_differentiable |
二阶仅一次 |
7. 小结
autograd = 动态计算图 + 每 op 注册 backward。Attention 自定义见 20 专篇。
系列导航:06 层梯度 | Math-04 优化