自动微分的边界
辨认哪些 tensor 需要 gradient,哪些只是固定输入或 target。
为什么需要它
错误的 requires_grad 边界会浪费显存或切断优化链。
开始前应该已经会回答
- 能解释 leaf tensor
- 知道 zero_grad 与 detach 不同
输入、输出与契约
- 输入
- image/features/targets
- 输出
- scalar objective + selected gradients
- 只优化目标对象
- loss 由可微路径连接到目标
- 对 target 累积无用 gradient
- 在中途 detach 优化对象
用最小例子检查
用 x² 的两步优化观察 gradient accumulation,然后显式清零。
如果你看到……
优先检查:是否清零
优先检查:optimizer 参数与 leaf
预测 → 实验 → 证据
- 先预测
- 若只优化输入图像,模型权重应固定而图像有 gradient。
- 做实验
- 记录一次 backward 后各类 tensor 的 grad 是否存在。
- 留证据
- requires_grad
- is_leaf
- grad norm
渐进提示
先独立排查 10–15 分钟,再按需展开。
提示 1
先列优化对象
提示 2
检查 optimizer param list
提示 3
沿 grad_fn 回溯
闭卷检查 · 自动微分的边界
- gradient 边界正确
- 无意外参数更新
- 能解释累积