2024 年 1 月,01.AI 开源了 Yi-VL 系列模型,主打在百亿参数级别上实现高效的视觉语言理解。当时多模态大模型已经不少,但绝大多数走的是“大就是好”的路线——模型动辄几百亿参数,普通人连部署的门槛都摸不到。Yi-VL 的野心是:在 34B 和 6B 这样“小而美”的规模上,把视觉理解做到接近甚至持平主流大模型的水准。

这听起来像是一个技术宣传话术,但如果你看过它的技术报告,会发现 01.AI 在架构选择上做了不少反直觉的决定。最核心的一点:他们没用类似 LLaVA 的端到端全量微调,而是把视觉编码器彻底冻结,只在语言模型上做 LoRA 微调。这意味着视觉部分几乎不参与训练,整个模型学到的视觉能力,全靠语言模型在“读”视觉特征时自己悟出来。
先说清楚 Yi-VL 的整体架构。它由三部分组成:视觉编码器(Vision Tower)、投影层(Projector)、语言模型底座(Base LLM)。视觉编码器用的是 OpenAI 开源的 CLIP ViT-H/14,参数规模约 6.3 亿。语言模型就是 Yi 系列,34B 和 6B 两个版本。投影层负责把视觉特征映射到语言模型的输入空间,是图像和文本之间的“翻译官”。
你可能会问:为什么不直接把视觉编码器也一起微调?那样不是能让模型更适应数据吗?这是很多多模态模型的常规做法,但 01.AI 选择了冻结。原因很实际:视觉编码器的参数量虽然只有 6 亿多,但梯度计算和优化成本极高,冻结它可以把训练显存占用降低一半以上。更重要的是,CLIP 这类预训练视觉编码器已经学到了非常通用的视觉表征,强行微调反而可能让它遗忘掉一些基础能力,导致在未见过的图像上表现下降。
那 LoRA 又是怎么回事?LoRA(Low-Rank Adaptation)是一种参数高效微调方法,它的核心思想是:预训练模型在适应新任务时,权重的变化量往往是一个低秩矩阵。与其直接更新全部参数,不如把权重变化分解成两个小矩阵的乘积,只训练这两个小矩阵。这样训练参数量可以压缩到原来的 1% 以下。Yi-VL 在语言模型的 attention 层上挂了 LoRA,秩设为 32,缩放系数为 1。对于 34B 模型,可训练的 LoRA 参数只有约 1.5 亿,占总参数的 0.4% 左右。
这个设计有个很直接的好处:训练和推理的内存开销都大幅下降。34B 的模型如果用全量微调,光梯度就要占几十 GB 显存,一般团队根本玩不起。用 LoRA 后,单卡 A100 80G 就能跑训练。这也解释了为什么 01.AI 能一口气开源两个版本,并且让普通研究者也能在消费级显卡上做推理。
但“高效”只是表面,真正的难点在于怎么让视觉特征和语言模型“对齐”。这里有个容易被忽略的细节:Yi-VL 的训练分两个阶段,第一阶段只训练投影层,第二阶段才训练投影层 + LoRA。为什么要分步?因为直接同时训练两个模块,模型容易陷入局部最优,视觉特征还没被“翻译”好,语言模型就已经开始强行生成文本了。分步训练相当于先让模型学会“看图说话”的基础语法,再让它学会“说话有逻辑”。
具体来说,第一阶段用约 100 万条图文对数据,只更新投影层。这一阶段让视觉特征能够被映射到语言模型的词嵌入空间,模型开始能把图像内容“翻译”成它认识的 token。第二阶段用约 50 万条指令微调数据,同时更新投影层和 LoRA。这一阶段让模型学会遵循人类的指令,比如“描述这张图片”“图片里有什么动物”等。两阶段的训练数据量在动辄上亿的今天,算是相当克制了。
训练完之后的效果怎么样?我在一些实际案例上测试过,比如让它描述一张复杂的街景照片,它能准确说出“一辆红色的公交车停在路边,后面有一棵大树”,这种细节理解能力在百亿参数模型里确实少见。但如果让它做复杂的数理推理,比如“图里有 3 个苹果,拿掉 1 个还剩几个”,它偶尔会犯一些低级的计数错误。这暴露了它的一个边界:视觉理解≠视觉推理,它能“看懂”但未必能“想明白”。
你可能会问,为什么不用更大的视觉编码器,比如 ViT-G/14?参数更多,视觉特征更丰富,效果不是更好吗?这其实是一个权衡问题。更大的视觉编码器在特征提取上确实更强,但它的输出维度也更高,投影层的计算量会随之增加。在百亿级语言模型面前,视觉编码器反而成了瓶颈。01.AI 选了 ViT-H/14 这个“中间尺寸”,既保证视觉特征足够丰富,又不至于拖慢整体推理速度。这是非常务实的工程选择。
另外一个值得注意的设计是:Yi-VL 在投影层上没有像 LLaVA 那样用简单的 MLP,而是用了两层 MLP,中间加了一个 GELU 激活函数。这个看似微小的改动,让视觉特征的表达能力更强了。技术报告里给出的对比数据是:两层 MLP 比一层 MLP 在多个视觉问答基准上平均提升 2-3 个百分点。这种细节往往被论文的读者忽略,但它恰恰是工程优化的精髓。
说到基准测试,Yi-VL 在多个公开榜单上的表现确实亮眼。在 MME 感知任务上,34B 版本得分 1822,超过了当时的 LLaVA-1.5-13B 和 Qwen-VL-7B。在 MMBench 中文测试集上,34B 版本得分 72.4,比同规模的模型高出不少。但我也要泼一盆冷水:这些基准测试的分数并不能完全反映真实世界的表现。尤其是中文场景下的歧义理解、文化常识、以及复杂的空间关系推理,Yi-VL 仍然有不少失误。
我最早以为,冻结视觉编码器会让模型“看不见”图像中的细节,因为视觉特征不再随着训练而调整。后来看了技术报告里对特征可视化的分析,我才想通:CLIP 预训练的特征本身已经足够通用,而 LoRA 在语言模型内部的调整,实际上是在学习“如何解读这些特征”。也就是说,视觉编码器负责“看到”,语言模型负责“理解”。这种分工让训练变得高效,但也意味着视觉部分的能力上限被锁死在 CLIP 的特征空间里。如果遇到 CLIP 没见过的图像分布,比如医学影像、卫星图像,Yi-VL 的视觉理解能力就会明显下降。
这引出一个更本质的局限:Yi-VL 的视觉能力是“借来的”,不是“学会的”。它借用了 CLIP 对自然图像的通用理解,再靠语言模型的先验知识去组织语言。这种方式在自然图像上很有效,因为 CLIP 已经见过了海量的互联网图片。但一旦超出这个分布,比如医学影像、遥感图像、工业质检图像,它的表现就会断崖式下跌。这不是 Yi-VL 独有的问题,而是所有基于冻结视觉编码器的多模态模型的通病。
有人可能会说,那为什么不把视觉编码器也解冻,让它一起适应新领域?技术上确实可以,但那就失去了高效微调的意义。解冻视觉编码器意味着训练成本指数级上升,而且容易过拟合。01.AI 的选择是在“通用能力”和“训练成本”之间取了一个平衡点:用冻结编码器保证通用性,用 LoRA 保证低成本,用两阶段训练保证对齐质量。
回头看 Yi-VL 的整个方案,它给我的启发是:不是所有任务都需要把整个模型解冻重训。在资源受限的场景下,参数高效微调配合合理的训练策略,往往能达到接近全量微调的效果。这也是为什么 LoRA 在开源社区这么火——它让普通开发者也玩得起大模型微调。
如果你准备在自己的项目里用 Yi-VL,有几个注意事项值得记住:
- 输入图像建议直接缩放,不要裁剪,避免信息丢失。
- 推理时最长 token 限制为 4096,超出部分会被截断。
- 它对中文的支持明显好于英文,但涉及专业术语时需要额外校验。
最后我想说,Yi-VL 的这套方案不是完美的,它的视觉推理能力有限,面对 OOD(分布外)数据时表现不稳定。但它的价值在于证明了:百亿级模型 + 冻结编码器 + LoRA,也能做出足够好用的多模态理解。这条路给所有算力有限的团队提供了一个可复制的范本。未来如果视觉编码器本身的通用性再上一个台阶,这种“借力”的方案可能还会继续发光。
想深入了解的话,建议直接读 01.AI 的技术报告,里面有完整的训练细节和基准测试数据。网上也有不少复现教程,但记得先看官方文档再动手。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/290.html