2.3 优化器与模型的分工
核心问题: 优化器、模型结构和训练系统分别解决什么问题?
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
不要把优化器等同于模型
训练一个模型至少包含三个部分:
| 部分 | 决定什么 | 示例 |
|---|---|---|
| 模型 | 输入如何映射为输出 | 线性回归、决策树、神经网络 |
| 目标函数 | 什么结果算好 | 均方误差、交叉熵、间隔损失 |
| 优化方法 | 如何调整参数以降低目标函数 | SGD、AdamW、坐标下降 |
例如,逻辑回归定义了一个线性分类模型和交叉熵目标;梯度下降只是求参数的一种方法。更换优化器不会把逻辑回归变成神经网络。
决策树则通常使用贪心分裂,不依赖反向传播。这说明“机器学习训练”并不只有梯度下降一种形式。
从 SGD 到 AdamW
SGD 用当前小批量梯度更新参数:
Momentum 累积历史方向以减小震荡;RMSprop 根据近期平方梯度调整每个参数的步长;Adam 同时维护一阶矩和二阶矩估计。AdamW 将权重衰减与梯度更新解耦,是 Transformer 训练中的常见选择。
这些方法各有适用条件,不存在对所有任务都最优的优化器。学习率、批大小、调度策略和数值精度通常也会影响收敛。
大模型训练增加了哪些工程问题
模型规模扩大后,优化公式没有因此改变,但一次参数更新需要解决更多系统约束:
- 显存:参数、梯度和优化器状态都占用内存。
- 数值范围:低精度计算可能上溢或下溢,需要损失缩放等处理。
- 有效批大小:单卡批量受限时,可用梯度累积或数据并行扩大批量。
- 通信:数据并行需要同步梯度,模型或张量并行需要交换中间结果。
- 调度:训练初期常使用 warmup,随后衰减学习率;具体配置应通过验证曲线确定。
梯度累积近似扩大有效批大小,但如果归一化、随机性或调度按微批次变化,它不一定与一次大批量更新完全等价。混合精度可以减少显存和计算量,实际收益取决于硬件与算子支持。
为什么本章仍然学习传统机器学习
传统模型用较小的例子把关键选择分开呈现:
- 线性回归和逻辑回归展示预测函数、损失与参数估计的关系。
- SVM 展示间隔、正则化和核函数。
- 决策树展示递归分裂;随机森林展示如何通过样本与特征随机化降低方差。
这些模型不是通向 Transformer 的必经“演进阶段”。它们适合的数据规模、输入形式和可解释需求不同,也经常作为深度模型之外的基线。
进入后续章节时,可以继续使用同一组问题检查神经网络:输入如何表示、目标函数是什么、参数怎样更新、验证指标是否改善。
代码实验
实验比较线性 MMSE 估计与一个简单神经网络在同一任务上的表现。重点不是证明某类模型必然更好,而是观察模型假设与优化过程如何共同影响结果。
代码文件: code/ch02_optimization/mmse_vs_nn.py运行方式: python code/ch02_optimization/mmse_vs_nn.py
运行时至少记录:
- 两个模型使用的输入、目标和指标是否一致;
- 训练集与测试集误差;
- 改变噪声或样本量后,结论是否保持。
本节小结
- 模型定义可表达的函数,目标函数定义训练方向,优化器负责寻找参数。
- 大模型训练的难点还包括显存、数值精度、并行通信和学习率调度。
- 传统机器学习提供清晰基线,不需要硬类比为 Transformer 的组成部分。
下一节: 2.4 数值方法基础
