延伸思考总体来看,Lion 表现可圈可点,不管是原论文还是笔者自己的实验中,跟 AdamW 相比都有一战之力,再加上 Lion 更快以及更省显存的特点,或者可以预见未来的主流优化器将有它的一席之地。 自 Adam 提出以来,由于其快速收敛的特性成为了很多模型的默认优化器。甚至有学者提出,这个现象将反过来导致一个进化效应:所有的模型改进都在往 Adam 有利的方向发展,换句话说,由于我们选择了 Adam 作为优化器,那么就有可能将很多实际有效、但是在 Adam 优化器上无效的改动都抛弃了,剩下的都是对 Adam 有利的改进,详细的评价可以参考《NEURAL NETWORKS (MAYBE) EVOLVED TO MAKE ADAM THE BEST OPTIMIZER》[4]。所以,在此大背景之下,能够发现比 Adam 更简单且更有效的优化器,是一件很了不起的事情,哪怕它是借助大量算力搜索出来的。 可能读者会有疑问:Lion 凭啥可以取得更好的泛化性能呢?原论文的解释是 这个操作引入了额外的噪声(相比于准确的浮点值),它使得模型进入了 Loss 更平坦(但未必更小)的区域,从而泛化性能更好。为了验证这一点,作者比较了 AdamW 和 Lion 训练出来的模型权重的抗干扰能力,结果显示 Lion 的抗干扰能力更好。然而,理论上来说,这只能证明 Lion 确实进入到了更平坦的区域,但无法证明该结果是 操作造成的。不过,Adam 发表这么多年了,关于它的机理也还没有彻底研究清楚,而 Lion 只是刚刚提出,就不必过于吹毛求疵了。Lion 是不是足够完美呢?显然不是,比如原论文就指出它在小 batch_size(小于 64)的时候效果不如 AdamW,这也不难理解,本来 已经带来了噪声,而小 batch_size 则进一步增加了噪声,噪声这个东西,必须适量才好,所以两者叠加之下,很可能有噪声过量导致效果恶化。另外,也正因为 加剧了优化过程的噪声,所以参数设置不当时容易出现损失变大等发散情况,这时候可以尝试引入 Warmup,或者增加 Warmup 步数。还有,Lion 依旧需要缓存动量参数,所以它的显存占用多于 AdaFactor [5],能不能进一步优化这部分参数量呢?暂时还不得而知。
文章小结
本文介绍了 Google 新提出的优化器 Lion,它通过大量算力搜索并结合人工干预得出,相比主流的 AdamW,有着速度更快且更省内存的特点,并且大量实验结果显示,它在多数任务上都有着不逊色于甚至优于 AdamW 的表现。