多模态大模型的前世今生

1 引言

前段时间 ChatGPT 进行了一轮重大更新:多模态上线,能说话,会看图!微软发了一篇长达 166 页的 GPT-4V 测评论文,一时间又带起了一阵多模态的热议,随后像是 LLaVA-1.5、CogVLM、MiniGPT-5 等研究工作紧随其后,到处刷屏。大模型的多模态能力到底是怎么来的?

2 CLIP: 连接文本和图像的桥梁

CLIP 是由 OpenAI 在 2021 年提出的预训练模型,用于评估给定图像与给定文本描述的匹配程度。该模型使用大量(约 4 亿)从网页中爬取的图像-文本对(pair)数据进行对比学习。

数据的收集:

  • 搜索了 50w 个 queries(query 列表主要来自英文版维基百科中至少出现 100 次的所有单词,并做了些其他补充)
  • 为了保证每个 query 的数据相对平衡,每个 query 保留最多 2w 个(image, text)

典型的双塔模型,有两个 encoder,一个对应图片,一个对应文本,图像和文本经过各自的 encoder 后,通过简单的点乘来代表不同模态的交互(相似性)。

训练时,假设一个 batch 有 N 对(图像,文本)对,可以有 N x N 种组合方式,对比学习把原始数据集中的 N 个组合作为正样本(下图对角线),把其他的 N x N - N 种组合作为负样本(下图非对角线)。

模型训练的目标就是最大化对角线上的分数,并最小化对角线外的分数。这里从分类的角度给大家一个关于损失函数的理解,可以把每一行/列看作是个一个 N 分类问题,其中分类的标签就是真实图文组合所在位置(也就是对角线),比如第一行的 label 是 0,第二行的 label 是 1,以此类推。

论文中给出了实现 CLIP 的 numpy 风格伪代码

# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images
# T[n, l] - minibatch of aligned texts
# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter
# extract feature representations of each modality
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]
# joint multimodal embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)
# scaled pairwise cosine similarities [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)
# symmetric loss function
labels = np.arange(n)
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2

因为 CLIP 在两个 encoder 后只进行了简单的内积作为模态的交互,对于复杂点的任务就不那么 work 了,一个顺其自然的发展就是去增强不同模态的交互/融合,也就是可以用一个神经网络来替换内积。

3 ALBEF:先对齐后融合

文章的主要贡献有两个:

  • ALBEF 解决了多模态领域中图像和文本对齐、交互的问题。在 ALBEF 之前,多模态方法通常使用 transformer 的多模态编码器来同时编码视觉和文本特征,由于目标检测器是提前训练好的,因此视觉和文本特征并不是对齐的。图像和文本特征可能距离很远,这使得多模态编码器难以学习到它们之间的交互。为了解决这个问题,ALBEF 通过一个对比损失(也就是 CLIP 中的 ITC 损失)在进行多模态交互之前对齐图像和文本数据。
  • 网上爬取的大量图文对通常噪声很大(图文不匹配)。ALBEF 采用动量蒸馏(momentum distillation)的自训练方法来从网络图文对数据中学习,以缓解原始数据中的噪声问题。从理论上讲,ALBEF 通过互信息最大化的角度解释了不同的多模态任务,说明不同任务实际上为图文对提供了不同的视角,类似于数据增强,使得训练得到的多模态模型能够理解不同模态下的语义,具备语义保持的能力。

接下来看一下模型的结构:

  • 下面红色框其实就类似于 CLIP,双塔各自编码图像和文本,然后取 CLS 进行对比学习;
  • 上面蓝色框就是为了加强不同模态交互用的编码器(前面提到过 CLIP 内积的方式太简单了,这里就是加强多模态融合以适配更难的任务);
  • 图像编码器 12 层,文本编码器 6 层,多模态编码器 6 层;其实右侧是将一个 12 层的文本编码器拆成了两部分,这是因为一些研究工作发现在多模态中需要更强的图像编码器,进行这样的拆分一定程度上保证了强图像 encoder 和弱文本 encoder,且保证了模型参数不过多的情况下融合图像和文本的信息。

训练的目标函数:

  • ITC loss,这个跟 CLIP 是一样的

  • ITM loss,在 ITM 任务中,模型需要判断一对图像和文本是否匹配。为了实现这一目标,论文使用多模态编码器输出的[CLS] token 的嵌入作为图像-文本对的联合表示,并通过一个全连接层和 softmax 函数来预测一个二分类的概率。由于判断 batch 内的负样本过于简单,文章提出通过 ITC loss 计算得到的各样本间的余弦相似度,取除正样本外相似度最高的作"hard negatives"。

  • MLM loss,mask 掉一些文本,然后将 mask 过后的文本和图片一起通过 ALBEF 模型,预测 mask 掉的文本。因此,ALBEF 的每一轮迭代需要经过两次前向传播的过程。多模态学习的方法通常训练时长较长,就是因为需要进行多次前向传播,计算不同的损失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧医疗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值