Skip to content

模型训练与优化

模型训练的目标,是找到一组参数,使模型在训练数据上的损失较低,同时在未见数据上仍然有效。深度学习把这个过程拆成可重复执行的计算循环。

前向传播

前向传播从输入开始,经过每一层计算得到预测。一个最简单的神经元可以表示为:

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 大小
指标异常高数据泄漏或测试污染时间边界、重复实体、标签生成逻辑

最小训练验证

正式训练前可以先做三项检查:

  1. 用几十个样本尝试过拟合。如果连小数据都学不会,通常是代码、标签或模型有问题。
  2. 查看随机预测基线和简单模型基线,确认复杂模型确实带来提升。
  3. 固定随机种子和数据版本,保证实验可以复现。

训练的工程重点不是把 GPU 跑满,而是确保每次结果都知道用了什么数据、代码、配置和评估标准。

别急,先让缓存热一下。