深入理解 CLIP 模型

1. 概述

CLIP[1] 模型是 OpenAI 在 2021 年初发布的用于匹配图像和文本的预训练神经网络模型,全称是 Contrastive Language-Image Pre-Training。为什么 CLIP 值得再次研究,不仅仅是因为 CLIP 算法本身的设计思想,更是因为研究人员一直致力于得到更好的预训练模型。我们知道,要想训练好一个模型,需要大量的数据,如果一直依赖于标注数据,那么需要大量人力,财力去标注数据,因此,研究人员一直设法找到一种能够得到预训练模型的方法。回顾整个预训练的发展过程,大致分为这样的几个阶段:

  1. 图像分类,在这个阶段通过构建大量的人工标注数据集,如 ResNet[2] 算法等在 ImageNet 数据集上完成训练。通过在标注数据集上的训练,让模型具备图像的语义表示能力;
  2. 通用视觉表征训练,上一个阶段,毕竟还需要人工的标注,在通用视觉表征训练阶段,则是希望模型能够通过自监督等方式,完成学习,减少对人工标注的依赖,这个阶段,出现诸如 MoCo[3]、SimCLR[4]、DINO[5] 等算法;

上面两个阶段,都在解决一个问题:图像的语义表征。为了应对下游的任务,如图像分类(我们这里假设这个类别并不在原先的预训练类别中),此时需要结合已经得到的语义表征,对模型进行微调。有没有一种方法,能真正实现零样本的分类?这就是以 CLIP 为代表的视觉-语言联合预训练阶段要完成的事情,简单来说就是:利用大规模图文配对数据,让模型在共享语义空间中理解图像与文本的对应关系,从而实现零样本分类和图文检索。

2. CLIP 算法原理

CLIP 是直接通过对图文配对数据的训练,在共享的语义空间中学会图像与文本之间的对应关系,要实现这昂的学习过程,我们先看一下 CLIP 的网络结构。

2.1. CLIP 的网络结构

CLIP 的网络结构如下所示:

CLIP 使用双编码器(Dual Encoder)结构,包含两个相互独立、但通过训练目标共同优化的编码器,其中,图像编码器 Image Encoder 的作用是将图像映射为视觉特征,文本编码器 Text Encoder 的作用是将文本映射为语言特征。完成编码后,将特征投影到同一个维度的语义空间中。

对于图像编码器部分,在参考文献[1]中,CLIP 算法的图像编码器部分分别使用了 ResNet[2] 和 Vision Transformer[6] 两种图像编码器:

  • ResNet 中图像经过卷积网络提取特征,最终使用注意力池化机制汇总视觉信息,再映射到共享的图文向量空间;
  • ViT 中图像首先被切分成多个 Patch,每个 Patch 转换成一个向量,经过 Transformer 建模不同区域之间的关系,最后提取全局图像表示。

得到图像的语义特征 $h_I $ 后,再经过一组投影映射后,得到映射后的特征 zI=WIhIz_I=W_I h_I。

对于文本编码器部分,CLIP 的文本编码器采用 Transformer 架构,得到文本的语义特征 hT∈RdTh_T\in\mathbb{R}^{d_T},再经过一组投影映射后,得到映射后的特征 zT=WThTz_T=W_T h_T。

图像语义特征和文本语义特征分别经过投影映射后,将两个编码器原本不同维度的特征,转换到一个可直接比较的公共空间中,为了能够实现比较,通常还需要对投影后的向量进行 L2 归一化:

z^=z∥z∥2\hat z=\frac{z}{\|z\|_2}

此时,图像和文本的相似度就可以通过点积 s(I,T)=z^I⊤z^Ts\left(I,T\right)=\hat z_I^\top \hat z_T 计算,由于两个向量的模长都是 11,即 ∥z∥2=1\|z\|_2=1,所以点积等于余弦相似度,即 s(I,T)=cos⁡(z^I,z^T)s\left(I,T\right)=\cos \left(\hat z_I,\hat z_T\right)。相似度越大,表示模型认为这对图像与文本在语义上越匹配。

2.2. 对比学习损失函数

上面介绍了 CLIP 的整个网络结构,接下来就是要训练号这个模型,损失函数的设计是 CLIP 算法成功的关键,在 CLIP 中,使用图像—文本对比学习(Contrastive Learning),通过一个批次内的匹配关系,同时训练图像编码器和文本编码器。

首先来看下训练数据,上文中也提到了 CLIP 中使用的是图像-文本对 B={(I1,T1),…,(IN,TN)}\mathcal B=\{(I_1,T_1),\ldots,(I_N,T_N)\},网络上存在大量的图片以及图片这样的描述数据,这就构成了训练数据,完全不需要人工标注。正样本有了,那么负样本呢?这个很好解决,批次 Batch 内其他的任意组合,如 (T2,T3)\left(T_2,T_3\right) 就构成了负样本。

假设对于一个批次的图像向量和文本向量,分别为:ZI∈RN×512Z_I\in\mathbb R^{N\times512} 和 ZT∈RN×512Z_T\in\mathbb R^{N\times512},批次 Batch 的大小为NN,得到两者的相似矩阵:

S=ZIZT⊤τ∈RN×NS=\frac{Z_I Z_T^\top}{\tau}\in\mathbb R^{N\times N}

其中,向量 ZIZ_I 和 ZTZ_T 已进行 L2 归一化,τ\tau 是温度参数(temperature)。最终得到了如下矩阵:

其中,第 ii 行第 jj 列表示的是第 ii 个图片和第 jj 个文本对之间的相似度。通常用 Softmax 函数,将相似度转换成一个概率分布,公式如下:

pi,j=exp⁡(Si,j)∑k=1Nexp⁡(Si,k)p_{i,j} = \frac{\exp\left(S_{i,j}\right)} {\sum_{k=1}^{N}\exp\left(S_{i,k}\right)}

最终,我们能得到所有的图像到文本的损失函数,如下:

LI→T=−1N∑i=1Nlog⁡exp⁡(Si,i)∑j=1Nexp⁡(Si,j)\mathcal L_{I\rightarrow T} = -\frac{1}{N} \sum_{i=1}^{N} \log \frac{\exp\left(S_{i,i}\right)} {\sum_{j=1}^{N}\exp\left(S_{i,j}\right)}

有了这个损失,会使得对于指定的图像,能在候选文本中找到最好的,仅仅训练图像到文本还不够。在 CLIP 算法中同时使用文本到图像的损失函数,如下:

LT→I=−1N∑i=1Nlog⁡exp⁡(Si,i)∑j=1Nexp⁡(Sj,i)\mathcal L_{T\rightarrow I} = -\frac{1}{N} \sum_{i=1}^{N} \log \frac{\exp\left(S_{i,i}\right)} {\sum_{j=1}^{N}\exp\left(S_{j,i}\right)}

综合这两部分的损失函数,就构成了 CLIP 最终的损失函数,如下:

L=LI→T+LT→I2\mathcal L = \frac{ \mathcal L_{I\rightarrow T} + \mathcal L_{T\rightarrow I} }{2}

这也称为对称对比学习。

2.3. 如何使用

模型训练完成后,我们能得到两个模型,分别是文本编码器 Text Encoder 和图片编码器 Image Encoder。以上面的分类为例,实现零样本分类(Zero-shot Classification)是 CLIP 最基本的能力之一。在 CLIP 的推理阶段,首先对所有的文本构建候选的类别描述,如下:

T={T1,T2,…,TC}\mathcal T=\{T_1,T_2,\ldots,T_C\}

通过文本编码器对所有的类别描述生成文本向量:

zj=TextEncoder⁡(Tj)z_j=\operatorname{TextEncoder}\left(T_j\right)

对图像 II 使用图像编码器生成图像向量:

zI=ImageEncoder⁡(I)z_I=\operatorname{ImageEncoder}\left(I\right)

计算图像与每个候选文本的相似度得分:

sj=zI⊤zjτs_j=\frac{z_I^\top z_j}{\tau}

取得分最高的文本为预测的类别:

y^=arg⁡max⁡jsj\hat y=\arg\max_j s_j

上述过程如下图所示:

由于 CLIP 能将文本和图像映射到一个共享的空间中,因此,除了上述的零样本分类外,还能处理以下的一些工作:

  • 文本到图像检索,即给定一段文本,找到最匹配该文本描述的图片
  • 图像到文本检索,即给定一张图片,在大量文本描述中找到最匹配的描述
  • 图像相似性与语义筛选,即通过图像嵌入检索语义相近的图片

3. 总结

CLIP 利用图像编码器和文本编码器将图片-文本对映射到一个共享的语义空间中,并通过对比学习,同时调整两个编码器的参数,使得在同一个语义空间中,匹配的图片-文本对之间的相似度高,不匹配的图片-文本对之间的相似度尽量变差,以此得到两个编码器。有了这两个编码器之后,可以完成很多基于相似度计算的下游任务,同时,也为后续的模型发展提供了一些思路,成为发展史上很重要的一环。

参考文献

[1] Radford A, Kim J W, Hallacy C, et al. Learning transferable visual models from natural language supervision[C]//International conference on machine learning. PmLR, 2021: 8748-8763.

[2] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.

[3] He K, Fan H, Wu Y, et al. Momentum contrast for unsupervised visual representation learning[C]//2020 IEEE/CVF conference on computer vision and pattern recognition (CVPR). IEEE, 2020: 9726-9735.

[4] Chen T, Kornblith S, Norouzi M, et al. A simple framework for contrastive learning of visual representations[C]//International conference on machine learning. PmLR, 2020: 1597-1607.

[5] Caron M, Touvron H, Misra I, et al. Emerging properties in self-supervised vision transformers[C]//2021 IEEE/CVF international conference on computer vision (ICCV). IEEE, 2021: 9630-9640.

[6] Dosovitskiy A, Beyer L, Kolesnikov A, et al. An image is worth 16x16 words: Transformers for image recognition at scale[J]. arXiv preprint arXiv:2010.11929, 2020.