CLIP(Contrastive Language-Image Pre-training)是 OpenAI 提出的视觉-语言基础模型,核心目标是在共享的嵌入空间中学习图像与文本的语义关联,从而实现强大的零样本(zero-shot)迁移能力。
以下从原理、训练、推理三个维度详解:
一、核心架构与任务
CLIP 本质是双塔对比学习模型,包含两个独立编码器:
| 组件 | 结构 | 作用 |
|---|---|---|
| 图像编码器 | ViT(Vision Transformer)或 ResNet | 将图像 $x$ 映射为视觉特征向量 $I(x) \in \mathbb{R}^d$ |
| 文本编码器 | Transformer(GPT-2 风格) | 将文本 $y$ 映射为文本特征向量 $T(y) \in \mathbb{R}^d$ |
完成任务:通过对比学习,让匹配的图文对在向量空间中距离尽可能近,不匹配的距离尽可能远。这使得模型学会跨模态语义对齐——例如将”一只柯基犬”的文本描述与柯基犬的图片映射到邻近的向量区域。
二、训练过程(对比学习)
1. 数据构建
从互联网爬取4亿对 (图像, 文本) 的弱监督数据(如网页中的图片及其 alt 文本)。无需人工标注类别,文本描述天然带有丰富的语义信息。
2. 对比学习机制
对于批次中的 $N$ 对图文数据:
- 图像编码器生成批次视觉特征:$\{I_1, I_2, …, I_N\}$
- 文本编码器生成批次文本特征:$\{T_1, T_2, …, T_N\}$
计算余弦相似度矩阵 $S \in \mathbb{R}^{N \times N}$,其中 $S_{ij} = \frac{I_i \cdot T_j}{\|I_i\| \|T_j\|}$。
对称交叉熵损失(Symmetric Cross-Entropy):
- 图像→文本:将每行视为概率分布,对角线为正样本$$
\mathcal{L}_{I \to T} = -\frac{1}{N}\sum_{i=1}^N \log \frac{\exp(S_{ii}/\tau)}{\sum_{j=1}^N \exp(S_{ij}/\tau)}
$$ - 文本→图像:将每列视为概率分布$$
\mathcal{L}_{T \to I} = -\frac{1}{N}\sum_{i=1}^N \log \frac{\exp(S_{ii}/\tau)}{\sum_{j=1}^N \exp(S_{ji}/\tau)}
$$
总损失 $\mathcal{L} = \frac{1}{2}(\mathcal{L}_{I \to T} + \mathcal{L}_{T \to I})$,其中 $\tau$ 为可学习的温度系数。
关键洞察:这种设计使得 $N$ 对数据能生成 $N^2$ 个对比样本,训练效率极高。
三、推理过程(零样本迁移)
训练完成后,CLIP 无需微调即可执行多种下游任务:
1. 零样本图像分类(Zero-Shot Classification)
传统分类需针对固定类别训练,而 CLIP 可动态适应任意类别:
- Prompt Engineering:将类别标签扩展为描述性句子。例如类别”cat”转换为 “a photo of a cat” 或 “a photo of a cat, a type of pet”(使用模板库如 80 个 handcrafted prompts)。
- 编码计算:
- 输入图像 $x$ 通过图像编码器得到 $I(x)$
- 所有类别描述通过文本编码器得到 $\{T_1, …, T_K\}$
- 相似度预测:计算$$
P(y_k|x) = \frac{\exp(I(x) \cdot T_k / \tau)}{\sum_{j=1}^K \exp(I(x) \cdot T_j / \tau)}
$$ - 输出:选择概率最高的类别
2. 图像-文本检索(Image-Text Retrieval)
- 文本检索图像:给定查询文本,计算与候选图像集的相似度,返回 Top-K 最相关图像
- 图像检索文本:反之亦然
3. 作为特征提取器
冻结 CLIP 编码器,提取 $I(x)$ 或 $T(y)$ 作为下游任务(检测、分割、生成)的特征输入。
四、能力边界与特性
| 优势 | 局限 |
|---|---|
| 强大的零样本泛化:在 ImageNet 上零样本准确率可达 76.2%(ResNet-50 监督学习为 76.1%) | 细粒度识别弱:难以区分具体型号(如不同品种的狗)或抽象概念 |
| 开放词汇:支持训练时未见过的类别 | 组合推理弱:对”红色的杯子在蓝色的桌子上”这类空间组合关系理解有限 |
| 多模态理解:具备初步的图文匹配常识 | 对分布偏移敏感:如艺术风格、对抗样本 |
五、演进与影响
CLIP 开创了视觉语言基础模型的先河,催生了后续众多变体:
- FLIP:快速训练版本(使用随机 Masking)
- OpenCLIP:开源复现版本
- SAM/LLaVA:CLIP 视觉编码器被广泛用于分割和多模态大模型视觉端
其训练范式(大数据+对比学习+双塔架构)已成为多模态领域的标准基线。