1. 梯度下降与优化器

优化器根据损失函数计算出的梯度更新模型参数。

基础更新公式:

w_new = w - lr * gradient

其中:

  • w:当前参数
  • lr:学习率
  • gradient:损失函数关于参数的梯度

批量梯度下降

每次使用全部训练数据计算平均损失,然后更新一次参数。

优点:

  • 梯度比较稳定

缺点:

  • 数据量大时计算成本高
  • 每轮只能更新一次

随机梯度下降

每次随机选择一条样本计算损失并更新参数。

优点:

  • 更新频繁
  • 单次计算快

缺点:

  • 梯度波动很大
  • 训练过程不稳定

小批量随机梯度下降

实际深度学习最常用的方式。

每次随机取一个 batch:

一个 batch
→ 前向传播
→ 计算平均损失
→ 反向传播
→ 更新一次参数

一个 epoch 内参数会更新多次:

每个 epoch 的更新次数
≈ 训练样本数 / batch_size

例如训练集有1000条数据,batch size为100,则一个epoch大约更新10次参数。


2. SGD与Momentum

深度学习中通常所说的 SGD,实际一般指小批量 SGD。

优点:

  • 原理简单
  • 显存需求相对较低
  • 有时泛化效果较好
  • 梯度噪声可能帮助模型离开鞍点或较差区域

缺点:

  • 容易震荡
  • 对学习率敏感
  • 收敛速度可能较慢
  • 通常需要配合动量和学习率调度

Momentum

Momentum就是动量,会参考过去一段时间的梯度方向:

v = β*v + gradient
w_new = w - lr*v

其中:

  • v:历史更新方向
  • β:动量系数,常见值如0.9

作用:

  • 减少来回震荡
  • 在方向一致时加速前进
  • 让参数更新更加稳定

3. Adam与AdamW

Adam

Adam结合了:

  • Momentum:梯度的一阶滑动平均
  • 自适应学习率:梯度平方的二阶滑动平均

可以简单理解为:

m = 梯度的滑动平均
v = 梯度平方的滑动平均

参数更新量
≈ lr * m / sqrt(v)

其中:

  • m表示梯度长期的大致方向
  • v表示梯度的波动和尺度
  • 不同参数会获得不同的实际更新步长

特点:

  • 通常收敛较快
  • 对初始学习率相对不那么敏感
  • 适合大多数深度学习任务作为起点

但Adam并不意味着不需要调学习率。

AdamW

AdamW将权重衰减与梯度更新分离:

先按照Adam计算梯度更新
再单独对权重进行衰减

相较于直接把L2项加入Adam的损失函数,AdamW的权重衰减行为更加明确。

大语言模型和Transformer训练中通常更常见 AdamW。

学习率的重要性

无论使用哪种优化器,学习率都是最重要的超参数之一:

  • 学习率过大:Loss震荡甚至发散
  • 学习率过小:训练速度慢,可能长时间不收敛
  • 学习率合适:模型能够稳定下降并收敛

常见学习率策略:

  • 固定学习率
  • Step Decay
  • Cosine Annealing
  • Warmup
  • ReduceLROnPlateau
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐