banner
Fight4354

Fight4354

AI,Chem,Science,Study,Share,Hobby,LLM,Life,Sport

梯度优化器

下面写一篇结构清晰、逻辑严谨,涵盖:

  • 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):

θ=θηθL(所有训练数据)\theta = \theta - \eta \cdot \nabla_\theta L(\text{所有训练数据})

缺点非常明显:

  • 每次更新都要遍历整个数据集(太慢)

  • 对大数据集不可行

于是我们引入 随机梯度下降 SGD

SGD 的思想:

每次只用一个样本的梯度来更新参数,而不是所有数据。

更新方式:

θ=θηθL(xi)\theta = \theta - \eta \cdot \nabla_\theta L(x_i)

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 梯度:

g=1Bi=1BθL(xi)g = \frac{1}{B} \sum_{i=1}^{B} \nabla_\theta L(x_i)

参数更新:

θ=θηg\theta = \theta - \eta g

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 为每个参数维护两个值:

  1. 一阶矩(动量):梯度的指数平均
mt=β1mt1+(1β1)gtm_t = \beta_1 m_{t-1} + (1-\beta_1) g_t

关键点:

  • gtg_t当前 batch 的梯度

  • mt1m_{t-1}之前所有 batch 梯度的 “压缩记忆”
    为什么 β\beta的值大约是 0.9,比较大?

为什么 β₁ 要设得这么大(比如 0.9)?

1️⃣ 因为 mini-batch 梯度本身 “噪声很大”

你现在已经知道:

  • 每个 gtg_t 只是一个 mini-batch 的梯度

  • 不同 batch 之间,梯度方向会抖动

如果我们过分相信当前 batch

  • 参数会 “左一下、右一下”

  • 收敛慢甚至不稳定

所以我们要:

“少听当前 batch,多听历史趋势”

这就是 β₁ 设得大的根本原因。


2️⃣ β₁ = 0.9 实际意味着什么?

mt=0.9mt1+0.1gtm_t = 0.9 m_{t-1} + 0.1 g_t

解释:

  • 当前 batch 的梯度只占 10%

  • 历史趋势占 90%

但注意:
这 90% 不是 “上一个 batch”,而是所有历史 batch 的综合结果


3️⃣ “记忆长度” 是多少?

指数平均有一个直观的 “有效记忆长度”:

memory length11β1\text{memory length} \approx \frac{1}{1-\beta_1}

所以:

  • β₁ = 0.9 → 记住大约 10 个 batch

  • β₁ = 0.99 → 记住大约 100 个 batch

  • β₁ = 0.5 → 记住大约 2 个 batch

这也解释了:

β₁ 越大,记忆越长,更新越平滑;
β₁ 越小,反应越快,但更噪。

  1. 二阶矩:梯度平方的指数平均
vt=β2vt1+(1β2)gt2v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2

之后进行偏置校正:

m^t=mt1β1t,v^t=vt1β2t\hat{m}_t = \frac{m_t}{1-\beta_1^t}, \qquad \hat{v}_t = \frac{v_t}{1-\beta_2^t}

最终更新:

θ=θηm^tv^t+ε\theta = \theta - \eta \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \varepsilon}

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 直接作用在参数上:

θ=θη(m^tv^t+ε+λθ)\theta = \theta - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \varepsilon} + \lambda\theta \right)

这样:

  • 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 的默认优化器

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。