多模态 RL用 DPO 与 GRPO 把 VLM 训成不胡说多模态大模型专栏⑦一句话讲透本篇SFT 让模型学会什么场景说什么话却教不会它不确定时闭嘴。DPO 跳过 reward model 直接用偏好对GRPO 用组内相对优势无需 critic——两者都把硬凑的描述标为负、把承认看不到标为正让 VLM 学会校准自身的不确定性。写在前面第⑥篇 训出的文档 VLM 已经会答但还远谈不上可靠——它仍会编造图里没有的物体、记错数字、把橘猫说成黑猫。这类幻觉是 VLM 落地最大的拦路虎而 RL强化学习/偏好优化是抑制它的关键一步。本篇覆盖多模态 RL 的完整链条幻觉的成因、偏好数据的构造RLAIF-V、以及两种主流方法——DPO 与 GRPO 的原理与手算。两份零依赖 demoDPO 损失手算、GRPO 优势计算均附带真实运行结果。阅读本篇后可获得✅ 识别多模态幻觉的三种类型及各自机理✅ 逐符号手算 DPO 损失理解 β 温度的作用与单 adapter 省显存技巧✅ 用组内归一化计算 GRPO 优势理解相对优于绝对的设计✅ 判断文档 VLM 该选 DPO 还是 GRPO以及各自的踩坑一、多模态为何特别需要 RLLLM 的幻觉多为编造事实VLM 的幻觉更严重可分为三类。以同一张图为例——实际内容一只橘猫坐在木桌上桌上有空白笔记本无其他物品类型错误回答机理存在性幻觉“旁边有一个花瓶”“右边有咖啡杯”SFT 数据中描述物品的 prompt 模式让模型倾向凑数训练集几乎无图里只有 X 和 Y的短回答属性幻觉“一只黑猫坐在玻璃桌上”模型对颜色/材质等低频属性区分不足SigLIP 编码器在此本就偏弱关系幻觉“猫蹲在笔记本上”空间关系依赖 M-RoPE 与高分辨率分辨率不足时模型靠猜SFT 无法教模型不确定时闭嘴因为它只学什么场景说什么话。DPO/GRPO 通过偏好对比直接惩罚幻觉——把硬凑描述标为 rejected把承认看不到标为 chosen模型由此学会校准不确定性。 POPE benchmark 专测存在性幻觉问图里有 X 吗X 一半真一半假检验模型是否瞎说有。二、RL 方法演进LLaVA-RLHF2023人类标注 PPORLHF-V2024segment 级细粒度偏好RLAIF-V2024GPT-4V 替代人工DPO跳过 reward modelGRPODeepSeek-R1组内相对优势LLaVA-RLHF2023首个多模态 RLHF人类标注 (chosen, rejected) 对 PPO。代价大、训练不稳定。RLHF-V2024把幻觉标注到 segment 级而非整体打分显著优于整体偏好。RLAIF-V2024用 GPT-4V 替代人类标注偏好对规模扩到 100K生产实践的事实标准。DPO跳过 reward model直接用偏好对训 LLM工程极简单卡首选。GRPODeepSeek-R1组内相对优势无需 critic对推理类任务图表理解、几何增益显著。三、偏好数据从哪来RLAIF-V 流程DPO 需要 (chosen, rejected) 偏好对人工标注成本高昂一条约 $0.5–2 5–10 分钟。RLAIF-V 用 GPT-4V 蒸馏以一张两个孩子在公园放风筝的图为例Step 1 prompt image\n详细描述这张图。 Step 2 待训模型生成: 三个孩子在公园放风筝旁边有一只狗。 ← 错人数、狗 Step 3 GPT-4V 参考 批评: reference 两个孩子在草地上放风筝天空晴朗。 critique 错在三处人数(3→2)、狗不存在、缺草地晴天 Step 4 chosen GPT-4V reference 高质量参考 rejected 待训模型原始输出 含幻觉成本对比100K 偏好对人工约 $100K 3 个月RLAIF-V 约 $2K 1 天。GPT-4V 在物体计数、属性识别上比绝大多数标注员更可靠。需要注意的是 GPT-4V 自身也会幻觉尤其低分辨率或专业领域生产做法是再过一层规则校验数字用 OCR 复核、颜色用聚类色块复核。偏好数据格式{image:/path/doc.jpg,prompt:image\n这张表的总营收是多少,chosen:总营收为 1,234 万元。,rejected:总营收为 12,345 万元增长 50%。}四、DPO跳过 reward modelDPO 在数学上等价于先学 reward 再 PPO但工程极简——直接用偏好对训练无需训练独立的 reward model。损失函数L DPO − E [ log σ ( β ( Δ log π C − Δ log π R ) ) ] \mathcal{L}_{\text{DPO}} -\mathbb{E}\left[\log \sigma\left(\beta\left(\Delta\log\pi_C - \Delta\log\pi_R\right)\right)\right]LDPO−E[logσ(β(ΔlogπC−ΔlogπR))]其中π为当前 policyVLM LoRAπ_ref为 SFT 后冻结的参考Δ log π - log π_refβ为温度。一条偏好对的手算code/04_rl/dpo_loss_walkthrough.py纯标准库可跑把每个符号落到具体数字。同一条 prompt 图chosen 为正确答案rejected 为幻觉答案chosen : Revenue was 1,234 wan yuan . rejected: Revenue was 12,345 wan yuan . Higher . log π_C -5.000 log πref_C -6.200 ΔC 1.200 (policy 抬高 chosen 概率 ✓) log π_R -11.300 log πref_R -9.400 ΔR -1.900 (policy 压低 rejected 概率 ✓) logit β·(ΔC − ΔR) 0.1·(1.2 − (−1.9)) 0.1·3.1 0.310 σ(0.310) 0.577 (chosen 胜出的概率) loss -log σ(0.310) 0.550关键判据初始时 policy refloss log(2) ≈ 0.693。本例 loss 0.550 0.693说明 policy 已朝正确方向移动若 loss 0.693 则意味着 policy 走反了。β 温度的作用demo 实测扫描βlogitσ(logit)loss0.010.0310.5080.6780.100.3100.5770.5500.300.9300.7170.3331.003.1000.9570.0443.009.3001.0000.0001β 越大对policy 偏离 ref越敏感同样的 ΔC−ΔRβ3 时 loss 降幅是 β0.1 的约 5 倍。多模态 DPO 典型取 β ∈ [0.05, 0.2]默认 0.1若模型变得过于保守拒绝回答降至 0.05。单 adapter 技巧为何 DPO 能塞进单卡朴素 DPO 需在显存中同时存放 policy 与 reference 两份模型7B bf16 即 28 GB 权重再加优化器状态单卡吃紧。PEFT 的解法是只存一份 base靠 adapter 开关切换base LLM ×114 GBpolicy base 可训 LoRA(set_adapter 启用)reference base 仅前向(set_adapter None 禁用)reference 的前向就是禁用 adapter 的 base 前向零额外显存。结果从 ~30 GB 降至 ~16 GB单卡 A100 充裕。TRL 的DPOTrainer在use_peftTrue时自动处理此切换。五、GRPO组内相对优势GRPODeepSeek-R1无需 (chosen, rejected) 对而是对同一 prompt 采 K 个回答、用 reward function 打分、做组内归一化。code/04_rl/grpo_advantage_demo.py纯标准库可跑以文档抽取任务展示完整流程prompt 固定为总营收是多少GT 1,234 wan yuanpolicy 采 K4 个回答reward → advantagedemo 实测奖励函数采用0.6×精确匹配 0.4×归一化编辑距离——对幻觉数字严苛对格式宽容#采样回答reward(r−μ)advantage信号01,234 wan yuan1.0000.5561.717push UP精确匹配11,234 wan0.257−0.187−0.578push DOWN丢单位212,345 wan yuan0.320−0.124−0.384push DOWN数字错3Around 1.2k wan yuan0.200−0.244−0.755push DOWN含糊mean0.444std0.324关键观察advantage 看的是组内相对排名而非绝对 reward。最好的答案 reward 仅 1.0但因显著高于组均值0.444拿到 1.717 的大正优势。这正是 GRPO 无需校准过的 reward model 也能工作的原因。loss 为 REINFORCE 形式L -mean(Aᵢ · log π(answerᵢ))A0 的好答案其 logp 被推高A0 的坏答案被压低逐 token 分摊。reward 设计才是真瓶颈文档 VLM 的可用 reward 信号数字字段精确匹配营收、日期、账号、归一化编辑距离部分信用、JSON schema 校验结构化抽取、bbox IoU若同时训练定位。经验法则是从精确匹配 少量部分信用起步。GRPO 的失败模式若组内 reward 方差 ≈ 0任务太易/太难/reward 太粗advantage 全为 0没有梯度信号。demo 末尾有断言验证——4 个等值 reward 时 advantage 全 ≈ 0。六、DPO vs GRPO如何选择维度DPOGRPO监督形式(chosen, rejected) 对reward function采样方式离线固定数据在线每步重采样优势计算隐式β·Δlogp显式r−μ)/σ参考模型必须冻结 LoRA可选KL 正则最适合通用偏好对齐有可验证 reward 的任务文档 VLM 场景抗幻觉描述类OCR 准确率、表格 QA文档 VLM 的实践路径先用 DPO 做整体抗幻觉数据易得离线稳定再在数字/表格等有明确对错的任务上用 GRPO 精修。单卡 GRPO 较吃紧policy ref rollout buffer 同存建议用 3B 基座 LoRA bf16rollout 用 vLLM/SGLang 加速verl 框架原生支持。七、单卡实战要点与踩坑DPO 推荐超参β0.1lr5e-7batch2×4effective 82 epochs。code/04_rl/dpo_train.py给出基于 TRL PEFT 的完整配置。常见故障诊断现象根因解决DPO 后模型不回答β 过大过于保守β 降至 0.05训练无变化lr 过小提至 1e-6或检查 grad norm视觉 token 占显存过大chosen/rejected 各存一份图共享pixel_values仅文本分叉GRPO reward 失真规则 reward 边界过硬用编辑距离替代严格相等 本篇涉及代码文件说明code/04_rl/dpo_loss_walkthrough.pyDPO 损失手算 β 扫描零依赖code/04_rl/grpo_advantage_demo.pyGRPO 组内 advantage 计算零依赖code/04_rl/dpo_train.pyTRL PEFT 单卡 DPO 训练code/04_rl/grpo_note.mdGRPO 单卡实现草图与 verl 配置小结概念要点幻觉三类存在性、属性、关系SFT 无法教闭嘴RL 可以偏好数据RLAIF-V 用 GPT-4V 蒸馏成本仅为人工的 2%DPO 核心logit β·(ΔC−ΔR)初始 losslog2单 adapter 省一份显存GRPO 核心Aᵢ(rᵢ−μ)/σ组内相对无需 reward model选型抗幻觉用 DPO可验证任务用 GRPO下一篇进入阶段 5评测与部署——用 lmms-eval 跑通 POPE / HallusionBench / DocVQA 等基准量化本专栏训出的 VLM 究竟不胡说到什么程度再用 SGLang 把模型部署成高吞吐服务完成从训练到上线的最后一公里。关注专栏更新第一时间通知。专栏《从 NLP 到 VLM多模态大模型研发实战》上一篇⑥ 训练 Pipeline · LoRA SFT 本篇⑦ 多模态 RL · DPO GRPO 下一篇⑧ 评测与部署 · lmms-eval SGLang
【大模型】多模态 RL:用 DPO 与 GRPO 把 VLM 训成“不胡说“|多模态大模型专栏⑦
发布时间:2026/7/15 10:27:00
多模态 RL用 DPO 与 GRPO 把 VLM 训成不胡说多模态大模型专栏⑦一句话讲透本篇SFT 让模型学会什么场景说什么话却教不会它不确定时闭嘴。DPO 跳过 reward model 直接用偏好对GRPO 用组内相对优势无需 critic——两者都把硬凑的描述标为负、把承认看不到标为正让 VLM 学会校准自身的不确定性。写在前面第⑥篇 训出的文档 VLM 已经会答但还远谈不上可靠——它仍会编造图里没有的物体、记错数字、把橘猫说成黑猫。这类幻觉是 VLM 落地最大的拦路虎而 RL强化学习/偏好优化是抑制它的关键一步。本篇覆盖多模态 RL 的完整链条幻觉的成因、偏好数据的构造RLAIF-V、以及两种主流方法——DPO 与 GRPO 的原理与手算。两份零依赖 demoDPO 损失手算、GRPO 优势计算均附带真实运行结果。阅读本篇后可获得✅ 识别多模态幻觉的三种类型及各自机理✅ 逐符号手算 DPO 损失理解 β 温度的作用与单 adapter 省显存技巧✅ 用组内归一化计算 GRPO 优势理解相对优于绝对的设计✅ 判断文档 VLM 该选 DPO 还是 GRPO以及各自的踩坑一、多模态为何特别需要 RLLLM 的幻觉多为编造事实VLM 的幻觉更严重可分为三类。以同一张图为例——实际内容一只橘猫坐在木桌上桌上有空白笔记本无其他物品类型错误回答机理存在性幻觉“旁边有一个花瓶”“右边有咖啡杯”SFT 数据中描述物品的 prompt 模式让模型倾向凑数训练集几乎无图里只有 X 和 Y的短回答属性幻觉“一只黑猫坐在玻璃桌上”模型对颜色/材质等低频属性区分不足SigLIP 编码器在此本就偏弱关系幻觉“猫蹲在笔记本上”空间关系依赖 M-RoPE 与高分辨率分辨率不足时模型靠猜SFT 无法教模型不确定时闭嘴因为它只学什么场景说什么话。DPO/GRPO 通过偏好对比直接惩罚幻觉——把硬凑描述标为 rejected把承认看不到标为 chosen模型由此学会校准不确定性。 POPE benchmark 专测存在性幻觉问图里有 X 吗X 一半真一半假检验模型是否瞎说有。二、RL 方法演进LLaVA-RLHF2023人类标注 PPORLHF-V2024segment 级细粒度偏好RLAIF-V2024GPT-4V 替代人工DPO跳过 reward modelGRPODeepSeek-R1组内相对优势LLaVA-RLHF2023首个多模态 RLHF人类标注 (chosen, rejected) 对 PPO。代价大、训练不稳定。RLHF-V2024把幻觉标注到 segment 级而非整体打分显著优于整体偏好。RLAIF-V2024用 GPT-4V 替代人类标注偏好对规模扩到 100K生产实践的事实标准。DPO跳过 reward model直接用偏好对训 LLM工程极简单卡首选。GRPODeepSeek-R1组内相对优势无需 critic对推理类任务图表理解、几何增益显著。三、偏好数据从哪来RLAIF-V 流程DPO 需要 (chosen, rejected) 偏好对人工标注成本高昂一条约 $0.5–2 5–10 分钟。RLAIF-V 用 GPT-4V 蒸馏以一张两个孩子在公园放风筝的图为例Step 1 prompt image\n详细描述这张图。 Step 2 待训模型生成: 三个孩子在公园放风筝旁边有一只狗。 ← 错人数、狗 Step 3 GPT-4V 参考 批评: reference 两个孩子在草地上放风筝天空晴朗。 critique 错在三处人数(3→2)、狗不存在、缺草地晴天 Step 4 chosen GPT-4V reference 高质量参考 rejected 待训模型原始输出 含幻觉成本对比100K 偏好对人工约 $100K 3 个月RLAIF-V 约 $2K 1 天。GPT-4V 在物体计数、属性识别上比绝大多数标注员更可靠。需要注意的是 GPT-4V 自身也会幻觉尤其低分辨率或专业领域生产做法是再过一层规则校验数字用 OCR 复核、颜色用聚类色块复核。偏好数据格式{image:/path/doc.jpg,prompt:image\n这张表的总营收是多少,chosen:总营收为 1,234 万元。,rejected:总营收为 12,345 万元增长 50%。}四、DPO跳过 reward modelDPO 在数学上等价于先学 reward 再 PPO但工程极简——直接用偏好对训练无需训练独立的 reward model。损失函数L DPO − E [ log σ ( β ( Δ log π C − Δ log π R ) ) ] \mathcal{L}_{\text{DPO}} -\mathbb{E}\left[\log \sigma\left(\beta\left(\Delta\log\pi_C - \Delta\log\pi_R\right)\right)\right]LDPO−E[logσ(β(ΔlogπC−ΔlogπR))]其中π为当前 policyVLM LoRAπ_ref为 SFT 后冻结的参考Δ log π - log π_refβ为温度。一条偏好对的手算code/04_rl/dpo_loss_walkthrough.py纯标准库可跑把每个符号落到具体数字。同一条 prompt 图chosen 为正确答案rejected 为幻觉答案chosen : Revenue was 1,234 wan yuan . rejected: Revenue was 12,345 wan yuan . Higher . log π_C -5.000 log πref_C -6.200 ΔC 1.200 (policy 抬高 chosen 概率 ✓) log π_R -11.300 log πref_R -9.400 ΔR -1.900 (policy 压低 rejected 概率 ✓) logit β·(ΔC − ΔR) 0.1·(1.2 − (−1.9)) 0.1·3.1 0.310 σ(0.310) 0.577 (chosen 胜出的概率) loss -log σ(0.310) 0.550关键判据初始时 policy refloss log(2) ≈ 0.693。本例 loss 0.550 0.693说明 policy 已朝正确方向移动若 loss 0.693 则意味着 policy 走反了。β 温度的作用demo 实测扫描βlogitσ(logit)loss0.010.0310.5080.6780.100.3100.5770.5500.300.9300.7170.3331.003.1000.9570.0443.009.3001.0000.0001β 越大对policy 偏离 ref越敏感同样的 ΔC−ΔRβ3 时 loss 降幅是 β0.1 的约 5 倍。多模态 DPO 典型取 β ∈ [0.05, 0.2]默认 0.1若模型变得过于保守拒绝回答降至 0.05。单 adapter 技巧为何 DPO 能塞进单卡朴素 DPO 需在显存中同时存放 policy 与 reference 两份模型7B bf16 即 28 GB 权重再加优化器状态单卡吃紧。PEFT 的解法是只存一份 base靠 adapter 开关切换base LLM ×114 GBpolicy base 可训 LoRA(set_adapter 启用)reference base 仅前向(set_adapter None 禁用)reference 的前向就是禁用 adapter 的 base 前向零额外显存。结果从 ~30 GB 降至 ~16 GB单卡 A100 充裕。TRL 的DPOTrainer在use_peftTrue时自动处理此切换。五、GRPO组内相对优势GRPODeepSeek-R1无需 (chosen, rejected) 对而是对同一 prompt 采 K 个回答、用 reward function 打分、做组内归一化。code/04_rl/grpo_advantage_demo.py纯标准库可跑以文档抽取任务展示完整流程prompt 固定为总营收是多少GT 1,234 wan yuanpolicy 采 K4 个回答reward → advantagedemo 实测奖励函数采用0.6×精确匹配 0.4×归一化编辑距离——对幻觉数字严苛对格式宽容#采样回答reward(r−μ)advantage信号01,234 wan yuan1.0000.5561.717push UP精确匹配11,234 wan0.257−0.187−0.578push DOWN丢单位212,345 wan yuan0.320−0.124−0.384push DOWN数字错3Around 1.2k wan yuan0.200−0.244−0.755push DOWN含糊mean0.444std0.324关键观察advantage 看的是组内相对排名而非绝对 reward。最好的答案 reward 仅 1.0但因显著高于组均值0.444拿到 1.717 的大正优势。这正是 GRPO 无需校准过的 reward model 也能工作的原因。loss 为 REINFORCE 形式L -mean(Aᵢ · log π(answerᵢ))A0 的好答案其 logp 被推高A0 的坏答案被压低逐 token 分摊。reward 设计才是真瓶颈文档 VLM 的可用 reward 信号数字字段精确匹配营收、日期、账号、归一化编辑距离部分信用、JSON schema 校验结构化抽取、bbox IoU若同时训练定位。经验法则是从精确匹配 少量部分信用起步。GRPO 的失败模式若组内 reward 方差 ≈ 0任务太易/太难/reward 太粗advantage 全为 0没有梯度信号。demo 末尾有断言验证——4 个等值 reward 时 advantage 全 ≈ 0。六、DPO vs GRPO如何选择维度DPOGRPO监督形式(chosen, rejected) 对reward function采样方式离线固定数据在线每步重采样优势计算隐式β·Δlogp显式r−μ)/σ参考模型必须冻结 LoRA可选KL 正则最适合通用偏好对齐有可验证 reward 的任务文档 VLM 场景抗幻觉描述类OCR 准确率、表格 QA文档 VLM 的实践路径先用 DPO 做整体抗幻觉数据易得离线稳定再在数字/表格等有明确对错的任务上用 GRPO 精修。单卡 GRPO 较吃紧policy ref rollout buffer 同存建议用 3B 基座 LoRA bf16rollout 用 vLLM/SGLang 加速verl 框架原生支持。七、单卡实战要点与踩坑DPO 推荐超参β0.1lr5e-7batch2×4effective 82 epochs。code/04_rl/dpo_train.py给出基于 TRL PEFT 的完整配置。常见故障诊断现象根因解决DPO 后模型不回答β 过大过于保守β 降至 0.05训练无变化lr 过小提至 1e-6或检查 grad norm视觉 token 占显存过大chosen/rejected 各存一份图共享pixel_values仅文本分叉GRPO reward 失真规则 reward 边界过硬用编辑距离替代严格相等 本篇涉及代码文件说明code/04_rl/dpo_loss_walkthrough.pyDPO 损失手算 β 扫描零依赖code/04_rl/grpo_advantage_demo.pyGRPO 组内 advantage 计算零依赖code/04_rl/dpo_train.pyTRL PEFT 单卡 DPO 训练code/04_rl/grpo_note.mdGRPO 单卡实现草图与 verl 配置小结概念要点幻觉三类存在性、属性、关系SFT 无法教闭嘴RL 可以偏好数据RLAIF-V 用 GPT-4V 蒸馏成本仅为人工的 2%DPO 核心logit β·(ΔC−ΔR)初始 losslog2单 adapter 省一份显存GRPO 核心Aᵢ(rᵢ−μ)/σ组内相对无需 reward model选型抗幻觉用 DPO可验证任务用 GRPO下一篇进入阶段 5评测与部署——用 lmms-eval 跑通 POPE / HallusionBench / DocVQA 等基准量化本专栏训出的 VLM 究竟不胡说到什么程度再用 SGLang 把模型部署成高吞吐服务完成从训练到上线的最后一公里。关注专栏更新第一时间通知。专栏《从 NLP 到 VLM多模态大模型研发实战》上一篇⑥ 训练 Pipeline · LoRA SFT 本篇⑦ 多模态 RL · DPO GRPO 下一篇⑧ 评测与部署 · lmms-eval SGLang