欢迎来到某某鲜果配送有限公司!

专注鲜果配送

新鲜 / 健康 / 便利 / 快速 / 放心

全国咨询热线020-88888888
摩登7-摩登娱乐-摩登注册登录入口

新闻中心

 

推荐产品

24小时服务热线 020-88888888

行业动态

为什么transformer要用adam?

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

因为这个优化器最常见,不光 Transformer, 普通的卷积神经网络很多也是使用 Adam

其实transformer不一定非要用Adam,Adam就像智能手机的相机,拍出来就很好看,不需要调整什么。但是如果你想要极致的效果,那就是SGD+调参,就像单反。

Adam在NLP领域用的比较多,而NLP现在大多都在用transformer架构,我把这个理解为题主的问题,答案就是NLP任务高维且稀疏,针对词向量而言,常用词就那么几个,embedding层的大多数词向量都是不更新的。那么未调参的SGD能够处理好这件事情吗?题主可以自己思考一下,处理不好。Adam却可以,它会把经常出现的词向量更新的步长调低,不经常出现的词向量更新步长较大,也就是整合了二阶导数信息去调整学习率,这是最重要的一点,理解起来就是经常出现的词学习率低一些,大家一起去优化它,好不容易才出现一次的词,那就要一次性给它较大的幅度去优化。但它也用到了动量,属于锦上添花吧。

首先,严格来说Transformer用的是AdamW,只不过现在的框架都把Adam偷偷换成了AdamW,所以没什么人在意这件事情了。如果是AdamW和SGD的比较,简单来说就是:AdamW收敛得更快,更容易过拟合一点点;SGD收敛得相对慢一些,但是如果能给更长的训练轮次,最后的效果会略好于AdamW一些。由于基于Transformer的模型都很巨大,考虑到非常难收敛且不容易过拟合的特性,因此很多模型都使用AdamW。而一些CNN模型,相对比较容易收敛,且相比Transformer更容易过拟合一些,因此选择SGD。

估计是因为transformer模型一般参数都比较多吗?我用adam的场景经常出现震荡,改用adagrad以后经常出现缓降,后来就一直用rmsprop了。adam降loss确实是很快,但是momentum这个假设有时候是把双刃剑

至于为什么transformer会选择adam的,下面是我自己的几个观点,希望大佬一起讨论下:

  • 因为谷歌在训练Bert的时候选择是adam优化器,后续很多模型基于此优化器基础来预训练。
  • adam含有一阶动量和二阶动量,收敛比sgd快很多。
  • 预训练太耗性能,如果使用sgd优化精调太耗电费没这个必要。
  • 使用sgd的话可能学习率上调整需要下很大功夫才能调好,而adam是自适应优化器对于学习率调整省很多事。
  • 现在训练神经网络基本都是在使用adam上,用sgd调参的功夫还不如想一些trick来提升效果呢。


transformer结构

020-88888888

平台注册入口