LAMB:结合层级自适应学习率与Adam.

LARS是一种常用的对大型神经网络进行大批量训练的方法,它通过设置分层自适应的学习率,能够在几分钟内在ImageNet上训练ResNet模型。然而LARS在训练BERT等自注意力模型时表现比较差,这说明它在不同任务中的表现不一致。

作者首先提出了一种原则性的学习率分层自适应策略,并提出了一种新的分层自适应大批量优化技术LAMB,通过将批量大小增加到TPU v3的内存限制,实现了使用7676分钟训练BERT模型。

1. 学习率分层自适应

在大批量训练中,参数更新通常是分层进行的。对于网络第i[h]i[h]层的参数,通用的参数更新形式为:

x(i)t+1=x(i)tηtϕ(||x(i)t||)||g(i)t||g(i)tx(i)t+1=x(i)tηtϕ(||x(i)t||)||g(i)t||g(i)t

其中梯度g(i)tg(i)t是由基本优化算法AA计算得到的。ϕ(||x(i)t||)ϕ(||x(i)t||)是指通过参数的l2范数对学习率进行调整。更新梯度也通过l2范数标准化为g(i)t||g(i)t||g(i)t||g(i)t||。此时参数更新量与梯度大小无关,不会受梯度爆炸/消失的影响。尽管梯度更新的方向有所偏差,对结果不会产生明显的影响。

在实践中函数ϕ()ϕ()可以简单地设置为ϕ(z)=min(max(z,γl),γu)ϕ(z)=min(max(z,γl),γu)ϕ(z)=zϕ(z)=z。后者对应的自适应学习率即为||x(i)t||||g(i)t||||x(i)t||||g(i)t||

2. LARS 与 LAMB

LARS是动量算法与层级自适应学习率的结合。其中动量采用滑动平均累计,并额外引入权重衰减:

mt=β1mt1+(1β1)(gt+λxt)mt=β1mt1+(1β1)(gt+λxt) x(i)t+1=x(i)tηtϕ(||x(i)t||)||m(i)t||m(i)tx(i)t+1=x(i)tηtϕ(||x(i)t||)||m(i)t||m(i)t

LAMBAdam与层级自适应学习率的结合。LAMB的自适应表现在两个方面,使用梯度二阶矩的平方根进行的归一化和学习率的分层归一化。

mt=β1mt1+(1β1)gtvt=β2vt1+(1β2)g2tmt=mt1βt1,vt=vt1βt2rt=mtvt+ϵx(i)t+1=x(i)tηtϕ(||x(i)t||)||r(i)t+λx(i)t||(r(i)t+λx(i)t)mt=β1mt1+(1β1)gtvt=β2vt1+(1β2)g2tmt=mt1βt1,vt=vt1βt2rt=mtvt+ϵx(i)t+1=x(i)tηtϕ(||x(i)t||)||r(i)t+λx(i)t||(r(i)t+λx(i)t)

3. 实验分析

作者展示了训练BERT的实验结果。通过将批量扩大到3232k(受限于TPU内存),可以在7676分钟内训练完成,并且获得与通常训练相当的准确率。

在训练时设置的部分超参数如下: