DeepSeek-R1 多模态 R1 / VLM-GRPO【左扬精讲】—— Qwen2-VL 微调与视觉推理强化学习实战
DeepSeek-R1 多模态 R1 / VLM-GRPO【左扬精讲】—— Qwen2-VL 微调与视觉推理强化学习实战
前面 6 篇 R1 系列博文覆盖了纯文本的 R1 训练 / 数据 / 评估 / 部署 / 端侧 / 推理时扩展。但 2025 年 LLM 最大的趋势是多模态——模型不仅能"读"文字,还能"看"图像 / "听"音频。R1 的"慢思考"能不能扩展到视觉?多模态 GRPO 怎么训?本篇讲清"多模态 R1 / VLM-GRPO"的全部细节。
本篇围绕"Qwen2-VL + GRPO 视觉推理强化学习"展开 10 大章节:
① VLM 架构深度(ViT + LLM + Projector);
② 主流 VLM 对比(Qwen2-VL / LLaVA / InternVL / MiniCPM-V);
③ 多模态 SFT 数据准备;
④ VLM-GRPO 训练(视觉奖励函数);
⑤ 几何题 / 图表题实战;
⑥ 5 大 VLM benchmark(MMBench / MathVista / ChartQA);
⑦ Qwen2-VL-7B + GRPO + 几何题完整试验;
⑧ 代码实现;
⑨ 20 FAQ;
⑩ Roadmap
多模态 VLM Qwen2-VL VLM-GRPO 视觉推理 MathVista 几何题 2025 前沿
学习重点提示
重点掌握(必须)
- VLM 3 大组件:ViT(视觉编码)+ LLM(语言生成)+ Projector(视觉-语言对齐)
- 4 大 VLM 对比:Qwen2-VL / LLaVA / InternVL / MiniCPM-V 优劣势
- 多模态 SFT 数据准备:图文对话数据构造 + 图像预处理
- VLM-GRPO 训练:视觉奖励函数(几何正确性 / 图表解析)
- 5 大 VLM benchmark:MMBench / MathVista / ChartQA / OCRBench / MMVet
- Qwen2-VL-7B + GRPO 几何题完整实验
- 完整可运行代码(Unsloth + Qwen2-VL + GRPO)
次重点(了解即可)
- 多模态对齐(CLIP / SigLIP)
- 高分辨率图像处理(动态分辨率)
- 视频理解 VLM(Qwen2-VL 已支持)
文章目录
一、Why:为什么 2025 是"多模态 R1"的元年
2025 年 LLM 出现 3 大明显趋势:① 多模态:从纯文本到"看图说话";② 慢思考:R1 范式扩展;③ 多模态 + 慢思考:即"多模态 R1"。代表:Qwen2.5-VL(2025 年 1 月)、Qwen2-VL(2024 年 8 月)、InternVL2.5、Vision-R1。
多模态 R1 的关键挑战是:图像比文本信息密度高 10×。同样的"慢思考"机制应用到视觉推理(几何题、图表题)需要:① 视觉编码器理解图像;② LLM 推理;③ 视觉奖励函数评估答案。这是 VLM-GRPO 训练的核心。
二、VLM 架构深度(ViT + LLM + Projector)
VLM(Vision Language Model)的标准架构分 3 大组件:
┌────────────────────────────────────────────────────┐
│ VLM 标准架构 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 图像 │ │ Projector│ │ LLM │ │
│ │ 输入 │ │ (对齐) │ │ 推理 │ │
│ │ 224×224 │ → │ MLP/Q-Former │ → │ Qwen-7B │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ ↑ ↑ ↑ │
│ │ │ │ │
│ ┌───┴────┐ ┌─────┴─────┐ ┌─────┴────┐ │
│ │ ViT │ │ 对齐模块 │ │ 文本生成 │ │
│ │ 视觉编码 │ │ 视觉→语言 │ │ 自回归 │ │
│ └────────┘ └──────────┘ └──────────┘ │
└────────────────────────────────────────────────────┘
2.1 组件 1:ViT 视觉编码器
ViT(Vision Transformer)把图像切成 14×14 或 16×16 的 patch,每 patch 作为一个 token,输入 Transformer。代表:① CLIP ViT-L/14(OpenAI 2021);② SigLIP(Google 2023,sigmoid 损失,效率更高);③ EVA-CLIP(BAAI 2023)。Qwen2-VL 用 SigLIP。
2.2 组件 2:Projector 对齐模块
Projector 把视觉特征投影到 LLM 嵌入空间。3 种主流方案:① MLP(最简单,LLaVA 用);② Q-Former(BLIP-2 用,可学习 query);③ Cross-Attention(CogVLM 用,更复杂)。Qwen2-VL 用 MLP。
2.3 组件 3:LLM 推理
LLM 接收"文本 token + 视觉 token"混合输入,做自回归生成。Qwen2-VL 用 Qwen2.5-7B 作为底座。
三、4 大开源 VLM 横向对比
| VLM | 参数量 | MMBench | MathVista | 特点 |
|---|---|---|---|---|
| Qwen2-VL-7B | 7B | 83.0 | 62.3 | 动态分辨率 + 视频 |
| LLaVA-1.6-7B | 7B | 76.3 | 46.5 | 学术友好 / 简单 |
| InternVL2-8B | 8B | 82.5 | 58.3 | 中文友好 / OCR 强 |
| MiniCPM-V-8B | 8B | 80.1 | 52.3 | 端侧友好 / 4-bit 友好 |
关键观察:Qwen2-VL 综合最强(动态分辨率 + 视频支持),是 2025 年 VLM 事实标准。
四、多模态 SFT 数据准备
多模态 SFT 数据 = (image, instruction, response) 三元组。构造 4 步:
# 多模态 SFT 数据准备
from datasets import load_dataset
from PIL import Image
import json
# 1. 加载公开数据集
data = load_dataset("lmms-lab/MathVista", split="testmini")
# 2. 构造 (image, instruction, response)
sft_data = []
for item in data:
image = item["image"]
question = item["question"]
answer = item["answer"]
# 构造 CoT 回答
response = f"""<think>
让我分析这道几何题。
观察图像,识别关键元素:{item.get('hint', '')}
列出已知条件:{item['question']}
应用几何定理:...
逐步推导:...
</think>
<answer>{answer}</answer>"""
sft_data.append({
"image": image,
"instruction": question,
"response": response,
})
# 3. 保存
with open("multimodal_sft.jsonl", "w") as f:
for item in sft_data:
img_path = f"images/{item['id']}.jpg"
item["image"].save(img_path)
record = {**item, "image": img_path}
f.write(json.dumps(record) + "\n")
五、VLM-GRPO 训练机制与视觉奖励
VLM-GRPO = GRPO 训练 + 视觉奖励函数。和纯文本 GRPO 的关键区别:
- 输入:(image, prompt) → response(视觉 + 文本)
- 奖励:视觉奖励函数(几何正确 / 图表解析 / OCR 准确)
- 采样:N 次采样 + 投票 / RM 评分
- 训练:与纯文本 GRPO 相同(policy gradient)
5.1 视觉奖励函数(以几何题为例)
# visual_reward.py
import re
from PIL import Image
import math
def geometry_reward(prompts, completions, answers, images, **kwargs):
"""几何题视觉奖励:基于答案正确性 + 推理过程"""
rewards = []
for completion, gold in zip(completions, answers):
score = 0.0
# 1. 答案正确性(+2.0)
pred = extract_answer(completion)
if pred == gold:
score += 2.0
# 2. 包含 CoT 过程(+0.5)
if "<think>" in completion and "</think>" in completion:
score += 0.5
# 3. 包含 <answer> 标签(+0.3)
if "<answer>" in completion:
score += 0.3
# 4. 长度合理(-1.0 ~ 0.0)
if len(completion) > 4000:
score -= 1.0
elif len(completion) < 100:
score -= 0.5
rewards.append(score)
return rewards
def extract_answer(text: str) -> str:
match = re.search(r"<answer>(.*?)</answer>", text, re.DOTALL)
if match:
return match.group(1).strip()
return text.strip().split("\n")[-1]
六、5 大 VLM Benchmark 详解
| Benchmark | 评估能力 | 题量 | Qwen2-VL-7B | GPT-4V |
|---|---|---|---|---|
| MMBench | 多模态综合 | 4.3K | 83.0 | 86.5 |
| MathVista | 数学视觉 | 6.1K | 62.3 | 63.8 |
| ChartQA | 图表理解 | 2.5K | 83.0 | 85.0 |
| OCRBench | OCR 识别 | 1K | 88.4 | 81.0 |
| MMVet | 综合(创新 / OCR / 数学) | 2.2K | 62.0 | 67.5 |
七、Qwen2-VL-7B + GRPO 几何题完整实验
本节给出端到端实验:Qwen2-VL-7B + GRPO + 几何题(GeoQA 数据集 5K 训练)。
7.1 实验数据
| 项 | 值 |
|---|---|
| 底座模型 | Qwen2-VL-7B-Instruct |
| 训练数据 | GeoQA 5K 几何题 |
| 训练方式 | LoRA + GRPO(视觉奖励) |
| 硬件 | 4×A100 80GB(约 8 小时) |
| 基线(Qwen2-VL-7B) | GeoQA 35% |
| VLM-GRPO 后 | GeoQA 58%(+23 个百分点) |
| MathVista | 62.3 → 71.5(+9.2) |
八、完整代码实现
# vlm_grpo_train.py
# Qwen2-VL + GRPO 视觉推理强化学习
from unsloth import FastVisionModel
from trl import GRPOTrainer, GRPOConfig
from datasets import load_dataset
from PIL import Image
import torch
# 1. 加载 Qwen2-VL
model, tokenizer = FastVisionModel.from_pretrained(
model_name="Qwen/Qwen2-VL-7B-Instruct",
max_seq_length=4096,
load_in_4bit=True,
)
model = FastVisionModel.get_peft_model(
model,
r=16,
target_modules=["q_proj","k_proj","v_proj","o_proj",
"gate_proj","up_proj","down_proj"],
lora_alpha=16,
use_gradient_checkpointing="unsloth",
)
# 2. 加载几何题数据
dataset = load_dataset("Luckyjhg/Geo170K", split="train[:5000]")
# 3. 视觉奖励函数
def geometry_reward(prompts, completions, answers, images, **kwargs):
rewards = []
for completion, gold in zip(completions, answers):
score = 0.0
pred = extract_answer(completion)
if pred == gold:
score += 2.0
if "<think>" in completion:
score += 0.5
if "<answer>" in completion:
score += 0.3
if len(completion) > 4000:
score -= 1.0
rewards.append(score)
return rewards
# 4. 数据预处理
def format_data(item):
return {
"prompt": [
{"role": "user", "content": [
{"type": "image"},
{"type": "text", "text": item["question"]},
]}
],
"answer": item["answer"],
"image": item["image"],
}
formatted_data = [format_data(item) for item in dataset]
# 5. 训练配置
training_args = GRPOConfig(
num_generations=8,
learning_rate=5e-6,
per_device_train_batch_size=1,
gradient_accumulation_steps=8,
num_train_epochs=2,
use_vllm=True,
beta=0.04,
output_dir="./vlm_grpo_outputs",
)
# 6. 训练
trainer = GRPOTrainer(
model=model,
processing_class=tokenizer,
reward_funcs=[geometry_reward],
args=training_args,
train_dataset=formatted_data,
)
trainer.train()
# 7. 评估
test_data = load_dataset("Luckyjhg/Geo170K", split="test[:200]")
correct = 0
for item in test_data:
response = model.chat(item["image"], item["question"])
pred = extract_answer(response)
if pred == item["answer"]:
correct += 1
print(f"GeoQA pass@1: {correct/200:.3f}")
九、FAQ:20 个常见问题深度问答
Q1. VLM 是什么?
VLM(Vision Language Model)= 视觉语言模型,能"看图说话"的多模态 LLM。标准架构:ViT(视觉编码)+ Projector(对齐)+ LLM(语言生成)。代表:Qwen2-VL、LLaVA、InternVL2、MiniCPM-V。2025 年 VLM 已经成为 LLM 的标配,纯文本 LLM 正在被替代。
Q2. VLM 和 LLM 哪个好?
决策树:① 任务含图像 → VLM(必须);② 任务纯文本 → LLM(更轻量);③ 任务含图像 + 复杂推理 → VLM-GRPO(最佳)。生产建议:① 同时部署 LLM + VLM;② 根据任务动态选择;③ 纯文本任务用 LLM(更快 / 更便宜)。
Q3. Qwen2-VL vs LLaVA 选哪个?
决策树:① 通用 + 视频 → Qwen2-VL(最强);② 学术研究 + 简单 → LLaVA(生态最广);③ 中文 + OCR → InternVL2(中文最强);④ 端侧 + 4-bit → MiniCPM-V(最轻量)。生产推荐 Qwen2-VL 7B 或 72B。
Q4. VLM-GRPO 怎么训练?
VLM-GRPO = GRPO + 视觉奖励函数。训练 5 步:① 加载 VLM(如 Qwen2-VL-7B)+ LoRA;② 构造多模态数据 (image, prompt, answer);③ 定义视觉奖励(几何正确 / 图表解析 / OCR 准确);④ 用 TRL GRPOTrainer 训练;⑤ 评估 MathVista / GeoQA 等。生产建议:① 视觉奖励函数是关键;② 用 Qwen2-VL-7B-Instruct 起步;③ 显存不够用 Unsloth 4-bit 量化。
Q5. 视觉奖励函数怎么设计?
视觉奖励函数分 3 大类:① 答案正确性(数学 / OCR 任务):对比预测和 gold,相同 +2.0;② 格式正确性:包含 <think> +0.5,包含 <answer> +0.3;③ 过程质量:推理步骤清晰 +0.5,包含自我验证 +0.5,长度合理 -1.0~0。生产建议:① 先简单(只奖励答案正确);② 复杂任务加过程奖励;③ 避免"奖励黑客"。
Q6. MathVista 是什么?
MathVista = 数学视觉 benchmark,评估 VLM 在数学推理任务上的能力。包含:① 几何题;② 统计图;③ 函数图;④ 数学公式识别。共 6.1K 题。Qwen2-VL-7B 62.3,GPT-4V 63.8。代表 VLM 数学推理能力。
Q7. VLM 需要多大显存?
VLM 显存需求:① Qwen2-VL-2B FP16 = 4GB(4-bit 2GB);② Qwen2-VL-7B FP16 = 14GB(4-bit 4GB);③ Qwen2-VL-72B FP16 = 145GB(4-bit 40GB)。生产建议:① 7B 用 24GB 4090 / 3090;② 72B 用 80GB A100 / H100;③ 训练再加 30~50% 显存。
Q8. VLM 训练数据哪里找?
2024-2025 主流 VLM 训练数据集:① LLaVA-Pretrain(558K 图文对);② LLaVA-Instruct(158K 图文对话);③ Geo170K(17 万几何题);④ MathV360K(36 万数学题);⑤ LLaVA-OneVision(1.6M 多模态数据)。
Q9. VLM 能处理视频吗?
能。Qwen2-VL 原生支持视频:① 视频分帧;② 每帧 token 化;③ 时序 attention。最大支持 1 小时视频(20K+ tokens)。LLaVA-OneVision 也支持视频。生产建议:① 长视频用 1 fps 采样;② 关键帧单独处理;③ 时序敏感任务用 Video-LLaVA。
Q10. VLM 怎么评估?
5 大 VLM benchmark:① MMBench(4.3K 多模态综合);② MathVista(6.1K 数学视觉);③ ChartQA(2.5K 图表理解);④ OCRBench(1K OCR);⑤ MMVet(2.2K 综合)。生产建议:① 通用 VLM 跑 MMBench + MMVet;② 数学 / 推理 VLM 跑 MathVista;③ 业务 VLM 构造 100~500 条业务 test set。
Q11. 动态分辨率是什么?
动态分辨率 = VLM 根据图像内容动态调整输入分辨率。传统 VLM 把图像 resize 到固定 224×224,丢失细节。Qwen2-VL 的动态分辨率能根据图像内容自动选择 1×1 到 24×24 个 token(最大 4096 tokens),高分辨率图像保留更多细节。这是 Qwen2-VL 在 OCRBench 上超过 GPT-4V 的关键。
Q12. VLM 训练和 LLM 训练有什么不同?
VLM 训练分 3 阶段:① Pretrain:训练 Projector 对齐视觉 / 语言(冻结 ViT + LLM);② SFT:训练 VLM 完成多模态指令;③ RLHF/GRPO:用奖励函数优化。LLM 只有 SFT + RLHF 两阶段。VLM 训练显存需求大(视觉特征占很多),数据稀缺(多模态数据少)。
Q13. Qwen2-VL-7B 怎么部署?
3 种部署方式:① vLLM(推荐,支持动态分辨率):vllm serve Qwen2-VL-7B;② HuggingFace transformers(简单但慢);③ LMDeploy(国产)。生产推荐 vLLM 0.6+,完整支持 Qwen2-VL 动态分辨率。
Q14. VLM 微调需要多少数据?
VLM 微调数据需求:① 简单任务(图像描述)→ 5K~10K 即可;② 中等任务(VQA)→ 10K~50K;③ 复杂任务(视觉推理)→ 50K~200K。GRPO 训练数据可更少(5K 就能涨 23 个百分点)。生产建议:① 先 5K 试验,看奖励曲线;② 数据不够用 LoRA 减少过拟合。
Q15. VLM 怎么蒸馏到端侧?
VLM 端侧蒸馏 3 步:① 大模型 VLM 推理生成 (image, prompt, response) 三元组;② 小模型 VLM SFT(如 InternVL2-1B / Qwen2-VL-2B);③ 量化到 4-bit(GGUF / AWQ)。端侧可用:① iPhone(Qwen2-VL-2B 4-bit 跑 2 t/s);② Android(MiniCPM-V-2B 跑 1.5 t/s);③ MacBook(Qwen2-VL-7B 跑 10 t/s)。
Q16. VLM 和 VLA 有什么区别?
VLM = 视觉 → 语言(看图说话)。VLA = 视觉 → 语言 → 动作(机器人控制)。VLA = VLM + Action Head,是 Robotics 领域的范式。代表:OpenVLA、RT-2、Pi0。本篇只讲 VLM,VLA 是另一专题。
Q17. VLM-GRPO 训练数据哪里找?
VLM-GRPO 训练数据源:① GeoQA / Geo170K(几何题,5K~170K);② MathV360K(数学视觉,360K);③ ChartQA(图表题,28K);④ TabMWP(表格题,38K);⑤ 自构造(用 GPT-4V / Qwen2-VL-72B 生成)。生产建议:① 用 Geo170K 起步;② 大规模训练用 MathV360K。
Q18. VLM 评估和 LLM 评估有什么不同?
VLM 评估独有 3 大维度:① 图像理解:识别物体 / OCR / 空间关系;② 多模态推理:结合图像 + 文本推理;③ 幻觉检测:避免"回答中提到图中没有的东西"。生产建议:① 用 POPE(幻觉 benchmark)评估;② 用 MME 评估能力;③ 业务 VLM 自构造 test set。
Q19. VLM 推理慢怎么办?
3 大优化:① 图像压缩:大图 resize 到 1024×1024(快 2×);② 动态分辨率:小图用少 token(快 1.5×);③ Speculative Decoding:用小 VLM 预生成(快 2~3×);④ vLLM:Continuous Batching(快 5~10×)。生产建议:① 默认 vLLM 部署;② 业务 QPS 100+ 用 vLLM + 4-bit 量化。
Q20. 多模态 R1 的未来是什么?
2025-2026 多模态 R1 3 大趋势:① Vision-R1 / R1-V:R1 范式扩展到视觉(VLAA-Thinking 2025);② Video-R1:视频理解 + R1 范式(VideoChat-R1 2025);③ Audio-R1:音频 + R1 范式(Qwen2-Audio-R1 2025)。结论:"R1 范式 + 任何模态"是 2025 年下半年最热的研究方向。
十、Roadmap:后续学习路线
- 入门(1~2 周):① 跑通 Qwen2-VL-7B 推理(vLLM);② 跑通 LLaVA-1.6 训练;③ 理解 VLM 架构
- 进阶(1~2 月):① 跑通 VLM-GRPO(GeoQA);② 跑通多模态 SFT;③ 评估 MathVista
- 高级(3~6 月):① 视频 VLM(Qwen2-VL 视频);② OCR VLM(InternVL2-8B);③ 端侧 VLM 蒸馏
- 专家(6~12 月):① VLA(机器人 VLM);② 视频 R1;③ 多模态 Agent
下一篇博文 Plan H:工业 RAG + 微调混合系统 是 R1 系列的收官之作,讲清"从训练 / 蒸馏 / 评估 / 部署 / 端侧 / 推理 / 多模态"——如何整合成完整的工业 RAG + 微调混合系统。
本文参考与资源链接:
• Qwen2-VL 论文
• LLaVA 论文
• InternVL2 论文
• Qwen2-VL-7B 模型
• MathVista 数据集
• Geo170K 几何数据集
• Unsloth 仓库
• TRL 仓库
• vLLM 仓库
• InternVL 仓库

浙公网安备 33010602011771号