Neural Networks

神经网络训练:反向传播与梯度下降

把“训练神经网络”拆成前向计算、损失函数、链式法则和参数更新。

Mechanism Lab

动画:误差信号如何反向流过网络

动画先显示前向激活,再让误差信号从 loss 回到每一层权重。

Step 1 / 5

Input

特征进入第一层。

x

Animation Control

Reduced-motion users receive the same step states without continuous motion.

01 / 直觉

核心直觉

网络是复合函数。

反向传播只是高效应用链式法则。

梯度下降每一步都沿着损失下降最快的局部方向移动。

02 / 数学

反向传播的链式法则

01 / 前向

每层先做仿射变换再做非线性。

h_l = sigma(W_l h_{l-1} + b_l)

02 / 损失

训练目标是最小化预测和真实标签之间的损失。

L(theta) = (1/n) sum_i ell(y_i, f_theta(x_i))

03 / 反向

链式法则把输出误差传播到每个参数。

dL/dW_l = (dL/dh_l)(dh_l/dz_l)(dz_l/dW_l)

04 / 更新

梯度下降按学习率 eta 更新参数。

theta <- theta - eta grad_theta L

03 / 代码

PyTorch 训练循环

训练循环的四步是 forward、loss、backward、step。

import torch
from torch import nn

model = nn.Sequential(
    nn.Linear(10, 32),
    nn.ReLU(),
    nn.Linear(32, 1),
)
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3)
loss_fn = nn.MSELoss()

for xb, yb in loader:
    pred = model(xb)
    loss = loss_fn(pred.squeeze(), yb)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

04 / 案例

案例:学生流失风险的非线性交互

  • 缺勤、成绩和导师反馈可能存在非线性交互。
  • MLP 可以学习“高缺勤且成绩下降”的组合风险。
  • 验证集和校准曲线比训练损失更重要。

05 / 风险

常见误区

学习率过大导致发散。
忘记 zero_grad 造成梯度累积。
只看 loss 不看验证指标和校准。

参考资料