深度学习中优化器的SGD with Layer-wise Adaptive Moments (LAMB) 算法原理与实现细节
题目描述
LAMB(Layer-wise Adaptive Moments)是一种结合了自适应学习率与层间学习率调整的优化算法,旨在提升大规模深度学习模型(如BERT)的训练效率与稳定性。LAMB的核心思想是对每一层的参数更新进行归一化,使不同层的更新幅度保持一致,从而允许使用更大的全局学习率而不导致训练发散。该算法特别适用于训练大模型或批量大小极大的场景。
解题过程
-
问题背景
- 传统优化器(如Adam)在训练大模型时,若批量大小(batch size)极大,容易因层间梯度尺度差异导致训练不稳定。
- LAMB通过层间自适应调整学习率,解决梯度爆炸或消失问题,同时加速收敛。
-
LAMB的数学原理
- 步骤1:计算梯度的一阶矩和二阶矩(与Adam类似):
对于参数θ,在时间步t:
- 步骤1:计算梯度的一阶矩和二阶矩(与Adam类似):
\[ 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 \]
其中$g_t$为当前梯度,$\beta_1, \beta_2$为动量超参数(通常取0.9和0.999)。
- 步骤2:偏差修正(防止初始值偏向0):
\[ \hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} \]
- 步骤3:计算自适应更新步长
更新量通常为\(\hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon)\),但LAMB在此基础上引入层间归一化。 - 步骤4:层间归一化(核心创新)
定义第k层参数的更新比(update ratio):
\[ r_t = \frac{\|\hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon)\|}{\|\theta_t\|} \]
其中$\|\cdot\|$表示L2范数。通过该比值调整实际更新幅度:
\[ \theta_{t+1} = \theta_t - \eta \cdot \phi(r_t) \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} \]
这里$\phi(r_t)$是一个裁剪函数(如$\min(\max(r_t, \gamma_l), \gamma_u)$),$\gamma_l, \gamma_u$为下界和上界(如0.01和10),确保更新幅度在合理范围内。
-
实现细节
- 参数分组:需按网络层对参数分组,分别计算每层的归一化比例。
- 梯度裁剪:通过\(\phi(r_t)\)避免极端更新,增强稳定性。
- 学习率调整:全局学习率η可设置较大值(如0.01),依赖归一化机制自动调节层间更新。
-
优势与适用场景
- 支持超大批量训练(如批量大小可达32K),显著减少训练时间。
- 适用于Transformer、BERT等深层模型,避免梯度不平衡问题。
总结
LAMB通过层间自适应归一化,将优化器的自适应学习率与层间平衡结合,实现了训练效率与稳定性的统一。其核心在于通过参数范数比例动态调整更新步长,使不同层以相近的幅度更新。