新鲜 / 健康 / 便利 / 快速 / 放心
因为这个优化器最常见,不光 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的,下面是我自己的几个观点,希望大佬一起讨论下: