SFT 每个题只教一条标注 CoT,ReFT 只让模型自己采样 rollout。CARFT 把两者编码成定长向量,用 masked InfoNCE 拉近「答对的 rollout」与标注 CoT,再用嵌入相似度做部分奖励。 代价是多了一次 CoT 编码与对比损失的计算;换来的不只是准确率,还有训练过程中的一条额外约束。
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 可能不稳定。收益不是无条件的。
读完这节要知道:两条主流路线不是「一个强一个弱」,而是各自丢掉了对方手里的信息。
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 把这条路径从训练信号里删掉,只保留答案对错。前者只有一条路径,后者没有标注锚点。CARFT 的问题定义就是:能不能让标注 CoT 在 RL 循环里继续起作用,同时不放弃 on-policy 探索?
这个问题在数学应用题上尤其明显:答案可以自动判对错,所以 RL 能跑;但同一道题往往有多条正确解法,所以只学一条 CoT 的 SFT 会受限。论文选的 SVAMP 与 GSM8K 都属于这个设定(§4.1)。
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 的复杂度是 O(N)(§4.4),没有 rollout,也没有奖励模型。它的训练信号只有「下一个 token 要像标注 CoT」;标注 CoT 之外的正确路径,模型没有动力去覆盖。
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 是 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 循环里的一个对比锚点。
这节拆三件事:CoT 怎么变成向量、正 / 负对比信号怎么构造、总损失怎么拼。
给定 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 加权求和:
softmax 是单调的,所以 Vφ 高的 token 在聚合里权重更大;论文没有进一步解释这个设计动机,只说明投影是为了降低显存(§3.2.2 原话 “in order to reduce memory consumption”)。这一步把任意长度的 CoT 变成一个定长向量,后面的对比学习才有统一的比较对象。
对一个 batch 里的第 i 个问题,记标注 CoT 的嵌入为 eiannotated,rollout 的嵌入为 eirollout。InfoNCE 形式是:
分子只保留「标注 CoT 与自己的 rollout」这一对;分母把 batch 内所有 rollout 都放进来。于是拉近正对、推远其他样本。M1 的作用是只让答对的 rollout 参与正样本项。
公式层面有一个细节:Eq. 7 把 M1 乘在 softmax 分子上,按字面 M1 = 0 时 log 的参数为 0;论文正文只说 M1 是 0/1 mask,没有给 M1 = 0 的实现分支。本页的交互只演示 M1 = 1 的正样本项,不对这个分支做补全。
对答错的 rollout,论文先算标注 CoT A 与 rollout B 的最长公共子序列 C,再分别嵌入 C、A\C、B\C。Eq. 8 让 rollout 的 C 靠近 annotated 的 A\C,同时把 rollout 的 B\C 推远:
原文 §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 个百分点。
PPO 部分沿用 ReFT 的 LRL = Lpolicy + αLvalue(Eq. 5);CARFT 再把对比损失按系数 c 加进去:
这个式子是 CARFT 的全部改动:策略优化还是 PPO,奖励还是答案对错加部分奖励,只是在同一个 step 里多算一项「当前 rollout 与标注 CoT 的对比」。论文没有引入新的 critic 或新的奖励模型。
固定 4 个样本的相似度,只算第 1 个正样本的损失项。拖动 s1 或 τ,看正样本权重和 L 怎么变。负样本的相似度是页面设定,用来展示 softmax 形状,不是论文数据;τ = 0.2 来自 Appendix A.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.598150exp(0.30/0.20) = exp(1.5) = 4.481689exp(-0.10/0.20) = exp(-0.5) = 0.606531exp(-0.50/0.20) = exp(-2.5) = 0.082085Z = 54.598150 + 4.481689 + 0.606531 + 0.082085 = 59.768455w₁ = 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.017131exp(0.30/0.10) = exp(3) = 20.085537exp(-0.10/0.10) = exp(-1) = 0.367879exp(-0.50/0.10) = exp(-5) = 0.006738Z = 90.017131 + 20.085537 + 0.367879 + 0.006738 = 110.477285w₁ = 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 的形状,不是论文实验数值的复现。
读完这节要知道:CARFT 没有第三个训练阶段;它是在 ReFT 的每个 RL step 里加了一次 CoT 编码和对比损失。
§3.2.1 的流程是两段:
Dtrain 采样 batch,当前 policy 生成一条 rollout;同时取出该题的标注 CoT。两条 CoT 都过 Eq. 6 得到嵌入,算 Eq. 7 的对比损失,再加到 PPO 的 LRL 上(Eq. 9)。Appendix A.1 · 论文给出的训练配置(原表不是表格,这里按条目转录)。
| 项目 | 设置 |
|---|---|
| 硬件 | 8 × H100-80GB |
| 加速 | FlashAttention + DeepSpeed ZeRO stage 3 |
| batch size | SVAMP:64;GSM8K:Qwen 64、CodeLlama 96 |
| 学习率 | SFT / warmup:1e-5;RL 阶段:3e-7 |
| KL 系数 | 0.05 |
| 对比温度 τ | 0.2 |
| 对比损失系数 c | 1e-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 的 G | 2(与 CARFT 每 step 最多两条 CoT 对齐) |
ReFT 对「能抽出数字但答错」的 CoT 给固定 0.1;CARFT 把它换成 Eq. 10:
这个式子把「答错」拆成了连续的两端:与标注 CoT 越不像,越接近 0.1;越像,越接近 0.3。论文的意图是给错误 CoT 一个比固定 0.1 更有区分度的信号,从而稳定训练(§3.2.4)。注意它只作用于「答案错误但能抽出数字」的样本;答案正确时奖励仍是 1(Appendix A.1)。
公式(与 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.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 的对比分支是净开销。
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 编码与对比损失。
这张图只画主实验的正向信号路径;负向信号的 LCS 分支在 Appendix A.3,没有画进来。
(x, c, y) 做几个 epoch,得到一个能生成 CoT 的初始 policy。Lc1。c·Lc1 加到 PPO 的 LRL,反传更新 policy;答错但能抽出数字的样本按 Eq. 10 给部分奖励。图里没有画 value function 的单独分支:Vφ 既用于 PPO 的 GAE,也用于 Eq. 6 的 softmax 权重。论文没有说这两个用途是否共享同一个 value head;这里只按 §3.2.2 与 §3.1 的符号画成同一个 Vφ。
先看 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 | 方法 | SVAMP | GSM8K | Average |
|---|---|---|---|---|
| CodeLlama-7B | SFT | 62.3 | 43.82 | 53.06 |
| CodeLlama-7B | ReFT | 62.5 | 50.27 | 56.39 |
| CodeLlama-7B | CARFT | 64.8 | 50.95 | 57.88 |
| Qwen2.5-7B-Instruct | SFT | 86.9 | 80.67 | 83.79 |
| Qwen2.5-7B-Instruct | ReFT | 85.9 | 66.11 | 76.01 |
| Qwen2.5-7B-Instruct | CARFT | 88.0 | 84.31 | 86.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 · SVAMP、CodeLlama-7B 的准确率与时间(原表三行全部转录)。
| 方法 | Accuracy | Time Cost (hours) |
|---|---|---|
| ReFT | 62.5% | 14.12 |
| Dr.GRPO | 63.7% | 24.49 |
| CARFT | 64.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%” 指的是最后这个相对时间差,不是准确率。
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 · CodeLlama-7B + GSM8K,不同 batch size 的 CARFT 准确率(原表两行转录)。
| Batch Size | Accuracy |
|---|---|
| 64 | 51.48% |
| 96 | 50.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-Instruct | SFT | 86.7% |
| Qwen2.5-14B-Instruct | CARFT | 88.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 · SVAMP + CodeLlama-7B 的消融读数(原图是柱状图,这里按图上的数字转录为 %)。
| 设置 | Accuracy |
|---|---|
| Positive Signal | 64.8% |
| Negative Signal | 62.9% |
| ReFT | 62.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 行对应正向信号版本。
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 一定更好”。
读完这节要知道: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 稳定”。