Appearance
模型训练与优化
模型训练的目标,是找到一组参数,使模型在训练数据上的损失较低,同时在未见数据上仍然有效。深度学习把这个过程拆成可重复执行的计算循环。
前向传播
前向传播从输入开始,经过每一层计算得到预测。一个最简单的神经元可以表示为:
text
输出 = 激活函数(输入 · 权重 + 偏置)多层网络把前一层输出作为下一层输入,逐步形成更复杂的表示。图像模型可能从边缘学习到纹理、部件和物体;语言模型可能从 Token 表示学习到语法、语义和上下文关系。
计算损失
损失函数把预测和目标之间的差异压缩成一个可优化数值。一次训练通常计算一个 Batch 中所有样本的平均损失。
损失下降说明模型更符合训练目标,但不直接证明业务效果更好。标签错误、目标定义错误或数据泄漏时,模型也可能顺利降低损失。
反向传播
反向传播根据链式法则,从最终损失向前计算每个参数的梯度。自动微分框架会记录前向计算图,并自动完成梯度计算。
mermaid
flowchart LR
X[输入] --> F[前向传播]
F --> P[预测]
P --> L[计算损失]
Y[目标] --> L
L --> B[反向传播]
B --> U[更新参数]
U --> F反向传播不是让误差数据“倒着流动”,而是倒序应用求导规则,计算各参数对最终误差的贡献。
优化器
最基本的随机梯度下降 SGD 沿负梯度方向更新参数。实际训练常使用带动量的 SGD 或 Adam。
| 优化器 | 特点 | 常见使用 |
|---|---|---|
| SGD | 简单、泛化表现常较好 | 图像模型、大规模稳定训练 |
| Momentum SGD | 累积历史方向,减少震荡 | 深层网络 |
| Adam | 为不同参数自适应调整步长 | Transformer、快速实验 |
| AdamW | 更合理地处理权重衰减 | 大模型和现代深度网络 |
优化器没有脱离任务的绝对优劣,需要和学习率计划、Batch 大小、模型结构一起评估。
学习率
学习率是训练中最重要的超参数之一。
- 太大:损失震荡、发散或出现无效数值。
- 太小:收敛慢,有限训练时间内效果不足。
- 固定不变:后期可能难以精细收敛。
常见做法包括预热、阶梯下降、余弦退火和根据验证指标降低学习率。
Batch、Epoch 和训练步数
- Batch Size:一次前后向计算使用的样本数。
- Step:完成一次参数更新。
- Epoch:大致遍历一次完整训练集。
更大 Batch 能提高硬件吞吐,但消耗更多显存,也可能需要调整学习率。分布式训练中还要区分单设备 Batch 和全局 Batch。
正则化
正则化用于降低过拟合:
- 权重衰减限制参数过度增大。
- Dropout 在训练时随机屏蔽部分连接。
- 数据增强生成保持标签不变的新样本。
- Early Stopping 在验证效果不再提升时停止。
- 减小模型容量或增加数据也能改善泛化。
训练异常怎么判断
| 现象 | 可能原因 | 优先检查 |
|---|---|---|
| 损失不下降 | 学习率不合适、数据或标签错误 | 小数据过拟合测试、梯度、输入范围 |
| 损失突然变成 NaN | 数值溢出、学习率过大 | 梯度裁剪、混合精度、异常样本 |
| 训练好、验证差 | 过拟合或数据分布不一致 | 数据切分、正则化、重复样本 |
| 训练非常慢 | 数据读取、算子或硬件未利用 | 数据管道、Profiler、Batch 大小 |
| 指标异常高 | 数据泄漏或测试污染 | 时间边界、重复实体、标签生成逻辑 |
最小训练验证
正式训练前可以先做三项检查:
- 用几十个样本尝试过拟合。如果连小数据都学不会,通常是代码、标签或模型有问题。
- 查看随机预测基线和简单模型基线,确认复杂模型确实带来提升。
- 固定随机种子和数据版本,保证实验可以复现。
训练的工程重点不是把 GPU 跑满,而是确保每次结果都知道用了什么数据、代码、配置和评估标准。
