G1 论文笔记:从模型怎样学习,到图推理强化学习
给语言模型一张图的边列表,让它找最短路径。模型可能知道 BFS 的定义,也能写出一段像样的分析,却仍然读漏一条边、重复访问节点,或者给出一条不够短的路径。
G1 研究的就是这个落差:能否利用可以自动生成、自动验证的图论问题,通过强化学习改善语言模型的图推理表现?
这篇笔记沿着阅读时的理解顺序展开:先明确图问题怎样进入模型、怎样判对错,再追问训练信号怎样改变参数。遇到优势估计、旧策略和正则化时,分别停下来建立这些知识,再将它们放回 G1 的训练流程。推导中使用的小图和概率都是教学示例;实验数字依据论文对应表格与阅读记录。正文承担首次解释,文末保留额外推导、符号与复现速查。
论文是 Xiaojun Guo 等人的 G1: Teaching LLMs to Reason on Graphs with Reinforcement Learning。本文以 arXiv v3 为阅读版本。它的主要贡献在图任务数据、可验证奖励训练和迁移实验;CoT 蒸馏是可选的冷启动环节。
1. G1 为什么选择图论任务?
1.1 先明确输入、任务与输出
图由节点与边组成:节点表示对象,边表示对象之间的关系。无向边允许双向连接,有向边规定方向,边权则可以表示代价。路径是一串相邻节点,路径长度在无权图中按边数计算,在加权图中通常累加边权。输入、任务与图类型必须一起说明。
传统程序已经能可靠求解许多图问题。无权最短路径可以用 BFS:用先进先出的队列,按离起点一跳、两跳这样的层次扩展;第一次发现某节点时就能记录一条最短路径。非负权重最短路径可以用 Dijkstra:按当前已知距离选取节点并更新邻居的距离。G1 关注的是通用语言模型面对文本化图结构时的能力:它能否读取关系、维护状态,并完成多个不同任务?
困难主要有三层。图没有天然的节点顺序,文本却必须按顺序输入;算法需要维护队列、访问集合、前驱关系等动态状态;已有图推理训练数据的任务覆盖与规模也存在限制。
例如 BFS 中,“节点已被发现”“节点已经出队处理”“节点已经展开完毕”是不同状态。混淆这些状态,就可能重复入队或遗漏节点。生成算法术语并不能消除这些执行错误。
1.2 为什么需要 Erdős 这样的数据集
论文报告 Erdős 覆盖 50 类任务、约 100K 训练样本和 5K 测试样本,训练问题每类约 2,000 条。任务包含节点数、邻居、BFS、最短路径、拓扑排序、图同构映射、Hamiltonian Path 等,也覆盖有向图和加权图。
其构建过程可以概括为:从 Network Repository 的真实网络中采样小图,通常为 5–35 个节点;使用带重启的随机游走等方式得到子图;构造任务与文本输入;用 NetworkX 求解或准备候选答案验证程序。部分特殊任务还需要相应的图构造约束。
“真实网络”和“合成任务”在这里同时成立:前者描述图结构来源,后者描述问题与答案的生成方式。采样后的小图也不必保留原网络的全部全局性质。
G1 训练使用 Edge List。例如:
Undirected graph, nodes: 1, 2, 3, 4, 5, 6.
Edges: (1,2), (1,3), (2,4), (3,5), (4,6), (5,6).
Question: Find a shortest path from node 1 to node 6.
图必须先变成 token 序列。我们可以从功能上把任务分解为“解析文本 → 还原关系 → 图上计算 → 输出答案”,但这只是分析视角,不表示模型内部存在四个独立模块。
论文的 Easy、Medium、Hard、Challenging 综合考虑了任务性质与模型表现。它们不是严格的计算复杂度分类,也不能用来代替 P、NP 等概念。
1.3 三类验证奖励分别检查什么?
| 奖励 | 检查方式 | 需要注意的边界 |
|---|---|---|
| Strict Value Matching | 数值或确定结果是否匹配 | 数字解析、分数表示和浮点误差需有明确规则 |
| Jaccard Index | 预测集合与正确集合的重合程度 | 部分正确的终局反馈,仍不检查中间过程 |
| Algorithmic Verification | 候选解是否满足图论约束 | 解的合法性与最优性需分别检查 |
Jaccard 定义为:
正确集合 与预测 的交集大小为 2,并集大小为 4,因此奖励为 0.5。它给了部分正确答案更细的信号,但没有逐步奖励模型的推理。
最短路径则可能有多解。上面的例子中,[1,2,4,6] 和 [1,3,5,6] 都应被接受。验证器至少要检查起终点、相邻边是否属于原图,以及路径代价是否等于最优值。只比较某条参考路径的字符串会错杀其他正确解。
针对不同结构化答案,检查规则还要具体到任务:
| 任务 | 候选解应通过哪些检查 |
|---|---|
| Hamiltonian Path | 恰好覆盖所有节点一次;相邻节点间存在原图的边 |
| 欧拉回路 | 每条原图边恰好使用一次;首尾相接;有向图还需符合方向 |
| 拓扑排序 | 包含全部节点且无重复;每条有向边的起点在终点之前;任务前提为 DAG |
| 最小生成树 | 边属于原图、覆盖全部节点且形成树;加权时还需达到最优总权重 |
这里列的是正确验证器应满足的要求,实际代码是否完整实现,还需审计。集合匹配也不意味着任务一定多解:共同邻居通常有唯一的正确集合,只是集合中元素的书写次序不重要。对于两个空集合,Jaccard 公式的分母为零,必须另行约定;无向边的两种端点顺序也应归一化。
数值匹配应先解析再比较,例如 0.5 与 1/2。阅读时核对的 G1 浮点比较使用 量级的绝对容差,具体阈值属于实现约定,而非图论定义。解析失败、非法节点与重复元素也需要明确处理。
验证合法解不总是容易验证最优解。对于困难组合优化任务,最优性检查本身也可能需要昂贵计算,不能泛化为“所有图问题都很容易验证”。
现在已经有了问题和判分规则,接下来缺的是学习机制:一个程序返回的分数,怎样改变语言模型下一次生成答案的概率?
2. 模型究竟怎样从训练数据中学习?
2.1 训练改变的是条件概率分布
把语言模型写成 :给定问题 ,参数为 的模型生成回答 的概率。对于自回归模型:
模型每一步先产生词表上的概率分布,再选择下一个 token。训练通过损失函数、反向传播和优化器改变参数,从而改变这些概率。它没有把参考答案直接写进某个独立的“答案存储区”。
预训练主要通过大量文本的下一个 token 预测学习语言与知识。后训练在已有权重上引入更有针对性的信号,例如指令示范、教师输出和奖励反馈。G1 从 Qwen2.5-Instruct 继续训练,因此起点已经是经过指令调优的模型。
2.2 SFT:提高示范序列的概率
假设图中存在两条同样短的路径:A → B → C 和 A → D → C。训练数据给出第一条作为示范 ,监督微调的基本损失为:
如果把整条示范的概率简化为一个数,概率从 0.2 提高到 0.8,负对数损失就从约 1.609 降到 0.223。真实训练逐 token 计算,并根据实现使用掩码和归一化。对单一正确 token,交叉熵就是它的负对数概率;概率越低,损失越大。
训练时,每个位置通常接收正确答案的前缀,这叫 teacher forcing。例如预测 C 时,前缀来自示范中的 A → B →,而不是让模型先自由生成一条路径。推理时,后续输入则来自模型自己先前的输出,因此早期错误可能逐步累积。
单参考答案训练只展示了一个解,另一条合法路径没有从这条数据中得到直接监督;这不意味着 SFT 只能学习唯一答案。可以加入多个参考解,问题在于数据覆盖与目标组织方式。
2.3 蒸馏:监督信息来自教师
知识蒸馏关心教师向学生传递什么信息。SFT 关心学生怎样拟合示范,两者可以同时成立。
| 蒸馏方式 | 教师提供什么 | 学生怎样学习 |
|---|---|---|
| 序列级/硬标签蒸馏 | 生成的答案、解释或推理轨迹 | 将教师输出作为目标序列,进行 SFT |
| Logit/软标签蒸馏 | 每个位置的 token 概率分布 | 用 KL 等目标匹配教师分布 |
例如教师认为两个候选 token 的概率分别为 0.7 和 0.3,软标签蒸馏就希望学生学习这整个分布,而不只是记录概率最高的第一个候选。常见目标使用 KL 散度衡量分布差异;后文讨论参考策略时会具体建立它的定义。温度 通过 调整分布平滑程度;具体损失还可能包含温度缩放与监督项。
G1 的冷启动更接近第一种:32B 教师生成推理轨迹,程序筛选最终答案正确的候选,再让 3B、7B 学生进行 SFT。这里没有要求学生访问教师 logits,也不能据此认为学生完整复制了教师的内部推理能力。
2.4 RL:提高高奖励输出的概率
同一道最短路径题,如果验证器接受所有合法最短路径,就可以让两条正确路径都得到 1,非法或非最短路径得到 0。目标变成:
SFT 拟合已有示范,RL 采样策略输出并利用奖励进行优化。两者最终都更新模型参数,但使用的训练信号不同。RL 的优势依赖于能否探索到有价值的输出,以及奖励能否可靠反映任务要求;它不保证比 SFT 更好。
图 1:三者共同改变学生模型的输出概率。蒸馏描述信息来源,SFT 和 RL 描述不同的优化方式;教师生成的数据可以用于 SFT。图中为教学示例。
3. 奖励怎样变成梯度,动作的贡献又怎样估计?
3.1 从图回答到连续行动
| 强化学习概念 | 在语言模型中的对应 |
|---|---|
| State,状态 | 问题和已生成前缀 |
| Action,动作 | 下一个 token |
| Policy,策略 | 条件分布 |
| Rollout,采样轨迹 | 一次完整生成的推理文本与答案 |
| Reward,奖励 | 外部验证器对结果给出的评价 |
在 G1 这种终局奖励设置下,生成结束后才评价最终答案。验证器可以是普通程序,无须对模型可微。
3.2 为什么一个不可微的奖励也能训练模型?
先固定一道题,假设奖励函数本身不随 改变。利用 :
这就是 REINFORCE 的核心关系。我们不对验证器内部的图算法求导,而是让奖励乘上模型输出的对数概率梯度。又因为整条回答的 log probability 是各 token log probability 之和,终局反馈也能影响推理文本的生成概率。
一个可计算的例子:只有“成功”和“失败”两个结果,,奖励分别为 1 和 0。那么 ,直接求导为 ;REINFORCE 的期望也是 。当 时,两者都是 0.21。
这里的“无偏”,指估计梯度的期望等于真实目标在当前参数处的梯度,而不是每次更新方向都正确,更不是保证抵达全局最优。需要采样分布、奖励不依赖参数以及求导交换等条件成立。
但期望成立,不代表一次采样就准确。有限样本的梯度估计可能有很高方差;如果采到的结果全错,原始二值奖励也难以提供有效信息。
3.3 同样得到 1 分,为什么有些行动更值得鼓励?
只使用最终分数时,采样的运气和行动的贡献混在一起。简单题答对可能很平常,困难题答对则超出当前模型的通常表现。为此需要一个预期基准。
令未来折扣回报为 。 控制远期奖励的相对权重:例如 ,两步后的 1 分折算为 0.81。折扣可以表达任务偏好或服务于估计与收敛,并不是因为未来奖励必然更不确定。有限长度的终局任务也可以取 。
状态价值 回答“从这里按当前策略继续,通常能拿多少分”;动作价值 则先指定这一步动作。二者的差值是优势:
比如当前状态的预期回报是 0.6,一次后续采样得到 0.9,那么 是正的优势估计;得到 0.4,则估计为 −0.2。后者仍然拿到正分,却低于基准。单条结果只是估计,并不能据此断定某动作的真实优势。
3.4 Actor 与 Critic 分别学习什么?
Actor 可以借用“演员”的比喻:它根据状态选择行动,在 LLM 中就是生成 token 的策略模型 。Critic 像“评议者”,但它不是凭审美给答案打分,而是学习预测当前策略未来的回报,常记为 。
Reward 来自环境或验证器;Critic 根据已经获得的奖励学习预测。二者不能混为一谈。一个最简单的价值训练目标是:
平方误差越大,表示价值预测与训练目标偏离越多;最小化它是在校准 Critic,而不是直接更新 Actor。其中 是回报目标,训练时通常不让该目标随本次求导改变。实际实现还可能采用 bootstrapping 或其他价值损失。
整个闭环是:Actor 产生轨迹,环境返回奖励;Critic 用这些数据校准价值预测;Actor 用基于价值与回报的优势估计调整策略。它们协同学习,不是零和博弈;Critic 也不必与 Actor 同样大,甚至可以共享部分参数。训练 Critic 的成本取决于这些设计,不能笼统称为“显存和算力翻倍”。
为什么基线有用?对于固定状态,若 不依赖本次采样动作,则:
因此在原始策略梯度中减去这样的基线,不改变期望梯度;选得合适时能降低方差。基线估得不好不保证降低方差,组均值包含自身样本时也不满足相同的独立性条件,额外推导放在文末。
3.5 TD:把一步后的信息带回当前预期
仅有一个状态价值,还没回答“刚才那一步比预期好多少”。时序差分使用一步奖励与下一状态价值,更新对当前状态的判断:
例如 ,当前预测为 0.6,这一步奖励为 0,下一状态预测为 0.8,TD 误差就是 0.2。若已真正终止,未来价值应置为 0;最终奖励为 1 时,误差就是 。
这叫 bootstrapping:用已有价值估计帮助构造另一个学习目标。它可以让算法在终局奖励到来前形成局部估计,但并未凭空产生中间步骤的正确性真值。估计错误也可能继续传播。LLM 的批量 PPO 实现通常仍先收集完整回答,再统一计算这些量,不能从 TD 的公式推出它会每生成一个 token 就立即反向传播。
3.6 GAE:为什么要把后续 TD 误差也加进来?
只用当前 很依赖一步后的价值预测;直接用整段真实回报又受后续随机事件影响。GAE 将一串 TD 误差按距离衰减后相加:
假设三步 TD 误差为 ,,那么第一步的优势估计为 。它把后续变化的一部分纳入当前动作的估计,但不证明这些变化全由当前动作造成。
| 估计形式 | 主要取舍 | |
|---|---|---|
| 0 | 只取当前 TD 误差 | 更依赖价值预测,通常减少长程采样噪声,但会受价值误差影响 |
| 1 | 完整终止轨迹下为 | 更多使用实际回报,避免后续价值预测误差,但保留采样波动 |
| 0 到 1 之间 | 多步 TD 误差的指数加权 | 在价值估计误差与长程随机性之间折中 |
“低方差”不意味着神经网络预测没有随机性; 也不是对所有目标都无偏的保证。若轨迹仅被截断而未终止,还会留下末端价值项;折扣、离策略数据和优势估计的定义也会影响结论。GAE 原论文
回到 G1:现在可以看懂它省掉了什么。常见 PPO 用 Critic 与 GAE 构造优势,G1 的结果奖励 GRPO 改用同一道题的多次采样比较。先理解这项替代,再看它的收益与限制。
4. 一批旧回答,怎样用于更新后的模型?
4.1 Old Policy 是采样时的自己
LLM 生成长回答很昂贵。我们希望收集一批轨迹之后,能用 minibatch 做若干次优化,而不是每动一次参数就重新采样。
记生成这批数据的策略为 。更新开始时,Current 与 Old 可以相同;参数更新后,Current 逐渐改变,这批数据的生成分布却没有改变。Old 描述的是这批数据的来源,不是前一个 minibatch 更新后的模型。下一轮重新采样时,再使用当时更新后的策略。
实现可以缓存采样时的 log probability,不必一直保留一套额外 Old 网络。当前策略需要重新计算同一前缀、同一已采样 token 的概率;分母与优势通常在这轮更新中视为常量,梯度从分子进入。
4.2 重要性比值怎样修正分布差异?
对同一个固定状态,若新策略有概率的动作在旧策略下也能采到,则:
如果某个动作的概率从 0.20 变为 0.24,比值就是 1.2。旧数据中它出现得偏少,就用较大权重计入。真实文本生成的状态前缀也随策略变化,因此逐 token 动作比值并没有自动修正整个轨迹分布。
PPO 使用旧策略状态与动作样本,构造 这样的替代目标。它为附近的策略更新提供方向,不是任意新策略下真实回报的精确表达。PPO 仍通常被归为 on-policy 方法,不是可以无限复用历史数据的任意离策略算法。
4.3 先理解 clip,再理解外面的 min
数学函数 将一个数截到区间内。例如区间为 ,输入 0.5、1、1.5,输出分别为 0.8、1、1.2。这里的 clip 与图文模型 CLIP 无关。
PPO-Clip 最大化:
假设 ,把优势分别固定为 +1 和 −1,就能直接检查四种情况:
| 优势 | 比值 | 原项 | 裁剪项 | min 选中什么 |
|---|---|---|---|---|
| +1 | 1.5 | 1.5 | 1.2 | 1.2:正确方向已走得较远,不再追加该项收益 |
| +1 | 0.5 | 0.5 | 0.8 | 0.5:好动作反而变少,仍保留纠正梯度 |
| −1 | 0.5 | −0.5 | −0.8 | −0.8:降低概率已较充分,不再追加该项收益 |
| −1 | 1.5 | −1.5 | −1.2 | −1.5:差动作反而变多,仍保留纠正梯度 |
如果只有 clip(ratio)*A,无论变化方向对错,超过上下界都会变平;min 保留了不利方向上的未裁剪目标。这里“更保守”是指不大于未裁剪替代目标,不能把它说成真实期望回报的全局下界。PPO 说明
变平的是某个样本项的局部目标,不是模型整体停止更新。 其他 token、KL、熵以及共享参数仍能改变这个概率,所以 clipping 不能把实际 硬锁在区间内,也不保证模型能力不会退化。后文 G1 使用的 dual-clip 又增加了处理负优势极端情况的规则,要与这里的基础 PPO 分开。
5. G1 怎样用同题比较替代 Critic?
5.1 组内优势从哪里来?
GRPO 为同一道题采样 条回答,用组内奖励构造相对优势:
是数值稳定项。以奖励 为例,均值是 0.4。若用总体标准差 ,优势约为 ;若按所核对源码的默认样本标准差 ,则约为:
两种数值来自不同标准差约定,不能混用。GRPO 省去了单独训练 Critic 的成本,但仍有同题多次采样的开销。
图 2:同题五次采样中,奖励高于组均值的回答得到正优势,低于均值的得到负优势。下方展示二值奖励全相同时的无区分信号情况。数值采用样本标准差,忽略极小稳定项。
一个回答的轨迹级优势被广播到它的有效生成 token 上,不等于逐 token 判断了推理正确性。正确答案中的错误中间步骤,也可能共享正优势。这是结果奖励下的信用分配局限。
5.2 为什么题目过难和过易都会削弱组内信号?
如果组内奖励全是 0,或者全是 1,分子 都为 0,加稳定项也不会创造差异。这里消失的是任务奖励对应的组内策略优势;KL、熵等其他损失仍可能产生更新。
在独立同分布的二值采样假设下,单次成功率为 时,一组同时包含成功和失败的概率是:
当 ,有区分度的组只有约 4.90%; 时约 40.95%; 时为 93.75%。这解释了冷启动、任务难度分布和采样组大小为什么重要。对于 Jaccard 等连续奖励,不能直接套用这个二值公式。
5.3 为什么还需要 Reference Policy 与 KL?
Old 是短期采样参照。如果每轮更新都只与上一轮比较,小步变化仍可能累积成很大漂移。Reference 提供较长期的行为参照,因此它与 Old 的角色不同。
对同一前缀上的两个 token 分布 ,KL 定义为:
它表示从 采样时,log probability 比值的平均。KL 非负、相同分布时为零,但通常不对称,因此不是普通的距离度量;若 ,还可能为无穷。说分布“更远”时,必须说明方向和衡量方式。
例如两动作分布从参考的 变为 ,当前到参考的 KL 约为 0.368;反方向约为 0.511。这也说明交换两者会改变正则的含义。
G1 在任务目标外加入参考 KL,用来抑制相对参考分布的漂移。 越大,其他条件相同时正则权重越大。但 KL 不会识别所有语法错误、奖励漏洞或能力遗忘,也不保证未评测任务上的表现。它是一项优化取舍,验证器可靠性和能力评测仍需独立检查。
5.4 熵正则化鼓励什么?
熵描述一个分布自身的不确定程度:
两个动作各 0.5 时,熵约为 0.693;概率为 0.9 和 0.1 时约为 0.325;完全确定时为 0。最大化熵,会鼓励分布保留多样性,而不是过早把概率集中到少数动作。
图任务中,早期发现的一条路径可能反复被采到,减少对其他解的尝试。熵项为保持探索提供一种激励,但它既不是往参数中加入随机噪声,也不等于温度退火,更不保证采到更好的解。采样温度改变生成分布,熵正则通过损失改变参数,两者要分清。
G1 正文核心公式没有展开熵项,但附录配置与发布脚本包含系数 0.001。解释实际训练时应将它补上,不能据此臆测作者省略的动机。
将交叉熵定义为 ,就能把前面两种蒸馏目标联系起来: 。教师分布固定时, 不随学生变化,最小化交叉熵等价于最小化该方向的 KL;RL 中当前策略本身会变化,不能随意删掉与它相关的熵项。
5.5 有了优势和 ratio,怎样读完整的 GRPO 目标?
用 表示第 条回答,长度为 。一种常见的 GRPO 表达为:
先读内层:每个生成位置有自己的概率比值,整条回答共享一个结果优势。再读外层:对回答内的 token、同题的回答以及问题分布进行聚合。期望也包含旧策略采样的随机性,不只对问题求平均。
其中 是上面解释的参考策略 KL 项或其采样估计,系数 控制正则权重。 是一种聚合选择,不是策略梯度定理要求必须加入的项。G1 所核对实现使用有效 token 总体平均,不能直接把本式逐字翻译成它的训练代码;两种聚合的差别在训练实现处说明。
6. 把这些知识放回 G1 的训练流程
6.1 两条主要路线与两个 SFT 对照
G1-Zero 从 Qwen2.5-Instruct 直接进行 RL;G1 先做 CoT-SFT,再进行 RL。“Zero”只表示没有额外的图推理 CoT 冷启动,起点并非随机参数。
此外,论文比较 Direct-SFT 和 CoT-SFT:前者学习程序生成的最终答案,后者学习教师生成的推理轨迹与答案。两者都是监督学习,只是目标序列与数据构造不同。
图 3:Erdős 提供问题和结果验证;教师轨迹用于可选的 SFT 冷启动;RL 阶段由学生自己生成候选答案。训练中的 NetworkX 验证不表示模型推理时自动调用图算法工具。
6.2 CoT-SFT:先让正确轨迹更容易被采到
论文从每类任务初始抽取约 100 道题,用 Qwen2.5-32B-Instruct 每题采样 8 次,温度为 1.0,只保留结果验证通过的轨迹,并对困难任务补充采样。最终得到约 4,500 条轨迹;配置表使用约 4.4K 的口径。
假设每次独立成功的概率是 ,采样 8 次至少成功一次的概率为 。当 时约为 72.75%。增加采样可以提高拿到正确候选的机会,也会增加教师生成成本;这不表示 8 次在理论上最优。
这一过程同时包含三个概念:教师提供示范是蒸馏,筛掉不合格候选是拒绝采样,学生拟合留下的轨迹是 SFT。这里的 RFT 指 Rejection Sampling Fine-Tuning,教师本身没有因此进行 RL 更新。
需要保留一个限制:筛选依据主要是最终答案,不能保证自然语言 CoT 每一步都正确。学生可能同时模仿正确结果和有缺陷的解释。冷启动提供了行为示范,严格算法执行能力还需另行检验。
6.3 一次 RL 更新实际做了什么?
- 抽取一批图问题,用采样策略为每题生成 5 条回答。
- 提取最终答案,按任务调用验证器,获得每条回答的标量奖励。
- 按同题分组,计算相对优势,并将其广播到有效生成 token。
- 计算当前、旧策略与参考策略对这些 token 的 log probability。
- 计算策略损失、KL 正则与熵项,反向传播并更新 Actor。
- 用更新后的策略继续采样,保存权重并在独立测试集上评估。
三个策略的职责必须分清:
| 策略 | 职责 | 是否更新 |
|---|---|---|
| Current Policy | 当前接受梯度更新的 Actor | 优化过程中改变 |
| Old Policy | 生成这批样本,提供概率比值分母 | 随采样轮次刷新 |
| Reference Policy | 为 KL 正则提供参照 | 通常固定,不由 Actor 优化器更新 |
沿 G1-3B 发布脚本,Actor 和 Reference 的初始化来自指定的 CoT-SFT 检查点。Reference 不能简单理解成“永远是最初的 Qwen-Instruct”。
6.4 总损失怎样对应实际训练?
将上面已理解的部分合起来,最小化的损失概念性写为:
策略项推动相对高奖励行为,KL 对照 Reference,熵鼓励多样性。注意熵前面的负号:优化器最小化损失,减熵才相当于鼓励更高熵。
公开配置采用逐 token ratio,默认 token-mean 聚合,即有效 token 的损失总和除以有效 token 总数;它不同于先按每条回答长度平均、再对回答平均。例如两条回答分别为 10 和 100 token,前者让每条回答的外层权重相同,后者在聚合中为长回答保留更多 token 项。实际梯度还取决于各项数值和方向,不能推出“长十倍,梯度必然十倍”或“必然学会注水”。策略损失实现、Actor 更新
Verifier 的标量通常放在回答最后一个有效 token 对应的位置,再由优势计算将轨迹分数转为训练权重。这个张量位置不意味着只有最后一个 token 能接受梯度,也不意味着前面的推理步骤被逐个判分。
G1 借助 verl 组织这条数据流。verl 是面向 LLM 后训练的 RL 框架,衔接 vLLM 等采样引擎与 FSDP、Megatron 等训练组件,负责相应的数据、权重和资源调度。它不是另一种奖励函数,也不替代 GRPO 的数学目标。G1 使用的是其仓库中的实现,不能拿最新版 verl 的默认行为倒推论文实验。verl 官方文档
常规 3B 脚本设置包括:Prompt Batch 512、每题 5 条 rollout、Actor 学习率 、KL 与熵系数各 0.001、最大输入 2,048 token、最大回答 4,096 token,面向 8 GPU。512 个问题对应 2,560 条候选回答,并非一次显存内同时完成全部前向与反向。训练入口
7. 实验到底支持了什么?
7.1 同分布图任务:总体收益明显
| Erdős 平均准确率 | Qwen2.5-Instruct | G1 | 提升 |
|---|---|---|---|
| 3B | 22.72% | 59.76% | +37.04 个百分点 |
| 7B | 32.06% | 66.16% | +34.10 个百分点 |
7B 在 Easy、Medium、Hard、Challenging 上分别达到 95.07%、88.91%、50.44%、23.57%。越难的任务,距离稳定求解仍然越远。平均值提高不能掩盖复杂任务的失败。
精读材料对正文概览与详细表中的少量数字存在口径提醒。例如 Easy 基线在概览表中为 57.16%,部分细表采用不同数值;因此不能把所有来源中的分组提升无条件混算。复现应保存逐样本结果,明确按任务宏平均还是按样本微平均。
图 4:四项评测分别展示同分布、规模外推和跨基准表现。所有点使用相同的 0–100% 轴;连线仅连接同项评测的两个模型分数,不表示训练轨迹。数据见论文 Table 2、跨基准结果及 Appendix D。
7.2 SFT 与 RL 都有效,组合收益不能简单相加
3B 的几个主要结果是:
| 路线 | 平均准确率 | 直接说明什么 |
|---|---|---|
| Base | 22.72% | 起点 |
| Direct-SFT | 53.78% | 最终答案监督本身有很强收益 |
| CoT-SFT | 43.56% | 少量轨迹监督也能改善表现 |
| G1-Zero | 约 50.10% | 没有额外 CoT 冷启动,RL 仍然有效 |
| G1 | 59.76% | 此设置下,CoT-SFT 后继续 RL 得到更高总体分数 |
不能把 CoT-SFT 相对 Base 的增益与 G1-Zero 相对 Base 的增益相加,作为组合方法的预期收益。二者改变了同一个策略分布,探索到的轨迹和后续收益也随初始化改变。
也不能据此断言 RL 全面优于 SFT:3B 的 Direct-SFT 在 Hard、Challenging 上分别为 43.69%、14.43%,高于 G1 的 41.25%、7.57%。Direct-SFT 与 CoT-SFT 的数据量、长度和 epoch 又不同,约 98.7K 条最终答案与约 4.4K 条轨迹并非严格的等预算对照。
7.3 困难任务训练:收益与代价同时出现
| 3B 路线 | Easy | Medium | Hard | Challenging | Average |
|---|---|---|---|---|---|
| G1 | 94.86 | 84.64 | 41.25 | 7.57 | 59.76 |
| G1-Hard | 69.36 | 70.64 | 48.50 | 17.43 | 53.30 |
| G1-Soft | 96.07 | 83.55 | 40.88 | 11.71 | 60.38 |
表中均为百分比。G1-Hard 聚焦 Hard 与 Challenging;G1-Soft 按难度调整奖励。
G1-Hard 提高了困难任务表现,同时牺牲简单任务与总体平均。它还把组大小从 5 改为 16、最大长度从 4,096 改为 8,192、KL 与熵系数从 0.001 改为 0.0005,训练步数也发生变化。因此,这个结果不能只归因于任务采样比例。
G1-Soft 用 0.2、0.4、0.6、0.8 对不同难度奖励缩放。但在同题组内标准化之前统一乘正数,理论上会被标准化抵消。它的实验变化应结合实际加权位置与训练配置继续核对,不能直接解释成“困难任务奖励更大,所以梯度更大”。推导见文末。
7.4 图的顺序改变时,什么应当不变,什么应当跟着变?
最短路径正确率提升之后,还要问:换一套节点编号是否仍然有效?这需要先区分置换不变性与等变性。
设节点重编号为双射 。如果输出是图的节点数、直径这样的图级标量,重编号后答案不变,称为置换不变性。如果输出是每个节点的类别或一条节点路径,则应随编号同步变化,称为置换等变性。
用邻接矩阵 、节点特征矩阵 表示图,节点置换同时作用于两者:
对路径来说,1 → 2 → 4 在映射 下应变成 8 → 3 → 6。但如果有多条最短路径,模型也可以选另一条同样合法的最短路径;评测不应要求唯一字符串完全对应。
再区分两种操作:打乱 Edge List 的书写次序,没有改变节点身份;节点重编号则改变了输入和输出的标签,需要同步变换问题、起终点、特征与参考解。二者不能用相同的字符串一致性规则判断。
对共享节点更新规则并采用对称邻居聚合的 GNN,通常可以建立节点置换等变性,再通过 sum、mean、max 等对称读出得到图级不变性。无位置编码且掩码也兼容置换的自注意力也具有相应性质;带因果掩码和位置编码的自回归 LLM 不能直接套用这个结论。
因此,G1 跨表示评测是在经验上检查模型的结构稳健性,不是从架构上证明它满足严格的置换性质。
7.5 泛化要按层次看
规模外推。 训练图通常为 5–35 节点,36–100 节点评测中 G1-7B 从 Base 的 23.94% 提高到 46.46%。这支持一定的规模迁移,但低于原 Erdős 上的 66.16%;较大图的 Challenging 准确率仅为 5.22%。
规模增长还会拉长输入。论文附录 D 的固定边概率 ER 图估计中,100 节点约 7,843 token,500 节点约 230K token。这些数字依赖图密度、编码和 tokenizer,不能当作所有图的通则。评测超长图时必须先核对完整输入、截断与上下文配置,否则无法独立判断算法能力。
跨图分布与基准。 G1-7B 在 GraphWiz 从 44.69% 提高到 57.11%,在 GraphArena 从 28.84% 提高到 41.10%。这说明收益不只留在原训练分布。任务级结果仍有反例:GraphWiz 的 Subgraph Matching 从 61% 降到 50%。跨基准泛化不等于每种未见任务都改善。
输入表示与稳健性。 GraphArena 带来不同图来源和部分语义化节点名称。论文也做了重复评估采样和 prompt 改写实验;它们支持测试范围内的稳健性,但重复评估不等于多次完整重训,更不自动证明节点重编号和边序置换不变性。
7.6 跨领域迁移:保留完整对照才看得清楚
Cora、PubMed 的节点分类和链接预测同时涉及结构与文本语义。7B 的四项平均分从 Base 的 85.50 降到 CoT-SFT 的 73.17,再升至 G1 的 87.29。这里既有相对 SFT 的恢复,也有相对 Base 的净收益,不能只报告中间到最终的较大增幅。
3B 的相应平均为 65.66 → 75.12 → 75.16。RL 相对 CoT-SFT 的平均增量只有 0.04 个百分点,而且 PubMed 链接预测从 71.52 降至 69.75。不能把该尺寸上的全部收益归给 RL。
非图推理评测也存在尺寸差异:
| 基准 | Base-3B → G1-3B | Base-7B → G1-7B |
|---|---|---|
| GSM8K | 81.95 → 79.30 | 86.27 → 87.49 |
| MATH-500 | 62.20 → 61.80 | 69.80 → 71.80 |
| MMLU-Pro | 38.53 → 37.11 | 45.75 → 48.56 |
7B 的三项结果提高,3B 则均略降。额外的 32B G1-Zero 实验中,GSM8K 为 90.67 → 90.75,MATH 为 76.80 → 80.80。这些结果支持特定设置下的能力保留或迁移,尚不能写成普遍的“图 RL 提升所有推理能力”。MMLU-Pro 的总分也可能掩盖学科间的上升与下降。
要判断模型是否更会使用图结构,可以增加仅文本、完整图文、随机扰动边等对照。例如比较:
再比较 G1 与 Base 的结构增量。这是后续实验设计,原结果还没有独立识别结构、语义和一般行为变化各自的贡献。
8. 模型究竟学到了什么?
论文 Section 5.4 分析最短路径回答中的 BFS、Dijkstra 和直觉式搜索风格。Base 混用不同策略,G1-Zero 更偏向直觉式路径探索,CoT-SFT 后的 G1 更偏向 BFS 风格。
这说明初始化与 RL 会改变可观察的解题行为。CoT-SFT 改变初始轨迹分布,也可能改变后续 RL 更常探索和强化哪些回答。但行为标签、最终答案和内部计算机制属于不同证据层次。
例如,模型写了“使用 Dijkstra”,却读错一条边,说明它没有正确执行该算法,不能归因于 Dijkstra 本身不可靠。相反,一条没有标准算法术语的直觉式路径,也可能恰好正确。
要检验可观察的 BFS 执行,至少需要记录:
并检查出队、邻居扩展、去重、首次发现和前驱更新是否符合规则。若需要精确比较轨迹,还应约定邻居访问顺序;不同合法遍历顺序不应被错判。
可以把后续验证分成三组:
| 实验 | 控制与观察 | 能帮助区分什么 |
|---|---|---|
| 输入与预算 | 控制节点数、边数、编码、完整输入和生成长度 | 上下文限制、表示困难与计算困难 |
| 等价图变换 | 打乱边顺序、节点重编号,并同步映射答案 | 对表面排列的依赖与结构稳健性 |
| 中间状态干预 | 提供正确、错误或仅改措辞的中间状态,检查续推 | 局部规则掌握、状态维护与误差累积 |
这些都是进一步研究方案。即使结构化轨迹全程通过验证,直接证明的也是模型能产生符合算法规则的外显行为;要证明它忠实呈现内部实际计算,还需要更强的因果与机制证据。
8.1 如果希望检查中间过程,可以怎样构造监督?
G1 的结果验证只能确认最终解;CoT-SFT 虽然训练了中间文本,也不自动拥有逐步正确性标签。更准确的区别是:是否提供推理示范、是否对步骤进行评价,以及评价依据是否可靠。这几件事可以组合,不能把 SFT 与过程监督视为互斥类别。
过程奖励模型(PRM)。 为每个指定步骤学习一个分数,例如判断一次推导是否成立。步骤标签可以来自人工,也可以来自其他自动程序;PRM 可以用于训练奖励或推理时的候选排序与搜索,不一定每生成一步就在线更新模型。Let’s Verify Step by Step 给出过程监督与 PRM800K 的代表性研究。分数仍是学习式判断,会受标注和模型误差影响。
从某个前缀继续采样,多次尝试后最终答对的比例,也可以构造步骤价值信号。但它估计的是“在当前续写策略下,这个前缀还有多大机会成功”,不等同于该步骤在逻辑上正确;后续模型可能纠错,也可能从正确前缀继续答错。不能把两类标签混写。
可执行的状态验证。 对 BFS,可以让模型输出出队节点、队列、已发现集合和前驱表,由程序检查状态转换。若访问不存在的边,环境明确拒绝;如果下一状态满足规则,才能继续。这给出了指定算法语义下的过程检查,但仍依赖解析器、状态定义、验证器覆盖和实现正确性。通过有限代码测试也不等于程序在所有输入上正确。
执行轨迹蒸馏。 直接运行可信图算法,记录每次入队、出队与前驱更新,将轨迹转为 SFT 数据。相较自由生成的自然语言解释,它更容易获得明确的执行依据;但记录器、模板和算法前提仍需检查,学生也不会因为训练轨迹正确就自动获得未来所有输入上的正确性保证。
形式化证明检查。 在适合形式化的任务中,模型可以生成 Lean、Coq 等系统可检查的证明对象。通过内核检查,支持的是在所用公理、定义和信任基础下的形式化命题;仍需核对形式化题意与原问题是否一致、有无未证明占位或额外假设。它不等于所有自然语言推理都已被验证,也不是 G1 已实现的训练环节。
| 路线 | 反馈依据 | 仍需验证什么 |
|---|---|---|
| CoT 示范 + 最终答案筛选 | 教师文本与最终结果 | 中间步骤是否正确 |
| PRM | 学到的步骤评分 | 标签语义、判别误差与评分漏洞 |
| 算法状态检查 | 明确的状态转换规则 | 规则覆盖、解析器与实现 |
| 执行轨迹 SFT | 程序实际运行记录 | 记录可靠性与学生泛化 |
| 形式化证明 | 形式系统中的证明对象 | 题意映射、公理与信任基础 |
这些路线提供了不同形式的监督,成本也取决于任务与实现,不能统一排出“绝对正确性”或“性价比最高”的顺序。对 G1 更直接的后续问题是:在匹配数据与预算后,过程检查是否改善长轨迹执行和图规模外推?
9. 研究评价与复现:先检查训练信号
9.1 这篇论文值得保留的贡献
G1 把多个图论任务组织成统一的数据与验证体系,接入成熟的 RL 训练框架,并用多个评测分布展示后训练收益。它提供了继续研究结构推理的基础:任务可以程序化生成,结果有明确约束,训练与评测能够共享这些约束。
其算法组件主要来自已有技术。对于“激发潜在能力”“学到通用图算法”等更强解释,当前结果仍需补充过程验证、严格分布隔离、预算匹配和结构变换实验。
9.2 Verifier 正确性决定了实际被优化的目标
程序验证减少了人工标注与语言模型裁判的依赖,但程序本身也可能出错。
本次静态核对公开 utils/reward_score/graph.py 时,is_minimum_spanning_tree() 检查候选边是否组成覆盖节点的树,却没有在函数内显式检查每条候选边属于原图;is_valid_edge_set() 主要检查数据结构与元素类型。比如原图只有 (1,2),(2,3),候选 (1,2),(1,3) 虽然构成树,却使用了不存在的边。奖励源码
这构成一个应当验证的潜在误判入口。这里完成的是函数静态阅读,没有运行官方完整奖励调用链,也没有证明模型在训练中已经利用该问题。端到端影响仍需结合任务路由、图构造和最小测试确认。
核心关系是:RL 优化验证器实际给出的奖励。如果奖励误判,模型可能得到与真实任务正确性不一致的训练信号。最优性验证、非法输入、空集合、重复节点、浮点容差,都值得先检查。
9.3 按成本递增做复现
| 阶段 | 做什么 | 成功标准 |
|---|---|---|
| 推理与评测 | 用官方检查点跑固定测试集 | 保存逐样本输出,核对解析、解码协议与任务平均分 |
| 数据与验证器 | 核对任务分布、划分,测试正确解、非法解和边界情况 | 关键奖励与独立检查一致,异常可解释 |
| 最小 RL 试运行 | 少量数据、短步数完成采样到优化 | 损失有限、分组正确、参数更新、检查点可保存 |
| 完整训练与消融 | 固定版本、初始化、预算并重复训练 | 性能和主要趋势可重复,报告随机性与成本 |
下载模型得到接近论文的分数是推理复现;跑通两步训练是训练流程试运行;从指定权重重新训练并复现主要结果才是更完整的实验复现。本文完成的是阅读整理和静态核对,未执行 G1 训练或基准复现。
研究方向上,可以先做验证器审计,再讨论动态难度采样与可验证过程推理。后一方向利用 BFS 等算法的形式化状态转换,为中间步骤提供可检查的反馈。但新增过程奖励也要验证覆盖范围,并控制额外监督与计算预算。
10. 补记:公式、术语与实现中容易漏掉的细节
10.1 组均值基线不完全等同于独立基线
正文中的“减基线不改变期望”要求基线不依赖当前采样动作。组均值包含当前样本自己,条件不同。
固定问题、独立同分布 on-policy 采样,令 。只减组均值、不除标准差、不做 clipping 时:
交叉项因独立性和 消失,自身项留下固定缩放。用其余 个样本构造 leave-one-out 基线,或在这些理想条件下乘 ,可以去掉这一缩放。
再除随机的组内标准差,会引入与奖励分布、题目成功率相关的权重变化,通常不能视为一个全局固定学习率调整。有限组采样、clipping、长度聚合和离策略更新也各有影响。存在统计偏差不自动意味着算法无效,但需要明确它实际优化的目标。
10.2 奖励乘难度系数,为什么可能不起作用?
若同一题的奖励全部乘以正数 ,在忽略稳定项时:
有稳定项时:
当 明显大于稳定项时,差别通常很小。因此,要理解 G1-Soft,应核对加权发生在归一化前还是后,以及是否还有其他奖励处理、采样或配置差异。这个代数疑点可以先用数值检查研究,无须立刻重训模型。
10.3 Token ratio、完整序列 ratio 与 GSPO
完整回答的概率比值为各 token ratio 的乘积:
如果两个 token 的比值为 1.5 和 0.7,完整序列比值是 1.05,算术平均却是 1.10。逐 token clipping 与序列级 clipping 不等价;在旧策略附近,某些未裁剪一阶梯度可能具有对应关系,但不能据此替换整个目标。
学习过程中提到的 GSPO 使用长度归一化的序列比值,即各 token ratio 的几何平均 ,也不是完整序列 ratio 本身。GSPO 是补充比较概念,不能写成 G1 已使用的方法。
长度聚合也要单独分清:
前者让每条回答具有相同的外层权重;后者按有效 token 聚合。这改变不同长度轨迹的相对贡献,但不能只凭归一化形式就断言模型必然生成更长或更短的答案。G1 所核对配置默认为后者。
10.4 KL 的采样估计与实现补记
正文已分别建立三者的含义。查阅时可以记为:Clipping 对照 Old,KL 对照 Reference,Entropy 描述 Current 自身;原始 PPO-Clip 不强制额外加入 Reference KL。
KL 可以进入 reward,也可以作为独立 loss。G1 发布脚本启用后者,不能在解释组内任务奖励时默认 KL 已包含其中。所用 low_var_kl 以
构造采样代理项。它由 保证非负;在相应采样假设下可估计 KL。实际使用旧策略样本、裁剪估计值等处理后,不能称为每步都精确计算完整词表分布的 KL。
10.5 复现配置中的不一致要显式记录
以下项目来自附件的源码审计记录,以及本次对公开代码的静态复核。公开 main 会变化;真正复现时应固定 commit、数据 revision 与最终生效配置。
| 项目 | 阅读时发现的差异或检查点 |
|---|---|
| Clipping | 附录正文写 0.02,Table 11 与所核对默认配置为 0.2 |
| 标准差 | 教学可用总体标准差;源码默认 torch.std 为样本标准差,并加 |
| 损失粒度 | 论文序列级简式需与 token ratio、dual-clip、token-mean 分开理解 |
| 数据规模 | 论文约 100K;附件记录公开训练分区约 98.7K,下载后需重新核对实际行数 |
| CoT 数量 | 正文约 4,500,配置表约 4.4K,不据此反推精确拒绝率 |
| 数据目录 | 预处理输出须与 RL 入口读取的 data/graph_task 等路径对齐 |
| SFT 权重路径 | 附件记录 models/CoT-SFT-3B 与 models/cot_sft_3B 命名不同,须手动衔接 |
| 训练时长 | 论文报告 300 steps,发布脚本设 3 epochs;实际步数受数据和批量配置影响 |
| 长度限制 | Prompt、Response、总上下文是不同预算;较大图评测需另核截断和超长处理 |
训练入口可从 官方仓库 的 preprocess_graph.py、run_sft.sh、run_3B.sh 追踪;评测说明 给出不同基准的入口。先核对路径、GPU、依赖与有效配置,再运行脚本。官方已发布 CoT-SFT 检查点,验证 RL 流程时可以从这里起步,无须先重做教师采样。
10.6 几组术语放在一起记
| 容易混淆的概念 | 应保留的区别 |
|---|---|
| Outcome / Process Reward | 最终结果的部分分数仍属于 outcome;process 需检查指定中间步骤 |
| 合法性 / 最优性 | 一条路径合法,不保证最短;一棵树覆盖节点,不保证边来自原图 |
| Maximal / Maximum | 极大表示无法再扩展,最大表示全局规模最优,不能互换任务定义 |
| 算法风格 / 算法执行 | 使用 BFS 术语与逐步满足 BFS 状态规则是不同证据 |
| 外显轨迹 / 内部机制 | 可验证输出行为不自动等于内部计算的忠实记录 |
| 随机评测 / 重复训练 | 多次采样评估的稳定性不证明完整训练的随机种子稳健性 |
| pp / 相对增长 | 32.06% 到 66.16% 是增加 34.10 个百分点,非相对增长 34.10% |
读完 G1,我保留的研究判断是:程序可验证的图论任务提供了一条有效的 LLM 后训练路线。下一步最值得追问的是,奖励是否准确、收益能否跨越更严格的分布变化,以及模型能否持续产生可验证的算法执行行为。这些问题需要在准确率之外继续测量。
参考资料
- G1 论文 v3:数据与方法见 Section 3–4,实验与行为分析见 Section 5,训练和详细结果见附录。
- G1 官方代码:重点入口为图奖励函数、GRPO 核心计算、Actor 更新和训练配置。
- Erdős 官方数据集:复现时固定数据版本,核对样本行数与任务分布。
- PPO 原论文、GAE 原论文、DeepSeekMath:分别对应 PPO、优势估计与 GRPO 的基础来源。
- GSPO 原论文:用于补充理解序列级优化,与 G1 方法区分。
本文根据六节精读、深入讨论与补充知识记录整理,以理解问题安排章节,保留关键公式、实验反例和待验证问题。配图为原创 SVG;本文没有执行模型训练或声称完成论文复现。