深度学习中优化器的LAMB(Layer-wise Adaptive Moments)算法原理与自适应学习率机制
题目描述
LAMB(Layer-wise Adaptive Moments)是一种自适应优化算法,旨在解决大规模深度学习模型(如BERT)训练时的收敛问题。它结合了Adam优化器的自适应学习率特性与层自适应学习率调整策略,通过动态调整每层参数的学习率,加速训练并提高模型性能。
解题过程
1. 背景与问题
- Adam的局限性:Adam虽能自适应调整学习率,但在训练超大模型时,可能因某些层的梯度幅值过大或过小导致训练不稳定。
- 层间差异:深层网络中,不同层的参数分布和梯度量级差异显著,统一学习率可能使某些层更新过快或过慢。
2. LAMB的核心思想
LAMB的核心改进是对每层参数进行归一化更新,确保参数更新的相对幅度与初始权重的范数成比例,从而稳定训练。其关键步骤包括:
- 计算梯度的一阶矩(动量)和二阶矩(自适应学习率)(与Adam相同)。
- 对参数更新量进行层归一化,使更新步长与权重的范数相适应。
3. 算法步骤详解
假设模型有\(L\)层,每层参数为\(\theta_t\),梯度为\(g_t\)。LAMB的更新过程如下:
步骤1:计算动量与自适应学习率
- 一阶矩(动量):
\[ 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 \]
- 偏差修正(针对初始步长的偏差):
\[ \hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} \]
步骤2:计算未归一化的参数更新量
\[\Delta \theta_t = \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} \]
其中\(\epsilon\)是为数值稳定性添加的小常数(如\(10^{-6}\))。
步骤3:层自适应归一化
- 计算参数更新量与当前权重的范数比率:
\[ r_t = \frac{\|\theta_t\|}{\|\Delta \theta_t\| + \epsilon} \]
- 归一化后的更新量:
\[ \Delta \theta_t^{\text{norm}} = r_t \cdot \Delta \theta_t \]
- 最终参数更新:
\[ \theta_{t+1} = \theta_t - \eta \cdot \Delta \theta_t^{\text{norm}} \]
其中\(\eta\)为全局学习率。
4. 关键设计原理
- 信任比率(Trust Ratio):比率\(r_t\)的作用是限制参数更新的幅度,避免因梯度爆炸或消失导致更新失控。若更新量\(\Delta \theta_t\)的范数远大于权重范数,则缩小更新步长;反之则放大。
- 兼容性:LAMB可视为Adam的扩展,当去掉归一化步骤时,退化为Adam。
5. 优势与应用场景
- 训练加速:在BERT等Transformer模型中,LAMB允许使用更大的批量大小(如64K),且收敛速度更快。
- 稳定性:层自适应机制有效防止梯度极端值对训练的影响。
总结
LAMB通过将参数更新量与权重范数动态关联,实现了层间学习率的自适应调整,既保留了Adam的适应性,又增强了大规模训练的稳定性。其核心创新在于信任比率机制,使优化过程更适合深层异构网络。