Adan:更快速优化深度模型的利器
在深度学习领域,优化器的选择对模型训练的效率和效果至关重要。近期,一种名为Adan(Adaptive Nesterov Momentum Algorithm)的新型优化器引起了研究者们的关注。Adan由新加坡国立大学的研究团队提出,旨在更快速地优化深度神经网络模型。本文将详细介绍Adan的原理、使用方法以及在各种任务上的表现。
Adan的原理与特点
Adan的全称是Adaptive Nesterov Momentum Algorithm,即自适应Nesterov动量算法。它结合了Adam和Nesterov动量的优点,同时引入了一些创新设计:
-
自适应学习率:像Adam一样,Adan能够自适应地调整每个参数的学习率。
-
Nesterov动量:Adan采用了Nesterov动量的思想,可以更好地利用历史梯度信息。
-
三阶动量估计:Adan引入了三阶动量估计,能够更精确地捕捉梯度的变化趋势。
-
预调节:Adan对梯度进行了预调节,可以缓解优化过程中的震荡。
这些设计使得Adan在收敛速度和泛化性能上都有不错的表现。特别是在大规模深度学习模型的训练中,Adan展现出了明显的优势。
如何使用Adan
使用Adan非常简单,只需要几个步骤:
- 安装Adan:
python3 -m pip install git+https://github.com/sail-sg/Adan.git
- 导入Adan:
from adan import Adan
- 创建优化器:
optimizer = Adan(model.parameters(), lr=args.lr, weight_decay=args.weight_decay,
betas=args.opt_betas, eps=args.opt_eps,
max_grad_norm=args.max_grad_norm, no_prox=args.no_prox)
- 在训练循环中使用:
for epoch in range(num_epochs):
for batch in dataloader:
optimizer.zero_grad()
loss = criterion(model(batch), targets)
loss.backward()
optimizer.step()
需要注意的是,Adan引入了一些新的超参数,如betas
、max_grad_norm
等。这些参数的调节可能会影响训练效果,建议根据具体任务进行调优。
Adan在各类任务中的表现
Adan在多个计算机视觉和自然语言处理任务中都取得了优异的表现。让我们来看看一些具体的实验结果:
1. 计算机视觉任务
在ImageNet分类任务上,Adan展现出了强大的性能:
- ViT-S模型,训练300轮,达到81.1%的准确率
- ResNet-101模型,训练300轮,达到81.9%的准确率
- ConvNext-tiny模型,训练300轮,达到82.4%的准确率
特别值得一提的是,在MAE(Masked Autoencoders)预训练任务中,Adan表现更加出色:
- MAE-Large模型,预训练800轮+微调50轮,达到85.9%的准确率
这些结果表明,Adan在处理大规模视觉数据时具有明显优势。
2. 自然语言处理任务
在NLP任务中,Adan同样表现不俗:
-
BERT-base模型在GLUE基准测试上的表现:
- MNLI: 85.7%/85.6% (matched/mismatched)
- QQP: 91.2%
- QNLI: 91.3%
- SST-2: 93.2%
-
Transformer-XL模型在WikiText-103数据集上的困惑度(PPL):
- 训练200k步,测试PPL达到23.5,优于Adam的24.2
3. 大型语言模型
在大型语言模型训练中,Adan展现出了显著的效率优势:
- GPT2-345m模型在HumanEval基准测试上:
- Adan训练150k步,pass@100达到37.7%
- Adam训练300k步,pass@100为36.0%
这意味着Adan使用一半的训练步数就达到了更好的性能。
4. 混合专家模型(MoE)
在MoE模型的训练中,Adan同样表现出色:
- 8x0.6B模型(4B可训练参数),训练300B tokens:
- Adan: 困惑度2.010
- AdamW: 困惑度2.023
上图展示了Adan在MoE模型训练中的收敛曲线,可以看出Adan收敛速度更快,最终性能也略优于AdamW。
5. 扩散模型
在text-to-3D生成任务中,Adan也展现出了不俗的表现。以下是使用Adan和Adam训练的模型生成"Sydney opera house, aerial view"的效果对比: