知乎:https://zhuanlan.zhihu.com/p/1908543355161417216
(已授权)
肝了几个月的工作DeepEyes终于正式release了,DeepEyes是一个具备像o3一样“边看图边思考”的能力的模型,基于Qwen2.5-VL-7B-Instruct的原生能力,没有SFT冷启,也不依赖外部专家模型,完全端到端RL训练,用outcome reward signal来激发VLM图像思考能力
这个工作刚开始做的时候还没有o3/o4-mini,做到一半被openai大招精确打击,实属无奈,但是最终结果上,在7B小模型上的指标全面超过了Qwen2.5-VL的32B版本,V*上接近o3/o4-mini的水平,并且在数学、visual grounding、幻觉等任务上也有不错的表现
代码paper模型数据啥的全开源了,感兴趣的朋友可以瞅瞅我们的homepage,为了和openai中门对狙,展示了https://openai.com/index/thinking-with-images/在我们模型上的表现,以及一些自己用手机拍的照片
- Paper:ttps://arxiv.org/abs/2505.14362#
- Code:https://github.com/Visual-Agent/DeepEyes
- Homepage:https://visual-agent.github.io/
代码是基于verl开发的,除了用做DeepEyes的训练,还在一些其他开源工作https://arxiv.org/abs/2503.05592 和公司的内部场景验证过,工程大佬帮忙把关,非常小心地处理了mrope、loss mask、GAE、环境交互异步并行、以及训练时的各种边界情况,应该可以说是一个经受过充分检验的agent RL训练框架
Thinking with Images
Motivation
DeepEyes的idea缘于今年二月底一次饭桌上的讨论:R1出现以后,很多工作开始尝试把文本里训练RL的方法迁移到视觉领域,通过RL训练VL模型的cot来复刻视觉模型的aha moment,由于cot过程完全是用文本来推理的,大家对aha moment的预期还是会不会出现类似像wait、alternatively之类self-reflection的字眼,以及response length的上升是否伴随着评测集上acc的提升
有没有一种可能,视觉推理的思考模式就应该是不同于文本推理的?
一个很明显的证据是:人类在面对一个视觉类问题时,并不是看一遍图之后就在脑子里一通思考,而是会边看边想;甚至有部分人类天生具备visual thinking的能力,他们大部分的思考都是用以图像视觉的方式来展开的,相比之下,VLM的图片只有在一开始输入给模型时由vision encoder一次性变成image embedding,之后图片就变成了纯静态的context,这种纯文本的思维方式在视觉domain是“有损”的
如果我们有办法让VLM边看边想,它就有可能会出现一些独属于视觉domain,和文本cot完全不同的思考方式
VLM并没有直接输出image token的能力,如果要让模型能够边看边想,唯一也是最直接的办法就是agent框架——给模型一个图像工具,让模型能够通过输出grounding坐标的形式来调用tool,从而按照自己的意志来取观察图片中感兴趣的部分(如图)
关于tool scaling
希望用端到端RL的方式来优化,因为RL和long-cot是天造地设的一对,希望VLM图像思考的能力来源于在exploration中不断寻求如何做对题目,而不是对行为轨迹的简单模仿
既然是端到端RL优化,那么模型的推理过程一定是在一个trajectory中一次性完成的,用模型输出的bounding box去crop图片后,图片应该作为中间输入拼接到token sequence里,不能拆分成多个子模块单独优化
对于工具而言,希望模型通过调用tool来延伸自己的视觉思考能力,而不是局限于学习怎么调用tool这件事本身,tool服务于reasoning能力
因此,给模型一个image zoom-in工具,要求模型必须通过自己输出bounding box坐标来调用这个工具,主要基于以下两点考量:
- image zoom-in是一个非常general的视觉工具,相比传统agent中那些只在特定task下才有用的tool,image zoom-in可以用于任何的视觉理解和推理任务,模型可以在学习过程中自己决策应该在什么情况下使用这个工具,从而产生非常复杂的reasoning行为;
- 模型grounding能力来源于VLM模型自身,这样模型grounding的准确度,以及模型调用工具的行为都可以在端到端RL中被优化,我们认为这是一种上限很高的训练方式,能够比较好地scaling;
后来这个工作做到一半o3出了,仔细看看发现o3也强调了native ability的重要性,一定程度上说明这是一条正确的路径 https://openai.com/index/thinking-with-images/
后续的实验中,也确实发现模型zoom-in的准度和效率都可以在RL过程中提升,同时伴随着测试集指标稳步上升,说明VLM可以在RL训练中动态地平衡 exploration vs exploitation(RLers最津津乐道的话题),找到了一条和文本模型完全不同的学习路径
把这个看起来很简单的idea做work的一万个小细节
把这个看似简单的idea做work的过程中,我们发现一些细节对最终模型效果影响很大:
比较trivial的因素包括prompt template的选择,以及代码实现中各种工程细节,在此按下不表
还是举个小例子来说明这些trivial细节有多烦人:如果你用的verl代码里没有这个PR,训练起来不会有任何报错,但是你的最终结果指标大概率不会很好看
https://github.com/volcengine/verl/pull/1116/commits/76a327c7f00cdc3dc5034e30f594a82db6ac672c
有两个比较重要的因素,RLers老生常谈的基础问题:数据和reward;
实验曲线上可以看到不同的reward设计对RL训练的动态影响还是很大的:
- 【绿色】只要模型调用了tool就给reward是非常糟糕的设计,可以看到模型在开始训练后调用tool次数一路飙升,然后跌到一个非常低的数值
- 【红色】完全不给tool reward的情况下,训练不太稳定,非常容易训到一半崩溃,图中的红色曲线训练到50 step之后崩溃,尝试了好几次下来都是类似的结果,只好拿崩溃前的checkpoint用来评测,结果指标也不太理想;
- 【蓝色】在做对题且成功调用了工具的情况下,才会给一个额外的reward奖励,在我们的场景下是比较好的reward设计;
数据也是比较重要的,我们为了保证训练数据的多样性,用了高分辨率的自然图像、图表类图像,以及一些传统的多模推理数据,为了保证数据质量我们做了多个阶段的数据筛选,实验结果可以看到数据多样性对模型通用推理能力提升有很大帮助
verl agent化改造过程中的一万个小细节
在官方版本的verl上支持agent训练,并且要支持observation返回多模态,过程中还是踩了不少坑的,这部分和paper的主线没什么关系,且听下回分解吧
PS:看到这里,如果觉得不错,可以来个点赞 、在看 、关注 。 给公众号添加【星标⭐️】不迷路!您的支持是我坚持的最大动力!
欢迎多多关注公众号「刘聪NLP」,加入交流群,交个朋友吧,一起学习,一起进步!