直到最近为止,AI模型的范围很窄,要么理解语言,要么理解特定图像,很少两者兼顾。
在这方面,像GPT这样的通用语言模型是一个巨大的进步,因为我们从专用模型直接跃升到了更强大且更为通用的模型。
但即使语言模型在发展,它们仍然与计算机视觉领域保持独立,各自领域独立发展,没有填补这一空白。想象一下,如果你只能听却看不到,或者反过来只能看到却听不到。
我的名字叫罗马·伊萨钦科,我在Yandex的计算机视觉团队工作。
这篇文章将讨论视觉语言模型(VLMs,Visual Language Models的缩写),我认为它们是多模态AI系统的未来。
我将解释开发用于图像搜索的多模态神经网络的基础知识和训练过程。我还将探讨背后的设计原则、挑战和架构,这些都是使这一切成为可能的关键因素。
最后,我还会展示我们是如何使用这种人工智能搜索产品来处理图像和文本的,引入视觉语言模型(VLM)后又出现了哪些变化。
行了,开始吧!
什么是VLMs?拥有数十亿甚至数百亿参数的大规模语言模型已经不再新鲜。
到处都能看到他们!
接下来的关键研究重点更侧重于开发多模态模型——能够理解和处理各种类型的数据的模型。
多模态模型(图源:作者)
正如名字所暗示的,这类模型不仅可以处理文本信息,还可以处理图片、视频以及音频。
那我们为什么这么做呢?
样样通,但样样不精,反而常常比专精一项更好。
近年来,我们注意到广泛的方法开始主导特定的方法。
想想吧。
今天的由语言驱动的现代机器学习模型已经变得相当先进且用途广泛。一个模型可以进行翻译、摘要、识别语音内容等多种任务。
通用NLP模型。(作者供图)
但之前,这些模型都是特定任务的。我们现在也有这样的模型,但比以前少了些。
- 一个专门用于翻译的模型
- 一个专门用于总结等的模型
换句话说,现在的NLP模型(特别是大模型)可以做许多过去需要专门开发特定解决方案的任务。
其次,这种方法使我们能够指数级地增加用于模型训练的数据,这一点尤为重要,因为文本数据资源有限。然而,在之前,我们需要特定任务相关的数据。
- 一个专门用于翻译标注的数据集。
- 一个专门用于摘要的数据集等等。
第三,我们认为训练一个多模态模型可以提升每种数据类型的性能表现,就像它对人类带来的提升一样。
我们将“黑盒”的概念简化为一个具体场景,模型接收一张图片和一些指令(文本)作为输入,并仅输出文本作为响应。
因此,我们得到一个更简单的步骤,如下所示:
一个简化的多模态模型图(作者提供图片)
我们将聊聊专门用来分析和解释图像内容的模型。
在我们深入探讨技术细节之前,想想这些模型能解决哪些问题。
这里有几个例子:
任务示例(图片来自作者)
- 在左上角的图片:我们要求模型描述这张图片。这是通过文字说明的。
- 在上方中间的图片:我们要求模型解读这张图片。
- 在右上角的图片:我们要求模型解读这张图片,并让我们知道如果遵循指示牌上的指示会发生什么。
- 在底部的图片:这可能是最复杂的例子。我们给模型出了一些数学题。从这些例子中可以看出,任务范围广泛多样。
VLMs是视觉的新前沿,可以处理各种基本的CV相关任务(分类、检测和描述),并且可以在零样本和单样本模式下。
尽管VLMs目前可能还不在每个标准任务中做得好,但它们进步很快。
现在,我们来看看它们是怎么工作的。
VLM 架构这些模型通常包含三个主要部分:
简化版的VLM(作者绘制)。
- LLM — 大型语言模型(如YandexGPT),它不理解图像。
- 图像编码器 — 图像模型(如CNN或Vision Transformer),不理解文本内容。
- Adapter — 适配器——一个起到桥梁作用的模型,让大型语言模型和图像编码器能够更好地协同工作。
这个流程相当直接:
- 将图像输入图像编码器。
- 将图像编码器的输出通过适配器转换为某种表示形式。
- 将适配器的输出集成到LLM中(稍后详细介绍)。
- 在处理图像的过程中,将文本指令转换为标记序列并输入到LLM中。
更多信息:
适配模块是模型中最令人兴奋和最关键的部分,因为它精确地实现了大型语言模型和图像编码器之间的通信和交互。
有两种适配器类型:
- 基于提示的适配器插件
- 基于跨注意力的适配器插件
基于提示的适配器最初是在BLIP-2和LLaVa模型中提出的。
这个想法既简单又直观,名字本身就能说明一切。
图像编码器的输出可以是向量、序列或张量(取决于架构),并将其转换成标记序列,然后将这些标记输入大语言模型。你可以用简单的多层感知机模型作为适配器,效果应该会很好。
这种基于跨注意力机制的适配器在这方面稍微复杂一点。
这些适配器的目标是将图像编码器的输出转换成可以在LLM的交叉注意力块中作为键/值矩阵使用的格式。例如,像Perceiver Resampler或Q-Former这样的架构即为这种适配器的具体示例。
基于提示的适配器(提示适配器)(左图)和基于交叉注意力的适配器(交叉注意力适配器)(右图)(作者提供图片)
基于提示的适配器模块(左)和基于交叉注意机制的适配器模块(右),
这两种方法各有利弊。
目前,基于提示的适配器确实能提供更好的效果,但会消耗LLM较多的输入上下文信息,这对拥有有限上下文容量的LLM来说很重要,至少目前来说。
基于交叉注意力的适配器不会减少大模型的上下文信息,但需要很多参数才能达到高质量的效果。
VLM培训解释:VLM培训是指...(此处可根据具体情况进行补充说明,以便更好地让中文读者理解)
在架构搞定之后,让我们开始训练吧。
首先,请注意,VLMs 并不是从零开始训练的(尽管我们认为这只是时间问题,),而是基于预先训练的大语言模型和图像编码器构建的。
利用这些预训练的模型,我们在结合文本和图像的多模态数据上对VLM进行微调。
这个过程分为两个步骤。
- 预训练
- 对齐过程:SFT(基于人类反馈的强化学习)+ RL(强化学习)(可选步骤)
VLMs的训练过程(图片来自作者)
看看这些阶段是不是和大型语言模型(LLM)训练有点像?
这是因为这两个过程在概念上很相似。我们快速看一下这些阶段。
VLM 预训练阶段这是我们这一步的目标:
- 将文本和图像结合起来(记得我们的模型包含了一个之前未训练过的适配器)。
- 将世界知识加载到我们的模型中(图像包含很多细节,比如 OCR 技能)。
在预训练视觉语言模型的过程中,会用到三种类型的数据。
- 交错预训练法:这与LLM的预训练阶段类似,我们通过给模型喂入网页文档来教它进行下一个标记的预测任务。在VLM预训练中,我们选择带有图像的网页文档来训练模型预测文本。区别在于,VLM会同时考虑页面上的文字和图像。这种数据容易获取,所以这种预训练易于扩展规模。但是,数据质量不高,提升数据质量是个难题。
交错预训练数据集(示例图)(作者供图)
图像与文本的预训练:我们训练模型执行一个特定的任务:给图像加说明。为此,你需要一个包含大量图像及其相关描述的数据集。这种方法更受欢迎,因为它利用了大量已有的数据集来训练其他模型,如生成图像的文字描述和从图像中检索文字。
图像和文本的配对预先训练的数据集(图片由作者)
指令驱动的预训练:在推断过程中,我们会给模型架构输入图像和文本。为什么我们不一开始就以这种方式训练模型架构呢?指令驱动的预训练正是这样做的:它通过大量图像-指令-答案三元组数据来训练模型架构,即使这些数据有时可能不够完美。
基于指令的预训练数据集,(图片由作者绘制)
训练一个视觉语言模型(VLM)需要多少数据是一个复杂的问题。目前,所需的数据集大小可以从几百万到几十亿到几百亿样本(幸好不是一万亿那么多!)。
我们的团队使用了基于指令的预训练方法,样本量达到数百万。然而,我们认为交错式预训练有很大的潜力,我们正在积极地朝这个方向努力。
VLM 对齐(^1)注释 1: VLM 对齐指的是将VLM进行某种形式的调整或匹配,以确保它们在特定上下文中保持一致。
一旦预训练结束了,我们就可以开始对齐工作了。
它包含SFT训练和一个可选的RL步骤。因为我们只有SFT阶段,我将集中在这个上面。
不过,最近的研究论文(如这篇和这篇)经常在其VLM之上增加了一个RL环节,这个环节使用了与LLM相同的方法(如DPO及其首字母有差异的方法变体)。
总之,话说回来,还是说回SFT吧。
从严格意义上说,这一阶段与基于指令的预训练相似。
区别在于我们更注重高质量的数据,具有恰当的响应结构和格式,并具备强大的逻辑推理能力。
这意味着模型需要能够理解图像并进行推断。理想情况下,它还应该能同样出色地响应纯文本指令。所以我们还需要加入高质量的纯文本数据。
最终,这一阶段的数据数量通常在数十万到数百万之间。在我们的情况下,数量在六位数左右。
质量评价让我们来讨论一下评估VLM质量的方法。我们采用两种不同的方法:
- 在开源基准上计算指标。
- 通过并排评估,评估者通过对比两个模型的回答,选出更好的那个。
这种方法允许我们在特定的数据子集上测量替代指标,例如分类准确率。
不过,由于大多数基准都是用英语进行的,因此无法用来比较用其他语言(例如德语、法语、俄语之类的)训练的模型。
虽然可以使用翻译,但是由于翻译模型里边的问题,翻译结果往往不太靠谱。
第二种方法允许更深入地分析模型,但是需要细致而且非常昂贵的数据标注工作。
我们的模型可以回答英语和俄语的问题。因此,我们可以使用英语的开源基准,并进行并列比较。
我们相信这种方法并为此投入了大量资金。这是我们要求评估师们评估的几个关键点:
- 语法
- 可读性
- 全面性
- 与任务的相关性
- 错误(逻辑和事实)
- 幻觉
我们努力评估模型各种技能中覆盖面广且种类多样的部分。
以下饼图展示了我们SbS评估桶中的任务分配情况。
质量评估任务的分配情况(作者提供图片)
这概述了视觉语言模型(VLM)的基础。接下来,我们将讨论如何训练模型以及评估其质量。
管道系统:今年春天,我们在Neuro这款AI驱动的搜索产品中加入了多模态功能,让用户既能用文字也能用图片提问。
直到最近为止,它的底层技术还不算是真正的多模态技术。
这是原来的管道。
管道结构(作者供图)
这张图表看起来挺复杂的,但拆解成步骤之后,其实就简单多了。
以前这个过程是这样的
- 用户上传一张图片和一个文本查询。
- 我们将图片发送到我们的视觉搜索引擎,它会返回关于图片的大量信息(标签、识别的文本、信息卡片)。
- 我们使用一个文本改写工具(一个经过微调的大语言模型)根据这些信息和原始查询来形成一个文本查询。
- 通过改写的查询,我们使用Yandex Search检索相关文档(或片段,我们称之为信息上下文)。
- 最后,利用所有这些信息(原始查询、视觉搜索信息、改写的文本查询和信息上下文),我们使用响应生成模型(另一个经过微调的模型)生成最终响应。
搞定!
正如你可以看到,我们以前依赖于两个单一模态的语言模型和我们的视觉搜索引擎。这个方案在少量查询上表现得不错,但还是有一些局限性。
以下是一个稍微夸张了的例子,说明事情可能会出错。
两个单峰的大型语言模型(图片由作者提供)
在这里,处理器接收到视觉搜索服务的输出,却无法理解用户意图。
反过来,这个大型语言模型(LLM)对图片一无所知,因此生成了一个错误的搜索词,同时得到了关于巴哥犬和苹果的标签。
为了提升我们多模态响应的质量,并让用户能提出更复杂的问题,我们在架构中引入了一个视觉语言模型(VLM)。
更具体地说,我们做了两个主要的改动:
- 我们用VLM改写器替换了LLM改写器。基本上,我们将原始图像输入到改写器,与视觉搜索引擎提供的文本结合处理。
- 我们在流程中添加了一个专门的VLM字幕生成器。我们用该模型生成的图像描述作为最终生成器的信息参考。
你可能在想
为什么不直接把生成器做成基于VLM的呢?
这是个好想法呢!
但是有个坑。
我们的生成器训练借鉴了Neuro的语言模型,该模型经常得到更新。
为了更快更方便地更新管道,我们引入一个独立的VLM模块,这对我们来说更简单。
另外,这种设置同样管用,如下面所示,使之与前面的句子更分明。
使用VLM进行AI搜索(图片由作者提供)
训练VLM重述器和VLM字幕器是两件不同的事。
为此,我们使用之前提到的VLM,并针对这些特定任务对其进行了调优。
调整这些模型需要去收集包含数万个样本的独立数据集。
我们也得对基础架构做出重大改动,让管道在计算上更高效。
评估质量情况现在到了最关键的问题:
这是否让事情变得更好?
(注解:这里的“VLM”在上下文中应保持一致的翻译或解释,如果之前没有定义的话。)
简单来说,确实做到了!
我们进行了并行测试来对比新旧框架的表现,并将我们之前的LLM框架与新的VLM框架进行比较,以衡量新管道系统的性能。
这个评估与之前讨论的核心技术评估类似。不过,我们使用了一组不同的图像和查询,更贴近用户可能提出的问题。
下面大致是这个桶中群集的分布情况。
集群分布(图源:作者)
我们通过离线评估发现,我们的最终回复质量有了显著提升。
VLM系统显著提升了响应的质量,并能覆盖更多的用户场景。
神经领域中视觉语言模型(VLM)与语言语言模型(LLM)的准确性对比(图片来源:作者)
我们也想在真实观众面前测试一下,看看用户是否能感觉到我们相信会提升产品体验的技术改进,我们相信这些技术改进会提升产品体验。
我们在网上做了一次分组测试来比较我们的LLM流程和新的VLM流程。初步结果显示了以下情况:
- 包含图片的指令数量增加了17%。
- 用户连续输入多个查询的会话数量增长了4.5%。
就像上面说的,再说一遍,我们坚信VLMs将是计算机视觉领域的未来。
VLMs已经能够解决许多无需额外训练即可解决的问题。稍微调整一下,它们绝对能够达到顶尖水平。
谢谢您的阅读!
共同学习,写下你的评论
评论加载中...
作者其他优质文章