大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型Coca,在DALL·E 3中使用其作为captioner基准模型的原因和优势。
文章目录
首先我们需要知道Coca是主要用于图像生成文本的。在此之前,我们已经介绍了BLIP和BLIP2,但是BLIP模型生成的文本描述较为简单,模型训练则需要更详细、准确的图像描述或字幕。本文将介绍一个新模型Coca(Contrastive Captioners,谷歌出品),OpenAI的DALL·E 3在处理图像-文本训练数据集就是基于谷歌的CoCa模型,微调一个image captioner,用来合成图像的caption。
DALL·E 3介绍参考DALL·E系列文章:DALL·E 3模型及其论文详解
ALBEF
CoCa可以理解成是ALBEF模型的一个后续工作,它与ALBEF模型类似,所以我们就先简要介绍一下ALBEF模型,再给出CoCa模型的介绍及其在ALBEF基础上做的改进。
ALBEF (Align Before Fuse) 是一个多模态学习模型 ,专注于图像和文本的联合表示学习 。它通过对比学习 (Contrastive Learning) 和多模态特征对齐 (Alignment) 来实现任务优化,同时为下游任务提供强大的基础表示。
论文
Align before Fuse: Vision and Language Representation Learning with Momentum Distillation
模型结构
组成
ALBEF 由三部分组成,如下:
- 一个图像编码器
- 一个文本编码器
- 一个多模态编码器
训练目标
- 图像-文本对比损失(image-text contrastive loss) :对齐图像和文本特征,最小化同一图像-文本对的特征距离,最大化不同图像-文本对的特征距离。用于在特征融合之前对图像和文本的单模态表示进行对齐。
- 图像-文本匹配损失(image-text matching loss) :判断图像和文本是否匹配,进一步提高特征对齐效果。用于学习图像与文本之间的多模态交互。
- 遮蔽语言建模损失(masked-language-modeling loss) :在文本中随机掩盖部分单词,通过上下文信息预测掩盖的单词。用于学习图像与文本之间的多模态交互。
为了提升对噪声数据的学习能力,我们在训练过程中生成伪标签(pseudo-targets),这些伪标签由动量模型(momentum model,即基础模型的滑动平均版本)生成,并作为额外的监督信号。
有没有发现ALBEF和BLIP模型的训练目标极其相似?因为他们来自一个团队。
BLIP参考本系列历史文章:多模态论文笔记------CLIP、BLIP
CoCa
CoCa 是 ALBEF 的后续工作,在保持多模态特征对齐的同时,通过引入可学习的池化机制 和统一的 Decoder 架构,更适合生成任务(如图像描述生成)。这种设计不仅提升了多模态任务的性能,也在生成任务上展现了显著的优势。
CoCa 是谷歌提出的一种图像-文本对齐模型 ,旨在同时优化对比学习(contrastive learning)和图像描述(image captioning)的任务 。其主要特点是统一了对比学习和生成任务,通过共享的编码器和解码器框架完成多任务学习,生成更为准确且多样的图像描述。
论文
CoCa: Contrastive Captioners are Image-Text Foundation Models
模型结构
下面我们先介绍CoCa的模型结构。它是构建在encoder-decoder的基础上的。它的结构如下:
CoCa 与 ALBEF 对比
-
相似点:
- 整体结构 :CoCa 和 ALBEF 都采用 "图像分支 + 文本分支" 的结构,左边是图像编码器 (Image Encoder),右边是文本处理器 (Text Branch)。
- 多模态融合:两者都需要将图像特征和文本特征进行融合,利用对比损失 (ITC, Image-Text Contrastive Loss) 和语言建模损失 (Captioning Loss) 来联合训练。
-
主要区别:
- 文本分支的结构 :
在 CoCa 中,文本分支 完全使用 Decoder ,而 ALBEF 则使用 Encoder 来抽取文本特征。- Decoder 的意义 :CoCa 的 Decoder 更倾向于语言生成任务(Language Modeling),不仅能抽取文本特征,还能自然支持语言生成任务(如 Captioning)。
- Encoder 的意义 :ALBEF 的 Encoder 主要用于文本特征的理解,适用于对比学习 (Contrastive Learning) 任务。
- 可学习的图像特征池化 (Attentional Pooling) :
CoCa 在图像分支的池化操作中引入了可学习机制 ,能够根据具体任务优化图像特征提取,而 ALBEF 使用的是固定规则的特征池化。 - 多模态文本处理器输入 :
- 在 CoCa 中,单模态文本解码器 和 多模态文本解码器 是独立处理的,没有直接的输入输出关系。
- 在 ALBEF 中,单模态文本编码器 的输出被用作 多模态文本编码器 的输入,以实现图像和文本的有效对齐。
- 文本分支的结构 :
CoCa 中的 单模态文本解码器 (Unimodal Text Decoder) 和 多模态文本解码器 (Multimodal Text Decoder)
是独立工作的,并且它们的输入和输出是分开处理的。不会将单模态文本解码器的输出作为多模态文本解码器的输入,多模态文本解码器的输入也是原始文本(或者文本经特定编码后的表示)。
- CoCa 的架构设计使得 单模态文本解码器 和 多模态文本解码器 之间的任务和输入输出保持独立。
ALBEF中会将单模态文本编码器的输出作为多模态文本编码器的输入。
Attentional Pooling:可学习 的图像特征池化 方式,能够针对不同任务学习出更有用的视觉特征。
在特征融合前,通过 Attention 机制选择性地提取图像 Token,而不是简单地用固定规则池化特征。
训练过程
它由一个 Image Encoder 和两个 Text Decoder 组成,均采用Transformer模型。
- 图像编码器 (Image Encoder)
- 使用一个视觉变换器(例如 ViT)对输入图像进行编码,生成一系列特征表示。
- 这些特征表示通过注意力池化 进一步提取,分别生成两个特征:
- 对比特征 (Contrastive Feature): 专门的
cls-token
,用于对比学习,通过与文本的cls-token
特征进行对比。 - 描述特征 (Captioning Feature): 其他的图像特征经过 Attentional Pooling 后,传入多模态 Text Decoder,用于文本生成任务,作为多模态解码器的输入。
- 对比特征 (Contrastive Feature): 专门的
采用attention pooling对image encoder进行图像的全局特征提取。(这里的attention pooling可以理解为一个multi-head attention,只不过key和value是image encoder得到的特征,而query是预先定义的一个可训练的embedding,由于我们只需要提取一个全局特征
cls-token
【与单模态文本解码器的全局特征进行图像-文本的对比学习】,所以只需要定义一个query 就好了)如上图中的代码:
con_feature = attentional_pooling(img_feature, con_query
)
- 单模态文本解码器 (Unimodal Text Decoder)
- 不参与对图像特征的cross-attention;
- 使用 Transformer 模型生成文本的上下文表示 ,
cls-token
特征,得到整个句子的全局特征。 - 特别关注
cls-token
,其特征用于计算与图像对比特征的对比损失 (Contrastive Loss)
。 - Decoder 是因果自回归的(Masked),即只能看到序列前面的部分。
图像编码器 和单模态文本解码器的两个全局特征就可以实现图像-文本的对比学习。image encoder和unimodal text decoder的两个[CLS]向量作为图片和文本的表示,进行对比学习。
- 多模态文本解码器 (Multimodal Text Decoder)
- 接收图像的描述特征 和文本的输入 ,利用交叉注意力机制 ,生成文本表示。
- 输出文本序列,优化目标为描述生成损失 (Captioning Loss) ,通常是
交叉熵损失
。
这里也通过了attention pooling对image encoder得到的特征进行提取,不过这里query数量定义为256 ,这样attention pooling可以得到256个特征,它作为multimodal text decoder的cross-attention的输入,用于融合图片和文本信息,实现双模态,最后做文本生成。
如上图中的代码:
cap_feature = attentional_pooling(img_feature, cap_query)
)
为什么采用这种分层设计?
- 高效性: 先处理单模态文本输入,避免对所有层都施加跨模态交互,降低计算复杂度。
- 任务分离: 单模态和多模态表示的分离使模型能够同时支持对比学习(Contrastive Learning)和生成式任务(Captioning)。
训练目标
CoCa(Contrastive Captioners)解码器的设计在任务分工和结构上非常特别,采用了 分层解码器结构,以同时支持单模态(Unimodal)和多模态(Multimodal)目标。CoCa 的目标函数是单模态和多模态任务的联合优化:
L C o C a = λ Con ⋅ L Con + λ Cap ⋅ L Cap \mathcal{L}{CoCa} = \lambda{\text{Con}} \cdot \mathcal{L}{\text{Con}} + \lambda{\text{Cap}} \cdot \mathcal{L}_{\text{Cap}} LCoCa=λCon⋅LCon+λCap⋅LCap
-
ITC loss:Contrastive Loss ( L Con ) (\mathcal{L}_{\text{Con}}) (LCon)
- 通过:图像的对比特征CLS Token和文本的CLS Token计算。通常计算InfoNCE Loss。
- 用于优化图像编码器 和单模态文本解码器在多模态嵌入空间中的对齐。
- 单模态表示(Unimodal Text Representations)通过
cls-token
特征与图像特征进行对比。 - λ Con \lambda_{\text{Con}} λCon 是对比损失的权重超参数。
-
LM Loss:Captioning Loss ( L Cap ) (\mathcal{L}_{\text{Cap}}) (LCap)
- 通过:图像的描述特征(通过 Attention Pooling 提取)和文本输入,经过交叉注意力机制后生成文本描述,与目标文本进行对比,通常计算交叉熵损失。
- 用于优化图像编码器 和多模态文本解码器对生成任务(文本生成)的质量。
- 多模态表示(Multimodal Image-Text Representations)通过交叉注意力生成文本描述,与目标文本计算交叉熵损失。
- λ Cap \lambda_{\text{Cap}} λCap 是描述生成损失的权重超参数。
InfoNCE Loss参考本系列历史文章中的解释:多模态论文笔记------CLIP、BLIP
历史文章
机器学习
机器学习笔记------损失函数、代价函数和KL散度
机器学习笔记------特征工程、正则化、强化学习
机器学习笔记------30种常见机器学习算法简要汇总
机器学习笔记------感知机、多层感知机(MLP)、支持向量机(SVM)
机器学习笔记------KNN(K-Nearest Neighbors,K 近邻算法)
机器学习笔记------朴素贝叶斯算法
机器学习笔记------决策树
机器学习笔记------集成学习、Bagging(随机森林)、Boosting(AdaBoost、GBDT、XGBoost、LightGBM)、Stacking
机器学习笔记------Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径
机器学习笔记------聚类算法(Kmeans、GMM-使用EM优化)
机器学习笔记------降维
深度学习
深度学习笔记------优化算法、激活函数
深度学习------归一化、正则化
深度学习------权重初始化、评估指标、梯度消失和梯度爆炸
深度学习笔记------前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
深度学习笔记------卷积神经网络CNN
深度学习笔记------循环神经网络RNN、LSTM、GRU、Bi-RNN
深度学习笔记------Transformer
深度学习笔记------3种常见的Transformer位置编码
深度学习笔记------GPT、BERT、T5
深度学习笔记------ViT、ViLT
深度学习笔记------DiT(Diffusion Transformer)
深度学习笔记------CLIP、BLIP
深度学习笔记------AE、VAE
深度学习笔记------生成对抗网络GAN
深度学习笔记------模型训练工具(DeepSpeed、Accelerate)
深度学习笔记------模型压缩和优化技术(蒸馏、剪枝、量化)
深度学习笔记------模型部署
深度学习笔记------VQ-VAE和VQ-VAE-2
多模态论文笔记------dVAE(DALL·E的核心部件)
多模态论文笔记------LLaVA