您好,欢迎访问这里是您的网站名称官网!
网站地图 |   收藏本站   |    联系我们

400-123-4567

您的位置: 首页 > 装修攻略 > 装修技术

Adan:

发布日期:2024-04-22 14:48:26 浏览次数:

您好,我将介绍一个最近正在使用的深度学习优化器 亚当。

Adan是用于更快优化深度模型的自适应涅斯特洛夫动量算法

在计算量一样的情况下, Adan在多个场景(CV、NLP、RL、Diffusion生成、大语言GPT),多种网络结构(Swin、ViT、ResNet、MAE)上均获得了性能提升。

随着ViT的提出,深度模型的训练方式变得越来越复杂。常见的训练技巧包括复杂的数据增强(如MixUp、CutMix、AutoRand)、标签的处理(如label smoothing和noise label)、模型参数的移动平均、随机网络深度、dropout等。伴随着这些技巧的混合运用,模型的泛化性与鲁棒性均得到了提升,但是随之而来的便是模型训练的计算量变得越来越大。训练时间极大延长,急剧增加了学术研究或工业落地的成本。

目前一个普遍的解决方案是增大训练的batch size并辅助并行训练以减少训练时间,但是伴随的问题便是,大的batch size往往意味着performance的下降,并且batch size越大,情况越明显。这主要是因为模型参数的更新次数随着batch size的增加在急剧减少。

因此,是否存在一种新的优化器能在较少的参数更新次数情况下更快更好地训练深度模型?在减少训练epoch数的同时,也能缓解batch size增加带来的负面影响?

要想加速优化器的收敛速度,最直接的方法便是引入冲量。近年提出的深度模型优化器均沿用着Adam中使用的冲量范式——重球法。然而随着Adam训练原始ViT失败,它的改进版本AdamW渐渐地变成了训练ViT等模型的首选。

但是AdamW并没有改变Adam中的冲量范式,因此在当batch size超过4,096的时候,AdamW训练出的ViT的性能会急剧下降。在传统凸优化领域,有一个与重球法齐名的冲量技巧——Nesterov冲量算法。

Adan算法基于Nesterov动量优化算法,通过引入一个可自适应调整的学习率和一个惯性系数来扩展Nesterov动量,并在训练过程中对其进行更新。

具体而言,Adan算法首先计算出当前的梯度和动量项,并将它们结合起来,得到一个“增量”向量。然后,该向量被用于更新权重和偏置,在更新过程中,Adan算法根据当前的步长大小来自适应地调整学习率和惯性系数,从而避免了手动调参的繁琐过程。

实验显示,Adan仅需1/2-2/3的计算量就能追平现有的SoTA优化器。

Adan在多个场景(涉及CV、NLP、RL)、多个训练方式(有监督与自监督)和多种网络结构(ViT、CNN、LSTM、Transformer等)上,均展现出较大的性能优势。

安装adan包

from adan import Adan

Adan直接继承了torch.optim.optimizer,可以无缝接入现有的流程使用。

使用了两种对model.parameters的访问形式,一种是一次加载一层参数进入GPU进行运算,并通过遍历完成全部更新的single tensor访问;另一种是将模型中所有参数一次性加载进GPU中,然后在GPU中进行遍历和运算的multi tensor。可以根据显存自行选择。

通过自适应调整学习率和惯性系数,大大简化了深度模型的优化过程,并且性能也不错。

非常频繁。

主要集中在大语言模型、生成模型、TensorFlow。

并且最近他们推出了升级版本FusedAdan,做到了更快的训练。

Adan优化器为目前的深度模型优化器引入了新的冲量范式。在复杂的训练范式下以较少的更新次数实现对模型的快速训练。

Adan是2022年的一篇新工作,作者所在的团队在放出代码之后也一直在花精力更新。作为SGD和Adam之后的深度学习加速器。加速效果很优秀,应用领域也十分广泛,并且非常简单易用。


我的介绍结束,敬祝工作顺利。

查看更多 >>

推荐阅读

平台注册入口