🎯 学习目标

  • 理解反向传播的原理
  • 掌握链式法则的应用
  • 了解计算图与自动微分
  • 学会使用PyTorch进行反向传播
反向传播概念图

什么是反向传播

反向传播(Backpropagation)是一种高效计算梯度的算法。 它利用链式法则,从输出层向输入层逐层计算损失函数对每个参数的梯度, 是训练神经网络的核心方法。

🔬 核心原理

链式法则

∂L/∂w = ∂L/∂y · ∂y/∂z · ∂z/∂w

复合函数的导数等于各层导数的乘积

两阶段过程

  • 前向传播:计算输出和损失
  • 反向传播:计算梯度
  • 参数更新:优化器更新权重

💻 PyTorch实现

import torch import torch.nn as nn # 创建模型和数据 model = nn.Linear(10, 1) X = torch.randn(32, 10) y = torch.randn(32, 1) # 前向传播 y_pred = model(X) loss = nn.MSELoss()(y_pred, y) # 反向传播 loss.backward() # 自动计算梯度 # 查看梯度 print(model.weight.grad) print(model.bias.grad) # 参数更新(使用优化器) optimizer = torch.optim.SGD(model.parameters(), lr=0.01) optimizer.step() # 更新参数 optimizer.zero_grad() # 清零梯度(重要!)

🔄 训练循环

for epoch in range(num_epochs): for batch_X, batch_y in dataloader: # 1. 清零梯度 optimizer.zero_grad() # 2. 前向传播 outputs = model(batch_X) loss = criterion(outputs, batch_y) # 3. 反向传播 loss.backward() # 4. 更新参数 optimizer.step() print(f'Epoch {epoch}, Loss: {loss.item():.4f}')

📊 计算图示意

输入 x ↓ (w₁) 隐藏层 h = f(w₁x + b₁) ↓ (w₂) 输出 y = f(w₂h + b₂) ↓ 损失 L 反向传播: ∂L/∂w₂ → ∂L/∂w₁ → 更新参数
💡
重要提示

每次迭代前必须调用optimizer.zero_grad()清零梯度,否则梯度会累积导致训练异常。

反向传播
图:反向传播利用链式法则高效计算梯度

📝 本节小结

  • • 反向传播利用链式法则高效计算梯度
  • • 前向传播计算输出,反向传播计算梯度
  • • PyTorch的autograd自动处理反向传播
  • • 训练循环:zero_grad → forward → backward → step