当前位置: 首页 > article >正文

【多模态大模型】系列1:Transformer Encoder——ViLT、ALBEF、VLMO

目录

  • 1 ViLT
  • 2 ALBEF
  • 3 VLMO

1 ViLT

ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision

图文多模态任务,关键是提取视觉特征和文本特征,然后对齐。在之前的多模态研究工作中,视觉侧通常需要一个目标检测器来确定图像中物体所在的区域,再提取各区域的特征。ViT 将 Transformer 迁移到视觉领域之后,人们意识到,直接使用 patch projection 来处理图像输入也是可行的。由此,ViLT 首次使用 patch projcetion 来直接提取图像特征,摆脱了笨重的目标检测器。

ViLT 引言部分的示意图(如下图所示)将当时已有的多模态工作归纳地很清晰,并突出了 ViLT 减轻视觉侧推理负担的优势。VE(视觉嵌入)、TE(文本嵌入)和 MI(模态交互)分别表示不同的网络组件,他们在途中模块的大小表示对应网络的复杂度。在图 1 所示的四种结构中,(a)、(b)、© 三种方法中,由于使用目标检测器确定图像的区域,因此视觉端(Visual Embed)都是一个复杂的网络。在 (d) 中,也就是 ViLT 中,使用简单的线性映射,实现了视觉端处理。ViLT 将网络的大部分复杂度放在多模态任务中重要的模态交互部分。

ViL models

下图展示了 ViLT 的模型结构。模型结构上,ViLT 首先分别使用词嵌入和可学习的线性映射来提取文本和视觉嵌入,然后通过一个 Transformer 来进行特征交互。损失函数上,ViLT 共使用了三个损失,分别是图文匹配 ITM、掩膜语言模型 MLM 和文本图像块对齐 WPA。ITM 判断输入的文本与图像是否匹配,本质上是一个二分类问题。MLM 即 BERT 提出的”完形填空“,预测输入的文本中被挖去的单词。WPA 则是要对齐输入文本与图像块。

ViLT
ViLT 仍旧存在两个局限:

  • 虽然 ViLT 通过改用线性映射,降低了视觉端嵌入网络的复杂度。但是性能有所下降,综合当时的多模态研究工作来看,视觉端的嵌入网络相较于文本端,的确需要更复杂一些。原因是文本端的 tokenizer 已经有一定语义理解能力了,而视觉端的 patch embedding 是随机初始化的。
  • 虽然 ViLT 的推理很快,但是训练时间并不短。

可以考虑一些常用的loss: ,下面前三个loss是比较好用的。

  • Image text contrastive loss(CLIP模型训练方式)
  • Image text matching loss(BERT训练方式)
  • Masked language modelling loss(ViLBERT和ViLT使用过)
  • Word patch alignment (这个在vilt中用到,但是计算很慢)

2 ALBEF

Align before Fuse: Vision and Language Representation Learning with Momentum Distillation

  • 贡献1(出发点):在multimodal interaction之前我们要align好text and image token,以便于multimodal encoder学习。ALBEF 提出在进行多模态交互之前,先通过一个对比损失(其实就是 CLIP 中的 ITC 损失)来对齐图像和文本数据。
  • 贡献2:不同的损失函数其实是在为同一个图像文本对,生成不同的视角,变相地做data augmentation,达到semantic preserving的目的。

模型结构如下:

模型结构

在这张图中,满足了我们两个假设,文本编码器比图像编码器小且模态融合也大。同时也用了我们提到的三个loss去训练模型:Image-text contrastive loss(ITC)、Image text matching loss(ITM)和Masked language modelling loss(MLM)。

目标函数:
通过对比学习可知,只要定义一个正样本对和多个负样本对,就可以进行对比了。我们希望正样本对之间的距离越来越近,正负样本对之间的距离越来越远。首先要做的就是去出去这种全局特征,在特征之间去做embedding space上的拉近和拉远。

  • ITC loss, image-text contrastive loss。图像和文本分别通过encoder tokenise, CLS token是一个全局特征(图中绿色方块旁边的黄色方块), down sample和normalisation(786x1 => 256x1),然后进行正负样本的对比学习(预先存了很65536个负样本q,没有gradient,由Momentum Model产生),这一步就是align。
  • ITM loss, image text matching loss。在multimodal encoder的输出之后加一个二分类头(FC层),这里很特别的是,每个batch里我拿一个图片和batch里除了配对文本之外的所有的文本做cosine similarity (借助之前ITC的那个模块),挑一个相似度最高的作为负样本 (hard negative) 来训练,来加大难度。
  • MLM, masked language modeling。类似BERT的完形填空,mask一个词语,去预测mask的词语,但是融合了图像的信息。

其他细节:

  • 上图右侧的 Momentum Model,就是用于进行自训练学习的动量模型,根据主模型进行动量更新,类似 MoCo 。
  • ITM 损失需要模型判断出输入图像和文本是否匹配,即一个二分类问题。直接与当前批次中所有的样本进行比对过于简单,对模态交互训练的帮助不大。ALBEF 中通过 ITC 损失计算得到的各样本间的余弦相似度,为 ITM 损失进行难负样本挖掘,取除正样本外相似度最高的作为负样本。
  • 在计算 ITC 和 ITM 两种损失时,模型的输入是原始图像和原始文本,而在计算 MLM 损失时,模型的输入则是原始图像和经过 mask 的文本。因此,ALBEF 训练时的每一轮迭代需要经过两次前向传播的过程。多模态学习的方法通常训练时长较长,就是因为需要进行多次前向传播,计算不同的损失。

做动量蒸馏(Momentum Distillation)的动机:从网上爬下来的图像文本对通常weakly-correlated,即文本并没有很好地描述图像,从而产生了noise。这种弱关联的训练样本中可能出现某些负样本的图文匹配程度,比 GT 中正样本的 one-hot 标签的匹配程度更高的情况,不利于 ITC 和 MLM 两种任务的训练。

ALBEF 中除了梯度更新的主模型之外,还有一个动量模型,用于为主模型的训练生成 multi-hot 的伪标签。动量模型通过滑动指数平均(EMA)的方式,根据主模型进行动量更新。这样,除了Ground Truth(GT,真实标签)中的 one-hot 标签,我们就又得到了multi-hot的伪标签(pseudo-targets),用于 ITC 和 MLM 任务的损失计算。补充一句,对于 ITM 任务,由于其本身就是基于 GT 的二分类任务,并且通过 ITC 中计算的相似度结果进行了难负例挖掘,因此无需进行动量计算。

ALBEF中为MLM(第一行)和ITC(第二行)生成的伪标签示例如下图所示:

MLM

3 VLMO

VLMo Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts

贡献1:dual-encoder (双塔模型,如CLIP) 解决了检索问题,而fusion encoder,也叫单塔模型,解决了不同模态之间的交互问题,VLMo就把2种的好处都结合了起来,一个模型,想当双塔和单塔 (论文命名为vision-language expert, language expert, vision expert,其实就是不共享参数的FC层) 用都可以。

贡献2:分阶段模型训练的改进(stage-wise pre-training), 简单来说就是多模态的数据集不够大,那我就先预训练单独的一个模态。

为什么提出MoME(Mixture of Multi Expert):双编码器模型(dual-encoder)的优点是在进行检索等任务时,可以预先对数据库中的数据进行特征提取,运行效率高。缺点是模态交互部分只有一个简单的余弦相似度的计算,过于简单。在视觉推理等模态交互复杂的任务上表现较差。与之相反的,融合编码器模型(fusion-encoder)的优点是模态交互充分,缺点是无法预先进行特征提取,效率稍差。为了解决这种冲突,VLMo 提出了 MoME(Mixture of Multi Expert),由不同的 “专家” 来处理不同类型(文本/图像)的输入数据。简单来说,就是在每个 Tranformer 块中:自注意力层权重在不同类型输入间共享,而 FFN 层权重则根据输入类型的不同而不同。

VLMo的目标函数和ALBEF一样也是ITC、ITM和MLM。因为在NLP使用Transformer时,数据集越大训练效果越好,在做多模态时也希望如此,但是在当时还没有开源的大规模数据集。曲线救国:所以VLMo的作者想到可以用文本和视觉各自领域的超大规模数据集先分别对 “文本专家” 和 “视觉专家” 进行预训练(stage-wise pre-training),然后再在多模态数据集上进行预训练。

模型总览图如下所示:

VLMO

在预训练任务的选择上,VLMo 与 ALBEF 一致,同样使用 ITC、ITM 和 MLM 三种,并且同样借助 ITC 为 ITM 进行hard negtives。在进行不同的任务时,会使用 MoME 结构中不同的 FFN 层参数进行训练:

  • ITC:在计算 ITC 损失时,VLMo 的模型是一种 “dual encoder” 模型,以双塔的结构分别对文本和图像进行嵌入。
  • ITM、MLM:在计算 ITM、MLM 损失时,VLMo 模型又成了一种 “fusion encoder” 模型,分别提取图像文本的特征之后,再用 F FF 层 Transformer Block 进行模态融合。

MoME 结构最大的优势就是灵活。在训练时,对应不同的任务时使用不同结构计算损失函数,并更新对应参数。这样的训练有一个缺点是需要做多次模型前向。

VLMO采用了分阶段的训练方式,如下图所示:首先,VLMo 先在单独的图像数据上训练自注意力层和视觉 FFN ;然后,在单独的文本数据上训练文本 FFN ;最后,在多模态数据上训练自注意力层和三种 FFN 专家。这里特别有趣的点是在单独的文本数据上进行训练时,自注意力层是冻结的。也就是说,通过图像数据训练出的自注意力层,在文本数据上甚至连微调都不需要,就能工作得很好。

分阶段训练


http://www.kler.cn/a/543195.html

相关文章:

  • 多机器人系统的大语言模型:综述
  • 【AI学习】DeepSeek-R1-Distill的意义和影响
  • Wiki文档转换为Word技术
  • jenkins备份还原配置文件
  • 129,【2】buuctf [BJDCTF2020]EzPHP
  • PH热榜 | 2025-02-10
  • MVC(Model-View-Controller)framework using Python ,Tkinter and SQLite
  • 机器学习数学基础:22.对称矩阵的对角化
  • LKT4202UGM新一代安全认证加密芯片,守护联网设备和服务安全
  • LeetCode --- 435周赛
  • Java进阶14 TCP日志枚举
  • 如何使用CSS Grid实现两列布局?
  • Tcp_socket
  • 20vue3实战-----使用echarts搭建各种图表
  • xss总结
  • HTTP的状态码
  • C++习题1——24、30—
  • 如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件
  • C++基础学习记录—this指针
  • uniApp 实现下拉框自定义标签 label 和值 value
  • 【C++】25.封装红黑树实现mymap和myset
  • ANR学习
  • 20250212:sigmastar系列1-获取UUID
  • Web项目测试专题(六)压力测试
  • IDEA中打包maven项目,提示Compilation failure
  • 政安晨的AI大模型训练实践 六 - open-webui vLLM 运行