一个 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 执行一次,迭代优化参数直至收敛。