Ovis原理解读: 多模态大语言模型的结构嵌入对齐

ops/2024/10/25 10:47:31/

在这里插入图片描述

论文:https://arxiv.org/pdf/2405.20797
github:https://github.com/AIDC-AI/Ovis

在多模态大语言模型 (MLLM) 中,不同的嵌入策略有显著的区别。以下是使用基于连接器的方法与 Ovis 方法的比较:
不同方案总结对比

基于连接器的方法-优缺点(connector-based approach)

  • 策略:在基于连接器的方法中,视觉嵌入通过连接器(connector)转化为与文本嵌入具有相同维度。
  • 具体实现:文本嵌入从一个文本嵌入表中索引,而连接器的作用是将视觉嵌入调整到相同的尺度和形式,使其能够与文本嵌入一起处理。
  • 优点:这种方法确保了视觉和文本嵌入在形式上的一致性,方便后续的联合处理。
  • 缺点:连接器可能限制了视觉特征的表达能力,无法完全捕捉到视觉输入的复杂模式和细节。

Ovis 方法-优缺点

  • 策略:Ovis 引入了一个额外的视觉嵌入查找表,从而生成结构化的视觉嵌入,并对齐两种模态的嵌入策略。
  • 具体实现:在 Ovis 中,这个额外的视觉嵌入表的每一行对应一个唯一的视觉词汇,表示不同的视觉模式。Ovis 首先将视觉编码器输出的连续 token 映射为概率 token,通过索引视觉嵌入表多次来生成最终的视觉嵌入。这种方法利用了整个嵌入表的期望值,捕捉了视觉输入的丰富语义。
  • 优点:这种方法能够更好地捕捉视觉输入中的复杂模式,提升了视觉信息的表达能力。此外,通过与文本嵌入策略的一致性设计,提高了两种模态信息的融合效果。
  • 缺点:引入额外的视觉嵌入表可能增加计算复杂度,需要更多的存储和计算资源。

Ovis 总结

它提出了一种新颖的多模态大语言模型 (MLLM) 架构,称为 “Ovis”。该架构吸收了大语言模型 (LLMs) 的洞见,从而建立视觉输入的结构化嵌入。如图1所示,Ovis 引入了一个额外的可学习视觉嵌入查找表,用以转换连续的视觉tokens,从而与文本嵌入的结构完整性相呼应。图2展示了在各种基准测试中,Ovis 在相同参数范围内优于开源 MLLMs,而 Ovis-14B 在整体表现上也超越了高资源的专有模型 Qwen-VL-Plus。

具体而言,Ovis 包含一个视觉嵌入表,其行对应于唯一的视觉词汇,代表不同的视觉模式。给定由视觉编码器 [22] 输出的视觉块的连续token,Ovis 首先将该token 映射为概率token,展示其在整个视觉词汇表中的相似性。这个概率token 捕捉单个视觉块中的丰富语义,其中可能包含多个视觉词汇的模式,有效地将视觉token视为从视觉嵌入表中基于分布抽样而来。随后,Ovis多次根据概率token 索引视觉嵌入表,生成一个最终的视觉嵌入,即整个嵌入表的嵌入期望。因此,Ovis 将视觉嵌入策略与其文本嵌入结构的本质对齐。

视觉嵌入表的优化和生成概率token 的参数显著影响 MLLM 的性能。与之前方法使用图像上的向量量化自动编码器和各种其他损失不同 [78, 23, 33],Ovis 利用联合文本生成损失,并以三阶段方式优化参数。这种学习过程使得 Ovis 避免了由于缺乏文本指导而在视觉语言任务中表现不足的风险。

以开源的视觉 Transformer 和 LLM 模型作为骨干实现 Ovis,并在不同的多模态基准中评估其性能。结果表明,在大多数基准测试中,Ovis 在相同参数范围内优于流行的开源 MLLMs。具体而言,Ovis-8B 与其竞争对手相比表现出较大的优势,而 Ovis-14B 始终超越了被比较的开源 MLLMs。
在这里插入图片描述

首先回顾了多模态大语言模型(MLLMs)中的视觉和文本嵌入策略的差异。接着,我们介绍了提出的架构Ovis,该架构包括用于概率性tokens的线性映射和在大语言模型(LLM)中引入的视觉嵌入查找表。

1 视觉和文本tokens的差异

图像和文本都作为输入被送入MLLM,但它们的标记化策略各不相同。设 I ∈ R C × W × H I \in \mathbb{R}^{C \times W \times H} IRC×W×H 为图像的像素值张量,其中 C C C W W W H H H 分别表示图像的通道数、宽度和高度。图像首先被划分为一系列视觉块(visual patches) { P i ∈ R C × w × h } i = 1 , 2 , … , n \{P_i \in \mathbb{R}^{C \times w \times h}\}_{i=1,2,\ldots,n} {PiRC×w×h}i=1,2,,n,其中 w w w h h h 分别表示视觉块的宽度和高度, n = ⌈ W w ⌈ ⌈ H h ⌈ n = \left\lceil \frac{W}{w} \right\lceil \left\lceil \frac{H}{h} \right\lceil n=wWhH 为视觉块的数量。给定预训练的视觉转换器(ViT)骨干网 g θ g_{\theta} gθ ,我们将这些视觉块转换为一系列视觉表示 { r i ∈ R d } i = 1 n \{r_i \in \mathbb{R}^d\}_{i=1}^n {riRd}i=1n

对于文本输入,设 { t i } i = 1 m \{t_i\}_{i=1}^m {ti}i=1m 为文本tokens的输入序列,它们将被 LLM f ϕ f_{\phi} fϕ 处理。在 MLLM 中,视觉 { r i } i = 1 n \{r_i\}_{i=1}^n {ri}i=1n 和文本 { t i } i = 1 m \{t_i\}_{i=1}^m {ti}i=1m 的tokens都需要转换为相同的形式,随后 LLM 处理所有tokens,并生成一个文本tokens的输出序列。我们用 λ \lambda λ 来表示图像指示器token的索引,即 t λ = <image > t_{\lambda} = \text{\textless image \textgreater} tλ=<image >,多模态输入tokens变成:
[ t 1 , … , t λ − 1 , <image > , … , t m ] ( 1 ) [ t_1, \ldots, t_{\lambda-1}, \text{\textless image \textgreater}, \ldots, t_m ] \ \ \ \ \ \ \ \ (1) [t1,,tλ1,<image >,,tm]        (1)由于视觉和文本tokens的维度不同,直接用 { r i } i = 1 n \{r_i\}_{i=1}^n {ri}i=1n 替换 <image > \text{\textless image \textgreater} <image >是困难的。先前的方法引入了额外的线性投影、MLP或transformer架构来将视觉tokens映射成与文本tokens相同的形式。

2 概率性视觉Tokens

在Equation 1中与其使用连续的视觉tokens,我们对齐图像和文本的内部标记化策略以激发MLLM的潜力。为了模拟离散的文本tokens,我们使用一个线性头 R K × d R^{K \times d} RK×d 来变换具体的视觉tokens。假设K是视觉词汇表的大小,即唯一视觉词的数量,给定一个视觉token r i r_i ri,我们首先通过线性投影和softmax归一化将 r i r_i ri 转换为一个 ( K − 1 ) (K-1) (K1) 维的概率单纯形 Δ K \Delta^K ΔK
v i = softmax ( W r i ) , W ∈ R K × d ( 2 ) v_i = \text{softmax}(W r_i), W \in R^{K \times d} \ \ \ \ \ \ \ \ (2) vi=softmax(Wri),WRK×d        (2) v i ∈ Δ K v_i \in \Delta^K viΔK 视为一种概率token,这是一种在包含K个视觉词汇的视觉词汇表上的概率分布。如果 r i r_i ri 更多地与某些模式相关,则 v i v_i vi 中对应的元素应更大。

:给定一个视觉嵌入表,我们将每个视觉词与其原型 { w i ∈ R d } i = 1 K \{w_i \in R^d\}_{i=1}^K {wiRd}i=1K 关联。为了匹配一个连续的视觉token与嵌入表中的K个视觉词,我们利用内积来计算它们的相似度值。Equation 2是 r i r_i ri 与所有视觉词之间的归一化相似度。

3 视觉嵌入表

在LLMs中,通常采用文本嵌入表将词汇表中的每个词映射到一个嵌入向量。对于以one-hot形式表示的每个文本token t i t_i ti,其嵌入 T i ∈ R d ′ T_i \in R^{d'} TiRd 是由 t i t_i ti 中非零索引指示的文本嵌入表中的行。

类似地,我们引入一个额外的视觉嵌入表,其中每个视觉词(每一行)与一个嵌入向量 e k ∈ R d ′ e_k \in R^{d'} ekRd 关联, d ′ d' d 是嵌入维度。为了使视觉和文本tokens的嵌入具有兼容的形状,我们将视觉嵌入表的维度设定为与文本嵌入表相同。

相应地,每个视觉token v i v_i vi 的嵌入可以基于概率性token推导出来:
V i = ∑ k = 1 K v i , k e k ∈ R d ′ ( 3 ) V_i = \sum_{k=1}^K v_{i,k}e_k \in R^{d'} \ \ \ \ \ \ \ \ (3) Vi=k=1Kvi,kekRd        (3)

其中 v i , k v_{i,k} vi,k 表示 v i v_i vi 的第 k 个成分。另一方面,由于 v i ∈ Δ K v_i \in \Delta_K viΔK,上述公式可以重写为
V i = E k ∼ v i [ e k ] V_i = \mathbb{E}_{k \sim v_i}[e_k] Vi=Ekvi[ek]
这是视觉词的嵌入的期望,视觉词从 v i v_i vi 中抽样。换句话说,我们假设视觉嵌入可以基于视觉块的概率token v i v_i vi 从离散的视觉嵌入表中抽样。

:考虑到视觉块 r i r_i ri 的多义性,仅从嵌入表中为其分配一个视觉词(即由 arg ⁡ max ⁡ j ∈ { 1 , … , K } v i j \arg \max_{j \in \{1, \ldots, K\}} v_{ij} argmaxj{1,,K}vij 索引)可能忽略块内包含的丰富语义。为解决这个问题,我们将视觉块与多个视觉词关联,由 v i v_i vi 中非零元素表示,这些元素代表视觉块与K个视觉词的相关性。

我们随后使用所选视觉词汇的加权组合 V i V_i Vi 作为最终的块嵌入。换句话说,基于 v i v_i vi 的值,从嵌入表中索引出多个视觉嵌入,并利用这些嵌入的加权平均作为视觉嵌入模块的最终输出。附录E中的实验验证了 v i v_i vi 的稀疏性。视觉嵌入 V i V_i Vi 既捕捉了丰富的视觉语义,同时其生成过程与文本生成过程相似。

4 Ovis的训练策略

视觉和文本嵌入组合后作为输入送入LLM。具体来说,我们将以下多模态输入嵌入序列
[ T 1 , … , T λ − 1 , V 1 , … , V n , T λ + 1 , … , T m ] ( 4 ) [T_1, \ldots, T_{\lambda-1}, V_1, \ldots, V_n, T_{\lambda+1}, \ldots, T_m]\ \ \ \ \ \ \ \ (4) [T1,,Tλ1,V1,,Vn,Tλ+1,,Tm]        (4)输入到LLM。所有tokens不仅具有相同的维度,而且通过嵌入表以相似方式生成。LLM将输出一个文本token序列 o 1 , … , o l o_1, \ldots, o_l o1,,ol

Ovis分三阶段训练,并始终通过文本生成损失(即Ovis输出的文本tokens与真实文本之间的交叉熵)进行优化。这三个阶段的差异在于其可训练参数和训练数据的类型。

阶段1:我们冻结LLM的所有参数,以及视觉编码器 g g g 中大部分参数(一个开源的预训练ViT骨干网)。我们随机重新初始化 g g g 最后一层的参数,使用诸如COYO [7] 等视觉描述数据集训练重新初始化的参数和Ovis的投影矩阵 W W W 以及视觉嵌入表 { e k } k = 1 K \{e_k\}_{k=1}^K {ek}k=1K。对于标题数据集中的每个图像,我们构建一个训练样本,输入为“的标题:”并将其标签为“CAPTION”,其中CAPTION表示图像的标题。

阶段2:在这个阶段,我们继续训练Ovis的W,视觉嵌入表 { e k } k = 1 K \{e_k\}_{k=1}^K {ek}k=1K 以及视觉编码器 g g g 中的所有参数。LLM仍然冻结。与第一阶段使用的标题样本不同,我们利用如ShareGPT4V-Pretrain [11] 等视觉描述数据,这些数据集的训练样本结构化为描述图像的对话。

阶段3:在阶段1和阶段2的训练中赋予Ovis视觉感知能力之后,本阶段的重点是多模态指令学习。目标是使Ovis具备跟随多模态指令的能力。为此,我们解冻LLM模块,并在多模态指令数据集(如LLaVA-Finetune [47])上训练Ovis的全部参数。

总结

通过三阶段的训练策略,Ovis能够逐步获得视觉感知和跟随多模态指令的能力。这种策略既保证了模型在视觉和文本上的高效整合,又通过多模态任务不断提升模型的实际应用能力。


http://www.ppmy.cn/ops/128310.html

相关文章

Cursor零基础小白教程系列「高阶」 - Cursor 模型选择和API密钥配置

最适合小白零基础的Cursor教程 网站lookai.top相同作者&#xff0c;最新文章会在网站更新&#xff0c;欢迎收藏书签 Cursor 模型选择和API密钥配置 概述 Cursor提供了多种AI模型供选择&#xff0c;并允许用户配置自己的API密钥。本教程将介绍如何选择不同的AI模型以及如何配置…

【AI知识点】倒排索引(Inverted Index)

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 倒排索引&#xff08;Inverted Index&#xff09; 是信息检索系统中用于快速查找包含某个词项的文档集合的核心数据结构。倒排索引在搜索引擎、全文检索系统以及数据库中被广泛使用&#xff0c;它能够极大提高查询速度&a…

前端面试题16 | Http和Https相比,有什么区别?

哈喽小伙伴们大家好&#xff01;我是程序媛小李&#xff0c;一位正在往全栈方向发展的前端小姐姐&#xff0c;今天我们继续来给大家分享一道经典的面试题 http和https的区别&#xff1a; 1. 安全性 HTTP&#xff1a;HTTP是超文本传输协议&#xff0c;信息以明文传输&#xff…

Vue -- 总结 10

父传子 <script setup lang"ts"> import SonOne from ./components/SonOne.vue; import {ref} from vue let title ref(999) </script><template><div><!-- <SonOne msg"hello world" :title"title"></So…

二分查找的概念

文章目录 二分查找的原理二分查找的适用场景二分查找的代码实现目录 二分查找的原理 如果需要在 n n n 个数中查找目标值是否存在&#xff0c;最常规的思想是遍历所有的数&#xff0c;判断每个数是否等于目标值。遍历的时间复杂度是 O ( n ) O(n) O(n)。 如果 n n n 个数是…

Matlab|基于氢储能的热电联供型微电网优化调度方法

目录 1 主要内容 模型求解流程 2 部分程序 3 程序结果 日前调度 日内调度 4 下载链接 1 主要内容 该程序复现《基于氢储能的热电联供型微电网优化调度方法》&#xff0c;针对质子交换膜燃料电池和电解槽的热电联供特性&#xff0c;为避免氢能系统的热能浪费并进一步提高…

毕业设计:python美食菜谱数据分析可视化系统 爬虫+Echarts 可视化 Django框架 大数据(源码+文档2)✅

python美食菜谱数据分析可视化系统 爬虫Echarts 可视化 Django框架 大数据✅ 1、项目介绍 技术栈&#xff1a; Python语言、Django框架、vue框架、Echarts 可视化、MySQL 数据库、豆果美食网、html css js juery 基于django的美食菜谱数据分析可视化系统 2、项目界面 &…

从 IP 源地址入手,如何预防 DDoS 攻击?

分布式拒绝服务攻击&#xff08;DDoS&#xff09;是网络安全的一大威胁。DDoS 攻击通过大量的虚假请求&#xff0c;使目标服务器资源耗尽&#xff0c;无法正常为合法用户提供服务。而从 IP 源地址入手&#xff0c;是预防 DDoS 攻击的一个重要途径。 一、了解 DDoS 攻击与 IP 源…