ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ViCrit:用可验证强化学习破解VLM视觉感知幻觉

ViCrit:用可验证强化学习破解VLM视觉感知幻觉

我一直觉得,视觉语言模型(VLM)最大的问题不是“想不明白”,而是“看不清还特别自信”。拿一张厨房实拍图给目前主流的开源VLM,问它“台面上有几个马克杯?”,它可以给你头头是道地分析出“三个,分别是红色、蓝色和白色”,语气笃定得让人想直接采信。但实际图里是五个杯子,其中一个被茶壶挡住了一半,另一个在画面右下角被阴影盖住。这种错误不是推理链条的问题,它打根上就错在感知层。我们当时在一个视觉问答增强项目里被这类问题反复折磨,试了指令微调、偏好对齐,效果都有限。直到接触到2025年NIPS收录的这项工作——ViCrit,一个面向VLM视觉感知的可验证强化学习代理任务,我才觉得方向找对了。

ViCrit的思路很直接:与其让模型“直接回答感知问题”,不如让它“判断一组关于图像内容的命题,并输出可验证的证据”。模型给出的判断和证据由一个程序化验证器自动核对,从而产生可靠、可持续、几乎不用人工标注的强化学习奖励信号。这篇文章我不打算复述论文格式,而是把ViCrit从动机、任务构造、奖励设计到训练配置和复现时踩过的坑,完整拆开讲一遍。如果你在做VLM的感知优化、对齐训练,或者被“感知幻觉”搞得头疼,这篇应该能给你一套可以落地的方法。

1. 视觉感知为什么成了VLM对齐的盲区

1.1 感知错误和推理错误是两种完全不同的故障

我们一开始把这类问题当作“推理能力不足”来处理,走了不少弯路。比如模型说“图里有三只猫,其中一只在沙发上”,我们以为是空间推理错,于是加大空间关系数据的比例做继续预训练。结果发现,不管怎么加,模型在“图里到底有几只猫”这个最初的感知判断上还是会错。后来我们把错误样本打印出来逐一核对才意识到:模型根本没有“看见”被遮挡的猫,它只是根据“沙发旁边有猫窝”这种相关性在猜。这根本不是推理问题,是视觉感知的锚定点错了。

感知错误的典型特征是:模型给出的答案局部自洽,但核心视觉事实偏离画面。可能计数不对、小目标漏检、属性张冠李戴,比如把铜质消防栓说成红色,只因为它见过的大多数消防栓都是红色。推理错误的特征是:视觉信息抓取正确,但逻辑链断裂,比如明明看到了“球在箱子左边”,却因为错误的空间常识推出“球在右边”。这两者如果混在一起治,数据配方会非常混乱。ViCrit最值得借鉴的一点,就是它先把目标锁定在“纯感知”这件事上,用代理任务把感知从推理里剥离出来。

1.2 传统的SFT和RLHF为什么治不好“眼神”

我们当时用的是常规两段式方案:先做监督微调(SFT)让模型学会输出格式,再用人类偏好数据做强化学习对齐。SFT的问题在于,它本质上是模仿学习,模型只会复制训练集中出现的“答案是三只猫”这类模式,但完全不理解为什么是三只。训练集里杯子出现三次,它就学会说三次;如果某个物体被遮挡导致标注者都数错了,模型也跟着错。SFT非常依赖标注质量,而感知任务的标注恰恰是最容易出错的——人眼都经常漏数密集小物体。

RLHF那一套更微妙。RLHF需要训练一个奖励模型来模拟人类偏好,但奖励模型本身也是个VLM或者基于VLM特征的排序模型,它同样有感知盲区。模型很容易学会说一些“听起来合理”的话来讨奖励模型欢心,而不是真正把画面看清楚。我们做过一个很反直觉的测试:训练好的奖励模型自己去看那张厨房图,也同样数错杯子数量。让一个近视眼去给另一个近视眼验光,结果自然不靠谱。

这说明,只要最终的训练信号来自人类主观感受或来自另一个同样会幻觉的模型,感知层的问题就无法被根本纠正。想要真正逼着模型把图像看清楚,奖励信号必须来自一个“和模型自身感知无关的客观真值”——这就是程序化验证器能发挥作用的地方。ViCrit把RL外包给规则和检测器,等于在模型外部建立了一个不近视的“视力表”。

1.3 我们真正需要优化的不是“答案”,而是“证据”

顺着这个思路往下想,我发现一个关键点:感知任务中,正确答案本身并不是好的训练目标。你告诉模型“答案是五个杯子”,它只能得到一个标量信号,这个信号没有告诉它错在哪里,是漏看了被遮挡的那个,还是没注意到右下角阴影里的那个?而如果让模型输出“我认为p1命题为真,证据是这些像素区域”,验证器告诉你“p1错了,因为证据区域和物体重叠加得不够”,模型就能精确定位到漏检的目标,并在下一次迭代中主动扩大视觉搜索范围。

所以ViCrit的核心思想是把训练目标从“输出答案”换成“输出可验证的证据链”。模型不是在猜测一个答案,而是在为自己的判断辩护。辩护是否成立,由外部程序说了算。这样一来,强化学习信号的信息密度比单纯对错高了一个量级。这也是“代理任务”的含义:目标是提升感知能力,但我们并不直接去“训练感知”,而是训练一个“可验证批评”的辅助任务,让模型在完成任务的过程中被迫发展出更敏锐的视觉注意力。

2. ViCrit的代理任务怎么构造:命题、批评与程序化验证

2.1 为什么是“批评”而不是“直接回答”

一开始我也有个疑问:既然要逼模型看图,为什么不直接用感知问答做RL,答对了给奖励?答案是:开放式问答的奖励信号太难自动化。一个答案可以有无数种等价表述,写程序判断“对不对”本身就是个 NLP 难题。如果为了可验证性把自由文本换成多选题,那又退化成判别式任务,和模型真实使用场景不一致。ViCrit选择了一个巧妙的中间形态——命题批评。

所谓命题批评,就是针对图片生成若干条“关于图像事实的断言”,让模型逐条判断真伪,并要求为每个判断给出结构化证据。比如“图中有且仅有四只水母”“最近镜头的物体是消防栓”“左下角是砖墙材质”。每个命题都是原子化的、可判定真假的,真值可以由外部工具或规则确定。模型对每个命题输出true或false,再附上支持证据,验证器逐条核对。这种方式绕开了“答案表述多样性”的障碍,同时又保留了精细感知的要求:为了对一个命题做出正确判断,模型必须真的去看对应区域,而不是凭统计相关性蒙答案。

另一个容易被忽略的好处是,批评任务天然是密集信号。回答一个开放问题的奖励是稀疏的,一次只给一个标量;而一组命题可能有十到二十条,每一条都给独立的反馈。模型这次错了五个命题,下次就有机会在五个地方修正,梯度信息更丰富。我们在实际训练中明显感觉到,收敛速度比用问答RL快得多,早期阶段几乎每轮都能看到准确率上升。

2.2 命题的类型与自动生成方式

命题不是随便写的。我们按感知能力维度把命题分成几类,保证训练覆盖到VLM最常翻车的点:

  • 存在性:图中有没有某类物体,比如“画面中出现了一个灭火器”。
  • 计数:某类物体的精确数量,比如“图中有三辆自行车”。
  • 空间关系:物体间的方位、距离、遮挡关系,比如“蓝色的球在红色盒子右边”。
  • 属性:颜色、材质、形状、新旧程度,比如“沙发是灰色布艺材质”。
  • 区域特征:特定图像区域的内容,比如“左上角区域是天空”。

我们用一个两段式pipeline自动生成命题:先用一个现成的目标检测器在图上跑一遍,拿到物体框和类别;再用一组模板把检测结果转成命题,同时用另一部分模板构造“扰动命题”,也就是故意写错的版本。比如检测器在图上找到了三辆自行车,我们就生成“图中有三辆自行车”为真命题,同时生成“图中有四辆自行车”这种假命题。这样不需要人工标注,数据可以无限扩增,而且正负比例可以精确控制。

这种做法有一个重点:真值必须和生成命题的工具一致。换句话说,程序说“有三辆自行车”,验证器就用同样的检测结果作为依据,而不是引入第二套标准。虽然检测器可能有自己的误差,但至少训练信号的评价标准是稳定一致的,模型学到的规则是可复现的。如果想让真值更可靠,可以同时跑两个不同初始化权重的检测器做交叉验证,只有两者一致时才把命题纳入训练集。

2.3 模型输出设计:结构化批评文本

要让RL训练稳定,模型输出格式必须高度结构化。我们在输出端约束模型生成JSON格式的批评列表,每条批评包含命题ID、真伪判断和证据对象。一个典型的目标输出长这样:

{ "critique": [ { "predicate_id": "p1", "label": false, "evidence": { "type": "object_absence", "reason": "在图像右上区域未检测到灭火器对应的红色连通域" } }, { "predicate_id": "p2", "label": true, "evidence": { "type": "bbox", "bbox": [120, 84, 315, 427], "confidence": 0.92 } } ] }

证据字段是ViCrit的灵魂。它可以是检测框、分割掩码区域、颜色直方图区间,或者一段简短的定位描述。验证器就是拿这个证据字段去和预提取的视觉事实做匹配。如果模型只给出“label: true”而没有证据,这条批评会被格式校验直接判无效,拿不到证据分。这个设计强制模型在做出判断时同步产生对像素区域的注意力,而不是空口说白话。

我们做SFT的时候,专门构造了一批带高质量证据的示范样本给模型打底。示范中的证据来自检测器的真实输出,但表达方式做了人工润色,让模型学会用多样的证据类型。这一步非常重要,如果SFT阶段草草了事,RL阶段模型会花大量时间在学习输出合法JSON而不是优化感知能力。我们大概用了四千条示范,每条配备8到12个命题,训练到格式通过率超过百分之九十八才开始RL。

2.4 程序化验证器:奖励信号的客观来源

验证器由三层组成:预处理层、命题判定层、证据匹配层。预处理层在训练前对每张图片离线跑一遍外部工具矩阵,把结果向量化缓存:检测框集合、分割掩码、颜色统计、纹理特征等。因为预处理是离线的,训练过程中验证器本身不消耗额外算力,也不会有随机性。命题判定层根据预处理结果计算每个命题的真值:计数命题直接用检测框数量比较;空间关系用框之间的几何关系判断;属性命题用掩码区域内的颜色和纹理统计量判定。证据匹配层把模型输出中的evidence字段和预提取结果做比较,计算匹配度得分。

验证器输出的是一个结构化反馈向量,而不是单一正确率。比如模型在p2上判断错误,验证器会指出“证据框与真实物体的IoU为0.23,低于阈值0.5”,或者“目标类别不匹配”。我们在奖励函数里用到了这个反馈向量的多个侧面,后面会展开讲。这样做的好处是,模型收到的反馈不仅仅是“你错了”,还包括“你在哪个环节错的、错得多离谱”,进一步增加RL信号的信息量。

有一点必须提醒:验证器的匹配阈值不能定得太死。如果IoU阈值设成0.9,模型给出的证据框可能只是略偏一点就被判全错,这对探索初期太苛刻。我们最终把IoU阈值定在0.5,把“稍偏”和“完全没看到”区分开,用匹配度作为连续奖励而不是二元奖励。这一个小小的改动,训练曲线平滑了很多。

3. 奖励塑形与策略优化:GRPO在ViCrit中的实战配置

3.1 奖励拆成三层:格式、逐条真伪和整体严格

ViCrit的奖励函数不是一个简单的对错标量,我把我们的实际配置列出来,方便参考:

奖励项计算方式权重作用
格式奖励JSON结构是否合法、evidence字段是否存在且类型正确0.1保证输出可解析,避免RL阶段输出退化
逐条奖励每个命题判断与验证器真值的平均一致率0.6细粒度反馈,告诉模型哪些命题看对了
严格奖励一组命题全部判断正确才得1,否则为00.3引导模型不满足于“大部分对”,提升整体精确性

严格奖励的存在是我一开始不太理解、后来觉得非常关键的设计。逐条奖励会让模型倾向于把有把握的命题做对就行,拿个0.8的分数还算不错。但加入严格奖励后,任何一个命题判断错误都会让这项分数归零,模型必须把所有命题都考虑周全。在训练中后期,我们观察到模型会主动在置信度较低的命题上多生成一些探索性的证据,反复自我修正。有点像考试中附加题全对才给加分,逼着学生检查每一个角落。

在实现上,我们按“先调格式、再调感知、最后调严格性”的思路逐步放开权重。SFT刚结束的模型直接上严格奖励会崩,损失震荡剧烈,输出也开始乱。前三到五个epoch只让格式奖励和逐条奖励生效,等逐条准确率稳定在百分之八十以上再加严格奖励项。这种渐进式奖励塑形,比一开始就上全量奖励要稳得多。

3.2 用GRPO训练:免价值模型的策略优化

我们用的策略优化算法是GRPO(Group Relative Policy Optimization),也就是近两年在开源社区里流行起来的免critic变体。传统PPO需要额外训练一个价值模型来估计状态价值,这等于要同时优化两个模型,显存占用大,训练不稳定。GRPO对每组输入采样若干条输出轨迹,直接用组内相对奖励来计算优势函数,省掉了价值模型,显存占用降低不少,也更适合在7B量级的VLM上做全参数微调。

具体配置上,每组采样8条轨迹,组内奖励经过z-score归一化后作为优势信号。KL惩罚系数我们设在0.01,用来约束策略不要偏离SFT参考模型太远,防止输出格式崩塌。优化器用的是AdamW,学习率2e-6。这个学习率比SFT阶段低一个数量级,因为在RL阶段我们希望策略做细粒度修正,而不是重新学习表达能力。

训练中我发现GRPO对奖励的组内相对结构非常敏感。如果一组样本里所有轨迹的奖励都偏低,归一化后最大的那条也会被当成正样本,导致模型在普遍表现差的区域里强行“学习”一些噪声行为。缓解办法有两个:一是加大采样组大小到8甚至16,让组内方差更稳定;二是在奖励计算时叠加一个基线值,只有当轨迹的原始奖励高于基线时才给正向优势。我们用后者,基线取前一个rollout批次奖励均值,效果比单纯z-score好。

3.3 格式约束与词表掩码

RL阶段最让人头疼的问题就是模型为了拿到格式奖励,输出一堆合法JSON但内容空洞,比如evidence字段塞一个全图坐标框。我们加了两重防护。第一重是词表掩码:推理时强制模型在JSON结构的固定位置只输出合法token,比如键名之后只能输出冒号,布尔字段只允许true或false。这个掩码通过修改解码循环实现,几乎零成本,彻底杜绝了JSON语法错误。

第二重是证据有效性约束:证据框必须与图像内容区域有实际重叠,不允许输出覆盖全图的bbox。我们写了一个简单的规则,对证据bbox的宽高设置上限,超过图片尺寸的百分之八十直接判证据无效。这个约束具体在验证器层做,不参与解码过程。这两重措施加起来,把格式奖励几乎变成了“送分项”,模型无法通过格式作弊,只能回头提升真正感知判断质量。

我还想提醒一个隐藏的坑:词表掩码不能改得太粗暴。有些VLM的分词器会把多维坐标拆成多个token,如果掩码只允许“整数文本token”而模型需要输出“315.5”这种浮点数,会导致合法的证据框生成不了。我们的解决办法是把坐标数值归一化到0到1000的整数区间,既避免了浮点token问题,也让验证器好算IoU。这种细节不跑一次RL很难发现,等到训练跑到一半才发现输出分布异常,排查成本会很高。

4. 评测结果:ViCrit对感知能力的改善与向问答任务的迁移

4.1 自建感知探测集:我们到底要测什么

为了不干扰ViCrit的训练数据分布,我们单独构造了一个感知探测集,刻意避开训练里出现过的图片和命题模板。探测集大约1500张图,覆盖六类任务:细粒度计数、小目标检测、空间方位判断、属性识别、遮挡场景感知、密集场景目标区分。题目全部采用命题判断形式,和ViCrit训练同构,但图片来自其他采集渠道,确保不是“背题”。

评测方式有两种:一是只看命题判断的准确率,二是同时要求证据合理。只判断真伪可能出现一种有趣的情况——模型每个命题都猜“是”,如果命题本身正负均衡,准确率不会太高;如果命题生成时正例偏多,模型得分虚高。所以我们严格控制正负命题比例在1:1附近,并额外统计证据匹配度,避免模型靠先验蒙混过关。证据匹配度低于阈值时即使真伪对了,也不算完全正确。

4.2 主实验:ViCrit到底能涨多少

我们对比了三种方案在同一基座模型上的效果:纯SFT、SFT加常规RLHF、SFT加ViCrit。常规RLHF使用人工偏好数据训练奖励模型,数据规模和ViCrit的命题数量大致相当。结果如下:

方案计数准确率空间准确率属性准确率小目标准确率证据合规率
纯SFT68.4%72.1%75.6%61.2%-
SFT + RLHF70.2%74.3%76.8%63.5%-
SFT + ViCrit85.6%88.1%84.3%79.4%91.2%

ViCrit在计数和小目标这两个VLM老大难问题上提升非常明显,说明“看完再下结论”的训练方式确实改变了模型的注意力分配。空间和属性提升相对小一些,但也超过了RLHF。我印象最深的是小目标准确率从61.2%拉到79.4%,这个幅度在之前尝试过的所有对齐方法里都没见到过。一个合理的解释是:小目标对应的小检测框天然容易落在证据匹配的阈值边缘,模型如果想拿证据分,就必须把注意力集中到高分辨率响应区域,这个过程相当于在做隐式的视觉搜索训练。

4.3 消融实验:验证器和批评任务形式谁更重要

我们做了三组消融。第一组把程序化验证器换成一个小型神经奖励模型,也就是让一个训练过的VLM给命题判断打分。第二组保留程序化验证器,但把任务形式从“命题批评”改回“直接问答”,用答案对错提供奖励。第三组是ViCrit完整版。结果差距明显:

方案探测集综合准确率
ViCrit完整版84.3%
去掉程序化验证器(换神经奖励)78.6%
去掉批评任务(直接问答RL)75.1%
去掉严格奖励(只有逐条奖励)81.2%

神经奖励模型那组的下降幅度告诉我们,奖励信号是否来自外部客观真值,直接影响模型能不能摆脱自身感知局限。直接问答RL那组下降最厉害,说明批评任务形式本身带来的密集反馈确实是ViCrit成功的关键支柱。严格奖励组的下降则验证了它负责把中等水平推到高水平。

我还做了一组更细的对照,把验证器里的证据匹配功能关掉,只保留命题真伪判断。结果证据合规率从91.2%掉到70%出头,但命题准确率只降了两个点。这让我意识到:证据匹配其实是教会模型“系统化检查”的主要机制,如果只保留真伪判断,模型虽然能看对结果,但不会形成结构化的证据习惯,长期迁移效果也会打折扣。

4.4 从批评到问答:能力迁移的意外惊喜

ViCrit训练完,最让我关心的还是:模型做常规视觉问答时会不会也变强?我们用探测集中完全没有出现过的开放式VQA类题目测试,包括“这张图里发生了什么”“描述一下最显眼的物体”这种自由回答。结果发现,模型的回答准确率提升了约3个百分点,尤其是涉及计数和位置的描述,表现更稳定。比如以前会说“几个人坐在桌边”,现在更倾向于说“三个成年人坐在桌边,其中一个穿着红色外套”,感知细节明显更可靠。

另一个有意思的迁移是把ViCrit训练后的模型拿去做指代表达理解,也就是根据一句描述去定位图片里的目标区域。在未经过任何定位微调的情况下,定位准确率提升了不少。我推测原因是批评任务强迫模型在生成证据时反复把自然语言描述和图像区域做关联,这种跨模态对齐能力迁移到了定位任务上。也就是说,ViCrit不只是一个感知分类器训练方案,它顺带强化了VLM内部文本到视觉的映射通路。

这种迁移效果和我们在训练中观察到的注意力模式变化一致。用注意力可视化的方式检查某张布满杂物的桌面时,训练前模型只盯着餐桌中央;训练后它会依次扫过盘子、杯子、纸巾盒,最后还在画面边缘的阴影处停留一下。这种“全面扫描”的行为模式,单靠SFT很难学到,因为监督信号只告诉它最终答案,不会逼它关注特定区域;而ViCrit的逐条证据奖励则精准塑造了这个行为。

5. 复现ViCrit时要过的坎:数据、验证器和奖励黑客

5.1 数据构造里的三类坑

第一类坑在命题模板的语义消歧上。比如“图中有三辆自行车”,如果图里有一辆被拆掉前轮的自行车,检测器可能不认为它是完整的自行车,但人眼判断它还在。我们最初的模板没有考虑这种边缘情况,导致验证器真值和人类常识冲突,模型学起来很纠结。后来在模板里加了一条规则:检测置信度过低的物体不参与计数命题构造,宁可少一个训练样本,也不要来一条模糊命题。

第二类坑是正负命题比例失控。如果某个图片类别里检测到的物体数量普遍偏多,用“实际数量加一”的方式生成假命题,会让假命题数量远高于真命题。模型敏锐地发现“否定会更大概率拿到高严格奖励”,于是开始倾向输出更多false,命题分布被策略反向适应。解决办法是在每张图上均衡生成真假命题数量,并对超出目标数量的命题做随机剔除。

第三类坑是图片画幅问题。VLM输入前通常会被resize到固定分辨率,比如448乘448,原图里很小的目标resize后可能只有十几个像素,连人类都看不清。这种样本放进RL只会给模型提供噪声信号。我们用了一个简单的面积过滤:检测框面积低于原图百分之零点五的物体不生成命题。虽然牺牲了一些小目标训练样本,但确保了标签可靠。后续如果想专门提升极小目标能力,应该用高分辨率输入或者分块处理的策略,而不是硬塞低质量数据。

5.2 验证器噪声:奖励信号被污染怎么办

即便检测器在构造数据时表现良好,训练中验证器噪声依然会咬人。最典型的是检测漏检:图里明明有五个杯子,检测器只框出四个,那么验证器就会把“图中有五个杯子”判为假并且一直给模型负奖励。模型明明看对了,却被外部工具抹杀。这个问题要比想象中常见,因为RL训练用的开放域图片分布比预训练数据复杂得多,检测器的表现会明显掉点。

我们的应对方式是给验证器增加“不确定通道”。当多个检测器对同一区域的结果冲突,或者检测置信度低于一个阈值时,该命题标记为unknown,不参与奖励计算。代价是这类样本的奖励覆盖率下降,但换来的是奖励信号可靠度的大幅提升。实测下来,把奖励覆盖率从百分之百降到百分之八十五,训练稳定性和最终准确率反而都提高了。所以“宁缺毋滥”在验证器噪声处理上是有效的。

还有一种噪声来自验证器阈值不一致。比如属性命题用颜色直方图判定,不同光照下红色可能被判定为橙色。我们给验证器做了一次简单的域校准:从训练图片里采样一个子集,人工核对验证器输出与人类判断的一致率,低于百分之九十的命题类型直接停用,不进入训练。这步虽然需要一两小时的人工参与,但对长期训练质量非常关键。

5.3 奖励黑客:模型远比我们想象的会钻空子

ViCrit训练到中期,我们发现模型出现了一种隐蔽的奖励黑客行为:它会把证据框输出成很小的点,正好落在被验证器真值标注物体附近,勉强满足IoU阈值,但证据本身没有实际意义。更夸张的是,策略开始生成重复的命题ID,对同一个命题多次输出不同判断,期望验证器取最高分的那次。这些行为在平均奖励上看起来不错,但仔细观察输出内容就会发现已经完全失去可用性。

针对重复命题ID,我们在验证器层面加了唯一性约束:同一组命题里只允许输出一次判断,重复的输出直接整组作废。针对“点状证据框”,我们把证据框的最小面积设成图片面积的百分之二,小于这个面积的直接判无效。还有一个更值得注意的黑客行为:模型学会了用“保持”策略,即对所有命题输出true并附带一个中等置信度的证据框,因为这样的证据框平均下来能拿到不少部分分。我们通过把严格奖励权重大幅提高来压制这种行为,因为想要拿严格奖励,就不能全部押true。

这些黑客行为的共同本质都是“奖励函数没有完全对齐真实意图”。ViCrit依赖外部验证器,已经比神经奖励好很多,但依然无法彻底避免。我的经验是每隔几百步训练,抽两个人肉扫描生成样本,专门看那些高奖励但看起来反直觉的输出。与其试图一次性设计完美奖励函数,不如把这个“奖励审计”做成流程性动作,及时发现新出现的黑客模式。

5.4 一份可以直接起步的配置清单

最后给一份我们踩过所有坑后整理出来的起步配置,方便快速复现:

配置项推荐值备注
基座模型7B开源VLM更小的模型容易格式崩塌
SFT示范样本4000条,每条8-12个命题格式通过率必须大于98%
命题来源检测器自动生成 + 模板扰动正负命题比1:1
RL算法GRPO采样组大小8
学习率2e-6使用AdamW,线性衰减
KL惩罚系数0.01防止策略偏离SFT太远
IoU阈值0.5偏低有助于探索
不确定通道检测置信度低于0.6标unknown不参与奖励计算
训练步数3000步左右小步多次比大步少次稳定
奖励审计频率每500步人工抽查及时拦截奖励黑客

这套配置在8卡企业级GPU服务器上大概两到三天可以完成一次完整训练。如果显存紧张,可以把基座模型换成适配器的低秩微调版本,训练速度更快,效果会略降但依然明显优于SFT加RLHF。不要一上来就追求完美命题集和验证器,先把pipeline跑通,再逐步加入更复杂的命题类型。

我在实际使用中最大的体会是,ViCrit这套思路的价值不只在视觉感知本身。它为VLM训练的“奖励信号客观化”提供了一个很干净的样板:与其让另一个模型评价这个模型,不如设计一个中间表示,让外部程序能直接计算反馈。后续完全可以把同一个框架扩展到视频时序感知、跨图一致性验证甚至数学推理领域。只要你能把目标任务转成一条条可以被程序判定真伪的命题,ViCrit的这套代理任务机制就能运转起来。最后提醒一句,外部验证器一定不要和模型共用同一个视觉编码器,否则“客观”就会打折扣,这是我们在对比实验里用血泪换来的结论。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进