从“调音师”到“领航员”:深度学习优化器演进全图谱

32 阅读3分钟

从“调音师”到“领航员”:深度学习优化器演进全图谱

前言

在推荐系统或大模型训练中,我们常说“模型是躯干,数据是血液,而优化器则是灵魂”。优化器的作用在于调整模型参数(权重、偏置、Embedding),使损失函数最小化。

但训练过程并非一帆风顺,我们不仅要面对复杂的损失函数曲面,还要警惕那些看起来像终点、实则是陷阱的鞍点(Saddle Point)


1. 战场地形:鞍点危机

在多维空间中,梯度为 0 的点不一定是局部最优解。

  • 定义:鞍点在一个维度上是最高点,在另一个维度上是最低点。
  • 区分秘籍:看二阶导数(Hessian 矩阵)。若特征值有正有负,即为鞍点。
  • 实战意义:高维空间中鞍点远比局部最小值多,优化器的核心任务之一就是带你逃离平坦区。

2. 三大基本阵法:数据量的权衡

根据每次更新参数所用的数据量,梯度下降分为三类:

算法数据量优点缺点
SGD1个样本更新快,有概率跳出局部最优震荡剧烈,噪声大
BGD全量数据路径平滑,收敛稳定计算开销大,显存易爆炸
MBGD一小批 (Batch)工业界标准,平衡了速度与精度需额外调优 Batch Size

3. 引入物理直觉:动量(Momentum)

传统的梯度下降在面对“峡谷”地形时会来回震荡。

  • 核心思想:引入“惯性”。更新参数时不只看当前梯度,还考虑历史梯度的加权平均。

  • 数学表达:

    vt=γvt1+ηJ(θt)v_t = \gamma v_{t-1} + \eta \nabla J(\theta_t)

    θt+1=θtvt\theta_{t+1} = \theta_t - v_t

  • 优势:在梯度一致的方向加速,在频繁波动的方向抑制震荡。


4. 走向自适应:Adagrad 与 RMSProp

在推荐算法中,数据往往是稀疏的(Sparse Features)。我们希望低频特征更新步子大点,高频特征步子细点。

Adagrad:历史的记忆

它通过累积历史梯度的平方和来独立调整每个参数的学习率:

θt+1=θtηGt+ϵgt\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \cdot g_t

  • 痛点:由于 GtG_t 单调递增,后期学习率会趋近于 0,导致训练提前停止。

RMSProp:给记忆设“保质期”

为了解决 Adagrad 的乏力,RMSProp 引入指数衰减,只关注近期的梯度:

E[g2]t=γE[g2]t1+(1γ)gt2E[g^2]_t = \gamma E[g^2]_{t-1} + (1 - \gamma)g_t^2

这使得模型在训练后期依然能保持有效的搜索能力。


5. 王者:Adam (Adaptive Moment Estimation)

Adam 是目前的“全能选手”,它结合了 Momentum 的一阶动量(管方向)和 RMSProp 的二阶矩估计(管步长)。

为什么要进行偏差修正?

由于动量 mtm_t 和二阶矩 vtv_t 初始值为 0,训练初期会产生偏向 0 的误差。Adam 通过以下公式进行修正:

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

这确保了模型从第一步开始就能稳健更新。


6. 学习率:一门平衡的艺术

学习率的选择就像是“小学”与“大学”的策略:

  • 大学习率(初期) :收敛快,有能力跳出局部极小值,但容易在终点附近“反复横跳”甚至发散。
  • 小学习率(后期) :适合精细化微调,确保稳定收敛,但在初期容易困在平坦区域。

结语

从最原始的 SGD 到集大成的 Adam,优化器的演进本质上是如何更聪明地利用历史信息。对于正在学习分布式系统和 GPU 编程的你来说,理解这些算法在显存和计算上的开销(如 Adam 需要维护两倍的额外状态),对优化大规模模型训练至关重要。