每天3分钟,彻底弄懂神经网络的优化器(十一)AdamW

1. AdamW算法的提出

AdamW算法是由Ilya Loshchilov和Frank Hutter提出的。这一算法的详细描述和原理可以在论文《Decoupled Weight Decay Regularization》1中找到,该论文发表于2017年。在论文中,作者指出了传统Adam算法在权重衰减(weight decay)方面的一些问题,并提出了AdamW作为解决方案。AdamW通过将权重衰减从梯度更新中解耦,从而在每次迭代中更有效地应用权重衰减。这种方法在实践中被证明可以提高模型的收敛速度和泛化能力。

2. AdamW算法的原理

AdamW优化器是在Adam优化器的基础上进行了改进,主要解决了在Adam中使用权重衰减(Weight Decay)时的问题。在标准的Adam优化器中,权重衰减是直接加到梯度上的,但在AdamW中,权重衰减是以不同的方式应用的,它直接作用在参数更新上。

AdamW的更新公式如下:

  1. 初始化一阶矩估计(动量) m 0 m_0 m0 和二阶矩估计(梯度平方的移动平均) v 0 v_0 v0 为0,以及时间步长 t = 1 t=1 t=1

  2. 在每次迭代中,计算梯度 g t g_t gt

  3. 更新一阶矩估计 m t m_t mt 和二阶矩估计 v t v_t vt

    m t = β 1 ⋅ m t − 1 + ( 1 − β 1 ) ⋅ g t m_t = \beta_1 \cdot m_{t-1} + (1 - \beta_1) \cdot g_t mt=β1mt1+(1β1)gt

    v t = β 2 ⋅ v t − 1 + ( 1 − β 2 ) ⋅ g t 2 v_t = \beta_2 \cdot v_{t-1} + (1 - \beta_2) \cdot g_t^2 vt=β2vt1+(1β2)gt2

  4. 计算偏差修正的一阶矩估计 m ^ t \hat{m}_t m^t 和二阶矩估计 v ^ t \hat{v}_t v^t

    m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1β1tmt

    v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1β2tvt

  5. 更新参数 θ \theta θ,这里 λ \lambda λ 是权重衰减系数:

    θ t = θ t − 1 − η ( m ^ t v ^ t + ϵ + λ θ t − 1 ) \theta_t = \theta_{t-1} - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_{t-1} \right) θt=θt1η(v^t +ϵm^t+λθt1)

在AdamW中,权重衰减 $ \lambda $ 是乘以学习率 $ \eta $ 后从参数中减去的,而不是加到梯度上。这种方法被认为可以更好地控制模型的复杂度,防止过拟合,并且在许多情况下可以提高模型的性能。

在实际应用中,选择AdamW或其他优化器通常取决于具体任务的需求以及对算法性能的实验评估.

3. AdamW算法的主要特点

AdamW(Adam with Weight Decay)是一种流行的优化算法,它在原始的Adam算法基础上进行了改进,特别是在处理权重衰减(Weight Decay)方面。以下是AdamW的优点和缺点:

优点:

  1. 改进的权重衰减处理:AdamW通过将权重衰减应用于参数更新步骤,而不是梯度计算步骤,解决了原始Adam算法在处理权重衰减时的问题。这种方法使得权重衰减的效果更加一致和有效;

  2. 减少过拟合:权重衰减是一种正则化技术,有助于减少模型的过拟合。AdamW通过合理地应用权重衰减,可以提高模型的泛化能力;

  3. 保持动量和自适应学习率的优点:AdamW保留了Adam算法的动量(Momentum)和自适应学习率(AdaGrad)的优点,这有助于加速收敛并适应不同的参数更新需求。

缺点:

  1. 超参数调整:AdamW引入了额外的超参数(如权重衰减系数),这可能需要更多的调参工作来找到最优的超参数组合;

  2. 对学习率的敏感性:AdamW对学习率的选择可能比SGD等其他优化器更敏感,不恰当的学习率设置可能导致训练效果不佳。
    请添加图片描述

参考

[1] DECOUPLED WEIGHT DECAY REGULARIZATION

欢迎关注我的GitHub和微信公众号,来不及解释了,快上船!

GitHub: LLMForEverybody

仓库上有原始的Markdown文件,完全开源,欢迎大家Star和Fork!

请添加图片描述

03-21
### AdamW优化器简介 AdamW是一种改进版的Adam优化器,在机器学习和深度学习领域得到了广泛应用。它结合了L2正则化(权重衰减)的思想,解决了原始Adam优化器中正则化项实现不一致的问题[^1]。 具体来说,AdamW通过分离权重衰减与梯度更新的过程,使得优化过程更加稳定并提高了模型的泛化能力。这种设计允许开发者更灵活地控制正则化的强度,从而改善模型在复杂任务中的表现[^2]。 以下是AdamW的核心公式: #### 更新规则 假设当前迭代步为 \( t \),参数为 \( w_t \),梯度为 \( g_t \),动量缓存分别为 \( m_t, v_t \),以及学习率为 \( \eta \) 和权重衰减系数为 \( \lambda \): ```python import math def adamw_update(w, grad, m, v, beta1=0.9, beta2=0.999, eps=1e-8, lr=0.001, weight_decay=0.01): # 动量计算 m = beta1 * m + (1 - beta1) * grad v = beta2 * v + (1 - beta2) * (grad ** 2) # 偏差修正 mt_hat = m / (1 - beta1**(t+1)) vt_hat = v / (1 - beta2**(t+1)) # 权重衰减 w -= lr * mt_hat / (math.sqrt(vt_hat) + eps) + lr * weight_decay * w return w, m, v ``` 上述代码展示了AdamW的关键部分:除了标准的Adam更新外,还额外加入了 `lr * weight_decay * w` 的权重衰减项[^3]。 --- ### AdamW的优势 相比传统的Adam优化器AdamW的主要优势在于其对权重衰减的有效处理方式。传统Adam会将权重衰减融入到梯度计算过程中,这可能导致实际施加的正则化效果偏离预期。而AdamW通过显式地应用权重衰减,确保了正则化的效果更为精确且可控[^4]。 此外,AdamW在多个实验场景下表现出更高的稳定性,尤其适用于大规模深度学习模型训练,例如Transformer架构下的自然语言处理任务[^5]。 --- ### 实现细节 为了更好地理解AdamW的工作机制,可以参考以下伪代码实现: ```python class AdamWOptimizer: def __init__(self, params, lr=0.001, betas=(0.9, 0.999), eps=1e-8, weight_decay=0.01): self.params = params self.lr = lr self.beta1, self.beta2 = betas self.eps = eps self.weight_decay = weight_decay self.t = 0 self.m = {p: 0 for p in params} self.v = {p: 0 for p in params} def step(self, grads): self.t += 1 for param, grad in zip(self.params, grads): self._update_param(param, grad) def _update_param(self, param, grad): self.m[param] = self.beta1 * self.m[param] + (1 - self.beta1) * grad self.v[param] = self.beta2 * self.v[param] + (1 - self.beta2) * (grad ** 2) mt_hat = self.m[param] / (1 - self.beta1 ** self.t) vt_hat = self.v[param] / (1 - self.beta2 ** self.t) update = self.lr * mt_hat / (vt_hat ** 0.5 + self.eps) + self.lr * self.weight_decay * param param -= update ``` 此代码片段清晰地展现了AdamW如何在每次迭代中执行权重更新操作,并引入了独立的权重衰减逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值