通俗解释:PyTorch 中的 loss.backward()
loss.backward() 就像一个“自动纠错老师”,它会根据模型的预测错误(损失值),自动计算出每个参数需要调整的方向和幅度(梯度),最终让模型学会正确预测。
核心逻辑(类比学习过程)
-
前向传播:模型预测结果(比如判断图片是猫还是狗)。
-
计算损失:对比预测结果和真实答案,得到一个错误分数(如损失值=0.5表示预测偏差较大)。
-
反向传播(
loss.backward()):-
作用:从错误分数出发,逆向追踪所有计算步骤(如乘法、加法、激活函数),计算每个参数(如权重、偏置)对错误的“贡献度”(梯度)。
-
比喻:老师根据学生的错误,分析是哪个知识点(参数)没掌握好,需要加强(调整)。
-
详细过程(以图片分类为例)
-
输入数据:一张猫的图片 → 输入模型。
-
前向传播:
-
模型计算:
特征提取 → 全连接层 → 输出概率(猫:0.6, 狗:0.4)。 -
损失计算:真实标签是猫(``),损失值=交叉熵损失=0.5。
-
-
反向传播(
loss.backward()):-
步骤1:从损失值0.5出发,反向计算输出层的梯度(如权重矩阵的梯度)。
-
步骤2:逐层向前传递梯度,计算隐藏层和输入层的梯度。
-
结果:每个参数(如卷积核的权重)得到一个梯度值,表示“该参数应如何调整以减少损失”。
-
关键特性
-
自动计算梯度:
-
无需手动推导数学公式,PyTorch 自动记录计算过程(动态计算图),按链式法则计算梯度。
-
例如:
y = x^2 → dy/dx = 2x,PyTorch 会自动算出梯度2x。
-
-
梯度累积:
-
若多次调用
loss.backward()而不更新参数,梯度会累加(需手动清零:optimizer.zero_grad())。
-
-
保留计算图:
-
默认反向传播后释放计算图,若需多次反向(如GAN训练),需设置
retain_graph=True。
-
代码示例
# 定义模型和损失函数
model = nn.Linear(2, 1) # 输入2维,输出1维
loss_fn = nn.MSELoss()
# 输入数据和标签
inputs = torch.tensor([[1.0, 2.0]], requires_grad=True)
labels = torch.tensor([[3.0]])
# 前向传播
outputs = model(inputs)
loss = loss_fn(outputs, labels)
# 反向传播:计算梯度
loss.backward() # 自动计算 inputs.grad 和 model.weight.grad
# 查看梯度
print(inputs.grad) # 输出梯度值
总结
-
loss.backward()是反向传播的起点,它将损失值转化为参数的梯度。 -
梯度是参数更新的指南针:优化器(如SGD)根据梯度调整参数,让模型逐步逼近正确答案。
-
核心优势:自动微分(Autograd)极大简化了梯度计算,开发者只需关注模型设计和数据。
1万+

被折叠的 条评论
为什么被折叠?



