⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

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

  1. 收敛效率:相比基础 SGD,通常更容易获得可用收敛
  2. 工程鲁棒性:默认参数可作为起点,但仍需调学习率、权重衰减和调度
  3. 内存高效:虽然需要存储一阶和二阶矩,但仍可接受

实际配置

在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

运行方式:

bash
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更强大

  1. 自动特征学习

    • 传统ML:需要手工设计特征
    • 深度学习:自动学习特征
  2. 端到端优化

    • 传统ML:特征提取和分类分离
    • 深度学习:整个流程联合优化
  3. 可扩展性

    • 传统ML:性能随数据增加而饱和
    • 深度学习:性能随数据和模型大小持续提升
  4. 表达能力

    • 传统ML:受限于手工设计的特征
    • 深度学习:可以通过多层非线性表示近似复杂函数

优化算法在深度学习中的关键作用

  1. 梯度下降

    • 基础优化方法
    • 深度学习训练主要依赖梯度下降类方法
  2. 反向传播

    • 高效计算梯度
    • 使大规模模型训练成为可能
  3. 自适应优化器(Adam)

    • 快速收敛
    • 相比基础 SGD 通常更容易调到可用收敛
    • AdamW 是 LLM 训练中的常见强基线
  4. 学习率调度

    • 预热和衰减
    • 确保训练稳定性和收敛速度

在LLM中的应用

优化算法在LLM训练中的核心地位

LLM的成功离不开优化算法、模型结构、数据规模和算力系统的共同进步,其中优化算法是关键支撑:

  1. 从SGD到AdamW的演进

    SGD(基础)
      ↓ (添加动量)
    Momentum(加速)
      ↓ (添加自适应学习率)
    Adam(高效)
      ↓ (改进权重衰减)
    AdamW(LLM标准)
  2. 为什么AdamW是LLM训练的标准

    • 收敛效率:在大模型训练中通常比基础 SGD 更容易获得稳定收敛
    • 工程鲁棒性:配合学习率调度、权重衰减和梯度裁剪后表现稳定
    • 内存高效:虽然需要存储一阶和二阶矩,但仍可接受
    • 稳定性好:权重衰减与学习率解耦

传统ML思想在LLM中的应用

虽然LLM使用深度学习,但传统ML的思想仍然存在:

  1. 线性回归 → LLM的输出层

    • LLM的最后一层是线性变换
    • 将隐层表示映射到词汇表
    • 可以看作线性分类头,而不是完整 LLM 训练的全部
  2. 分类问题 → Token预测

    • LLM的核心任务是Token分类
    • 给定上文,预测下一个Token
    • 使用交叉熵损失(来自逻辑回归)
  3. 集成学习 → 多LLM融合

    • 多个LLM的输出融合
    • 类似于随机森林的投票机制
    • 提高预测的鲁棒性
  4. 特征工程 → 位置编码

    • 传统ML中的特征工程
    • LLM中的位置编码
    • 都是为了提供额外的信息

LLM训练中的优化挑战

  1. 超大规模优化

    • 参数数量:数十亿到数万亿
    • 数据量:数万亿tokens
    • 需要高效的优化算法和硬件
  2. 分布式训练的优化

    • 数据并行:多GPU各处理一个batch
    • 模型并行:大模型分割到多个GPU
    • 需要特殊的优化策略
  3. 学习率调度的重要性

    • 预热:避免训练初期的不稳定
    • 衰减:逐步降低学习率以精细调整
    • 对LLM训练的最终质量至关重要

优化算法的未来发展

虽然AdamW是当前标准,但研究仍在继续:

  • Lion优化器:更高效的内存使用
  • Sophia优化器:利用Hessian信息
  • 分层学习率:不同层使用不同的学习率

本节小结

优化算法的重要性

优化算法对LLM训练至关重要:

  • Adam:快速、鲁棒的优化器
  • 学习率调度:预热和衰减
  • 梯度累积:在内存限制下实现大批大小
  • 混合精度:加速训练

为什么需要传统ML

传统ML不是过时的技术,而是理解深度学习的基础:

  • 展示了ML的核心思想
  • 说明了从简单到复杂的演进
  • 帮助理解深度学习的本质

下一节: 2.4 数值方法基础

本教程采用 CC BY-NC-SA 4.0 许可协议