大语言模型高效训练基础知识:优化器AdamW和Adafator

Prerequsite:Adam优化算法
Adam优化算法很长一段时间都是比较主流的参数更新算法,也有很多变种,本文介绍在大模型训练过程中使用的AdamW和Adafator

AdamW

原论文:Decoupled Weight Decay Regularization

AdamW指的是Adam + Weight Decay(权重衰减)。

Adam相信很多读者已经了解了,Weight Decay解释起来也比较容易,为了防止过拟合,在计算损失函数时需要增加L2正则项:
L ( θ n e w ) = L ( θ o l d ) + γ / 2 ∣ ∣ θ 2 ∣ ∣ (公式 1 ) L(\theta_{new})=L(\theta_{old})+\gamma/2||\theta^2|| (公式1) L(θnew)=L(θold)+γ/2∣∣θ2∣∣(公式1

求导计算梯度时:
g t ← ∇ f t ( θ t − 1 ) + γ θ t − 1 (公式 2 ) g_t \leftarrow \nabla f_t(\theta_{t-1}) + \gamma \theta_{t-1}(公式2) gtft(θt1)+γθt1(公式2

Weight Decay即在正则项前面乘以 γ ( 0 < γ < 1 ) \gamma (0<\gamma<1) γ0<γ<1,用来缩放正则项产生的影响:L2正则会使得参数趋近于0,Weight Decay减轻这种趋势

AdamW将Weight Decay应用在优化算法最后一步参数更新,参见下图(下图中的w等价于上面公式内的 γ \gamma γ)。
在这里插入图片描述
图中紫色部分和绿色部分等价于公式2,紫色部分是原始的Adam应用Weight Decay的地方,绿色部分是AdamW应用Weight Decay的地方。

代码实现可以参见:理解AdamW

Adafator

原论文:Adafactor: Adaptive Learning Rates with Sublinear Memory Cost

Adafator没有像Adam那样保存权重矩阵每个元素的滑动平均值,而是保存了行维度或者是列维度的滑动平均值之和,这样显著降低了需要参数更新时需要的存储空间。

Adafator详细的计算方法如下图算法所示:
在这里插入图片描述
其中 R t R_t Rt C t C_t Ct表示行维度和列维度的梯度平方和, m m m表示行数, n n n表示列数, 1 n ⊤ R t 1_n^{\top}R_t 1nRt表示列维度之和,可以使用 C t 1 m C_t1_m Ct1m即行维度之和等价替换。

这样存储需要的空间就从 n m nm nm的倍数,变为 n + m n+m n+m的倍数,节省了可观的存储空间。

注意:由于 β 1 = 0 \beta_1=0 β1=0,相当于去掉了Adam的Weight Decay。这导致相较于Adam算法,Adafator存在表现不稳定的缺陷,有时候能比Adam更快收敛,有时候则不能。

参考文献

  1. Optimizer
  2. 理解AdamW
  3. 权重衰减/权重衰退——weight_decay
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值