Prerequsite:Adam优化算法 Adam优化算法很长一段时间都是比较主流的参数更新算法,也有很多变种,本文介绍在大模型训练过程中使用的AdamW和Adafator
AdamW指的是Adam + Weight Decay(权重衰减)。
Adam相信很多读者已经了解了,Weight Decay解释起来也比较容易,为了防止过拟合,在计算损失函数时需要增加L2正则项:
求导计算梯度时:
Weight Decay即在正则项前面乘以
,用来缩放正则项产生的影响:L2正则会使得参数趋近于0,Weight Decay减轻这种趋势。
AdamW将Weight Decay应用在优化算法最后一步参数更新,参见下图(下图中的w等价于上面公式内的
)。
图中紫色部分和绿色部分等价于公式2,紫色部分是原始的Adam应用Weight Decay的地方,绿色部分是AdamW应用Weight Decay的地方。
代码实现可以参见:理解AdamW
原论文:Adafactor: Adaptive Learning Rates with Sublinear Memory Cost
Adafator没有像Adam那样保存权重矩阵每个元素的滑动平均值,而是保存了行维度或者是列维度的滑动平均值之和,这样显著降低了需要参数更新时需要的存储空间。
Adafator详细的计算方法如下图算法所示:
其中
和
表示行维度和列维度的梯度平方和,
表示行数,
表示列数,
表示列维度之和,可以使用
即行维度之和等价替换。
这样存储需要的空间就从
的倍数,变为
的倍数,节省了可观的存储空间。
注意:由于
,相当于去掉了Adam的Weight Decay。这导致相较于Adam算法,Adafator存在表现不稳定的缺陷,有时候能比Adam更快收敛,有时候则不能。