从“调音师”到“领航员”:深度学习优化器演进全图谱
前言
在推荐系统或大模型训练中,我们常说“模型是躯干,数据是血液,而优化器则是灵魂”。优化器的作用在于调整模型参数(权重、偏置、Embedding),使损失函数最小化。
但训练过程并非一帆风顺,我们不仅要面对复杂的损失函数曲面,还要警惕那些看起来像终点、实则是陷阱的鞍点(Saddle Point) 。
1. 战场地形:鞍点危机
在多维空间中,梯度为 0 的点不一定是局部最优解。
- 定义:鞍点在一个维度上是最高点,在另一个维度上是最低点。
- 区分秘籍:看二阶导数(Hessian 矩阵)。若特征值有正有负,即为鞍点。
- 实战意义:高维空间中鞍点远比局部最小值多,优化器的核心任务之一就是带你逃离平坦区。
2. 三大基本阵法:数据量的权衡
根据每次更新参数所用的数据量,梯度下降分为三类:
| 算法 | 数据量 | 优点 | 缺点 |
|---|---|---|---|
| SGD | 1个样本 | 更新快,有概率跳出局部最优 | 震荡剧烈,噪声大 |
| BGD | 全量数据 | 路径平滑,收敛稳定 | 计算开销大,显存易爆炸 |
| MBGD | 一小批 (Batch) | 工业界标准,平衡了速度与精度 | 需额外调优 Batch Size |
3. 引入物理直觉:动量(Momentum)
传统的梯度下降在面对“峡谷”地形时会来回震荡。
-
核心思想:引入“惯性”。更新参数时不只看当前梯度,还考虑历史梯度的加权平均。
-
数学表达:
-
优势:在梯度一致的方向加速,在频繁波动的方向抑制震荡。
4. 走向自适应:Adagrad 与 RMSProp
在推荐算法中,数据往往是稀疏的(Sparse Features)。我们希望低频特征更新步子大点,高频特征步子细点。
Adagrad:历史的记忆
它通过累积历史梯度的平方和来独立调整每个参数的学习率:
- 痛点:由于 单调递增,后期学习率会趋近于 0,导致训练提前停止。
RMSProp:给记忆设“保质期”
为了解决 Adagrad 的乏力,RMSProp 引入指数衰减,只关注近期的梯度:
这使得模型在训练后期依然能保持有效的搜索能力。
5. 王者:Adam (Adaptive Moment Estimation)
Adam 是目前的“全能选手”,它结合了 Momentum 的一阶动量(管方向)和 RMSProp 的二阶矩估计(管步长)。
为什么要进行偏差修正?
由于动量 和二阶矩 初始值为 0,训练初期会产生偏向 0 的误差。Adam 通过以下公式进行修正:
这确保了模型从第一步开始就能稳健更新。
6. 学习率:一门平衡的艺术
学习率的选择就像是“小学”与“大学”的策略:
- 大学习率(初期) :收敛快,有能力跳出局部极小值,但容易在终点附近“反复横跳”甚至发散。
- 小学习率(后期) :适合精细化微调,确保稳定收敛,但在初期容易困在平坦区域。
结语
从最原始的 SGD 到集大成的 Adam,优化器的演进本质上是如何更聪明地利用历史信息。对于正在学习分布式系统和 GPU 编程的你来说,理解这些算法在显存和计算上的开销(如 Adam 需要维护两倍的额外状态),对优化大规模模型训练至关重要。