2.3 优化算法与传统机器学习
核心问题: 为什么优化器不是训练的全部?传统机器学习补上了什么?
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
第一部分:优化算法的演进与应用
从梯度下降到 Adam
梯度下降(2.1)
↓ (问题:收敛慢、对学习率敏感)
动量(Momentum)
↓ (改进:加速收敛)
RMSprop
↓ (改进:自适应学习率)
Adam(2.2)
↓ (结合动量和自适应学习率)
最优的通用优化器每个改进解决的问题
| 优化器 | 主要问题 | 解决方案 |
|---|---|---|
| SGD | 收敛慢、震荡 | 基础梯度下降 |
| Momentum | 收敛仍然慢 | 累积历史梯度方向 |
| RMSprop | 学习率固定 | 自适应学习率 |
| Adam | 结合两者优点 | 动量 + 自适应学习率 |
为什么先讲优化器
这里先讲优化器,是为了把后面所有模型放回同一个训练视角:训练本质上是一个带约束的数值优化过程。 线性回归、逻辑回归、SVM 和树模型外观不同,但都离不开目标函数、更新规则和数值实现。 先理解优化器,再看传统 ML,读者更容易区分“模型是什么”和“它怎么被训练出来”。
第二部分:优化算法在LLM中的应用
LLM 的优化挑战
1. 参数量巨大
- GPT-3:175B参数
- 需要高效的优化算法
2. 数据量巨大
- 数万亿tokens
- 需要快速收敛
3. 计算资源有限
- 训练成本数百万美元
- 每一步都要高效
Adam在LLM中的应用
为什么选择Adam
- 收敛效率:相比基础 SGD,通常更容易获得可用收敛
- 工程鲁棒性:默认参数可作为起点,但仍需调学习率、权重衰减和调度
- 内存高效:虽然需要存储一阶和二阶矩,但仍可接受
实际配置
在LLM训练中,Adam优化器的典型配置:
- 学习率:1e-4 到 1e-3
- β1(一阶矩衰减率):0.9
- β2(二阶矩衰减率):0.999
- 权重衰减(L2正则化):0.01
学习率调度的重要性
LLM训练的典型学习率曲线
学习率
| /\
| / \___
| / \___
| / \___
|_/________________\___
|__________________ 步数预热(Warmup)
前几步逐步增加学习率,避免不稳定。
策略:
- 前1000步:线性增加学习率
- 之后:余弦衰减
为什么重要
- 前期:梯度不稳定,需要小学习率
- 中期:梯度稳定,可以用大学习率
- 后期:接近最优,需要小学习率
梯度累积
问题
LLM的批大小受内存限制,但需要大批大小来稳定训练。
解决方案
梯度累积:多个小批次的梯度相加,然后更新参数。
效果
- 在其他训练细节不变时,近似模拟更大的有效 batch
- 内存占用不增加
混合精度训练
问题
用float32训练LLM很慢,内存占用大。
解决方案
用float16计算,用float32存储梯度和参数。
优点
- 速度快2-3倍
- 内存占用减半
- 精度基本不变
实现
数据并行
多个GPU各处理一个批次,梯度平均后更新。
模型并行
大模型分割到多个GPU,需要特殊的优化算法。
优化器的选择
- 数据并行:Adam仍然有效
- 模型并行:需要考虑通信开销
第三部分:为什么需要学习传统机器学习
优化算法的局限性
优化算法只是工具,不是目标。
- 梯度下降、Adam等优化算法告诉我们如何学习
- 但不告诉我们学什么
- 不同的问题需要不同的模型结构和损失函数
为什么还要看传统机器学习
1. 理解ML的本质
传统 ML 算法展示了机器学习的核心思想:
- 线性回归:最简单的监督学习
- 逻辑回归:从回归到分类
- SVM:最大间隔原理
- 决策树:树模型和集成学习
2. 传统ML与深度学习的关系
线性回归(2.5)
↓ (添加隐层和非线性激活)
神经网络回归
逻辑回归(2.5)
↓ (多层堆叠)
神经网络分类
SVM核方法(2.6)
↓ (自动学习特征)
深度学习特征学习
集成学习(2.7)
↓ (多个"专家"的融合)
多头机制的启发式类比3. 传统ML的三个层次
第一层:线性模型(2.5)
- 线性回归:连续值预测
- 逻辑回归:二分类
- 重点:损失函数与参数估计
第二层:非线性模型(2.6)
- SVM:最大间隔分类
- 核方法:处理非线性问题
- 重点:间隔、核映射与泛化边界
第三层:集成模型(2.7)
- 决策树:树模型
- 随机森林:多个树的融合
- 重点:贪心分裂、方差降低与集成收益
本章学习路径
优化算法基础(2.1-2.3)
↓ (理解优化的本质)
↓ (理解为什么需要传统ML)
传统机器学习(2.5-2.7)
├─ 线性模型(2.5)— 基础
├─ 非线性模型(2.6)— 进阶
└─ 集成模型(2.7)— 高级
↓ (理解ML本质是优化问题)
深度学习(第3章)
↓ (自动特征学习)
LLM(第5-8章)代码实验
完整的代码示例位于:code/ch02_optimization/mmse_vs_nn.py
运行方式:
python code/ch02_optimization/mmse_vs_nn.py代码包含:
- 最小均方误差(MMSE)算法的实现
- 简单神经网络的实现
- 性能对比分析
- 优化算法在实践中的应用演示
与深度学习的联系
优化算法 → 深度学习训练
梯度下降(基础)
↓ (应用到神经网络)
反向传播(高效计算梯度)
↓ (改进优化器)
Adam优化器(快速收敛)
↓ (应用到大规模模型)
深度学习训练(CNN、RNN、Transformer)
↓ (扩展到超大规模模型)
LLM训练(数十亿参数)传统ML → 深度学习的演进
1. 线性回归 → 神经网络回归
线性回归的局限性:
- 只能学习线性关系
- 对复杂的非线性问题无能为力
神经网络的改进:
- 添加隐层和非线性激活函数
- 可以学习比线性模型更复杂的非线性关系
- 通过反向传播高效优化
具体例子:
线性回归:y = w₁x₁ + w₂x₂ + b
↓ (添加隐层)
神经网络:y = σ(W₂σ(W₁x + b₁) + b₂)
↓ (多层堆叠)
深度神经网络:y = σ(Wₙ...σ(W₂σ(W₁x + b₁) + b₂)... + bₙ)2. 逻辑回归 → 神经网络分类
逻辑回归的局限性:
- 只能学习线性决策边界
- 对非线性分类问题效果差
神经网络的改进:
- 多层堆叠可以学习复杂的非线性决策边界
- 通过反向传播自动学习特征
具体例子:
逻辑回归:P(y=1|x) = σ(w^T x + b)
↓ (多层堆叠)
神经网络分类:P(y=1|x) = softmax(W_n...σ(W_1 x + b_1)... + b_n)
↓ (深度堆叠)
深度分类网络:可以学习复杂的非线性决策边界3. SVM核方法 → 深度学习特征学习
SVM核方法的思想:
- 通过核函数隐式地将数据映射到高维空间
- 在高维空间中进行线性分类
深度学习的改进:
- 显式地学习特征映射(通过多层网络)
- 特征学习和分类同时进行(端到端优化)
- 可以处理更复杂的问题
具体对比:
SVM核方法:
原始空间 → [隐式核映射] → 高维空间 → 线性分类
深度学习:
原始空间 → [显式特征学习] → 特征空间 → 分类
优势:特征学习和分类同时优化,更灵活4. 集成学习 → 多头机制的启发式类比
集成学习的思想:
- 多个弱学习器(决策树)的组合
- 通过投票或平均提高性能
Transformer多头注意力的类似之处:
- 多个"注意力头"的融合
- 每个头学习不同的特征关系
- 通过融合提高表达能力
这个对比只用于帮助理解"多路表示再融合"的思想,不表示随机森林和多头注意力在训练目标、参数共享或推理机制上等价。
本节小结
优化器决定“怎么学”,传统 ML 决定“学什么样的结构”,而大模型训练把这两者都放到了同一个工程系统里。 理解这条链路,后面进入深度学习和 LLM 时就不会把“模型效果”误解成单一算法的功劳。
具体对比:
随机森林:
多个决策树 → [投票/平均] → 最终预测
Transformer多头注意力:
多个注意力头 → [融合] → 最终表示
优势:注意力头可以学习不同的依赖关系为什么深度学习比传统ML更强大
自动特征学习
- 传统ML:需要手工设计特征
- 深度学习:自动学习特征
端到端优化
- 传统ML:特征提取和分类分离
- 深度学习:整个流程联合优化
可扩展性
- 传统ML:性能随数据增加而饱和
- 深度学习:性能随数据和模型大小持续提升
表达能力
- 传统ML:受限于手工设计的特征
- 深度学习:可以通过多层非线性表示近似复杂函数
优化算法在深度学习中的关键作用
梯度下降
- 基础优化方法
- 深度学习训练主要依赖梯度下降类方法
反向传播
- 高效计算梯度
- 使大规模模型训练成为可能
自适应优化器(Adam)
- 快速收敛
- 相比基础 SGD 通常更容易调到可用收敛
- AdamW 是 LLM 训练中的常见强基线
学习率调度
- 预热和衰减
- 确保训练稳定性和收敛速度
在LLM中的应用
优化算法在LLM训练中的核心地位
LLM的成功离不开优化算法、模型结构、数据规模和算力系统的共同进步,其中优化算法是关键支撑:
从SGD到AdamW的演进
SGD(基础) ↓ (添加动量) Momentum(加速) ↓ (添加自适应学习率) Adam(高效) ↓ (改进权重衰减) AdamW(LLM标准)为什么AdamW是LLM训练的标准
- 收敛效率:在大模型训练中通常比基础 SGD 更容易获得稳定收敛
- 工程鲁棒性:配合学习率调度、权重衰减和梯度裁剪后表现稳定
- 内存高效:虽然需要存储一阶和二阶矩,但仍可接受
- 稳定性好:权重衰减与学习率解耦
传统ML思想在LLM中的应用
虽然LLM使用深度学习,但传统ML的思想仍然存在:
线性回归 → LLM的输出层
- LLM的最后一层是线性变换
- 将隐层表示映射到词汇表
- 可以看作线性分类头,而不是完整 LLM 训练的全部
分类问题 → Token预测
- LLM的核心任务是Token分类
- 给定上文,预测下一个Token
- 使用交叉熵损失(来自逻辑回归)
集成学习 → 多LLM融合
- 多个LLM的输出融合
- 类似于随机森林的投票机制
- 提高预测的鲁棒性
特征工程 → 位置编码
- 传统ML中的特征工程
- LLM中的位置编码
- 都是为了提供额外的信息
LLM训练中的优化挑战
超大规模优化
- 参数数量:数十亿到数万亿
- 数据量:数万亿tokens
- 需要高效的优化算法和硬件
分布式训练的优化
- 数据并行:多GPU各处理一个batch
- 模型并行:大模型分割到多个GPU
- 需要特殊的优化策略
学习率调度的重要性
- 预热:避免训练初期的不稳定
- 衰减:逐步降低学习率以精细调整
- 对LLM训练的最终质量至关重要
优化算法的未来发展
虽然AdamW是当前标准,但研究仍在继续:
- Lion优化器:更高效的内存使用
- Sophia优化器:利用Hessian信息
- 分层学习率:不同层使用不同的学习率
本节小结
优化算法的重要性
优化算法对LLM训练至关重要:
- Adam:快速、鲁棒的优化器
- 学习率调度:预热和衰减
- 梯度累积:在内存限制下实现大批大小
- 混合精度:加速训练
为什么需要传统ML
传统ML不是过时的技术,而是理解深度学习的基础:
- 展示了ML的核心思想
- 说明了从简单到复杂的演进
- 帮助理解深度学习的本质
下一节: 2.4 数值方法基础
