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参数量MMBenchMathVista特点
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 的关键区别:

  1. 输入:(image, prompt) → response(视觉 + 文本)
  2. 奖励视觉奖励函数(几何正确 / 图表解析 / OCR 准确)
  3. 采样:N 次采样 + 投票 / RM 评分
  4. 训练:与纯文本 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-7BGPT-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. 入门(1~2 周):① 跑通 Qwen2-VL-7B 推理(vLLM);② 跑通 LLaVA-1.6 训练;③ 理解 VLM 架构
  2. 进阶(1~2 月):① 跑通 VLM-GRPO(GeoQA);② 跑通多模态 SFT;③ 评估 MathVista
  3. 高级(3~6 月):① 视频 VLM(Qwen2-VL 视频);② OCR VLM(InternVL2-8B);③ 端侧 VLM 蒸馏
  4. 专家(6~12 月):① VLA(机器人 VLM);② 视频 R1;③ 多模态 Agent

下一篇博文 Plan H:工业 RAG + 微调混合系统 是 R1 系列的收官之作,讲清"从训练 / 蒸馏 / 评估 / 部署 / 端侧 / 推理 / 多模态"——如何整合成完整的工业 RAG + 微调混合系统


本文参考与资源链接:
  • Qwen2-VL 论文
  • LLaVA 论文
  • InternVL2 论文
  • Qwen2-VL-7B 模型
  • MathVista 数据集
  • Geo170K 几何数据集
  • Unsloth 仓库
  • TRL 仓库
  • vLLM 仓库
  • InternVL 仓库

posted @ 2026-06-20 18:32  左扬  阅读(16)  评论(0)    收藏  举报