从 Rumelhart 在 1986 年把反向传播写进 Nature 开始,它就成了训练神经网络唯一能用的信用分配算法。我们今天的架构、优化器、甚至 GPU 的内存层次,都是围着"必须可微、必须能反向求梯度"这个约束长出来的。
Q Labs 十月初放出的论文《Dust: Pretraining Transformers Without Backpropagation》想动一下这块地基。它的结论放在摘要里很直白:这是第一个在预训练 Transformer 语言模型这件事上能和反向传播掰手腕的零阶方法,而且在大种群下,某些设置里还超过了反向传播。
值得花时间看的不是结论,是它怎么做到的。
瓶颈在哪:种群必须被"物化"
零阶优化(zeroth-order)靠的是扰动参数、看损失降了多少、再拿"奖励乘扰动"去估计梯度。这条路不新,进化策略(ES)就是它的老前辈。问题从来不是原理,是成本。
传统 ES 里,种群的每一个成员都得有一份属于自己、被扰动过的权重拷贝,然后跑一次完整前向。Dust 论文里拿来对标的是 EGGROLL,2025 年那个把低秩扰动做进 GPU 的超大种群 ES 方法。EGGROLL 已经把"拷贝权重"这件事做得很便宜了,但每个成员仍然要占 batch 里的一个序列位置,所以种群大小还是被你能负担得起的前向次数卡死。
想在预训练规模上用 ES,种群就得上千上万。种群一上千,前向次数就爆炸。
Dust 的赌注:把扰动从权重搬到激活
Dust 的整个方法建立在一个换位置上:不扰动权重,扰动激活。
对每个线性层,它在该层输出的激活上加高斯噪声,而且是在每一个 token 上独立地加。然后跑一次干净的前向(干净的中间激活是缓存的),看每个 token 的损失降了多少,用这个损失降低量去奖励该 token 上的噪声。
关键在"逐 token 独立"这四个字。一个序列有几千个 token,每个 token 上的噪声组合起来,就相当于在权重上做了一次低秩扰动。但这个扰动从来没有被真正写进权重里。论文把这种没有实体形态的种群叫做虚拟种群(virtual population)。
一个几千 token 的序列,一次前向就在"每个 token 是一个种群成员"的意义上,并行评估了几千个成员。EGGROLL 一次前向评估一个成员,Dust 一次前向评估一个 token 数量级的成员。论文的说法是,在现代 Transformer 上,单次前向能评估的种群比权重空间的 ES 至少大三个数量级。
这个换位的直觉来自节点扰动(node perturbation)的老论证,也就是维度:一层输出有 $d_{out}$ 个元素,权重有 $d_{out} \times d_{in}$ 个,噪声住在更小的空间里。不过对 Transformer 来说,朴素维度论证并不成立——一个序列的噪声是 $T \times d_{out}$ 的张量,$T$ 一大,元素数就追平甚至超过权重矩阵了。Dust 真正拿到的新东西不是维度,而是一条和 batch 轴正交的、沿 token 轴展开的种群。
信用分配:一次前向,两种奖励
光加噪声还不够,得知道该奖励谁。Dust 的信用分配规则写下来就两个公式。
噪声 $a_t \sim \mathcal{N}(0, I)$,缩放 $\sigma$,加在输出上形成 $y_t + \sigma a_t$。每个 token 算一个中心化的损失降低量 $c_s = \tilde{\ell}_s - \ell_s$。但一个 token 上的噪声不只影响它自己,还会通过注意力影响它后面的 token,所以奖励是一个带衰减 $\gamma$ 的加权和:
$$r_t = \sum_{s \ge t} \gamma^{,s-t} c_s$$
$\gamma = 0$ 时就退化成只看自己那一格。而哪些层需要看未来 token,交给超参搜索去定——论文实测下来,keys、values、gates 和 value embeddings 这几个层确实需要 $\gamma$ 接近 1,因为它们被后面关注它们的 token 读取。
有了奖励,估计该层输出端的误差就顺手了:
$$\hat g_t = -\frac{1}{K\sigma}\sum_{i=1}^{K} r_t^{(i)} a_t^{(i)}$$
再和该层输入做外积、按 token 求和,就是权重梯度:
$$\widehat{G}_W = \sum_t \hat g_t, x_t^\top$$
这里有个细节值得咂摸:反向传播也形成同样的外积,用的也是同样的输入。唯一的区别是,反向传播的"输出端误差"来自链式法则,Dust 的来自种群平均。输入对两者是一样的,差别只在误差信号的来源。
如果种群无限大,方法到这就讲完了,所有扰动还能塞进同一次前向。因为每份奖励加权噪声是梯度加上一个没有偏好方向的误差,跨 draw 累加时梯度线性增长、误差按平方根增长,比值随种群下降,干扰在极限下消失。
真正的工作量:压住干扰
种群有限的时候,主要成本是干扰:一次前向里同时给很多层的很多 token 加了噪声,奖励某个 token 噪声的那份损失变化,会顺带吃到它旁边所有扰动的效果。Dust 用三招压它。
第一,不同类型的层分到不同的前向里,各自有各自的噪声尺度,每个 block 单独跑。这些前向比完整前向便宜,因为干净前向被缓存了,扰动第 $l$ 个 block 的 draw 只需要从第 $l$ 个 block 往后重跑。
第二,注意力内部(query、key、value、gate、value embedding)单独扰动。token 级的损失几乎感知不到它们的扰动,所以改成通过注意力输出去奖励——用扰动在注意力输出上造成的变化 $\Delta o_s$ 和该输出的估计误差 $\hat g_s$ 做内积来打分。
第三,语言模型头直接在缓存好的 logits 上扰动,每次只重算交叉熵、而且只算一块词表,成本是完整前向的一小截,让头能跑大得多的种群。
超参的调法有两种,一种是在小 token 预算上网格搜索、留下损失降得最多的设置,可靠但贵;另一种代价小得多,直接最大化"我们的估计"和"反向传播梯度"在单个 batch 上的余弦相似度,完全不用训练。不过单 batch 上的高余弦不总能换来训练后更低的损失,所以余弦负责筛候选,训练负责拍板。
结果:能打,但还贵
实验设置很老实:FineWeb 上训 GPT 风格模型,4096 的 BPE 分词器,batch 16k token,一个 epoch,带动量的 SGD、恒定学习率。基础模型 8 层、宽度 512。协议对三种方法完全一致,每个格子跑三个种子。
结果本身就是这张最有信息量的表——测试损失对着种群扫,从 100k token 一路扫到 20M:
- 100k 和 1M token:Dust 从几百到一千个 draw 就开始低于反向传播。
- 10M 和 20M token:差距随种群收窄。10M 时阶梯已经压平,拟合极限刚好落在反向传播之上;20M 时 16k draw 的阶梯还在往下掉,幂律拟合给出的极限是 4.431(95% 区间 3.89–4.58),低于反向传播的 4.633。但阶梯还在降,所以作者把它读作"差距会继续随种群闭合"的证据,而不是一个测出来的极限。
和 EGGROLL 的对比切得更狠:EGGROLL 用 256 倍的种群、跑到 16k,仍然够不到 Dust 的 64 draw。 在 100k token 上它一度逼近到 0.02 以内,但在 1M、10M、20M 上始终高 0.4 到 0.6。把 EGGROLL 的阶梯外推,要从几千倍到约 $10^4$ 倍的种群,才可能追平 Dust 最小种群的成绩。训练曲线也印证了这一点:Dust 在 1k 和 16k draw 上全程贴着反向传播,而每一条 EGGROLL 曲线都早早落后、然后在 Dust 的 64 draw 上方压平。
用 Adam 重跑 1M token 的阶梯时,出现了一个有意思的现象:EGGROLL 从 Adam 几乎没拿到好处,调好的 Adam 阶梯和它的 SGD 阶梯每个种群点上都差在 0.01 以内;而 Adam 同时改善了 Dust 和反向传播,阶梯形状没怎么变。Dust 用大种群重新逼近反向传播,拟合极限 5.248 落在反向传播 5.361 之下。这说明 Dust 的估计能直接配现代优化器用——尽管那些优化器本来就是为反向传播梯度设计的。
越大越好用:过参数化的另一种读法
论文里最能颠覆常识的一段,是它对"零阶方法训不了大网络"这个成见的正面测试。
这个成见的逻辑是:一次前向只返回一个标量,梯度估计的方差随被扰动维度数增长,维度越多、要的种群越大。作者直接拿四个尺寸——2M、7M、38M、243M 参数,120 倍的范围——在固定 10M token 上跑种群扫描。
结果和直觉相反:
- 大模型往往更省种群,不是更费。从 256 往上,损失一路从 2M 降到 7M 再降到 38M,243M 只略差一点。哪怕在最小的种群上,一个大 120 倍的模型也做到差不多,而在其他每个种群上都更好。
- 小模型早早饱和,大模型继续随种群改善。过了 1k draw,38M 和 243M 的收益比 2M 和 7M 高约 30%,而且再多的种群也救不了那个小模型。
作者给的重新理解是:模型大小应该被看成搜索空间的大小和几何。更大的模型意味着更大的搜索空间,所以它用得上大种群;也可能意味着条件数更好的损失地貌,所以连小种群下搜索都更有效。
梯度是"长"出来的
最能说明问题的证据在最后一组实验:直接量 Dust 的估计和反向传播梯度在同一个 batch 上的余弦相似度。
在从 10M 到 1B token 的反向传播训练检查点、种群从 64 涨到 128k 的设置下,每个层类型、每个训练阶段的余弦都随种群上升,而且都能被一个两参数律
$$\cos(K) = \frac{c_{\max}}{\sqrt{1 + c/K}}$$
拟合到 RMSE 低于 0.06。有用梯度的出现,靠的只是大种群本身,链式法则一点没进去——除了按 §2.3 调超参去最大化余弦,没有任何别的结构被塞进来。
同一预算下量 EGGROLL 的估计,128k 前向下除了 head 之外每个层类型的余弦都还低于 0.05,这大概就是它训练不动的答案。
还有一个作者认为特别重要的性质:余弦在 10M 到 1B 两个数量级上保持平坦。这意味着种群足够大时,"追平反向传播所需的种群会随 token 增长"这件事,可能不再成立。而且 Dust 的梯度只是逼近反向传播、并不收敛于它——这反而是好事:方向相似但不相同,会走出不同的优化轨迹,而在实验里,那条轨迹有时比反向传播的更好。
一个工程视角的读法
这篇论文没有假装自己现在能用。作者自己写得很清楚:在当前的算力水平上,Dust 要成为反向传播的实际替代品,还得先提升好几个数量级的算力效率。 它也没有去训"反向传播本来就训不动"的新架构,比如把外部程序放进循环里的网络、或者需要跨很多步做 BPTT 的循环 Transformer。这些都留给未来。
但有几个东西是现在就能拿走想的:
一是信用分配的输入不变性。Dust 和反向传播形成同一个外积、用同一份输入,区别只在误差从哪来。这个视角下,"训练"更像是在搜索误差信号的来源,而不是在搜索权重——激活里承载着推理(不管是否可言语化),那训练就可能变成对潜在推理的搜索。
二是优化器和算法的协同演化是双向的。我们今天的 Adam、动量、学习率调度,全都是被反向传播的梯度统计塑造出来的;实验里 Adam 对反向传播的改善明显大于对 EGGROLL 的,说明换个梯度来源,优化器这套东西本身可能就该重调。
三是过参数化的解释不只一种。它在"更多参数=更多记忆容量"之外,还给了"更多参数=更大更好走的搜索空间"这个读法。如果这个读法站得住,那大模型在搜索类算法里的性价比会比预期高得多。
Dust 现在肯定不是拿来替代你训练脚本里那行 loss.backward() 的东西。但"反向传播是唯一能干这活的算法"这个前提,被这篇论文松了一颗螺丝。在算力越来越富余的年代,这种松动的方向,比具体某个 loss 数字更值得记一笔。
参考:Dust: Pretraining Transformers Without Backpropagation(Q Labs,2026 年 10 月)
浙公网安备 33010602011771号