深度学习中优化器的SGD with Layer-wise Adaptive Moments (LAMB) 算法原理与自适应学习率机制
题目描述
LAMB(Layer-wise Adaptive Moments)是一种结合了自适应学习率与权重衰减解耦的优化算法,专门针对大规模深度学习模型(如BERT)设计。它通过逐层自适应调整参数更新步长,有效解决了训练过程中因梯度分布不均导致的收敛问题。其核心思想是将Adam风格的梯度归一化与逐层学习率调整相结合,显著加速大规模模型的训练收敛。
解题过程循序渐进讲解
1. 问题背景与动机
传统优化器(如Adam、SGD)在大批量训练时容易陷入局部最优或收敛缓慢。例如,当使用大批量数据(如32K)训练Transformer模型时,Adam可能因梯度方差过大导致训练不稳定。LAMB通过以下机制解决该问题:
- 逐层自适应:针对网络不同层的梯度分布差异,独立计算学习率。
- 信任比(Trust Ratio):控制参数更新幅度,避免因梯度归一化导致的更新方向偏离。
2. LAMB的数学原理
LAMB基于Adam的动量和自适应学习率思想,引入逐层缩放机制。具体步骤如下:
步骤1:计算梯度的一阶矩和二阶矩
设目标函数为 \(J(\theta)\),参数为 \(\theta\),梯度为 \(g_t\)。首先计算动量和方差:
- 动量(一阶矩):
\(m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t\) - 方差(二阶矩):
\(v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2\)
其中,\(\beta_1, \beta_2 \in [0,1)\) 为衰减率超参数,\(t\) 为时间步。
步骤2:偏差修正
为缓解初始时刻的偏差,对一阶矩和二阶矩进行修正:
\(\hat{m}_t = \frac{m_t}{1 - \beta_1^t}\),
\(\hat{v}_t = \frac{v_t}{1 - \beta_2^t}\)
步骤3:计算归一化更新方向
将修正后的动量按二阶矩的平方根归一化:
\(\Delta_t = \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}\)
其中 \(\epsilon\) 为数值稳定性常数。
步骤4:引入信任比(Trust Ratio)
LAMB的核心创新是计算逐层信任比,其定义为:
\(r_t = \frac{\| \theta_{t-1} \|}{\| \Delta_t + \lambda \theta_{t-1} \|}\)
其中:
- \(\| \cdot \|\) 表示L2范数,计算参数或更新方向的模长。
- \(\lambda\) 为权重衰减系数。
- 分子 \(\| \theta_{t-1} \|\) 代表当前参数的尺度。
- 分母 \(\| \Delta_t + \lambda \theta_{t-1} \|\) 结合了梯度更新方向与权重衰减项。
步骤5:逐层参数更新
最终参数更新公式为:
\(\theta_t = \theta_{t-1} - \eta \cdot r_t \cdot (\Delta_t + \lambda \theta_{t-1})\)
其中:
- \(\eta\) 为全局学习率。
- \(r_t\) 作为缩放因子,调整每层的实际步长,确保更新幅度与参数尺度成比例。
3. 关键机制解析
- 自适应学习率:通过 \(\hat{v}_t\) 动态调整各参数的学习率,抑制梯度较大的方向。
- 权重衰减解耦:权重衰减项 \(\lambda \theta_{t-1}\) 直接加入更新方向,而非损失函数,避免与自适应学习率冲突。
- 信任比的作用:当更新方向 \(\Delta_t\) 与参数 \(\theta_{t-1}\) 方向一致时,\(r_t \approx 1\),保持正常更新;当方向不一致时,\(r_t\) 缩小步长,防止震荡。
4. 实现细节与优势
- 逐层计算:对网络每一层独立计算 \(r_t\),例如Transformer中可对查询、键、值权重分别处理。
- 大批量训练:实验表明LAMB可将BERT的批量大小提升至32K,且收敛速度提升76%。
- 超参数设置:通常 \(\beta_1 = 0.9, \beta_2 = 0.999, \epsilon = 10^{-6}\),权重衰减系数 \(\lambda\) 根据任务调整。
5. 总结
LAMB通过信任比机制将自适应学习率与参数尺度解耦,在保持Adam对梯度分布适应能力的同时,显著提升了大批量训练的稳定性和收敛速度。其思想可推广至任何需要分层优化的大规模模型。