☰
快慢思考GRPO:视觉语言模型推理训练的双路径策略解析
2026/10/21 4:07:01 网站建设 项目流程

做视觉语言模型推理训练的人,过去半年应该都体会过一种拉锯:在纯语言任务上跑得好好的强化学习配方,一旦把图像编码进来,收敛曲线就像换了个剧本。视觉错误被当成事实、模型急着收尾、答案错了还语气笃定,这些都是典型的“快思考失控”。正因为这个痛点,看到“2025_NIPS_Fast-Slow Thinking GRPO for Large Vision-Language Model Reasoning”这个标题时,我第一反应是:终于有人把认知科学里那对老搭档正式搬进了多模态推理训练。这篇内容我想把这套工作背后的核心设计拆开讲清楚,包括GRPO怎么在没有价值网络的情况下给“快慢两条路径”打分、训练管线怎么搭、以及在类似的多模态推理训练里我反复踩过的坑。适合正在做VLM推理微调,或者准备把强化学习引入视觉语言场景的研究者和工程师参考。

很多开源的多模态模型已经具备不错的“看图说话”能力,但一旦问题需要跨区域比较、图表趋势判断、多步几何推理,它们经常会在感知层就埋下错误,然后一本正经地把错误条件当作已知前提继续推。问题的根源不在某个模块不够强,而在于训练目标默认了“所有问题都应该尽快回答”,模型没有被教育过什么叫“该停下来看看”。Fast-Slow Thinking这条路线的核心思路,就是显式地把“快速反应”和“慢速验证”训练成两种可切换的推理策略,并用GRPO这样的组内相对优化信号让模型自己学会何时启用哪条路径。

1. 为什么视觉语言推理需要“快慢结合”

1.1 视觉推理里最常见的三个坏习惯

先说结论:视觉语言模型在复杂推理上的失败,不是单一能力缺失,而是三个坏习惯叠加的结果。

第一个坏习惯是感知噪声被当成事实。OCR行列读反、图表刻度看漏、两个相近物体被混淆,模型把这些感知错误当既定条件,后续所有中间步骤都建立在一个错误前提上。纯文本模型很少遇到这种问题,因为输入本身是离散确定的;视觉输入天然有连续噪声,模型却缺少一个“先确认我看到了什么”的环节。

第二个坏习惯是提前锁定答案。自回归解码早期一旦形成错误概率分布,后续token基本都是在给自己圆场。表现在日志里就是:模型在第三个token就给出了一个错误数值,接下来二三十个token都在围绕这个数值编理由。这种现象在视觉任务里尤其严重,因为图像特征会强化模型早期的主观猜测。

第三个坏习惯是长程多跳推理短缺。空间方位比较、图表复合问题、几何证明这类任务,正确的推理路径往往需要先定位、再拆分、再代入约束、最后校验。很多模型没有经历过“必须停留足够长”的训练,输出一两句话就草草收场。

这三个坏习惯都指向同一个训练缺陷:没有区分“低预算快速回答”和“高预算慢速推理”这两种模式。一个模型如果对所有输入都用同一套期望长度和奖励标准,它往往会被梯度逼到“短平快”的局部最优。

1.2 双过程思想落到训练信号上

认知科学里的双过程理论说的是:系统1负责快速、自动、低耗能的反应,系统2负责慢速、受控、高耗能的推理。过去大家只在推理时给人加提示词,比如“请逐步思考”,这是推理端的软性控制,模型权重里并没有生成一套稳定的慢速策略。Fast-Slow Thinking这篇工作有意思的地方在于:它把“快慢”直接当成训练信号的一部分,用GRPO去优化两条路径各自的决策边界。

训练目标变得比原来多了一个维度:不仅要“答得对”,还要“知道这个问题该快还是该慢”。于是奖励设计不再是对每个问题给一个统一分数,而是分路径给分。快速路径回答正确且短小精悍,给高分;快速路径答错,给低分;慢速路径需要满足“确实产生了较长的中间推理结构”才给足奖励,否则哪怕答案对了也可能奖励打折。这样梯度就会告诉模型:有些问题应该调用快速反应,有些问题必须切换成慢速思考。

1.3 一条路径还是两条路径:共享权重下的策略分叉

这里容易产生一个误解:Fast和Slow是不是要训练两个模型?从这篇工作的设计逻辑来看,不是。更合理且更容易落地的做法是同一个模型、同一套权重,通过任务前缀或者特殊的输出格式标记来区分两条解码策略。比如提问中带“快速回答”标记,模型走短输出分支;带“逐步思考”标记,模型走长输出分支。二者共享视觉编码器和主干参数,只是在训练时用不同的奖励分布去塑造不同的行为模式。

这种共享权重设计的价值在于,快速路径学到的感知能力可以直接迁移给慢速路径,慢速路径学到的验证能力反过来也能修正快速路径的视觉编码偏差。训练过程中,两条路径通过GRPO形成的奖励对比关系,会让模型逐渐学会内部决策:当它感知到图像中某个区域存在歧义时,更倾向于输出较长的验证序列。

2. GRPO训练信号:不要价值模型,也照样给每条回答打分

2.1 从RLHF到GRPO:为什么要去掉Critic

要理解Fast-Slow GRPO里的GRPO,先得知道传统的策略优化为什么在多模态场景里别扭。PPO类方法通常需要维护一个Critic价值模型,用来估计每个状态的价值,然后计算优势函数。问题在于:多模态输入的价值函数估计远比文本复杂,图像特征和文本特征混合之后,Critic很容易过拟合到奖励噪声上。你要同时维护生成模型、冻结参考模型、价值模型三个网络,显存压力和优化不稳定性都是成倍增长。

GRPO做了个很聪明的减法:不训练价值模型,而是把同一问题的多条采样回答放在一个组里,用组内相对表现代替绝对价值估计。这种做法在数学和代码任务里已经被验证过,放到视觉语言场景里反而更合适,因为视觉样本的奖励往往稀疏且带噪声,批评家模型很难学稳定,但同一问题下多条回答的相对好坏更容易判断。

2.2 组内相对优势的计算细节

假设当前batch里有一个视觉问题 (q),我们对它采样 (N) 个回答 (y_1, ..., y_N)。每条回答经过一个规则化奖励函数得到分数 (r_i),这个分数可以同时融合答案正确性、格式合规性和长度约束。接下来计算组内均值和标准差:

[ \text{mean}(R) = \frac{1}{N}\sum_{i=1}^N r_i, \quad \text{std}(R) = \sqrt{\frac{1}{N}\sum_{i=1}^N (r_i - \text{mean}(R))^2} ]

每条回答的优势即为:

[ \text{adv}_i = \frac{r_i - \text{mean}(R)}{\text{std}(R) + \epsilon} ]

训练目标则是让策略模型最大化优势加权下的对数概率,同时加上对参考模型的KL散度约束,防止模型偏离初始化权重太远:

[ \mathcal{L} = -\frac{1}{N}\sum_{i=1}^N \text{adv}i \cdot \log \pi\theta(y_i \mid q) + \beta \cdot \text{KL}(\pi_\theta \parallel \pi_{\text{ref}}) ]

这个计算过程用伪代码表达,大概是下面这样:

def compute_group_advantages(rewards): mean_r = sum(rewards) / len(rewards) var_r = sum((r - mean_r) ** 2 for r in rewards) / len(rewards) std_r = var_r ** 0.5 + 1e-6 return [(r - mean_r) / std_r for r in rewards]

组内比较的自然结果是:哪怕这一组所有回答都很差,只要其中一条比其他的明显好,它也能得到正优势。这会在训练里产生一个有意思的行为偏移:模型会优先学习“矮子里面拔高个”,逐步把整组质量往上推。

2.3 一个直观算例:快答案和慢答案的得分差

拿一道图表趋势题举例:给一张折线图,问“两种产品在哪个季度的销量差距最大”。Fast路径采样的回答有三条,输出非常短,其中两条错、一条蒙对;Slow路径采样三条回答,每条都写了“先看第一季度差距、再看第二季度...最后对比”的完整推理。假设奖励函数是答案正确性加结构奖励,那么这批回答的分数可能是:

路径回答内容特点得分
Fast短答案,错误-1
Fast短答案,错误-1
Fast短答案,正确但无过程0.5
Slow有定位过程,最终错误0.8
Slow有定位过程,最终正确2.0
Slow有定位过程,最终正确,额外校验2.2

组内归一化后,最后两条Slow回答的优势会显著高于前几条Fast回答。梯度会推动模型在类似题目上提高慢速路径的概率,甚至让内部状态“预判”出这类题需要更长推理。这就是Fast-Slow GRPO的训练哲学:不是人为规定每道题必须快还是慢,而是通过组内相对信号让模型自己把“快慢”和“题目特征”关联起来。

2.4 在视觉语言模型里用GRPO时要格外留意的几个旋钮

GRPO看起来简洁,上手时还是有几个旋钮会影响训练质量。

第一个是组大小 (N)。N太小,比如4,组内方差不稳定,优势信号噪声大;N太大,比如32,单batch里多模态前向计算压力暴增,训练成本吃不消。我自己的经验是从12到16起步,配合较小的KL系数比较稳。

第二个是KL系数 (\beta)。视觉模型更容易发生过调,KL约束太松会崩,太紧则学不动。一般文本场景参考值是0.01到0.1,但多模态场景里视觉塔的特征扰动会额外放大偏离,建议把 (\beta) 稍微调大一点,甚至先做一两组消融。

第三个是奖励分布的形状。如果答案正确性奖励占比过高,模型会为了正确性不择手段拉长输出;如果长度惩罚过猛,慢速路径又学不出来。比较实用的做法是先把奖励分布做成平滑的分段函数,正确但冗长给中等分,正确且结构清晰给满分,错但过程完整给一个临界负分。这样模型能更清楚地识别“多写”和“写好”的差别。

3. 训练管线:两条路径、一套奖励框架

3.1 Fast路径先跑:用短输出建立感知应答基线

完整的Fast-Slow训练管线通常分成两个阶段,先训Fast路径,再训Slow路径。先训Fast的原因很简单:慢速推理的起点是“快速感知已经能给出一版不完美但可用的结果”,如果Fast路径质量太差,Slow路径要花大量token在纠正感知错误上,奖励会非常稀疏。

Fast路径的数据构造,把所有视觉推理题目统一改成“只需输出答案”的格式。训练时奖励函数只检查答案对错和输出长度上限,超过某个阈值就开始扣分。这一阶段的目的是让视觉编码器与语言解码器之间建立起稳定、低延迟的映射,哪怕这个映射在复杂推理题上表现一般,但至少不要产生离谱的误读。几个epoch跑下来,Fast路径在简单感知类任务上的准确率应该能到一个可接受的水平,这为下一阶段提供了可靠的梯度地基。

阶段转换有一个关键信号:Fast路径训练后期,如果验证集上的平均输出长度已经稳定在比较短的水平,同时准确率的提升开始走平,就可以切到Slow阶段。不要等Fast路径在复杂题上完全收敛,那会浪费训练时间,因为归Slow管的任务本来就不指望Fast能做好。

3.2 Slow路径接棒:让模型学会在中间状态停留

Slow路径的训练并不是简单地把“请逐步思考”塞进prompt。更重要的是奖励函数要识破“假慢”:模型输出很长一段话,但全是车轱辘话,没有定位关键区域,没有中间结论。这类假慢在日志里特别常见,尤其是在那些本身对图像区域很敏感的题目上。

我习惯在奖励函数里增加三个结构信号。一是定位信号:回答里是否出现了图中对象的坐标、行列号、图例标签这类关键词。二是中间结论信号:回答里是否分出明确的“先看这里→得出什么→再看这里→最终结论”的层次。三是结果校验信号:模型是否在给最终答案前先写了一句“对比所有候选区域后”之类的总括句。三个信号不必都强制出现,可以按题目类型加权,但至少要有一种能被检测到,否则慢速路径很容易退化成Fast路径的加长版。

Slow路径训练时,同一批题目最好同时保留Fast路径的采样回答作为组内对比项。这样GRPO才能直接学到“同一个问题,慢路径比快路径更好”的相对差异。如果单独采样Slow回答做组内比较,模型确实会变长变啰嗦,但它不会意识到“这题原本不用这么啰嗦”,快慢切换的决策能力就练不出来。

3.3 奖励框架的两个边界:别奖励空转,别惩罚严谨

设计Fast-Slow奖励框架时有两个边界特别容易踩穿。

第一个边界是奖励空转。如果奖励函数只数“生成长度”,模型没多久就会发现写废话没有即时代价,于是慢路径变成一台复读机。解决思路是引入中间变量验证:慢路径的奖励要绑定到“中间步骤是否可被独立认可”上,而不是单纯看有没有多写。哪怕只检查“是否出现图中元素名称替换后的等价表达”这种弱验证,都比只看长度的效果好得多。

第二个边界是过度惩罚严谨。如果长度惩罚设置成硬阈值,超过就直接扣分,模型会学到极限压缩输出,连必要的过程说明都不写了。更好的设计是分段软化:在目标长度区间内,长度不影响奖励;超出目标区间后,惩罚从零开始慢慢增大。这个分段函数可以让模型保留慢速推理能力的同时,不被长度约束逼到反向退化。

3.4 数据配比与超参:一组可以直接当起点的配置

以下一组配置不是我瞎凑的,是基于多次视觉语言微调实践后认为“不至于翻车太低”的起点值。具体项目中还需要根据数据分布调整,但它可以帮你省掉第一轮全盲搜索的时间。

配置项参考值备注
图像问答短题占比30%对应Fast路径
多步视觉推理题占比40%图表、几何、多物体空间题
纯文本推理题占比30%防止多模态和语言能力失衡
组大小 N12太小易震荡,太大成本高
KL 系数 β0.05多模态场景偏向保守
LLM主干学习率5e-6过高容易崩奖励分布
视觉编码器学习率0或1e-7冻结为主,最多轻微适配
微调方式LoRA 秩128保持基础权重稳定
Fast路径最大新token数64防止快路径失控
Slow路径最大新token数1024给足推理空间
Batch size128按显存调整

视觉编码器这里我建议默认冻结,原因放到下一节展开。整体来说,这套配置的定位是“先保证训练能稳定跑完,再看指标调方向”,而不是追求一次性刷到最高分。

4. 复现这类训练时最容易翻车的三个位置

4.1 慢路径悄悄“躺平”:部分模型会退回快路径输出

我在跑类似的Fast-Slow训练时,最容易遇到的现象是:训练日志显示奖励在涨、KL在震荡,但拉出实际生成的样本一看,慢路径的“慢”完全消失。模型会用“这里很复杂,综上答案是X”这种无关痛痒的长句蒙混过关,实际有效推理长度和Fast路径几乎一样。

根因有两层。一是奖励函数里结构信号占比太低,模型发现编两句废话和写完整的定位-推理-校验链条得到的奖励差距不大;二是生成长度的硬上限设置不当,慢路径生成被提前截断,模型只能草草收尾。排查办法很直接:把“有效推理token数”定义成不包含停用词、不包含重复后缀的token数量,训练过程中每200步统计一次慢路径的有效推理长度。如果这个指标持续下降,就要把结构奖励的权重上调,同时把生成上限放宽,再观察梯度对慢路径的偏向是否恢复。

4.2 奖励震荡:组内全错或全对时优势信号消失

GRPO的组内归一化有个隐患:如果某一组里所有回答的绝对质量都很差,组内均值就会很低,归一化后表现“相对最好”的那条回答也可能得到一个很大的正优势,模型会被带偏着去学一个本身错误的样本;反之如果一组里全都对了,优势又会被拉平,模型拿不到太多有效梯度。

这种震荡在视觉任务里更突出,因为同一个图像的感知难度可能让整组模型集体犯错。一个实用的稳定策略是给每组设置锚点(Anchor):在采样回答里混合一条来自已知正确路径的参考回答,并且这条参考回答不参与策略梯度更新,只参与组内均值和标准差计算。锚点的作用是把“绝对水平”重新注入到相对比较里,避免模型在一个全错的组里自嗨。另一个附加策略是监控组内奖励标准差,如果某组标准差低于预设阈值,直接跳过这一步更新,等价于给训练过程加了一个“置信度门控”。

4.3 视觉塔被连带训坏:多模态遗忘问题

全参数微调VLM时最经典的翻车,是把视觉编码器训到“对当前训练集过拟合”。具体表现是:训练集里的图表、截图、扫描件识别准确率上去了,但模型对自然图像、其他风格图表的感知能力出现肉眼可见的回退,甚至原本不错的OCR能力也开始掉点。原因是视觉塔在与任务对齐的过程中,部分特征表征被大幅度改动,丢失了通用视觉语义。

对于Fast-Slow GRPO这类双路径训练,视觉塔承受的压力比普通微调更大,因为Fast路径和Slow路径对它提出了不同的特征期望。我的建议是默认冻结视觉编码器,LLM主干配合LoRA进行策略调整。只有在冻结训练下Slow路径的定位信号始终学不出来时,才考虑用极低学习率和很小的秩去微调视觉塔,同时用一组固定的图文检索验证集做监控,一旦通用感知指标回退超过阈值,立刻回滚检查点。

5. 评测阶段的实际观察:快慢策略不是非黑即白

5.1 准确率和效率的坐标系:别只看Acc

Fast-Slow训练之后,评测思路也要跟着升级。只看整体准确率会掩盖很多问题:模型可能所有题目都走了慢路径,准确率上去了,平均推理成本翻了三倍;也可能模型学会了“困难题变慢,简单题变快”,整体效率和准确率同时达到一个不错的均衡点。

我习惯画出两个坐标系。横轴是平均输出长度,纵轴是准确率。Fast路径的部署模式对应左下方,Slow路径对应右上方,中间的完整切换策略会形成一条渐进曲线。理想训练结果是这条曲线向“右上凸”:在相同准确率下,平均输出长度尽可能短;或者在相同长度预算下,准确率尽可能高。两个指标单独看都容易骗人,放到这个坐标系里,快慢切换效果一目了然。

5.2 什么题目适合快、什么题目必须慢

用训练好的模型对一批典型题目做分档统计后,快慢路径的适用边界会很清楚。我自己的观察大致是:

任务类型推荐策略说明
单点OCR、简单计数Fast慢路径收益微小,纯浪费token
两个物体的空间方位比较Fast感知特征足够判别时,快路径已够用
图表趋势判断Slow需要横向扫多个数据点再比较
几何构造、重叠区域分析Slow涉及隐含约束,必须多步校验
开放域图像描述不建议GRPO强训没有稳定验证目标,奖励噪声大

这张表不是让你硬编码规则,而是帮助判断算力分配。实际部署时可以做一个很轻量的路由:用分类模型或阈值判断题目是否具备“多跳”特征,命中就切换到慢路径解码,否则走快路径。这样既保留了Fast-Slow训练的收益,又不会让每一个请求都背负慢路径的计算成本。

5.3 两个值得继续深挖的方向

这篇工作之后,有两个延伸方向我愿意多记一笔。

一个是把“过程奖励”引入视觉场景。现在很多规则奖励只能判断最终答案对不对,但视觉推理的中间步骤是否合理,其实可以用更细的信号去衡量,比如“中间结论是否与图像某个区域的事实性抽取结果一致”。如果过程级验证做得好,GRPO的优势信号就不会再被“结果对但过程荒谬”的样本污染。

另一个是把快慢比例做成可调路由。训练阶段可以用同一个模型生成Fast和Slow两套解码策略,部署时按业务需要调节慢路径触发率。这在算力受限的推理服务里特别有价值:白天低峰期可以多跑慢路径保证质量,高峰期限流时强制走快路径,吞吐和质量可以动态换挡。

我自己实际跑下来的体会是,Fast-Slow Thinking GRPO最有价值的地方不在于某个数据集上刷高了零点几个百分点,而在于它把“该在什么时候多花时间思考”这个能力真正编码进了模型参数里。快慢切换不该靠写死在prompt里,也不该靠外部路由硬分,而应该成为模型对图像内容和问题难度的一种自适应响应。如果让我再复现一次,我会优先做两个小实验:一组对比组内加锚点和不加锚点的收敛稳定性,另一组把长度惩罚的分段函数调得更平滑,看慢路径的中间步骤质量是否能进一步抬升。这两个位置,是整条训练管线里最值得花时间抠细节的地方。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询