PyTorch 2026-05-19
反向传播
反向传播
反向传播隐含了一个思想:
任何复杂函数,都可以拆成一个有向无环图(计算图)
如果没有激活函数,会导致单个神经元是线性的话,最终模型整体也是个线性的,意义不大;加上一个非线性的激活函数可以让最终模型不能展开为一个简单的线性模型,增加了模型复杂度

梯度清零:w.grad.data.zero_(),让下一次需要梯度的时候得到正确的梯度
Tensor类型可以理解成:
数据 + 计算历史 + 自动求导能力 的复合体 成员:(以w为参考变量)
- w.item(): 把 0 维 Tensor 转成 Python 数值,用于打印 / 日志
- w.grad:

- w.requires_grad: 只有 True 的 Tensor 才会有 grad
- w.data: 纯数值,不参与计算图
Tensor 是“会记账的变量”,
backward() 是”自动清账的过程”
计算图 = 一次前向计算中,Tensor 运算的依赖关系图(Dynamic Computation Graph)
保存计算图时,网络越深、batch 越大,保存的中间量越多,显存/内存越吃紧
图是跟着代码执行路径动态生成的,所以可能每次不一样
默认:一次 forward 对应一次 backward,用完就释放图,所以同一个 loss 默认不能 backward()两次(除非 retain_graph=True)