Neural Networks
神经网络训练:反向传播与梯度下降
把“训练神经网络”拆成前向计算、损失函数、链式法则和参数更新。
Mechanism Lab
动画:误差信号如何反向流过网络
动画先显示前向激活,再让误差信号从 loss 回到每一层权重。
Step 1 / 5
Input
特征进入第一层。
xAnimation 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 L03 / 代码
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 不看验证指标和校准。