LAMB优化器的核心创新与大规模训练
LAMB(Layer-wise Adaptive Moments optimizer for Batch training)优化器如何解决BERT等大模型的大批量(Batch Size>64K)训练问题?与LARS相比有何异同?
回答
小字辈
LAMB由Google在2019年提出,核心创新是逐层自适应学习率调整。
核心公式(参数更新): w_t = w_{t-1} - η · (||w_{t-1}|| / ||m_t||) · m_t 其中m_t是Adam风格的动量,分母是梯度的自适应归一化,分子是权重范数。
关键解决的两个问题:
- 大批量泛化差距:纯增加Batch Size导致梯度方差降低,Adam易收敛到尖锐极小值
- 逐层缩放:不同层的梯度范数差异巨大(Embedding层梯度比FFN层小几个数量级),LAMB对每层独立做自适应学习率
与LARS对比:
- LARS(2017)仅使用SGD动量+逐层归一化,适用于CV任务
- LAMB使用Adam二阶矩+逐层归一化,更适合Transformer类模型
- LAMB将大批量训练扩展到65536,BERT预训练时间从3天缩至76分钟
实践:PyTorch官方LAMB实现在fairseq和DeepSpeed中可用。