Schedule-Free AdamW:把 warmup 和 cosine schedule 都省掉,效果反而更稳

我最早学炼丹的时候,最烦的就是配学习率 schedule。warmup 多少步、cosine 衰减到多少、peak lr 设多少——每一项都像在猜。后来我看到 Schedule-Free AdamW 这篇论文,第一反应是:这不可能。不调 schedule 还想收敛?

AI technology illustration

为什么训练离不开 schedule?

传统训练里,学习率调度几乎是必需品。训练初期,模型是随机初始化的,梯度又大又噪,直接上大学习率容易崩,所以需要 warmup 先把步长从小拉到大。训练后期,模型已经接近一个局部最优区域,固定的大学习率会让参数在这个区域里来回震荡,所以需要用 cosine 或 step decay 把步长慢慢降下来,让它“安顿”到最低点。

这套逻辑听起来很自然,但问题在于,schedule 的超参数跟模型结构、数据分布、batch size 都耦合在一起。换一个模型,可能就要重新调一遍。而且,当你用分布式训练或者大规模预训练时,warmup 和 decay 的曲线设计会直接影响最终效果——这也是为什么很多开源代码里的 schedule 看起来像魔法数字。

Schedule-Free 的核心:两个权重,一个插值

Schedule-Free 的想法很直接:与其在外部把学习率一点点调小,不如在优化器内部维护一个“慢参数”,用它来吸收训练后期的震荡。

具体来说,它同时维护两组权重:一个是快参数 x,它按照正常的 Adam 方式更新;另一个是慢参数 z,它像一根橡皮筋,慢慢往 x 的方向拉。每一步计算梯度的时候,不是在 x 上算,也不是在 z 上算,而是在两者的插值点 y 上算:

y = (1 - λ) * x + λ * z   # 插值点,λ 通常在 0.9 附近
g = 梯度(y)                 # 在插值点上算梯度
x = x - lr * Adam(g)       # 快参数用 Adam 更新
z = z + λ * (x - z)        # 慢参数向快参数挪一点

注意,这只是示意,不是论文里的完整公式。但它已经能说明核心:慢参数 z 本质上是快参数 x 的一个指数移动平均。训练早期,x 大步往前冲,z 慢慢跟上;训练后期,x 在原地震荡,z 已经收敛到一个相对平滑的位置。所以即使学习率一直不变,最终模型的收敛行为也像用了 cosine decay 一样——因为真正用于评估的,是那个被平均过的 z,而不是还在震荡的 x。

一张表看懂它和传统训练的区别

维度 传统 AdamW + cosine Schedule-Free AdamW
warmup 需要,否则前期不稳 不需要,冷启动也能训
学习率衰减 必须,否则后期震荡 不需要,靠慢参数平均
额外超参数 warmup steps、peak lr、min lr、cycle 长度 λ 和 β(论文给默认值)
评估时用哪组权重 训练结束时的当前权重 慢参数 z(或平均权重)
对调参的敏感度 对 schedule 形状非常敏感 对学习率相对鲁棒

这个细节才是关键

我最早以为这又是 Polyak averaging 换了个名字——就是保存训练过程的平均权重嘛,早就不新鲜了。后来读了官方代码才明白,关键区别在于:梯度不是算在 x 上,也不是算在 z 上,而是算在两者的插值 y 上

如果你只是简单地对训练权重做滑动平均,那么梯度始终是在 x 上算的,x 和 z 之间的耦合很弱。而 Schedule-Free 把插值点作为“锚”,让 x 的更新方向始终兼顾当前快位置和慢位置——这有点像 Nesterov 加速里的 lookahead,也让 x 和 z 的步调天然协调。

还有一个容易踩的坑:训练时模型正向传播用的权重其实是 y(插值点),而不是 x。也就是说,你在训练时算 loss 的那组权重,和优化器里存储的那组权重不是一回事。如果直接把训练好的 x 拿去做评测,效果会大打折扣。必须切换到慢参数 z 才能得到论文里报告的性能。官方实现里有 train()eval() 两种模式,就是干这个用的。

常见问题

任何模型都能直接换上去吗?

论文在 ImageNet 分类、GLUE、GPT-2 预训练等任务上都做了实验,结果至少持平,很多任务有提升。但每个任务的最优 λ 可能不同,它算是一个新的超参数,只不过比 schedule 好调得多。

和 cosine schedule 相比,最终精度有提升吗?

论文报告在多数任务上小幅提升,尤其是训练步数较短时。但提升不是重点,重点是省掉了 schedule 的麻烦。

那我还需要调学习率吗?

需要。Schedule-Free 去掉的是 warmup 和 decay,但初始学习率仍然是一个关键超参数。只是它的容错范围比传统方法大——即使学习率设得偏大,慢参数也能平滑掉一部分震荡。

这个方法和 Lookahead 优化器有关系吗?

有关系。Lookahead 也维护一组“慢权重”和一组“快权重”,但它每 k 步才同步一次,而 Schedule-Free 每步都同步,且梯度在插值点上计算。可以理解为一个更连续、更理论化的 Lookahead 变体。

我的判断

Schedule-Free 不是万能钥匙,但它确实击中了一个真实的痛点:训练流程中充满了脆弱的耦合。去掉 schedule 不是魔法,而是把“衰减”这件事从外部搬到了优化器内部。如果你也受够了每次改模型都要重新调 warmup 和 cosine,这个方法是值得认真试试的。

不过,它还没有完全取代传统调度的地位。毕竟 λ 和 β 的引入,意味着新的调参空间;而且对于某些对训练动态极敏感的任务(比如 GAN),它未必比精心设计的 schedule 更稳。但至少,它让我们重新思考了一个默认假设:学习率调度真的是必须的吗?论文原文官方代码都放在这里,剩下的就靠你的实验了。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/274.html

(0)
上一篇 2026年8月24日 上午9:00
下一篇 2026年8月24日

相关推荐