CARFT
Paper · EMNLP 2025 · arXiv 2508.15868v2

CARFT:把标注 CoT 留在 RL 循环里,用对比信号稳住探索

SFT 每个题只教一条标注 CoT,ReFT 只让模型自己采样 rollout。CARFT 把两者编码成定长向量,用 masked InfoNCE 拉近「答对的 rollout」与标注 CoT,再用嵌入相似度做部分奖励。 代价是多了一次 CoT 编码与对比损失的计算;换来的不只是准确率,还有训练过程中的一条额外约束。

Wenqiao Zhu, Ji Liu, Rongjuncheng Zhang, Haipang Wu, Yulun Zhang arXiv 2508.15868v2 ↗ 代码 ↗
TL;DR · 30 秒抓住核心

SFT 每个题只给一条 CoT;ReFT 只让模型自己采样,探索时把标注 CoT 丢掉了,并且 PPO 训练可能出现 model collapse(§1)。

CARFT 不新增第三个模型:它用 value function 的 softmax 权重把一条 CoT 压成一个向量,对「标注 CoT vs rollout」做 InfoNCE;只有答对的 rollout 进入正样本项(Eq. 6–7)。

主实验只启用正向信号;负向信号要用 LCS 拆序列,增益小。真正把读数推上去的是正向对比损失,加上把「答错但接近」的 rollout 也纳入的 embedding-enhanced partial reward(§4.3)。

在 Table 3 的四个「模型 × 数据集」组合里,CARFT 都高于 SFT/ReFT;但 Table 4 的 64.2% 低于 Table 3 的 64.8%,论文自己也说 Figure 4 上 CARFT 可能不稳定。收益不是无条件的。

10.15pp
Qwen 两数据集中均准确率之差
86.16 − 76.01;论文写作 up to 10.15%
30.62%
相对 Dr.GRPO 的训练时间减少
24.49 → 16.99 h
14.56pp
ReFT 在 Qwen / GSM8K 上低于 SFT 的幅度
66.11 vs 80.67
01

同一个题有多种解法,SFT 只教一种,ReFT 只让模型自己找

读完这节要知道:两条主流路线不是「一个强一个弱」,而是各自丢掉了对方手里的信息。

SFT 的训练样本是三元组 (x, c, y):问题、标注 CoT、答案。标注 CoT 通常由专家或更强的模型写出,质量高,但每个题只有一条。论文在 §1 的原话是:

“SFT-based reasoning enhancement approaches only exploit a single annotated CoT for each question within the training dataset.”

一条路径不等于只有一条正确路径。模型如果只模仿这一条,遇到同题异解、或标注路径不适配的题,就容易僵化;论文的判断是这会限制泛化(§1)。

ReFT 走另一条路:用 PPO 在训练中在线采样 CoT,用最终答案对错给奖励。它能看到多条路径,但论文指出两个问题:

核心矛盾

SFT 有锚点没探索,ReFT 有探索没锚点

SFT 把一条高质量路径当成单一目标;ReFT 把这条路径从训练信号里删掉,只保留答案对错。前者只有一条路径,后者没有标注锚点。CARFT 的问题定义就是:能不能让标注 CoT 在 RL 循环里继续起作用,同时不放弃 on-policy 探索?

这个问题在数学应用题上尤其明显:答案可以自动判对错,所以 RL 能跑;但同一道题往往有多条正确解法,所以只学一条 CoT 的 SFT 会受限。论文选的 SVAMP 与 GSM8K 都属于这个设定(§4.1)。

02

已有方案:SFT 有锚点没探索,ReFT 有探索没锚点

Table 1 把「用不用标注 CoT」和「用不用自采样 CoT」拆成两列,缺口一眼可见。

Table 1 · 各方法是否使用 Annotated CoT(A-CoT)与 Self-Generated CoT(SG-CoT)。原表用勾 / 叉,这里转写为文字。

方法Annotated CoT (A-CoT)Self-generated CoT (SG-CoT)
SFT采用不使用
PPO-like(如 ReFT)不使用采用
CARFT采用采用

Table 1 原表只把 ReFT 作为 PPO-like 的例子;Dr.GRPO 也属于 on-policy 路线,但没有单独出现在这张表里。

SFT:便宜,但只学一条路

SFT 的复杂度是 O(N)(§4.4),没有 rollout,也没有奖励模型。它的训练信号只有「下一个 token 要像标注 CoT」;标注 CoT 之外的正确路径,模型没有动力去覆盖。

ReFT:每个 step 只采样一条,便宜但可能崩

ReFT 用 PPO 做 on-policy 微调,每个 step 只生成一条 CoT,单次前向的复杂度是 O((L+1)·N)(§4.4);原文这句话是 per-forward-pass,不是 per-step 的完整成本。Table 4 的记录里,ReFT 在 SVAMP + CodeLlama-7B 上训练 14.12 h,低于 Dr.GRPO 的 24.49 h。代价是它完全不看标注 CoT,且论文报告 ReFT 会受 model collapse 影响(§1、§4.2)。

Dr.GRPO:多 rollout 换准确率,也换时间

Dr.GRPO 是 GRPO 的改进版,用多条 rollout 估计优势;§2 说 DAPO 针对长 CoT 场景,而 DAPO / Dr.GRPO 这类方法都带来更高的计算复杂度。Appendix A.1 里为了让比较公平,把 Dr.GRPO 的 G 设为 2,与 CARFT 每个 step 最多两条 CoT(一条标注 + 一条 rollout)对齐。Table 4 里它的时间是 24.49 h,准确率 63.7%。

缺口

没有方法同时用两列信号

SFT 只用 A-CoT,ReFT / Dr.GRPO 只用 SG-CoT;Table 1 里同时打两个「采用」的是 CARFT 行。CARFT 的切入点不是换 RL 算法,而是把 A-CoT 变成 RL 循环里的一个对比锚点。

03

核心方法:把 CoT 压成向量,用 masked InfoNCE 拉近答对的 rollout

这节拆三件事:CoT 怎么变成向量、正 / 负对比信号怎么构造、总损失怎么拼。

3.1 一条变长 CoT → 一个定长向量(Eq. 6)

给定 CoT c = [a1, …, aL],token embedding 为 H = [H1, …, HL],value function 输出为 Vφ = [Vφ(1), …, Vφ(L)]。先把每个 Hi 过一层 MLP 投影到低维(实验中投影维度为 64,Appendix A.1),再按 softmax 归一化的 state value 加权求和:

e = Σ Softmax(Vφ) ⊙ H
Eq. 6 · ⊙ 是逐元素乘;投影发生在加权求和之前(§3.2.2)

softmax 是单调的,所以 Vφ 高的 token 在聚合里权重更大;论文没有进一步解释这个设计动机,只说明投影是为了降低显存(§3.2.2 原话 “in order to reduce memory consumption”)。这一步把任意长度的 CoT 变成一个定长向量,后面的对比学习才有统一的比较对象。

3.2 正信号:答对的 rollout 才进分子(Eq. 7)

对一个 batch 里的第 i 个问题,记标注 CoT 的嵌入为 eiannotated,rollout 的嵌入为 eirollout。InfoNCE 形式是:

Lc1 = Σi −log [ exp(⟨eiannotated, eirollout⟩ / τ) ⊙ M1 / Σj exp(⟨eiannotated, ejrollout⟩ / τ) ]
Eq. 7 · M1 = 1 表示该 rollout 答案正确;τ = 0.2(Appendix A.1)

分子只保留「标注 CoT 与自己的 rollout」这一对;分母把 batch 内所有 rollout 都放进来。于是拉近正对、推远其他样本。M1 的作用是只让答对的 rollout 参与正样本项。

公式层面有一个细节:Eq. 7 把 M1 乘在 softmax 分子上,按字面 M1 = 0 时 log 的参数为 0;论文正文只说 M1 是 0/1 mask,没有给 M1 = 0 的实现分支。本页的交互只演示 M1 = 1 的正样本项,不对这个分支做补全。

3.3 负信号:用 LCS 拆出「共同部分」和「各自多出的部分」(Eq. 8)

对答错的 rollout,论文先算标注 CoT A 与 rollout B 的最长公共子序列 C,再分别嵌入 C、A\C、B\C。Eq. 8 让 rollout 的 C 靠近 annotated 的 A\C,同时把 rollout 的 B\C 推远:

Lc2 = Σi −log [ exp(⟨ei,LCSrollout, ei,excannotated⟩ / τ) ⊙ M2 / Σj exp(⟨ei,LCSrollout, ej,excrollout⟩ / τ) ]
Eq. 8 · M2 = 1 表示该 rollout 答案错误;细节见 Appendix A.3 / Algorithm 2

原文 §3.2.3 说构造四个嵌入(LCS 与 exc 各有 annotated / rollout 两版),但 Eq. 8 里可见的是 rollout 的 LCS 嵌入、annotated 的 exc 嵌入,以及 batch 内 rollout 的 exc 嵌入;annotated 的 LCS 嵌入没有出现在式子中。这里按原式转录,不替它补全。

主实验没有用负信号:§4.3 写 “Due to its excellent performance, we employ the positive signal in our experiments.” Figure 5 里负信号只比 ReFT 高 0.4 个百分点。

3.4 总损失:PPO 损失 + 对比损失(Eq. 9)

PPO 部分沿用 ReFT 的 LRL = Lpolicy + αLvalue(Eq. 5);CARFT 再把对比损失按系数 c 加进去:

L = LRL + c · { Lc1 or Lc2 }
Eq. 9 · c = 1e-3(Appendix A.1);主实验取 Lc1

这个式子是 CARFT 的全部改动:策略优化还是 PPO,奖励还是答案对错加部分奖励,只是在同一个 step 里多算一项「当前 rollout 与标注 CoT 的对比」。论文没有引入新的 critic 或新的奖励模型。

自己动手:InfoNCE 的 softmax 在做什么

固定 4 个样本的相似度,只算第 1 个正样本的损失项。拖动 s1 或 τ,看正样本权重和 L 怎么变。负样本的相似度是页面设定,用来展示 softmax 形状,不是论文数据;τ = 0.2 来自 Appendix A.1。

s₁ · 正样本
0.80
0.9135
s₂ · 负样本
0.30
0.0750
s₃ · 负样本
-0.10
0.0101
s₄ · 负样本
-0.50
0.0014
Eq. 7 · 当前读数
当前:s = (0.80, 0.30, -0.10, -0.50),τ = 0.20。分母 Z = 59.7685,正样本权重 w₁ = 0.9135,L = −ln(w₁) = 0.0905。
手算对账:两组参数,逐位对 JS 输出没有标准差,不涉及 ÷N / ÷(N−1)

公式(与 JS 的 update() 同一式子):
w_i = exp(s_i / τ) / Σ_j exp(s_j / τ),L = −ln(w_1)。权重保留 4 位小数,损失保留 4 位小数。

第 1 组(页面默认):τ = 0.20,s = (0.80, 0.30, -0.10, -0.50)

  • exp(0.80/0.20) = exp(4) = 54.598150
  • exp(0.30/0.20) = exp(1.5) = 4.481689
  • exp(-0.10/0.20) = exp(-0.5) = 0.606531
  • exp(-0.50/0.20) = exp(-2.5) = 0.082085
  • Z = 54.598150 + 4.481689 + 0.606531 + 0.082085 = 59.768455
  • w₁ = 54.598150 / 59.768455 = 0.913494;L = −ln(0.913494) = 0.090478

页面读数(保留 4 位):Z = 59.7685,w₁ = 0.9135,L = 0.0905。

第 2 组:τ = 0.10,s₁ = 0.45,负样本不变 (0.30, -0.10, -0.50)

  • exp(0.45/0.10) = exp(4.5) = 90.017131
  • exp(0.30/0.10) = exp(3) = 20.085537
  • exp(-0.10/0.10) = exp(-1) = 0.367879
  • exp(-0.50/0.10) = exp(-5) = 0.006738
  • Z = 90.017131 + 20.085537 + 0.367879 + 0.006738 = 110.477285
  • w₁ = 90.017131 / 110.477285 = 0.814802;L = −ln(0.814802) = 0.204810

页面读数(保留 4 位):Z = 110.4773,w₁ = 0.8148,L = 0.2048。

这个交互覆盖了什么、没覆盖什么简化模拟的边界

覆盖:Eq. 7 中 M1 = 1、单正样本项的 softmax 分母与 −log;τ 对权重分布的影响;τ = 0.2 这一论文设置。

未覆盖:M1 = 0 时按字面会让 log 的参数为 0,论文没有给实现细节,本模拟不展示该分支;也不模拟 Eq. 8 的负信号、Eq. 6 的嵌入生成与投影、batch 内多个正样本的求和。负样本相似度与 batch=4 都是页面为了可读性设定的,论文的 batch 是 64(SVAMP)或 64/96(GSM8K,Appendix A.1)。

因此这里演示的是 Eq. 7 的形状,不是论文实验数值的复现。

04

怎么训练:SFT 热身后,在每个 PPO step 加一次对比损失

读完这节要知道:CARFT 没有第三个训练阶段;它是在 ReFT 的每个 RL step 里加了一次 CoT 编码和对比损失。

§3.2.1 的流程是两段:

Appendix A.1 · 论文给出的训练配置(原表不是表格,这里按条目转录)。

项目设置
硬件8 × H100-80GB
加速FlashAttention + DeepSpeed ZeRO stage 3
batch sizeSVAMP:64;GSM8K:Qwen 64、CodeLlama 96
学习率SFT / warmup:1e-5;RL 阶段:3e-7
KL 系数0.05
对比温度 τ0.2
对比损失系数 c1e-3
投影维度64
PPOλ = 1,γ = 0.95,α = 5,ε = 0.2,U = 2
训练轮数SFT baseline 最多 60 epochs;CARFT / ReFT / Dr.GRPO 先微调 4 epochs 选 checkpoint,再 RL 70 epochs(Appendix A.2 的 Qwen2.5-14B 补充实验为 100 epochs)
Dr.GRPO 的 G2(与 CARFT 每 step 最多两条 CoT 对齐)

4.1 部分奖励:答错也给分,但按 CoT 相似度给

ReFT 对「能抽出数字但答错」的 CoT 给固定 0.1;CARFT 把它换成 Eq. 10:

r(x, y) = ⟨eannotated, erollout⟩ × 0.1 + 0.2
Eq. 10 · 内积范围 [−1, 1],所以 r ∈ [0.1, 0.3](§3.2.4)

这个式子把「答错」拆成了连续的两端:与标注 CoT 越不像,越接近 0.1;越像,越接近 0.3。论文的意图是给错误 CoT 一个比固定 0.1 更有区分度的信号,从而稳定训练(§3.2.4)。注意它只作用于「答案错误但能抽出数字」的样本;答案正确时奖励仍是 1(Appendix A.1)。

CARFT · Eq. 10
0.260
r = 0.1 × 0.60 + 0.2
ReFT · 固定部分奖励
0.100
无论 s 是多少,都是 0.1
Eq. 10 · 当前读数
s = 0.60 → CARFT r = 0.1 × 0.60 + 0.2 = 0.260;ReFT 固定 r = 0.100。
手算对账:两组相似度 → 奖励与滑块输出逐位一致

公式(与 JS 的 update() 同一式子):r = 0.1 × s + 0.2,保留 3 位小数。没有标准差,不涉及 ÷N / ÷(N−1)。

第 1 组:s = 0.37 → r = 0.1 × 0.37 + 0.2 = 0.037 + 0.2 = 0.237;页面读数 0.237。

第 2 组:s = -0.42 → r = 0.1 × (-0.42) + 0.2 = -0.042 + 0.2 = 0.158;页面读数 0.158。

端点核对:s = -1 → 0.100;s = 1 → 0.300。与 §3.2.4 写的 [0.1, 0.3] 一致。

这个交互覆盖了什么、没覆盖什么简化模拟的边界

覆盖:Eq. 10 的线性映射 r = 0.1·s + 0.2,s ∈ [-1, 1] 的完整区间;ReFT 固定 0.1 的对照。

未覆盖:嵌入怎么由 Eq. 6 产生、真实 CoT 的相似度怎么算、mask 与 PPO 优势估计怎么结合、答案正确时奖励为 1 的分支。这里的 s 是抽象后的余弦相似度,不是论文实验里某个具体样本的读数。

4.2 复杂度:多了一次 M·d·L,但比多 rollout 便宜

§4.4 给的单次前向复杂度:SFT 是 O(N);ReFT 是 O((L+1)·N);Dr.GRPO 是 O((G·L+1)·N);CARFT 是 O((L+1)·N + M·d·L),其中 M·d 远小于 N。空间复杂度 CARFT 为 O(N + L·d + M + L·d2),d2 是压缩后的 hidden size(§4.4)。

Table 4 的实际时间:ReFT 14.12 h,CARFT 16.99 h(多 2.87 h,相对多 20.33%),Dr.GRPO 24.49 h(CARFT 相对少 30.62%)。这就是论文说的 efficiency gain 的来源:不是比 ReFT 快,而是比多 rollout 的 Dr.GRPO 快。如果只看 ReFT,CARFT 的对比分支是净开销。

代价

多出的 2.87 h 花在哪

Limitations 写 CARFT “requires additional computational overhead to compute the embeddings of CoTs”,所以训练时间比 ReFT 和 SFT 长;比 Dr.GRPO 短,是因为 CARFT 每个 step 只需要一条 rollout(Dr.GRPO 用 G = 2)。省的是 rollout 的生成与评估,花的是 CoT 编码与对比损失。

05

架构:一条标注支路、一条 rollout 支路,在 InfoNCE 汇合

这张图只画主实验的正向信号路径;负向信号的 LCS 分支在 Appendix A.3,没有画进来。

训练集 Dtrain (x, c, y) SVAMP / GSM8K Stage 1 · SFT few epochs Policy πθ 生成 1 条 rollout CodeLlama / Qwen2.5 Rollout ĉ on-policy 采样 Annotated c 数据集里的标注 CoT e_rollout Eq. 6 e_annot Eq. 6 Masked InfoNCE Eq. 7 · 只取答对的 rollout τ = 0.2(Appendix A.1) L = L_RL + c · L_c1 Eq. 9 · c = 1e-3 PPO / ReFT 分支 reward + GAE + KL Eq. 1–5 标注 CoT c 答案奖励 更新 θ 相加 主实验只走正向信号;负向信号需要 LCS 分解(Eq. 8),见 Appendix A.3。
按 §3.2.1 与 Figure 2 重绘的流程;只画主实验使用的正向信号路径。负向信号的 LCS 分支见 Appendix A.3,未画入。图中 Eq. 6 的投影、Eq. 7 的 mask 与 Eq. 10 的部分奖励在图上合并成「对比损失」与「PPO 奖励」两块。

把流程拆成四步

  1. SFT 热身:用 (x, c, y) 做几个 epoch,得到一个能生成 CoT 的初始 policy。
  2. 采样 rollout:每个 RL step 取一个 batch,当前 policy 对每个问题生成一条 CoT,得到答案与奖励。
  3. 编码与对比:标注 CoT 与 rollout 分别过 Eq. 6;答对的 rollout 进 Eq. 7 的正样本项,得到 Lc1。
  4. 合并更新:把 c·Lc1 加到 PPO 的 LRL,反传更新 policy;答错但能抽出数字的样本按 Eq. 10 给部分奖励。

图里没有画 value function 的单独分支:Vφ 既用于 PPO 的 GAE,也用于 Eq. 6 的 softmax 权重。论文没有说这两个用途是否共享同一个 value head;这里只按 §3.2.2 与 §3.1 的符号画成同一个 Vφ。

06

效果:四个组合都更高,但 64.8 与 64.2 要并列看

先看 Table 3 的六行原数,再看 Table 4 的时间代价、Table 5/6 的补充实验和 Figure 5 的消融。

Table 3 是主结果。所有准确率单位为 %;下文正文括注里的差是两列准确率相减,单位为百分点(Table 3 表内本身没有括号差列)。论文在 §4.2 把最大的平均差写成 “up to 10.15%”,按平均列复算是 86.16 − 76.01 = 10.15 个百分点,不是相对提升。

Table 3 · 各方法在 SVAMP / GSM8K 上的准确率(%,原表六行全部转录)。

Backbone方法SVAMPGSM8KAverage
CodeLlama-7BSFT62.343.8253.06
CodeLlama-7BReFT62.550.2756.39
CodeLlama-7BCARFT64.850.9557.88
Qwen2.5-7B-InstructSFT86.980.6783.79
Qwen2.5-7B-InstructReFT85.966.1176.01
Qwen2.5-7B-InstructCARFT88.084.3186.16

按数据集拆:SVAMP 上 CodeLlama 从 62.3 到 64.8(高 2.5 个百分点),Qwen 从 86.9 到 88.0(高 1.1);GSM8K 上 CodeLlama 从 43.82 到 50.95(高 7.13),Qwen 从 80.67 到 84.31(高 3.64)。按平均列拆:CodeLlama 57.88 比 SFT 53.06 高 4.82、比 ReFT 56.39 高 1.49;Qwen 86.16 比 SFT 83.79 高 2.37、比 ReFT 76.01 高 10.15。

ReFT 的失败模式在 Qwen / GSM8K 这一格最明显:66.11 比 SFT 的 80.67 低 14.56 个百分点;同一格 CARFT 是 84.31,比 ReFT 高 18.2 个百分点。§4.2 把这些读数归因于 model collapse,并写 “when model collapse occurs, the performance of ReFT lags far behind that of SFT (up to 14.56%) and CARFT (up to 18.2%)”。

Table 4:准确率之外,还有训练时间

Table 4 · SVAMP、CodeLlama-7B 的准确率与时间(原表三行全部转录)。

方法AccuracyTime Cost (hours)
ReFT62.5%14.12
Dr.GRPO63.7%24.49
CARFT64.2%16.99

CARFT 的 64.2% 比 ReFT 的 62.5% 高 1.7 个百分点,比 Dr.GRPO 的 63.7% 高 0.5;Dr.GRPO 比 ReFT 高 1.2。时间上,CARFT 16.99 h 比 ReFT 14.12 h 多 2.87 h(相对多 20.33%),比 Dr.GRPO 24.49 h 少 7.50 h(相对少 30.62%)。论文说的 “efficiency up to 30.62%” 指的是最后这个相对时间差,不是准确率。

两处并列

同是 SVAMP + CodeLlama,Table 3 写 64.8%,Table 4 写 64.2%

Table 3 的 CARFT 行是 64.8%;Table 4 的 CARFT 行是 64.2%。§4.2 在介绍 Table 4 时写的是 “CARFT with embedding-enhanced partial reward enabled”,所以 64.2 对应启用了 Eq. 10 的版本;Table 3 的表注没有说明是否启用 partial reward。两处都指向 SVAMP + CodeLlama-7B,论文没有在表注或正文里说明这两个数的对应关系。本页并列保留:不把 64.2 覆盖成 64.8,也不把 64.8 当成「启用 partial reward 后」的结果。

Table 5 / Table 6:两个补充实验

Table 5 · CodeLlama-7B + GSM8K,不同 batch size 的 CARFT 准确率(原表两行转录)。

Batch SizeAccuracy
6451.48%
9650.95%

batch 从 64 加到 96,准确率低 0.53 个百分点。Appendix A.2 的解读是“increasing the batch size can degrade the performance”,并建议更小的 batch 可能更好;这个结论只基于这一组 GSM8K 实验。

Table 6 · Qwen2.5-14B-Instruct + SVAMP 的 SFT / CARFT 准确率(原表两行转录;该表没有 ReFT / Dr.GRPO 行)。

Model方法Accuracy
Qwen2.5-14B-InstructSFT86.7%
Qwen2.5-14B-InstructCARFT88.9%

14B 上 CARFT 比 SFT 高 2.2 个百分点。这是一组小规模补充实验,不能单独支撑「方法随规模线性扩展」这种结论;论文的原话是它“highlight the effectiveness and strong generalization of CARFT across diverse model scales and datasets”(Appendix A.2)。

Figure 5:正信号贡献大,负信号贡献小

Figure 5 · SVAMP + CodeLlama-7B 的消融读数(原图是柱状图,这里按图上的数字转录为 %)。

设置Accuracy
Positive Signal64.8%
Negative Signal62.9%
ReFT62.5%

Positive 比 ReFT 高 2.3 个百分点,Negative 比 ReFT 高 0.4,Positive 比 Negative 高 1.9。§4.3 的表述是 positive 2.30% higher、negative 0.4% higher、positive 比 negative 高 1.9%;这些差的单位和上面一样,都是百分点。Figure 5 的 Positive 64.8% 与 Table 3 的 CARFT 64.8% 相同。根据这两个相同读数与 §4.3 “主实验采用 positive signal” 的说明,推断 Table 3 的 CARFT 行对应正向信号版本。

稳定性:ReFT 会崩,CARFT 也不是全程平稳

Figure 3(Qwen + SVAMP)里,§4.2 写 ReFT “undergoes model collapse after undergoing fine-tuning for just one epoch”;同图的 SFT 也出现随训练推进准确率下降的现象。Figure 4(CodeLlama + SVAMP)里,CARFT 收敛更快,但 §4.2 明确写 “CARFT is potentially vulnerable to unstable fine-tuning process”。所以“CARFT 更稳”要看 backbone 与配置:Table 4 的 64.2% 是启用 partial reward 的版本,Figure 8 声称该奖励让曲线更稳(§4.3)。推断(依据:Figure 3/4 的曲线与 §4.2 的措辞;正文用准确率曲线讨论稳定性,附录 A.2 另有 Figures 12–17 的 RL / contrastive loss 曲线,但没有方差、标准差这类汇总指标)。

另一个反直觉点是 batch:Table 5 里更大的 batch 反而更低。论文只给了这一组读数,没有把 batch 效应拆到不同模型或数据集上;本页不把它推广成“小 batch 一定更好”。

07

边界:要标注 CoT、只做数学题、上下文不到 1024 token

读完这节要知道:CARFT 的收益有明确的适用条件,不是「任何 RL 推理训练都该加对比损失」。

什么时候别用

三种不适配的场景

没有可靠标注 CoT:Eq. 7 的正样本项依赖标注路径;只有答案没有 CoT 时,CARFT 退化成 ReFT 加一个空锚点。推断(依据:Eq. 7 的分子需要 eannotated)。
上下文远超 1024 token:论文没有验证;CoT 编码与对比损失还会随长度增加。
答案不可自动判对错:论文的奖励来自可验证的数学答案(§2);开放式任务需要另做奖励模型,Eq. 7 的 mask 也不再是简单的对/错。推断(依据:§2 写数学答案 “can be explicitly verified”;Limitations 未覆盖开放式任务)。

最后是一个原文内部的对照:§4.2 说 CARFT 在 Figure 3 上“remarkable stability”,但同一节对 Figure 4 又说“potentially vulnerable to unstable fine-tuning process”。两处描述的是不同 backbone 的曲线;本页并列保留,不把它们合并成一句“CARFT 稳定”。