AdamW与Adam的比较可能AdamW依然是最好的优化器
AdamW与Adam的比较,可能AdamW依然是最好的优化器
https://mp.weixin.qq.com/s/4oq1L3hdWWby9lERDZiF6g
原创 11 [ 行恒编程1对1 ](javascript:void(0)😉
Adam 优化器在2014年发布的时候引起了热烈反响,但随后出现了性能不稳定的问题,导致研究人员开始转向使用 SGD 加 momentum。2017 年底,Ilya Loshchilov 和 Frank Hutter 提出了 AdamW,这是 Adam 优化器的一个修正版本,通过正确实现权重衰减,AdamW 在实验中显示出了更快的训练速度和更好的性能。
AdamW 在计算机视觉和自然语言处理任务上的取得了成功应用,llama3也使用的AdamW。
** 几个重要的观点: **
Adam 优化器虽然一开始受到欢迎,但后续研究发现其在某些情况下性能不佳,导致研究者倾向于使用 SGD 加 momentum。
Ilya Loshchilov 和 Frank Hutter 提出的 AdamW 通过修正权重衰减的实现方式,显示出在多种任务上比原始 Adam 和 SGD 加 momentum 更好的性能。
AdamW 的实现方法与传统的 L2 正则化不同,它直接对权重进行衰减,而不是将其加到损失函数上。
amsgrad 被提出为解决 Adam 梯度更新规则中的问题,但实验结果并不支持 amsgrad 能够提供实际的性能改进。
实验结果显示,适当调整的 Adam 优化器可以达到或超过 SGD 加 momentum 的准确率,并且通常训练速度更快。
在使用 Adam 优化器时,需要适当调整正则化超参数,以确保模型的泛化能力。
调整AdamW超参,可以获得最好的模型训练结果:
对于AdamW的最佳实践,以下是一些基于文献和实践经验的建议:
1. 初始学习率(lr): 通常从较大的学习率开始,例如0.001到0.01,然后根据需要进行调整。对于AdamW,可以使用学习率预热(gradual warm- up)策略,逐渐增加学习率,以避免初始训练阶段的不稳定。
2. 权重衰减(wd): 权重衰减通常设置得较小,例如1e-2到1e-5。在使用AdamW时,wd的值可能需要比在SGD中使用L2正则化时大得多。
3. 动量参数(beta1): beta1的常用值在0.9到0.99之间。有时候,可以在训练过程中根据学习率调整beta1,例如使用1cycle策略,在学习率增加时降低beta1,学习率减少时恢复高值。
4. 二次动量参数(beta2): beta2通常被设置得较高,如0.999,以便更好地平滑梯度的估计。对于非常长的训练,有时会选择更接近1的值。
5. epsilon(ε): 通常设置为一个非常小的值,如1e-8,以确保数值稳定性。
6. 学习率衰减(lr decay): 可以使用步进衰减、余弦衰减或余弦余弦衰减等策略,以逐渐降低学习率,有助于模型收敛。
7. 批量大小(batch size): 选择合适的批量大小对于训练稳定性和计算效率很重要。批量大小通常受到硬件(尤其是GPU内存)的限制。
8. 训练周期(epochs): 确保模型有足够的训练周期来收敛。对于使用AdamW的超级收敛(super- convergence),可能需要的周期比使用SGD时少得多。
9. 权重初始化: 使用合适的权重初始化方法,如He初始化或Xavier初始化,可以帮助模型更快地收敛。
10. 实验和调整: 超参数的最佳值通常是问题特定的,因此进行实验和调整是找到最佳超参数的关键。可以使用网格搜索、随机搜索或贝叶斯优化等方法来调整超参数。
11. 使用学习率调度器: 结合学习率调度器,如LearningRateMonitor或OneCycleLR,可以帮助监控和调整学习率,以优化训练过程。
12. 混合精度训练: 使用混合精度训练可以加快训练速度并减少内存消耗,特别是在使用较新的NVIDIA GPU时。
遵循这些最佳实践并结合实验数据,可以帮助你更有效地使用AdamW优化器,以获得最佳的模型训练结果。