一个 batch 内的参数优化流程:前向传播 → 损失计算 → 反向传播 → 参数更新。

1. 前向传播

对 batch 数据执行前向计算:

其中 为输入(形状 (batch_size, input_dim)), 为模型预测值。

计算损失函数:

常见损失函数:

任务类型损失函数
分类Cross Entropy Loss
回归MSELoss

2. 反向传播

PyTorch 自动记录操作形成计算图,通过自动微分计算梯度:

梯度存储在每个参数的 tensor.grad 属性中:

loss.backward()  # 计算所有参数梯度

3. 参数更新

优化器使用梯度更新参数:

其中 为学习率, 为当前 batch 梯度。

optimizer.step()  # 更新参数

完整训练循环:

optimizer = optim.Adam(model.parameters(), lr=0.001)
 
optimizer.zero_grad()  # 清除上一轮梯度
loss.backward()        # 计算梯度
optimizer.step()       # 更新参数

4. 梯度清零

PyTorch 默认梯度累积,每个 batch 后需手动清零:

optimizer.zero_grad()

否则梯度会在多个 batch 间累积,影响训练效果。

总结

步骤操作代码
前向传播计算预测值和损失y_pred = model(x)
反向传播计算梯度loss.backward()
参数更新更新权重optimizer.step()
梯度清零防止累积optimizer.zero_grad()

该流程每个 batch 执行一次,迭代优化参数直至收敛。