多域RL训练完Math就忘?这篇论文给出了"局部扰动"层面的解释

核心摘要

做过多域RL后训练的人大概都有过这种经验:模型在数学上调好了,再去练代码,回头一测数学居然掉了。掉得还不少。一个直观解释是"灾难性遗忘",更技术一点的说法是"梯度冲突"。但这篇论文一开始就给你看了一个挺反直觉的东西——全模型梯度的余弦几乎是 0,但干扰还是大量发生

正交了还冲突?这就是问题的起点。

作者的回答是:把视角从"全局梯度方向"压到"局部参数子空间"。他们发现单域 RL 产生的参数更新极其稀疏(77%–89% 的参数几乎没动),但稀疏不等于不冲突——不同域虽然改的神经元集合差异很大,但它们共用同一批活跃计算路由,更新方向决定这条共用路由上的人是握手还是打架。基于这个观察,他们用一个二阶局部扰动模型证明:后训练对前域的损伤主要集中在一个低维共享冲突子空间里,用一段非常短的"刷新"训练就能在这个子空间里几何级数地把损伤压回去。

实测结果挺漂亮:Code → Math → QA → CW 这条课程跑完,Math 从单域时的 66.84 掉到 57.66,加一段 Re-Math 短刷新拉回到 66.04,平均分还冲到全场最高的 66.39。更值得说的是免训练版本——只在稀疏代理坐标上做选择性回滚,2% 的参数预算就能恢复 20.4%,32% 预算恢复 73.6%。

如果你正在做多域 SFT/RL 后训练,这篇论文最有用的不是 Re-Math 这个具体动作,而是它把"哪里在冲突"这件事 localize 到了具体参数维度——这意味着遗忘问题第一次有了"代理证据",可以直接动手修。


论文信息

  • 标题:A Local Perturbation Theory for Cross-Domain Interference and Recovery in Multi-Domain RL
  • 作者:Lei Yang, Siyu Ding, Deyi Xiong
  • arXiv2606.02398
  • 提交日期:2026 年 6 月 1 日

一、问题动机:正交怎么还会冲突?

我做过一段时间多域后训练。最早碰到的现象就是:上一阶段练数学练得好好的,第二阶段加代码,验证集一跑——数学掉了 5、6 个点,有时候更多。

当时我们的解释是经典的两条:一是灾难性遗忘(Catastrophic Forgetting),新任务把旧知识冲掉了;二是梯度冲突(Gradient Conflict),两个域的更新方向相反,所以打架。

听起来很合理对吧?但这篇论文一开始就把这两条解释打了一拳——

图1:Math 与 QA 的梯度关系。(a) 全模型梯度余弦接近 0;(b) 模块级最冲突的几个模块;(c) 模块级最协同的几个模块。全局看正交,局部看一片血雨腥风。

图1 是这篇论文整个故事的引子:在 Math 的最优解 θ_Math* 处算两个域的梯度余弦,全模型加在一起几乎是 0。如果"正交意味着不冲突"成立,那 Math 后练 QA 不应该掉点才对。但实测掉得很惨,这说明全局正交根本不能保护你。

这就是论文要解的问题:为什么全模型梯度近乎正交,但跨域干扰依然显著?

作者给的答案分三步走,每一步都有可量化的证据。


二、三个反直觉观察:稀疏 + 弱重叠 + 共享路由

观察 1:单域 RL 的更新极度稀疏

把 RL 后训练前后的参数减一下,看变化分布。

图2:参数变化的分布。(a) 绝对变化,77%–89% 的参数 |Δθ| < 10^{-7};(b) 相对变化,大部分 |Δθ/θ| < 10^{-3}。RL 几乎不动模型,但动到的地方很关键。

77%–89% 的参数动得几乎可以忽略。换句话说,RL 后训练不是在重写模型,是在做一种类似 LoRA 的隐式低秩编辑。这个观察其实不算新——做过 RLHF/GRPO 的同行都知道 RL 阶段更新很轻——但作者把它当成一个正式假设塞进了理论框架里。

观察 2:不同域改的神经元几乎不重叠

按 top-k 取每个域改得最多的那批神经元,做 Jaccard 相似度。

结果是 Jaccard < 0.19。这很低,几乎是两个不重叠的集合。

到这里你可能会想:那不就完了?大家改自己的,互不打扰,应该没冲突啊。

我第一反应也是这个。但作者紧接着丢了第三个观察。

观察 3:但它们共用同一批"活跃路由"

这是整篇论文最关键的洞察。

"改的神经元"和"用的神经元"是两件事。RL 编辑的可能只是某个 MLP 内部的少数参数,但在 forward 的时候,几乎所有推理任务都会走过同一批活跃模块——尤其是 Math/Code/QA 这些推理类任务,它们的活跃神经元集合重叠率反而很高(Jaccard 大概 0.3–0.5)。CW(创意写作)相对独立一些。

图3:神经元集合重叠分析。(a) 改变的神经元 Jaccard 普遍很低(<0.19);(b) 活跃神经元 Jaccard 在推理域之间显著更高。改的不一样,但用的是一样的——这就是冲突的真正发源地。

换个工程一点的说法:A 域改了路由器 R 上的参数 p1,B 域改了 p2,p1 和 p2 几乎不重叠。但 forward 的时候 R 是必经之路,p1 和 p2 的修改会同时影响 R 的输出。如果两个修改方向相容,就是协同;不相容,就是冲突。

这就是为什么"全局梯度正交"能成立、但"局部仍然干扰"也能成立——干扰发生在共享路由这个低维子空间里,全模型平均一下被稀释成接近 0。


三、方向性对齐:协同还是冲突,到底看什么?

光说"共享路由"还不够,作者继续追问:在共享路由上,两个域的更新方向是相同还是相反?

图4:共享神经元上不同层的方向余弦。Code–Math 的余弦多数为正(蓝色,协同),Math–QA 在不同层呈现明显分化——浅层(L3–L6)为负(冲突),中后层(L14–L21)转正。冲突不是全模型属性,是分层的、模块级的。

这张图我反复看了几遍。它说明几个事:

  • Code 和 Math 是天然朋友:在大部分层上方向都是对齐的,所以 Code → Math 这个顺序训练里 Math 不仅没掉,反而比单域还高(66.49 vs 66.84,几乎打平)。
  • Math 和 QA 是分层敌友:浅层在打架,中后层在握手。这种分层异质性是全局梯度余弦完全看不到的——平均一下就抵消了。
  • CW 自成一派:和推理域共享路由很少,所以 CW 训练对 Math/Code/QA 的影响相对小。

到这里,论文的现象层叙事就讲完了。但它真正的贡献是:把这套观察形式化成一个可证明的扰动模型,并给出一个具体可操作的恢复方法


四、局部扰动理论:为什么短刷新就够了?

这部分公式有点多,但核心思想其实很直接。下面只保留最关键的两条。

命题 1:损伤是二阶项

假设 θ_A* 是域 A 训练完的检查点,作者假设它近似平稳——也就是说在这个点上 A 的梯度已经很小(验证集选 best ckpt 基本能保证这一点)。

那么在 θ_A* 上叠加一个域 B 的更新 δ_B 后,A 域损失的变化是:

\[\Delta_{A \leftarrow B} = \frac{1}{2}\delta_B^T H_A(\theta_A^*)\delta_B + O(\varepsilon_A\|\delta_B\|_2 + \|\delta_B\|_2^3)\]

线性项被 ε_A(A 的剩余梯度)吃掉了,主导项是二阶 Hessian 项。这意味着干扰的强度由 δ_B 的方向 + A 的曲率共同决定。

命题 2:损伤集中在低维冲突子空间

作者进一步证明,如果存在一个低维子空间 \(\mathcal{S}_{A,B}\)(共享活跃路由对应的那批参数维度),并且 A 的 Hessian 在这个子空间上有正曲率、和补空间弱耦合,那么:

\[\Delta_{A \leftarrow B} \approx \frac{1}{2}(P_{\mathcal{S}}\delta_B)^T H_A(\theta_A^*)(P_{\mathcal{S}}\delta_B)\]

也就是说,只有 δ_B 投影到 S_{A,B} 上的那部分会造成实质损伤,剩下的部分对 A 几乎无害。

定理 1:短刷新的几何收缩

最关键的结论。如果你在 θ_A* + δ_B 这个被污染的状态上,对域 A 做几步梯度下降(也就是"短刷新"),那么冲突子空间上的有害分量会按几何级数衰减:

\[\|P_{\mathcal{S}}(\theta_t - \theta_A^*)\|_2 \leq (1-\alpha\mu_A)^t\|P_{\mathcal{S}}\delta_B\|_2\]

其中 μ_A 是 S_{A,B} 上的曲率下界。意思是每一步刷新都按一个固定比例 (1-αμ_A) 把投影分量压缩——只要曲率够正,几步就够了。

这就解释了为什么"短刷新"能起作用,并且解释了为什么它能选择性恢复——它压的是子空间内的污染,子空间外的更新(来自其他域的有用学习)受影响较小。

说实话这套理论框架的几个假设(局部光滑性、近似平稳性、正曲率)都是常见的优化假设。最巧妙的不是数学本身,是把"共享活跃路由 = 低维冲突子空间"这个映射建立起来——这一步是经验观察驱动的,不是凭空假设。


五、Re-Math:理论指导下的简短刷新

训练设置

  • 基础模型:Qwen3-4B-Thinking-2507
  • 训练算法:GRPO,VeRL 框架
  • 课程顺序:Code → Math → QA → CW(Omni-Thinker 课程)
  • 每域数据量:5,120 条
  • 学习率:1e-6
  • 响应长度:最大 16,384 tokens

主结果

直接看主表(Re-Math 列是关键):

任务 Base Code 单域 Math 单域 Code_o Math_o QA_o CW_o CGPO JT Re-Math
Math 43.19 59.63 66.84 59.63 66.49 59.90 57.66 61.93 64.80 66.04
Code 29.57 52.67 34.65 52.67 50.69 50.99 50.47 50.05 48.61 51.05
QA 60.64 60.89 60.76 60.89 60.52 62.34 62.34 62.48 62.11 62.49
CW 82.44 82.40 81.38 82.40 81.44 81.79 86.52 86.73 86.97 85.96
AVG 53.96 63.90 60.91 63.90 64.79 63.76 64.25 65.30 65.62 66.39

下标 o 表示 Omni-Thinker 顺序训练后的检查点;下标 s 表示单域专家。Re-Math 是在 CW_o 之后再加一段简短的 Math 刷新。

几个关键数字值得停一下:

  • Math:57.66 → 66.04,恢复了 8.38 个点,距离单域专家 66.84 只差 0.8。这就是定理 1 说的几何收缩在起作用。
  • 其他域基本不掉:Code 50.47 → 51.05(甚至涨了),QA 62.34 → 62.49,CW 86.52 → 85.96(轻微回吐)。这就是命题 2 说的"选择性"——刷新只在共享子空间里起作用,对其他域的私有维度影响很小。
  • 平均分 66.39 全场最高,甩开 CGPO(65.30)和 Joint Training(65.62)超过 0.7 分。这点其实挺关键——Re-Math 是个 post-hoc 的小动作(一段短训练),而 JT 是从头联合训练,开销大得多。

我自己看这个对比的时候在想:JT 之所以能打到 65.62,是因为它从一开始就在多域上平均梯度,自然不会有强遗忘,但代价是单域上限被压低(Code 才 48.61,落后单域专家 4 个点)。Re-Math 这种"先按课程练完 + 末端短刷新"的路线,理论上能接近多域上界——这套范式如果真的稳定,对工程师是友好的,因为它支持增量增加新域

训练动态

图13:MLP+Attention 联合选择器的恢复曲线。横轴是参数预算占比,纵轴是 Math 恢复率。32% 预算下能达到 73.6% 的恢复,且对 QA 几乎无影响。


六、免训练版本:直接在稀疏坐标上回滚

主结果之外,论文还做了一个非常有意思的"对照实验":完全不训练,只把 QA_o 的某些参数维度回滚到 Math_o 的值,看 Math 能恢复多少。

这其实是对理论的最强验证——如果干扰真的集中在低维冲突子空间里,那么我直接定位这些坐标、把它们重置,应该就能看到明显的恢复。

作者用三个信号来定位冲突坐标:

  • A = 共享激活(Activation):这个参数对应的神经元在两域都活跃
  • M = 更新幅度(Magnitude):这个参数从 Math_o 到 QA_o 变化大
  • C = 方向冲突(Conflict):这次变化和原本 Math 学到的方向相反
选择器 参数预算 Math Avg Δ vs QA_o 恢复率 Δ QA Avg
Math_o(参考上界) - 66.49 +6.59 100.0% -1.81
QA_o(基线) - 59.90 - 0.0% 0.00
随机选 2% 59.49 -0.42 -6.3% +0.01
A 单独 2% 60.53 +0.63 9.6% +0.04
A×C 2% 60.55 +0.65 9.9% -0.05
M×C 2% 61.11 +1.21 18.3% +0.04
A×M×C 2% 61.25 +1.35 20.4% -0.06
Joint MLP+Attn 32% 64.75 +4.85 73.6% -0.45

我觉得这张表是全文最硬的证据:

  • 随机选 2% 是负收益——证明不是"随便回滚都能恢复"。
  • 三个信号都有正收益,组合最好——A×M×C 在 2% 预算下恢复 20.4%,QA 自己几乎不掉(-0.06)。
  • 预算扩到 32%,恢复率冲到 73.6%,QA 也只掉 0.45。
  • 整个过程零训练成本

这意味着什么?意味着多域 RL 的遗忘其实是一种"可操作的局部污染"。它不是一个抽象的"分布漂移"或"灾难性遗忘",是几千个具体参数维度上的方向反转。你不一定要靠刷新训练去 unlearn,原则上可以直接 surgical edit。

不过坦白说,免训练版本恢复 73.6% 已经是 32% 参数预算的开销了——这个比例其实不算稀疏。我自己更看好这套方法的科学价值(验证理论)而不是工程价值(直接拿去用)。


七、批判性思考:这套理论靠不靠谱?

不吹不黑,我说几个我觉得需要打问号的地方。

1. "近似平稳性"假设其实挺强的。整个二阶展开成立的前提是 ε_A(A 域剩余梯度)很小,论文用"验证集 best ckpt"来保证这一点。但实际训练中,最好的 ckpt 不一定是最平稳的,过拟合到验证集和接近平稳点不是一回事。如果 ε_A 不够小,线性项会回归,整个二阶分析就要打折扣。

2. CW 的特殊性没被充分讨论。CW 和推理域共享路由本来就少,所以 Re-Math 对 CW 的影响小可能是 trivial 的——不是因为方法选择性强,而是因为本来就不太冲突。如果换一个和 Math 高度共享路由的"近邻域"做刷新,是不是还会有这种漂亮的选择性?我有点怀疑。

3. 评估上有点取巧。Math 用 AIME24/25/26 + OlympiadBench + HMMT,Code 只用 LiveCodeBench-v6 一个,QA 用 SuperGPQA+MMLU-Pro,CW 用 WritingBench。Math 这边的评估面很广,但 Code 只有一个 benchmark,结论的稳健性受限。

4. Joint Training 的 baseline 设置。JT 用了 5,120×4 的总数据,但 Re-Math 的总训练量(4 个域顺序 + 一段短刷新)实际更多。开销对比应该挂一个总 token 数或 GPU 小时数的脚注,论文里没看到。

5. 仅 4B 模型 + 单一 backbone。结论会不会推广到更大的模型(70B+)?会不会推广到非 thinking 模型?论文没做。理论上扰动展开和模型规模无关,但稀疏性比例、共享路由的几何结构在大模型上可能就完全不一样。

但这些问题不影响我对这篇论文的整体判断——它第一次给跨域干扰提供了一个可证伪、可定位、可手术修复的解释,仅凭这一点就值。


八、对工程的启发

如果你正在做多域后训练,这篇论文有几条很直接的可操作启发:

  1. 别再用全模型梯度余弦判断"会不会冲突"。它会骗你。要看就看模块级的、共享活跃路由上的方向余弦。
  2. 课程顺序不是越平均越好。论文里的 Code → Math 之所以 Math 几乎不掉,是因为方向余弦正;Math → QA 掉 8 分是因为方向余弦在浅层为负。前置任务和后置任务的方向相容性应该是排课程的核心指标
  3. 如果回避不了顺序训练带来的遗忘,留 5%–10% 的"末端预算"做关键域的短刷新——它便宜,而且选择性强。
  4. 稀疏代理回滚是一个值得探索的工程工具。在没有刷新数据的情况下(比如线上模型不能再训),可以用 A×M×C 这套信号挑出嫌疑参数做局部 rollback,至少是一个免训练的 baseline。

九、收尾

这篇论文最让我喜欢的地方是它的层层递进感:先给你一个反直觉的现象(正交但冲突),再给你一组三个相互呼应的观察(稀疏 + 弱重叠 + 共享路由),然后形式化成一个可证明的扰动模型,最后用两个独立的实验(Re-Math 训练 + 免训练回滚)双向印证理论。

这种节奏在多域 RL 这个本来挺工程化的领域里不多见。大部分多域工作都在堆 trick——加 buffer、加正则、调比例、改采样——这篇是少有的从"为什么"切进去的。

它没解决所有问题(CW 的特殊性、规模化、评估广度都还可以再做),但它给了一个有形的、可定位的"冲突"概念。这比抽象的"灾难性遗忘"往前走了一大步。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我