首页 / 资讯中心 / 文章详情

视觉语言模型自改进:对比偏好如何突破复杂推理瓶颈

视觉语言模型自改进:对比偏好如何突破复杂推理瓶颈 ★ FEATURED ARTICLE
多模态大模型发展到今天“看得懂”已经不算什么本事“想得明白”才是分水岭。我最近一直在跟视觉语言模型VLM的复杂推理较劲实测下来很多模型在简单识别上接近满分但一碰到空间关系、数量比较、多跳逻辑推理就开始一本正经地胡说八道。这篇拿下顶会Oral的工作标题叫《透过对比的视角视觉语言模型中的自改进视觉推理》恰好踩中了我在实际项目中反复踩坑的那个位置怎么让模型不靠人工标注只用自己的生成数据完成一轮又一轮的推理能力进化。整篇工作的核心主张可以压缩成一句话在自改进过程中与其让模型给答案打绝对分不如让它做对比判断——在两个甚至多个候选推理中选出更合理的那一个再把这种对比偏好变成训练信号。这个思路听起来朴素实际操作后会发现它绕开了自改进里最致命的几个坑。如果你正在给VLM加推理能力、做多模态数据的自生成或者想知道对比式偏好优化在视觉任务上怎么落地这篇内容应该能帮你省下不少试错时间。1. 先拆清楚这篇工作到底在解什么题1.1 视觉语言模型的推理短板到底在哪视觉语言模型的结构大家都很熟悉视觉编码器抽特征语言模型负责输出文本。训练目标决定了它擅长“看到什么说什么”而不擅长“根据看到的推出什么”。前者是感知后者是推理两者对能力的要求完全不同。我在评测一些开源VLM时就经常遇到这样的情况让它描述图片内容几乎挑不出毛病但问它“A物体在B物体的左边还是右边”“图中比数字3大的元素有几个”“这张折线图里哪一段增幅最大”模型的回答就开始闪烁其词或者给出一个完全没有图像依据的答案。根本原因在于VLM在预训练阶段看到的图文数据更多是“描述性对齐”而不是“推理链对齐”。模型知道图像里有三个三角形但不知道“这三个三角形边长都比2大所以答案应该是3”这种多步推导该怎么做。即使有指令微调阶段加入了一些推理示例模型也容易把推理过程背下来而不是真正学会。这也是为什么现在很多工作开始单独针对视觉推理做训练而不是继续堆数据量。1.2 自改进路线的诱惑与陷阱人工标注推理链的成本非常高而且推理过程和答案往往存在多种合理形式标注一致性很难保证。因此研究者自然想到自改进让模型自己生成推理路径和答案再把这些数据拿回去训练自己。方向很诱人省标注、可迭代、还能根据业务场景定制。但我在实际跑自改进流程时发现这套逻辑有三个非常隐蔽的坑。第一个坑是信号偏差。模型天然偏好自己生成的流畅答案但流畅不等于正确。第二个坑是错误累积。如果第一轮生成的数据里有错误第二轮模型学会的不仅是正确模式还会把错误模式当作合理先验写进参数后面再想纠正就要额外花成本。第三个坑是多样性坍缩。模型反复用自己的输出训练自己会逐渐变得“自信且自洽”但探索空间越来越小最后收敛到一个自我增强的局部最优。说白了自改进最大的敌人不是算力不够而是训练信号本身不干净。1.3 对比视角一个非常聪明的绕坑方式这篇工作的核心切入点就是把自改进中的“绝对打分”换成“相对比较”。先打个比方普通人很难给一道菜打85分还是90分但如果把两道菜放一起大部分人能轻松说出哪道更好吃。模型的偏好判断也是同理。直接让模型回答“这个推理过程能打几分”它没有稳定的质量感知能力评分经常被流畅度带偏但如果让它“在回答A和回答B里选一个更合理的”这个判断要容易得多也稳定得多。放在视觉推理场景里对比的优势会更明显。两个候选答案放在一起模型更容易注意到“一个引用了图像右上角的圆的位置关系另一个完全没提”这样的关键证据差异。换句话说对比不仅降低了评价难度还天然把视觉证据的利用程度暴露出来了。这是我复现过程中最认可的设计它没有试图让模型变成更完美的裁判而是让它在能力范围内给出相对可靠的信号。2. 方法整体设计自改进循环是怎么转起来的2.1 四个模块一条管线从标题和同类工作的常见做法来看这套方法的主线可以还原成一条四段式管线初始模型生成候选推理路径、对候选做对比式偏好标注、用偏好优化算法更新模型、得到新模型后进入下一轮循环。我这里讲的是按照常见实践做的结构重建具体模块细节以论文原文为准但整体骨架应该八九不离十。初始模型通常是一个已经具备基础视觉理解能力的开源VLM不要求它推理能力很强只需要能生成多样化的、带推理过程的回答。候选生成模块负责在同一个问题上采样出多条推理路径。对比偏好模块则负责把这些路径分成“更好的”和“更差的”两类信号。最后偏好优化模块把这些对比信号变成训练梯度更新模型参数。更新完的模型成为新的初始模型再去生成下一轮数据形成自改进闭环。2.2 候选生成多样性是第一优先级对比判断的前提是候选之间有差异。如果采样的五条回答结论差不多、推理路径也差不多那对比出来的偏好信号信息量就很低。因此在候选生成阶段多样性比单条质量更重要。常用的手段包括提高采样温度、在prompt中加入不同的推理指令、对图像做不影响语义的弱扰动等。温度建议放在0.8到1.0之间太低候选会趋同太高会让推理链文本崩坏。生成时还有一个容易被忽略的细节要把推理路径和最终答案分开保存。推理路径是训练时模型要学习的长文本最终答案是用来做规则过滤和评估的标签。两个混在一起后续过滤时会非常痛苦。我习惯在生成结果里用固定标记把“推理过程”和“最终结论”隔开比如“Reasoning: ... Conclusion: ...”这样后面无论是规则匹配还是构建prompt都能很方便地抽取字段。实际上K的取值我建议4到8个候选。太少配对数量不够太多会引入大量低质量噪声。每个问题的候选样本数并不需要均匀只要保证每个问题至少能产出一对有效偏好对即可。2.3 对比偏好构造不打分只排序对比偏好构造是整个管线里最需要手工设计的一步。首先根据任务类型做规则过滤。对空间关系、计数这类有确定性答案的任务可以直接把最终结论与标准答案做匹配答案对不上图像的候选先淘汰。这样能避免明显的错误进入对比对。对于开放式的图表问答没有标准答案就只能依赖判断模型的选择。接下来把过滤后的候选两两配对。控制配对数量很关键如果每个问题生成6个候选两两组合会有15对数据量会膨胀得很厉害。建议每个问题只保留2到3对高质量偏好对配对策略是“胜者与次优者配对”“胜者与一个明显较差的候选配对”这种组合而不是把所有组合都扔进训练集。偏好标注的prompt也有讲究。直接问“哪个更好”容易诱发模型根据语言流畅度做判断。更稳的做法是要求判断模型先引用图像证据再给出选择。我常用的模板是这样的判断下面哪个回答更符合图像内容并简要说明依据 图像区域[待输入图像特征] 问题图中左侧物体的颜色是什么 回答A...... 回答B...... 请先指出图像中具体证据所在再选出更合理的回答。这样强制模型把理由落到视觉证据上显著减少了“因为A说得更顺所以选A”的幻觉偏好。2.4 偏好优化用对比信号更新模型拿到偏好对之后更新方式直接决定自改进的稳定性。这篇工作采用的方式应该是标准的直接偏好优化DPO也可能是它的在线变体。DPO和传统RLHF最大的区别是不需要单独训练一个奖励模型直接用偏好对构造隐式奖励。DPO的优化目标可以写成一个很简洁的形式[ L_{DPO} -\mathbb{E}{(x,y_w,y_l) \sim D} \log \sigma\left(\beta \cdot \left( \log \frac{\pi\theta(y_w|x)}{\pi_{ref}(y_w|x)} - \log \frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)} \right)\right) ]训练时需要一个固定的参考模型π_ref一般是上一轮迭代结束时的模型参数。β是控制偏离参考模型程度的温度系数值越小更新越激进。在视觉推理场景下β建议从0.1到0.5之间起步不要一上来就拉高否则模型会把对比信号里的噪声也一起放大。一轮训练结束后把更新后的模型作为新一轮的候选生成器。迭代轮数通常控制在2到3轮。我自己的复现结果显示第1轮提升最明显第2轮还有稳定增益到第3轮就进入平台期继续强行迭代反而有下滑风险。关于这一点第5章会详细说排查经验。3. 复现要点从论文到可跑的管线3.1 一套最小可复现配置如果你的目标是快速验证这套思路不需要一开始就上几十B的模型和完整的多卡训练环境。我建议这样搭基础模型选7B到13B规模的开源视觉语言模型用LoRA做偏好优化训练数据从几百到两三千条图文问答起步就已经能看出趋势。这样在单张24G显存左右的卡上几小时就能跑完一轮迭代很适合调参和验证pipeline。下面是一个极简的训练循环伪代码核心逻辑是“生成候选、构造对比对、DPO训练、迭代”from vlm import load_model, generate_candidates from dpo import train_dpo model load_model(base-vlm-7b) for round_idx in range(2): candidate_pool [] for item in train_dataset: samples generate_candidates( model, imageitem[image], questionitem[question], num_return_sequences6, temperature0.9, top_p0.95, ) candidate_pool.append((item, samples)) pairs build_contrastive_pairs(candidate_pool) model train_dpo( model, ref_modelmodel, pairspairs, beta0.2, lr1e-5, lora_rank32, )注意伪代码里ref_model应该取本轮开始时的模型快照不能用已经更新到一半的模型。实际实现里还要记得对中间模型做保存方便回滚到表现更好的轮次。3.2 哪些超参数最影响结果我在复现时专门做过一轮超参扫描最影响最终效果的参数集中在采样、偏好过滤和DPO温度这三块。整理成一张表供你参考超参数推荐范围对结果的影响采样温度0.8~1.0温度太低候选趋同对比信号失效太高推理链崩坏每问题候选数4~8太少构不成有效对比对太多噪声比例上升每问题保留偏好对2~3保留太多会让训练数据重复膨胀导致过拟合DPO beta0.1~0.5控制更新激进程度越大模型偏离参考越远迭代轮数2~3第1、2轮收益明显第3轮进入平台期LoRA rank16~64rank太小新技能写不进去太大容易遗忘基础能力采样温度和候选数决定信号质量DPO beta决定模型敢不敢往新方向走。迭代轮数与其说是超参不如说是早停策略如果你发现第3轮准确率不再上升果断停止比硬撑更明智。LoRA rank则要结合数据量来看数据少用低rank数据多可以适当调高。3.3 评估设计怎么证明“真的变强了”自改进项目最忌讳只看最终准确率因为准确率上升有可能只是模型过度拟合了评测集分布。我建议设计三层评估。第一层是最终答案准确率在空间关系、计数、图表推理各准备一组测试题看M0、M1、M2的准确率变化。第二层是推理链质量把模型生成的推理中间步骤拆开人工或规则检查关键前提是否成立。有时候最终答案对了但推理链是瞎编的这样的能力提升不可靠。第三层是多样性指标计算同一问题生成多个回答的平均语义距离。这个指标在自改进里非常关键它能提前预警坍缩语义距离连续下降时说明模型开始变得单一化离崩溃不远了。实验设计上至少要做一组消融一组使用“模型给自己打分取最高分”的方式来筛选训练数据另一组用对比偏好对。只有这两组摆在一起才能清楚看到“对比视角”这个设计带来的增量到底有多少。4. 三组实验设计与预期结论4.1 主实验跨三类视觉推理任务复现时我建议把评测拆成三个维度分别是空间关系推理、数量比较推理、图表多跳推理。空间关系考察的是位置语义理解数量比较考察的是精确感知图表多跳考察的是从图像中提取多个证据并组合推理的能力。三类任务的底层能力维度差异很大能防止单一基准带来的偶然性结论。以我跑同类流程的合理预期来看对比自改进在三个维度上都能获得正向提升幅度可能会有差别。空间关系类任务更容易通过对比暴露“哪个回答引用了正确的方位证据”提升最明显数量比较类任务受候选噪声影响大一些图表多跳推理的提升取决于初始模型本身的基础能力如果模型连单步读取数值都做不好自改进能给的帮助有限。实际数值当然以论文公布为准我这里只提供一个相对理性的参考区间通常比初始模型高4到8个百分点具体波动和任务难度有关。4.2 消融实验绝对打分和对比偏好的差距这套方法最值得做消融的地方是把偏好信号从“相对比较”替换成“绝对打分”。操作并不复杂候选生成环节不变但要求模型对每个候选输出0到10分的质量分分数最高的作为胜者。然后同样用DPO训练。按我对自改进方法的理解前1轮两组效果会非常接近都明显超过初始模型。差距会在第二轮之后拉开绝对打分组的准确率可能开始停滞甚至下降而对比偏好组仍保持稳定上升。原因仍然要回到信号质量上。绝对打分让模型同时扮演“回答者”和“裁判”同一个模型很难跳出自己的生成偏好来判断自己而对比判断的认知负担更低模型能更专注于图像证据差异。如果你只打算仿照论文跑一组实验我强烈建议先跑这组消融它是理解整个方法价值的关键证据。4.3 迭代稳定性自改进最怕的“自我麻醉”第三组实验关注的是迭代稳定性。做法是记录每一轮模型在固定测试集上的准确率、候选语义多样性、训练loss变化。一个健康的自改进过程应该满足几个特征准确率单调上升或进入平台期多样性保持在合理范围DPO训练loss不至于剧烈震荡。而一个开始出问题的过程往往表现为准确率还在涨但多样性指标已经连续两轮下降或者loss在某一步突然跳高后不再收敛。我自己跑迭代实验时遇到过最典型的现象是第二轮准确率上升第三轮反而下滑。排查后发现问题出在对比对质量上因为到了第三轮模型生成的候选几乎都带有同一种潜在错误对比时无论选哪个都是“矮子里拔高个”。解决思路在第5章会展开这里先给结论任何自改进流程都应该把“早停”当成默认策略不要迷信轮数越多越好。5. 实际踩坑记录与排查思路5.1 候选高度同质采样了个寂寞这是我第一次复现时最先踩到的坑。我把temperature设置为0.7每个问题采样5条回答随手翻了几条发现几乎都是模板化文本只是措辞略有差异推理步骤和最终结论没有本质变化。这样的候选拿去构造偏好对训练信号几乎为零。排查思路很简单直接看生成文本的多样性指标或者人工抽几十条看看。如果发现同质先检查是不是temperature太低然后把取值范围提升到0.9左右。如果还是不行可以尝试在prompt层面引入不同的推理风格指令比如“请先列出所有物体位置再回答”“请用反向验证方式作答”“请从图像左上角开始逐区域分析”。图像侧也可以做带语义保持的扰动例如轻微裁剪或颜色扰动但要非常小心不能破坏关键物体位置信息。5.2 模型偏好“流畅的错误答案”第二个常见问题是判断模型在选择胜者时经常选择语言上更流畅但结论错误的那一个。尤其在开放式图表推理任务里没有一个标准答案框住判断模型容易被“更像人话”这个表面特征带偏。我最初跑出来的DPO训练集里相当比例的胜者样本其实结论错误只是文本组织得漂亮。解决的办法是分层过滤。第一层用规则凡是结论能被数值、位置、颜色这些图像属性验证的先做程序化校验不通过直接丢弃。第二层用证据约束在对比prompt里强制要求先引用图像具体区域再给结论。第三层是人工抽检每批数据保留几十条人工核对确保偏好标注质量没有系统性偏差。这三层过滤做完训练数据的信噪比基本可用。5.3 第三轮迭代后准确率不升反降出现这个现象时先别急着加数据或调学习率。最有可能的原因是参照模型与当前模型分布差距过大导致DPO的隐式奖励计算变得不稳定。其次是候选生成分布发生漂移能采到的样本都带有同一种潜在错误对比对无法提供有效修正信号。我的处理习惯是在每轮迭代前重置参考模型为当前模型快照并在训练数据里混合20%到30%的初始种子数据。这些种子数据可以是人工标注的也可以是首轮生成后人工校正过的。它们的作用是把模型锚定在高质量区域防止完全跟着自生成分布漂移。同时设定多样性警戒线当候选语义距离低于某个阈值时主动调高温度或增加prompt扰动把探索空间拉回来。5.4 对比对膨胀带来的训练过拟合六条候选生成15个偏好对看起来数据量很足但本质上来自于同一批问题。如果不加控制DPO会在这些重复模式上快速过拟合。我遇到过训练两个epoch后模型对训练问题几乎是背答案换个表达方式就答不出来。控制方式有两种。一种是在构造对比对时每道题最多保留2到3对而且优先保留“胜者与一个明显较差候选”的组合避免全是难分伯仲的模糊对。另一种是让训练数据里的每个问题只出现一次通过采样候选和配对策略控制重复度。我最后采用的方案是每轮清洗后统计每个问题出现次数超过上限的直接随机采样到上限不让数据量虚胖。5.5 问题排查速查表把上面几类问题汇总成一张表方便你在复现时快速定位症状优先排查方向候选文本高度相似采样温度、prompt多样性、图像扰动胜者选择经常错误规则过滤强度、对比prompt证据约束第二轮后准确率停滞偏好对质量、DPO beta是否过大第三轮开始下滑参考模型重置、是否混合种子数据训练loss剧烈震荡对比对重复度、学习率、batch size测试集准确率上升但推理链混乱评估信号只用了答案没有检查中间步骤这张表来自我自己的失败记录不一定每条都适用但排查顺序基本是固定的先看数据信噪比再看训练信号最后才怀疑模型和超参。数据不干净时调任何超参都是在浪费时间。6. 复现之后几点个人体会如果你准备在自己的业务场景里复刻这套思路我的建议是先搭最小闭环不要一上来就追大规模、多设备、几十万数据的版本。把候选生成、对比偏好、DPO训练这条pipeline先压在几百条数据上跑通人工检查两轮偏好对的质量确认信号可靠再逐步扩大数据规模。我见过太多人把时间浪费在训练框架和并行加速上最后跑出来的模型却因为数据问题毫无提升。另外想多说一句关于“自改进”的期待管理。自改进不是无中生有它更像一个放大器模型基础能力里如果有正确的推理萌芽对比偏好会把它放得更大如果基础能力里满是幻觉和表面流畅度那么自改进只会放大这些幻觉。有人跑完效果不好责怪DPO不行其实问题早在候选生成那一刻就埋下了。先让自己的模型能稳定生成“有差异、有证据、有逻辑”的候选再谈对比和优化。这篇工作的价值在我看来不是发明了一个全新的训练算法而是把一个很朴素的直觉——相对比较比绝对打分更可靠——踏踏实实地用在了视觉语言模型的自改进上并且给出了一个可复现的技术路径。顺着这条路径我自己接下来会先试两件事一是把对比信号同时覆盖推理过程和最终结论二是加入显式的视觉证据检测让胜者选择不再依赖模型自己模糊的判断。这套管线在视觉推理上还有不少可挖的地方但前提始终是把候选多样性和偏好数据质量守住。
阅读完成 · 觉得有帮助?
咨询建站