RL4VLM
用强化学习(PPO)微调大型视觉语言模型(VLM)做决策任务的标杆项目,NeurIPS 2024 论文官方实现
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用强化学习(PPO)微调大型视觉语言模型(VLM)做决策任务的标杆项目,NeurIPS 2024 论文官方实现
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这样的场景:AI 模型看着一张银行卡的照片,不仅能准确读出卡号和余额,还能自主决定"现在转账100元到好友账户"。这个看似理所当然的动作,背后涉及视觉感知→语言理解→推理决策→行动执行一整套复杂链条,而这正是 RL4VLM 论文试图解决的核心问题。
RL4VLM(Fine-Tuning Large Vision-Language Models as Decision-Making Agents via Reinforcement Learning)是 UC Berkeley、NYU、Meta AI 等机构联合发表在 NeurIPS 2024 的研究成果。它的核心思想是:用强化学习(PPO)微调大型视觉-语言模型(VLM),让这类模型真正具备在真实环境中做决策的能力,而不只是在静态 benchmark 上刷分。
图1:RL4VLM 核心思路——用 RL 让 VLM 学会在决策环境中行动
传统的视觉-语言模型(如 LLaVA、GPT-4V)在图像描述、VQA 等任务上表现优异,但这些任务本质上是"离线评测"——模型只需要输出文本,不需要真正与外部环境交互。而在现实应用中,AI 助手需要完成购物、操作软件、填写表单等序列决策任务,这类任务的输出是动作序列,动作之间有因果依赖关系,错误的中间动作会导致整体任务失败。
OpenAI 在 2023 年提出了 VPT(Visual Pretraining with Transfer),证明了用海量视频预训练的 Minecraft 智能体可以学会复杂技能。但 VPT 依赖的是视频动作标签,而真实的视觉-语言模型缺乏这种标注数据。RL4VLM 的切入点是:既然 VLM 本身有强大的视觉-语言理解能力,只需补充"决策能力"这一个模块,而非从头预训练整个模型。
论文团队来自 UC Berkeley 的 Sergey Levine 实验室(以强化学习闻名)和 Meta AI 的 Saining Xie 团队,阵容豪华。Yann LeCun 赫然出现在作者列表中,足见这个方向的重要性。
RL4VLM 的训练分为两个阶段:
第一阶段:SFT(监督微调)——让模型学会"生成动作"。团队在 HuggingFace 上公开了 SFT 数据集(LEVI-Project/sft-data),格式为 {图像, 任务指令, 正确动作序列}。初始模型选用 llava-1.6-mistral-7b,微调后作为 RL 的起点。
第二阶段:PPO 强化学习微调——让模型学会"优化决策"。这一阶段使用 on-policy 的 PPO 算法,通过 reward signal 调整模型的 action distribution。关键设计包括:
move to the red card),而非离散的 action token,这大大增加了泛化能力
图2:RL4VLM 训练流程图
团队自定义了 GymCards 环境,包含四款经典卡牌/数字游戏:
| 游戏 | 描述 | 难度 |
|---|---|---|
| NumberLine(数轴游戏) | 给定起点和目标点,模型控制指针左右移动到达目标 | 入门级,调试友好 |
| EZPoints(快算24点) | 给定4张牌,用加减乘除凑出24点 | 中等,需要组合推理 |
| Points24(进阶24点) | 更复杂的24点变体 | 高阶 |
| Blackjack(21点) | 像素图输入的21点游戏 | 需要牌面识别 |
这些环境的特点是:观测是像素级 RGB 图像,动作是文本 token 序列,完全模拟了真实 VLM Agent 的输入输出形态。
图3:EZPoints 游戏的像素观测 + CoT 推理示例
论文的核心实验结果显示了令人惊喜的 scaling 规律:
数据效率随模型规模提升:8B 规模的 LLaVA-1.6 在 RL 微调后,GymCards 各游戏的成功率相比 SFT 基线提升了 40-60%,且远超从头训练(from scratch)的效果。
CoT 的关键作用:有无 Chain-of-Thought 推理对结果影响巨大。启用 CoT 后,模型的泛化能力显著增强,即便环境参数变化也能保持较好表现。
不同 RL 算法对比:PPO 优于 A2C,且 reward shaping 策略对稀疏奖励环境至关重要。
图4:RL 微调相比 SFT 基线的性能提升曲线
图5:各游戏在不同训练策略下的成功率对比
项目代码结构清晰,分为三大块:
1. LLaVA 分支(LLaVA/):fork 自官方 LLaVA 1.6,只做了少量 patch,核心是 llava/model/ 的视觉编码器和语言模型接口。
2. VLM_PPO 模块(VLM_PPO/):核心 RL 训练代码。
a2c_ppo_acktr/algo/ppo.py — PPO 算法实现a2c_ppo_acktr/llava_interface/interface.py — LLaVA 接口:生成文本动作、计算 action log prob(注意:tokenizer 版本更新后 token id 可能变化)a2c_ppo_acktr/model.py — VLM backbone 封装a2c_ppo_acktr/envs.py — GymCards 环境 wrapperscripts/config_zero2.yaml — DeepSpeed ZeRO-2 配置3. GymCards 环境(gym-cards/):基于 gymnasium 的自定义环境,支持像素图观测和纯文本观测两种模式。
关键技术栈:PyTorch + DeepSpeed(ZeRO-2)+ accelerate + stable-baselines3 + wandb。
部署难度:困难
主要痛点:
interface.py 中对 '"action":' 的 token id 是硬编码的,换了 tokenizer 版本后必须手动重新映射config_zero2.yaml 中的 num_processes 必须 ≤ GPU 数,多卡 NCCL 通信超时问题常见推荐复现路径:跳过 SFT,直接使用 llava-1.6-mistral-7b 作为初始模型,降低门槛。
硬件需求:至少 2 张 A100(40GB)或等效。VLM(7B)+ PPO on-policy 采样显存开销极大。
Web UI:LLaVA 分支自带 Gradio web server(LLaVA/llava/serve/gradio_web_server.py),但仅用于 LLaVA 原生的对话功能,不支持 GymCards RL 训练可视化。
项目已于 2024 年 12 月 15 日 归档,作者说明原因:维护成本过高,依赖包版本更新导致兼容性断裂。对于想在此基础上做 follow-up 的研究者,建议使用最新版本 backbone(Qwen2-VL、Llama3.2V 等),自己设计环境,为 CoT 定制合适的 action wrapper。
RL4VLM 证明了**"VLM + RL = 决策 Agent"**这条路走得通。它代表了一个重要趋势:从单轮 VQA 到多轮决策,从固定 action space 到自由形式文本 action,从模仿学习到强化学习优化。虽然代码库已归档,但它提出的方法论和 HuggingFace 数据集仍在被持续使用,是该方向的标杆性工作。
一句话总结:RL4VLM 用强化学习微调 VLM 做决策任务,证明了"视觉理解+语言动作+RL优化"三件套的有效性,但部署门槛高,代码库已归档,适合作为研究 baseline 参考而非直接生产使用。