下面写一篇结构清晰、逻辑严谨,涵盖:
-
SGD(随机梯度下降)
-
Mini-batch SGD(小批量随机梯度下降)
-
Adam 优化器
-
AdamW 优化器
-
三者之间的联系与区别
-
计算直觉 + 数学公式 + 实践经验
深度学习优化器全面理解:SGD、Mini-batch SGD、Adam、AdamW
在深度学习训练中,优化器(Optimizer)是控制模型参数如何更新的核心组件。
不同优化器会极大影响模型的学习速度、稳定性以及最终效果。
本文将深入理解:
-
SGD 是什么?
-
Mini-batch 为什么是深度学习的标准?
-
Adam 是如何结合 Momentum + RMSProp 的?
-
AdamW 为什么是目前最主流的大模型优化器?
SGD 和 mini-batch 在一个 batch 中的梯度,取这个 batch 的平均值
1. SGD:随机梯度下降(Stochastic Gradient Descent)#
1.1 基本思想#
标准梯度下降(Full-batch Gradient Descent):
缺点非常明显:
-
每次更新都要遍历整个数据集(太慢)
-
对大数据集不可行
于是我们引入 随机梯度下降 SGD。
SGD 的思想:
每次只用一个样本的梯度来更新参数,而不是所有数据。
更新方式:
1.2 SGD 的优点#
-
更新速度极快(不用遍历全量数据)
-
噪声大,可能帮助模型跳出局部最优
1.3 SGD 的缺点#
-
噪声太大,梯度抖动严重
-
每次只看一个样本,优化轨迹很不稳定
-
不适合深度网络和大型模型
因此,现在更常用的是 ——Mini-batch SGD。
2. Mini-batch SGD:现代深度学习的默认方式#
实际训练不会用 batch=1(SGD),也不会用 full batch,而是:
每次使用一小批样本 (batch_size = 32/64/128...) 来估计梯度。
Mini-batch 梯度:
参数更新:
2.1 为什么 Mini-batch 最优?#
Mini-batch 是一个完美的折中:
| 方法 | 噪声 | 速度 | 稳定性 | 实际使用 |
|---|---|---|---|---|
| SGD(batch=1) | 噪声太大 | 快 | 差 | 少用 |
| Full-batch GD | 无噪声 | 慢 | 好 | 不可行 |
| Mini-batch SGD | 适度噪声 | 快 | 稳定 | 最常用 |
Mini-batch 的优势:
-
充分利用 GPU 并行能力
-
具有合理的梯度噪声,有助于泛化
-
训练稳定,更新速度快
因此在深度学习中,提到 “SGD” 通常其实指:
Mini-batch SGD,而不是 batch=1 的原始 SGD。
3. Adam:自适应矩估计优化器(Adaptive Moment Estimation)#
Adam 可以看成以下两者的结合:
-
Momentum(动量) —— 平滑梯度方向
-
RMSProp —— 自适应维度学习率
3.1 Adam 的核心思想#
Adam 为每个参数维护两个值:
- 一阶矩(动量):梯度的指数平均
关键点:
-
:当前 batch 的梯度
-
:之前所有 batch 梯度的 “压缩记忆”
为什么 的值大约是 0.9,比较大?
为什么 β₁ 要设得这么大(比如 0.9)?
1️⃣ 因为 mini-batch 梯度本身 “噪声很大”
你现在已经知道:
-
每个 只是一个 mini-batch 的梯度
-
不同 batch 之间,梯度方向会抖动
如果我们过分相信当前 batch:
-
参数会 “左一下、右一下”
-
收敛慢甚至不稳定
所以我们要:
“少听当前 batch,多听历史趋势”
这就是 β₁ 设得大的根本原因。
2️⃣ β₁ = 0.9 实际意味着什么?
解释:
-
当前 batch 的梯度只占 10%
-
历史趋势占 90%
但注意:
这 90% 不是 “上一个 batch”,而是所有历史 batch 的综合结果。
3️⃣ “记忆长度” 是多少?
指数平均有一个直观的 “有效记忆长度”:
所以:
-
β₁ = 0.9 → 记住大约 10 个 batch
-
β₁ = 0.99 → 记住大约 100 个 batch
-
β₁ = 0.5 → 记住大约 2 个 batch
这也解释了:
β₁ 越大,记忆越长,更新越平滑;
β₁ 越小,反应越快,但更噪。
- 二阶矩:梯度平方的指数平均
之后进行偏置校正:
最终更新:
3.2 Adam 的直觉理解#
-
$\hat {m}_t$:平滑梯度,让优化方向更稳定
-
$\hat {v}_t$:衡量梯度幅度,大梯度 → 步长小,小梯度 → 步长大
-
每维参数具有独立学习率:自适应学习率
3.3 Adam 的优势#
-
收敛速度快(尤其训练初期)
-
对学习率不敏感
-
对梯度尺度自适应,非常适合深度网络
-
是 NLP、Transformer 等大模型训练的主力
3.4 Adam 的缺点#
-
有时泛化性能不如 SGD + Momentum
-
原版 Adam 的 L2 正则不严格等价于 weight decay
这个缺点引出了 AdamW。
4. AdamW:Transformer 等大模型的标准优化器#
AdamW = Adam + 正确的权重衰减(Weight Decay)
原版 Adam 的 L2 正则和自适应学习率耦合在一起,导致效果不好。
AdamW 将 weight decay 直接作用在参数上:
这样:
-
weight decay 只影响参数大小,不影响梯度估计
-
更符合理论,也更稳定
AdamW 是以下模型的默认优化器:#
-
BERT
-
GPT-2 / GPT-3 / GPT-4
-
PaLM / LLaMA
-
Megatron-LM
-
Stable Diffusion
几乎所有现代大模型都是用 AdamW 训练的。
5. SGD vs Mini-batch SGD vs Adam vs AdamW 总结对比#
| 优化器 | 是否自适应 | 是否平滑方向 | 是否有 weight decay 正确实现 | 收敛速度 | 泛化能力 | 应用场景 |
|---|---|---|---|---|---|---|
| SGD | 否 | 否 | 否 | 慢 | 强(图像任务) | CNN、小模型 |
| SGD+Momentum | 否 | 是 | 否 | 中等 | 很强 | 大部分传统任务 |
| Mini-batch SGD | 否 | 否 | 否 | 中等 | 强 | 全部深度学习 |
| Adam | 是 | 是 | 否 | 快 | 一般 | NLP、大模型 |
| AdamW | 是 | 是 | 是 | 快且稳 | 强 | Transformer、大模型标准 |
6. 最终总结(一句话记忆版)#
-
SGD:用一个样本更新参数,但噪声太大
-
Mini-batch SGD:用一批样本的平均梯度更新,是训练标准
-
Adam:动量 + 自适应学习率,训练快、稳定
-
AdamW:修复 Adam 的 weight decay 问题,是 Transformer/GPT 的默认优化器