CLIP (Contrastive Language-Image Pretraining) 是 OpenAI 提出的一个通用视觉-语言模型,通过对比学习方法在大规模图片-文本对数据集上进行预训练,旨在学习一个能够将图片和文本嵌入到共享语义空间中的模型。它能执行零样本(zero-shot)任务,比如图像分类、搜索、生成等。
CLIP 的核心贡献在于让图像和文本之间的语义信息高度对齐,从而可以利用自然语言对视觉内容进行高效描述、分类和推理。
1. CLIP 的结构与工作流程
CLIP 的架构由两个独立的编码器组成:
- 视觉编码器:用于处理图片,提取其视觉特征。可以基于传统卷积神经网络(如ResNet)或更先进的 Transformer 架构(如ViT)。
- 文本编码器:用于处理文本,提取其语义特征。使用的是 Transformer 架构,类似于 GPT 模型。
两者通过共享的对比学习损失函数在同一个嵌入空间中对齐。
嵌入过程:
- 图像处理:输入图片 x i x_i xi 经过视觉编码器后生成嵌入向量 f ( x i ) f(x_i) f(xi)。
- 文本处理:输入文本 t i t_i ti 经过文本编码器后生成嵌入向量 g ( t i ) g(t_i) g(ti)。
- 对齐目标:图片和对应的文本对 ( x i , t i ) (x_i, t_i) (xi,ti) 在嵌入空间中尽可能接近,图片与不相关文本对 ( x i , t j , j ≠ i ) (x_i, t_j, j \neq i) (xi,tj,j=i) 尽可能远离。
2. 对比学习的核心机制
CLIP 的学习目标是让模型在给定一对图片和文本时,能够区分哪个文本与该图片匹配。这通过一个对比损失函数实现。
给定一个批量大小为 M M M 的图片-文本对 ( x i , t i ) (x_i, t_i) (xi,ti),CLIP 的损失函数包括两个部分:
- 图片到文本的对比损失: L i → t = − 1 M ∑ i = 1 M log exp ( sim ( f ( x i ) , g ( t i ) ) / τ ) ∑ j = 1 M exp ( sim ( f ( x i ) , g ( t j ) ) / τ ) . L_{i \to t} = -\frac{1}{M} \sum_{i=1}^M \log \frac{\exp(\text{sim}(f(x_i), g(t_i))/\tau)}{\sum_{j=1}^M \exp(\text{sim}(f(x_i), g(t_j))/\tau)}. Li→t=−M1i=1∑Mlog∑j=1Mexp(sim(f(xi),g(tj))/τ)exp(sim(f(xi),g(ti))/τ).
- 文本到图片的对比损失: L t → i = − 1 M ∑ j = 1 M log exp ( sim ( g ( t j ) , f ( x j ) ) / τ ) ∑ i = 1 M exp ( sim ( g ( t j ) , f ( x i ) ) / τ ) . L_{t \to i} = -\frac{1}{M} \sum_{j=1}^M \log \frac{\exp(\text{sim}(g(t_j), f(x_j))/\tau)}{\sum_{i=1}^M \exp(\text{sim}(g(t_j), f(x_i))/\tau)}. Lt→i=−M1j=1∑Mlog∑i=1Mexp(sim(g(tj),f(xi))/τ)exp(sim(g(tj),f(xj))/τ).
总损失函数为: L = L i → t + L t → i . L = L_{i \to t} + L_{t \to i}. L=Li→t+Lt→i.
其中, τ \tau τ是温度参数(详解见文章),用于调整分布的平滑程度。 sim ( ⋅ , ⋅ ) \text{sim}(\cdot, \cdot) sim(⋅,⋅)是嵌入向量的相似性计算,通常为内积或余弦相似度。
3. 训练数据
CLIP 的训练使用了一个包含 4 亿对图像-文本对 的大规模数据集。这些数据主要来自互联网,包含各种公开图像和与之相关的自然语言描述。这种海量多样的数据来源让 CLIP 学到了一种泛化能力,能够处理许多未知任务。
4. CLIP 的推理与应用
Zero-shot 推理:CLIP 的一个关键能力是零样本分类,即不需要为新任务额外训练数据,只需通过**文本提示(prompts)**定义目标类别。
具体流程:
- 定义新任务类别:假设要分类的类别为 “cat” 和 “dog”,为每个类别生成 文本提示,如:
- “This is a photo of a cat.”
- “This is a photo of a dog.”
- 计算类别嵌入:将每个 文本提示 t k t_k tk 输入文本编码器,得到类别的 嵌入向量 g ( t k ) g(t_k) g(tk)。
- 计算图片与类别的相似度:对目标图片 x x x,计算其嵌入向量 f ( x ) f(x) f(x),并与每个类别的嵌入向量 g ( t k ) g(t_k) g(tk) 计算相似度: Similarity ( x , t k ) = sim ( f ( x ) , g ( t k ) ) . \text{Similarity}(x, t_k) = \text{sim}(f(x), g(t_k)). Similarity(x,tk)=sim(f(x),g(tk)).
- 预测类别:将图片归为相似度最高的类别。
示例应用:
- 图像分类:给定一些类别的文本描述,CLIP 可以对图片进行分类。
- 图文检索:输入一张图片,检索与其相关的文本描述;或输入一段文字,检索与其匹配的图片。
- 图像生成:结合扩展模型(如 DALL·E),生成符合描述的图像。例如,生成一张图片符合描述“一只宇航员猫正在月球漫步。”
5. CLIP 的优点和局限性
优点:
- 通用性强:不需要专门为每个任务训练,可以在许多任务中实现良好的零样本迁移的性能。
- 数据高效性:对于目标任务,只需提供类别的 文本提示,无需大量标注样本。
- 多模态能力:将图像与文本嵌入到同一个语义空间中,使图像和语言的语义相互对齐。
- 灵活性高:CLIP 可以通过简单修改 文本提示 适应不同任务,而不需要调整模型架构。
局限性:
- 依赖大规模数据:CLIP 的强大能力建立在 4 亿对图像-文本数据的基础上,普通用户难以复现类似效果。
- 文本提示依赖:文本提示的设计会显著影响模型性能,选择不恰当的提示可能导致模型预测结果不佳。
- 图像细节敏感度不足:对小尺度目标或细粒度分类任务,CLIP 的表现可能不如专门的监督模型。