2021 年 1 月,OpenAI 发表了论文《Learning Transferable Visual Models From Natural Language Supervision》,提出了 CLIP(Contrastive Language-Image Pre-training)。这篇论文的核心思想极其简洁:用互联网上大规模的图像-文本配对数据,通过对比学习训练视觉和语言的联合表示。
然而,这个简洁思想的威力远超想象。CLIP 不仅在 30 多个视觉基准上媲美甚至超越了全监督方法,更重要的是,它开创了「用自然语言监督视觉」的全新范式——零样本分类从此成为现实。
CLIP 是整个多模态 AI 时代的基石。 LLaVA、GPT-4V、DALL-E、Stable Diffusion,无一不站在 CLIP 的肩膀上。
本文要点
- CLIP 的核心动机:从人工标注到自然语言监督
- Web-scale 数据集:4 亿图像-文本对的构建
- 对比学习框架:双编码器 + InfoNCE 损失
- 零样本分类:从固定类别到开放词汇
- Prompt Engineering 在视觉任务中的应用
- 与有监督方法的全面对比
- 局限性与后续改进
- 对多模态 AI 生态的深远影响
一、为什么需要 CLIP
1.1 传统视觉模型的困境
在 CLIP 之前,计算机视觉模型几乎都依赖于人工标注的「黄金标准」数据集。ImageNet 需要 2.5 万名标注者花两年多时间标注 1400 万张图片。这种方式存在三个根本性问题:
- 标注成本极高:高质量标注需要专业知识(如医学影像),普通标注者难以胜任
- 概念覆盖有限:ImageNet 的 1000 个类别只是现实世界概念海洋中的一滴水
- 分布偏移严重:在 ImageNet 上训练的模型,遇到风格不同的图片(如手绘、卡通)性能急剧下降
1.2 自然语言监督的直觉
OpenAI 的研究者在 VirTex 和 ICMLM 等前期工作中发现了一个有趣的现象:与其用有限的标签训练视觉模型,不如用自然语言「描述」图片内容,让模型自己学习视觉概念。
这个直觉背后有一个关键假设——互联网上的图像-文本对(如图片及其配文)天然构成了一种弱监督信号。虽然单条配文可能不精确,但海量数据的统计力量足以弥补噪声。
1.3 从预测到对比
CLIP 之前的工作(如 VirTex)尝试用图像预测对应的完整文本(类似 Image Captioning),但发现这种逐词预测的效率太低。CLIP 的核心创新在于将问题简化为对比学习:不预测具体文本内容,只判断图像和文本是否匹配。
# VirTex 方案:预测完整文本(效率低)loss = cross_entropy(model(image), text_tokens) # 需要预测每个词
# CLIP 方案:判断是否匹配(效率高)loss = contrastive_loss(image_features, text_features) # 只需对比相似度这个简化的效果是惊人的:在相同数据上,对比学习的效率是逐词预测的 4 倍。
二、数据集:WIT 的构建
2.1 WebImageText 数据集
CLIP 的成功离不开数据。OpenAI 构建了一个名为 WIT(WebImageText)的大规模数据集,包含 4 亿对图像-文本数据。
2.2 数据集设计的关键决策
WIT 的设计体现了几个重要的工程决策:
| 决策 | 具体做法 | 原因 |
|---|---|---|
| 搜索词构建 | 使用 50 万个查询词 | 确保覆盖广泛的概念 |
| 每类上限 | 每个查询最多 2 万对 | 防止头部概念过度占据数据 |
| 分辨率过滤 | 移除过小的图片 | 确保视觉信息质量 |
| 文本长度 | 限制在 76 token 以内 | 配合对比学习批次效率 |
| NSFW 过滤 | 移除敏感内容 | 确保数据安全 |
这些决策确保了数据集在规模和多样性之间取得平衡。相比之下,ImageNet 只有 1000 个类别,而 WIT 覆盖的概念空间远远更广。
2.3 数据的重要性
论文中一个有趣的实验证明了数据的不可替代性:用 YFCC100M(一个已有的 1 亿图像数据集)替代 WIT 训练,性能下降约 30%。这说明不仅数据量重要,数据的多样性同样关键。
三、模型架构与训练
3.1 双编码器架构
CLIP 采用经典的**双编码器(Dual Encoder)**架构:一个图像编码器提取视觉特征,一个文本编码器提取语义特征,两者映射到同一个共享的嵌入空间。
3.2 图像编码器的选择
CLIP 论文实验了多种图像编码器架构,最终发现 Vision Transformer(ViT)的性能最优:
| 编码器 | 参数量 | ImageNet 零样本 Top-1 | 备注 |
|---|---|---|---|
| ResNet-50 | 39M | 59.1% | 基线 |
| Modified RN50×4 | 87M | 65.2% | 加宽加深 |
| Modified RN50×16 | 151M | 68.0% | 进一步放大 |
| Modified RN50×64 | 355M | 68.4% | 收益递减 |
| ViT-B/32 | 88M | 63.3% | 效率优先 |
| ViT-B/16 | 150M | 68.1% | 性能-效率平衡 |
| ViT-L/14 | 428M | 75.3% | 最佳性能 |
论文最终选择 ViT-L/14@336px 作为最佳模型(使用 336×336 的更高分辨率微调),在 ImageNet 上达到 76.2% 的零样本准确率。
3.3 InfoNCE 对比损失
CLIP 使用改进的 InfoNCE(Noise Contrastive Estimation)损失函数。核心思想是:在一个 batch 中,正确的图像-文本对应该有更高的相似度,错误的配对应有更低的相似度。
# CLIP 对比学习核心代码(简化)import torchimport torch.nn.functional as F
def clip_loss(image_features, text_features, temperature=0.07): """ image_features: [batch_size, embed_dim] # 图像特征 text_features: [batch_size, embed_dim] # 文本特征 temperature: 可学习参数,控制分布锐度 """ # L2 归一化 image_features = F.normalize(image_features, dim=-1) text_features = F.normalize(text_features, dim=-1)
# 计算余弦相似度矩阵 [batch, batch] logits = image_features @ text_features.T * (1.0 / temperature)
# 对称损失:图像→文本 + 文本→图像 labels = torch.arange(logits.shape[0]).to(logits.device)
loss_i2t = F.cross_entropy(logits, labels) # 图像找对应文本 loss_t2i = F.cross_entropy(logits.T, labels) # 文本找对应图像
return (loss_i2t + loss_t2i) / 2.0这个损失函数的优雅之处在于其对称性:同时要求「给定图像找到对应文本」和「给定文本找到对应图像」。
3.4 训练配置
CLIP 使用了极大的 batch size(32768),这在对比学习中至关重要——更大的 batch 意味着每个样本需要与更多负例对比,学到的表示更具有判别力。
温度参数 τ 被设置为可学习参数(初始化为 0.07,约束在 [0.01, 0.1] 范围内)。论文发现最优温度约为 0.01~0.03,较小的温度使模型更关注难负例。
四、零样本分类
4.1 从分类到检索的范式转变
CLIP 最令人兴奋的能力是零样本分类:不需要任何下游任务的训练数据,直接用自然语言描述类别,就能对新图片进行分类。
4.2 具体推理流程
零样本分类的推理过程极为直观:
# CLIP 零样本分类(简化)def zero_shot_classify(image, class_names, model): """ image: 输入图像 class_names: 任意类别名称列表 """ # 1. 为每个类别构造文本 prompt text_inputs = [f"a photo of a {name}" for name in class_names] text_tokens = tokenize(text_inputs)
# 2. 提取特征 image_feature = model.encode_image(image) # [1, d] text_features = model.encode_text(text_tokens) # [num_classes, d]
# 3. 计算相似度 similarity = (image_feature @ text_features.T).softmax(dim=-1)
# 4. 返回最相似的类别 return class_names[similarity.argmax()]以 ImageNet 为例,模型不需要在 ImageNet 上训练,只需将 1000 个类别名转换为文本(如 “a photo of a golden retriever”),就能直接进行分类,达到 76.2% 的准确率。
4.3 Prompt Engineering 的威力
论文发现,直接用类别名(如 “dog”)效果不好,加上 Prompt 模板后效果显著提升:
| Prompt 策略 | ImageNet Top-1 |
|---|---|
| 仅类别名(“dog”) | ~63% |
| 单一模板(“A photo of a {}”) | ~70% |
| 多模板集成 | 76.2% |
CLIP 使用了 80 个模板的集成(ensemble),包括:
templates = [ "a bad photo of a {}.", "a photo of many {}.", "a sculpture of a {}.", "a photo of the hard to see {}.", "a low resolution photo of the {}.", "a rendering of a {}.", "graffiti of a {}.", "a good photo of a {}.", "a photo of a large {}.", # ... 共 80 个模板]最终预测结果是 80 个模板预测概率的平均值。这个技巧在 ImageNet 上带来了约 3-5% 的提升。
这种 Prompt Engineering 直接启发了 NLP 领域的 Prompt Tuning 方法(如 CoOP、CoCoOp),形成了「视觉 Prompt 工程」的研究分支。
五、实验结果与性能分析
5.1 与有监督方法的对比
CLIP 最震撼的结果是:零样本的 CLIP 可以媲美甚至超越有监督的 ResNet-101。
5.2 分布鲁棒性:CLIP 的杀手锏
CLIP 真正的优势体现在分布偏移场景。论文在 ImageNet 的多个变体上进行了测试:
| 数据集 | 描述 | 有监督 ResNet-101 | CLIP 零样本 |
|---|---|---|---|
| ImageNet | 原始 | 76.6% | 76.2% |
| ImageNet-V2 | 自然分布偏移 | 64.0% | 70.1% |
| ImageNet-R | 艺术/手绘/雕塑 | 24.5% | 75.7% |
| ImageNet-Sketch | 素描 | 20.1% | 48.2% |
| ImageNet-A | 自然对抗样本 | 2.7% | 77.2% |
| ObjectNet | 物体朝向/背景变化 | 23.5% | 41.3% |
CLIP 在 ImageNet-A 上的表现最为惊人:有监督 ResNet 只有 2.7%(几乎全部失败),而 CLIP 零样本达到 77.2%。这是因为 ImageNet-A 包含了自然界中难以分类的对抗性图像,有监督模型严重过拟合了训练分布,而 CLIP 在海量互联网数据上学到了更鲁棒的视觉概念。
5.3 30+ 数据集的全面评估
论文在超过 30 个数据集上评估了 CLIP 的零样本能力:
5.4 Linear Probe 评估
除了零样本,论文还评估了 CLIP 特征的 Linear Probe 性能(冻结编码器,只训练线性分类头):
- 在 ImageNet 上,CLIP ViT-L/14 的 Linear Probe 达到 85.3%(vs 零样本 76.2%)
- 在多数数据集上,CLIP 的 Linear Probe 显著超越有监督预训练的 BiT-M 和 ViT
- 这表明 CLIP 学到的特征确实更加通用和可迁移
六、局限性与挑战
6.1 细粒度分类的不足
CLIP 在某些细粒度任务上表现不佳:
- 车型分类(Stanford Cars):零样本仅 59.4%(vs 有监督 85%+),因为「Toyota Camry」和「Honda Accord」的差异难以通过文本描述
- 花卉识别(Oxford Flowers):许多花的品种名不在常见文本中
- 飞机型号识别:需要专业知识才能区分
这些局限的根源在于:互联网文本很少描述精确的子类别差异。
6.2 抽象概念的困难
CLIP 对需要计数、空间推理或抽象理解的任务表现较差:
| 任务 | 示例 | 零样本表现 |
|---|---|---|
| 计数 | 「图中有几个红色方块?」 | 较差 |
| 空间关系 | 「方块在圆形左边」 | 较差 |
| 颜色区分 | 精确的色差判断 | 一般 |
| 安全检测 | 暴力/有害内容 | 需要额外措施 |
6.3 社会偏见
由于训练数据来自互联网,CLIP 不可避免地继承了数据中的社会偏见:
- 性别偏见:搜索「CEO」返回更多男性图像
- 种族偏见:某些职业的种族分布不均衡
- 年龄偏见:搜索「学生」倾向于返回年轻人
论文建议在部署前进行偏见审计,并使用更平衡的数据重新训练。
6.4 计算成本
CLIP 的训练需要巨大的计算资源:
- 最大模型(ViT-L/14)在 592 个 V100 GPU 上训练 18 天
- 总计算量约 10,000 V100 GPU 天
- 这使得复现和改进 CLIP 的门槛极高
七、对多模态 AI 的影响
7.1 影响力图谱
CLIP 的影响力可以用一句话概括:没有 CLIP,就没有今天的多模态 AI。
7.2 CLIP 在生成模型中的角色
在图像生成领域,CLIP 扮演了「语义桥梁」的角色:
- DALL-E 2:使用 CLIP 的图像嵌入作为先验,将文本描述映射到图像空间
- Stable Diffusion:直接使用 CLIP 的文本编码器(或其变体)作为文本条件输入
- Midjourney:底层同样依赖 CLIP 风格的文本-图像对齐
没有 CLIP 提供的语义对齐空间,文本到图像的生成将缺少关键的引导信号。
7.3 CLIP 在视觉-语言模型中的角色
在 VLM(Vision-Language Model)领域,CLIP ViT 几乎成为标准的视觉编码器:
| 模型 | 视觉编码器 | 语言模型 |
|---|---|---|
| LLaVA | CLIP ViT-L/14 | LLaMA / Vicuna |
| LLaVA-NeXT | CLIP ViT-L/14@336 | LLaMA / Mistral |
| MiniGPT-4 | CLIP ViT-L/14 | Vicuna |
| InternVL | CLIP 变体 | InternLM |
| Qwen-VL | ViTBigG(CLIP 变体) | Qwen |
7.4 嵌入检索与 RAG
CLIP 的图像/文本嵌入也被广泛用于多模态检索和 RAG 系统:
# 使用 CLIP 构建多模态检索系统import clipimport torch
model, preprocess = clip.load("ViT-L/14")
def build_multimodal_index(items): """构建文本-图像联合索引""" embeddings = [] for item in items: if item["type"] == "image": image = preprocess(item["data"]) emb = model.encode_image(image.unsqueeze(0)) else: tokens = clip.tokenize([item["text"]]) emb = model.encode_text(tokens) embeddings.append(emb) return torch.cat(embeddings)
def search(query, index, items, top_k=5): """跨模态搜索:文本查询 → 检索图像/文本""" tokens = clip.tokenize([query]) query_emb = model.encode_text(tokens) similarity = (query_emb @ index.T).squeeze(0) values, indices = similarity.topk(top_k) return [items[i] for i in indices]八、后续工作与改进
8.1 SigLIP:Sigmoid 替代 Softmax
Google 在 2023 年提出 SigLIP,用 Sigmoid 损失替代 CLIP 的 Softmax 损失:
# CLIP 损失:基于 Softmax(需要全局归一化)loss_clip = cross_entropy(similarity_matrix, labels)
# SigLIP 损失:基于 Sigmoid(独立计算每对)loss_siglip = -log(sigmoid(pos_pairs / temperature + bias)) \ - log(1 - sigmoid(neg_pairs / temperature + bias))SigLIP 的优势在于不依赖 batch 内其他样本,因此可以更高效地扩展到更大的 batch size。SigLIP 在 PaliGemma 等模型中取代了 CLIP。
8.2 EVA-CLIP:增强的视觉编码
EVA-CLIP 通过以下改进提升了 CLIP 的性能:
- 使用 EVA(预训练的 ViT)作为视觉编码器初始化
- 引入 EVA-02 架构改进(如 SwiGLU、RoPE)
- 在更大的数据集上训练
- EVA-CLIP-8B 在 ImageNet 零样本上达到 80.0%
8.3 其他重要后续工作
| 工作 | 年份 | 核心改进 |
|---|---|---|
| ALIGN | 2021 | Google 的对比学习,10 亿对数据 |
| BASIC | 2022 | 更大数据 + 多语言 |
| CoCa | 2022 | 对比 + 生成联合训练 |
| LiT | 2022 | 锁定预训练图像编码器 |
| OpenCLIP | 2022 | 开源复现,公开训练代码 |
| SigLIP | 2023 | Sigmoid 损失,更高效 |
| EVA-CLIP | 2023 | 更强视觉编码器 |
| JEP | 2024 | 联合嵌入预测架构 |
8.4 开源生态:OpenCLIP
OpenCLIP 是 CLIP 的开源复现项目,使用 LAION 开放数据集训练。它提供了多种规模的预训练模型,让研究者可以自由使用和改进 CLIP 架构。
OpenCLIP 的贡献在于证明了 CLIP 的成功不仅属于 OpenAI——开放数据和开放代码同样可以训练出高质量的视觉-语言模型。
常见问题 FAQ
Q1:CLIP 能直接用于图像生成吗?
不能。CLIP 是一个理解模型(判别式),不是生成模型。但 CLIP 的文本编码器被广泛用作图像生成模型(如 Stable Diffusion)的文本条件编码器,提供语义引导。
Q2:CLIP 和 ViT 是什么关系?
ViT 是一种图像编码器架构,CLIP 是一个训练方法(框架)。CLIP 可以使用 ViT 作为其图像编码器,两者不冲突。事实上,CLIP ViT-L/14 是目前最常用的视觉编码器之一。
Q3:CLIP 的零样本分类在什么场景下不如有监督方法?
细粒度分类(如区分相似车型)、需要专业知识的领域(如医学影像、卫星图像)、以及数据分布偏离互联网的场景。在这些场景中,有监督方法通常仍有 10-20% 的优势。
Q4:为什么 CLIP 在 ImageNet-A 上远超有监督方法?
ImageNet-A 专门收集了有监督 ImageNet 模型分类错误的「硬」样本(如不常见角度、伪装动物)。有监督模型严重过拟合了 ImageNet 的训练分布,而 CLIP 在海量互联网数据上学习了更丰富的视觉概念,自然更具鲁棒性。
Q5:CLIP 和 BLIP 有什么区别?
CLIP 只做对比学习(判断图文是否匹配),BLIP 在此基础上加入了生成能力(图像描述、VQA),是一个更全面的视觉-语言模型。BLIP 的视觉编码器通常也基于 CLIP 初始化。
小结
CLIP 是视觉-语言预训练的里程碑之作。
核心认识:CLIP 证明了一个深刻的思想——用自然语言作为视觉学习的监督信号,可以训练出远比固定标签更通用、更鲁棒的视觉模型。这个思想不仅改变了计算机视觉,更催生了整个多模态 AI 生态。
CLIP 的双编码器架构和对比学习目标,如今已成为多模态预训练的标准范式。从 Stable Diffusion 到 LLaVA,从 DALL-E 到 GPT-4V,几乎所有多模态系统都直接或间接地受益于 CLIP 的贡献。
CLIP 之后,视觉不再是视觉,语言不再是语言——它们在同一个语义空间中交汇。
参考资料
- Learning Transferable Visual Models From Natural Language Supervision — CLIP 原始论文(Radford et al., 2021)
- An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale — ViT 论文(Dosovitskiy et al., 2020)
- Scaling Up Visual and Vision-Language Representation Learning With Noisy Text Supervision — ALIGN(Jia et al., 2021)
- Sigmoid Loss for Language Image Pre-Training — SigLIP(Zhai et al., 2023)
- EVA-CLIP: Improved Training Techniques for CLIP at Scale — EVA-CLIP(Sun et al., 2023)
- CoCa: Contrastive Captioners are Image-Text Foundation Models — CoCa(Yu et al., 2022)
- LiT: Zero-Shot Transfer with Locked-image Text Tuning — LiT(Zhai et al., 2022)
- OpenCLIP: An open source implementation of CLIP — OpenCLIP 开源项目
- Visual Instruction Tuning — LLaVA(Liu et al., 2023)
- High-Resolution Image Synthesis with Latent Diffusion Models — Stable Diffusion(Rombach et al., 2022)
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
部分信息可能已经过时






