多模态论文笔记——Coca

大家好,这里是好评笔记,公主号: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 由三部分组成,如下:

  1. 一个图像编码器
  2. 一个文本编码器
  3. 一个多模态编码器
训练目标
  1. 图像-文本对比损失(image-text contrastive loss) :对齐图像和文本特征,最小化同一图像-文本对的特征距离,最大化不同图像-文本对的特征距离。用于在特征融合之前对图像和文本的单模态表示进行对齐。
  2. 图像-文本匹配损失(image-text matching loss) :判断图像和文本是否匹配,进一步提高特征对齐效果。用于学习图像与文本之间的多模态交互。
  3. 遮蔽语言建模损失(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 对比
  1. 相似点

    • 整体结构 :CoCa 和 ALBEF 都采用 "图像分支 + 文本分支" 的结构,左边是图像编码器 (Image Encoder),右边是文本处理器 (Text Branch)。
    • 多模态融合:两者都需要将图像特征和文本特征进行融合,利用对比损失 (ITC, Image-Text Contrastive Loss) 和语言建模损失 (Captioning Loss) 来联合训练。
  2. 主要区别

    • 文本分支的结构
      在 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模型。

  1. 图像编码器 (Image Encoder)
    • 使用一个视觉变换器(例如 ViT)对输入图像进行编码,生成一系列特征表示。
    • 这些特征表示通过注意力池化 进一步提取,分别生成两个特征:
      • 对比特征 (Contrastive Feature): 专门的 cls-token ,用于对比学习,通过与文本的 cls-token 特征进行对比。
      • 描述特征 (Captioning Feature): 其他的图像特征经过 Attentional Pooling 后,传入多模态 Text Decoder,用于文本生成任务,作为多模态解码器的输入。

采用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)

  1. 单模态文本解码器 (Unimodal Text Decoder)
    • 不参与对图像特征的cross-attention;
    • 使用 Transformer 模型生成文本的上下文表示cls-token 特征,得到整个句子的全局特征。
    • 特别关注 cls-token,其特征用于计算与图像对比特征的对比损失 (Contrastive Loss)
    • Decoder 是因果自回归的(Masked),即只能看到序列前面的部分。

图像编码器单模态文本解码器的两个全局特征就可以实现图像-文本的对比学习。image encoder和unimodal text decoder的两个[CLS]向量作为图片和文本的表示,进行对比学习。

  1. 多模态文本解码器 (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

  1. 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 是对比损失的权重超参数。
  2. 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

相关推荐
deephub6 分钟前
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
人工智能·pytorch·神经网络·强化学习
阿正的梦工坊8 分钟前
PyTorch中的__init__.pyi文件:作用与C++实现关系解析
c++·人工智能·pytorch
Jackilina_Stone12 分钟前
【HUAWEI】HCIP-AI-MindSpore Developer V1.0 | 第一章 神经网络基础( 2 卷积神经网络 ) | 学习笔记
人工智能·笔记·深度学习·神经网络·cnn
摸鱼仙人~14 分钟前
pytorch中nn.Conv2d详解及参数设置原则
人工智能·pytorch·python
AIGC大时代42 分钟前
学术写作中的各种流程图如何利用Kimi进行辅助构建?
人工智能·深度学习·chatgpt·aigc·流程图·ai写作
大佬,救命!!!1 小时前
重新整理机器学习和神经网络框架
人工智能·笔记·深度学习·神经网络·机器学习·类比学习
人工智能技术咨询.1 小时前
工信部电子标准院计算机视觉证书报考指南!
人工智能·深度学习·学习·计算机视觉·语言模型
绍兴贝贝1 小时前
代码随想录算法训练营第五十天|图论基础|深度优先搜索理论基础|KM98.所有可达路径|广度优先搜索理论基础
数据结构·人工智能·python·算法·力扣
羊小猪~~1 小时前
基于RNN模型的心脏病预测(tensorflow实现)
人工智能·python·rnn·深度学习·神经网络·机器学习·tensorflow
feifeikon1 小时前
TensorFlow DAY1:基础语法
人工智能·python·tensorflow