🧠 图解记忆:CLIP 用图文双塔把两种模态映射到共享空间,通过批内对比学习拉近正确配对、推远错误配对;点击图片可查看原图。
💡 答案要点
CLIP = Contrastive Language-Image Pre-training(对比语言-图像预训练)
核心思想: 用对比学习将图像和文本映射到同一个语义空间
架构:
┌─────────────────────────────────────────────────────────┐
│ CLIP 架构 │
└─────────────────────────────────────────────────────────┘
图像编码器(Image Encoder)
├── Vision Transformer (ViT)
└── 或 ResNet
输出:图像向量 v ∈ R^512
文本编码器(Text Encoder)
├── Transformer
输出:文本向量 t ∈ R^512
对比学习(Contrastive Learning)
目标:匹配的图文对相似度高,不匹配的低训练过程:
1. 数据准备(4 亿图文对):
图片1: 一只猫在睡觉.jpg
文本1: "A cat is sleeping"
图片2: 一辆红色汽车.jpg
文本2: "A red car"
...2. 对比损失(Contrastive Loss):
python
# 批量(N=32768)
images = [img1, img2, ..., imgN]
texts = [text1, text2, ..., textN]
# 编码
I = image_encoder(images) # N × 512
T = text_encoder(texts) # N × 512
# 归一化
I = I / ||I||
T = T / ||T||
# 相似度矩阵
S = I @ T.T # N × N
# 对比损失
正样本:对角线(img1 vs text1, img2 vs text2, ...)
负样本:非对角线(img1 vs text2, img1 vs text3, ...)
目标:
对角线相似度尽量高(接近1)
非对角线相似度尽量低(接近0)
损失函数:
L = -1/N Σ [log(exp(S_ii) / Σ_j exp(S_ij))]
(让正样本概率最大)3. 对称损失(双向):
图像→文本:给定图像,找匹配文本
文本→图像:给定文本,找匹配图像
总损失 = 图像→文本损失 + 文本→图像损失训练细节:
| 参数 | 值 | 说明 |
|---|---|---|
| 数据量 | 4亿图文对 | LAION-400M |
| Batch Size | 32768 | 超大 batch |
| 负样本数 | 32767 | 同 batch 其他样本 |
| 训练时间 | ~12天 | 256 GPUs |
| 学习率 | 5e-4 |
推理(Zero-shot 分类):
python
# 候选类别
classes = ["猫", "狗", "鸟", "车"]
# 构造提示词
prompts = [f"a photo of a {c}" for c in classes]
# ["a photo of a 猫", "a photo of a 狗", ...]
# 编码
image_features = clip.encode_image(image) # 1 × 512
text_features = clip.encode_text(prompts) # 4 × 512
# 相似度
similarity = image_features @ text_features.T # 1 × 4
# [0.8, 0.1, 0.05, 0.05]
# 预测
prediction = classes[similarity.argmax()] # "猫"CLIP 的优势:
| 优势 | 说明 |
|---|---|
| Zero-shot | 不需要训练,直接分类任意类别 |
| 通用性 | 适用于各种视觉任务 |
| 鲁棒性 | 对分布偏移(domain shift)不敏感 |
局限性:
| 局限 | 说明 | 示例 |
|---|---|---|
| 细粒度分类差 | 难区分相似物体 | 猫的品种识别 |
| OCR 能力弱 | 不擅长读图中文字 | 识别车牌号 |
| 不能生成 | 只能检索,不能生成字幕 | - |
面试话术:
"CLIP 用对比学习把图像和文本拉到同一空间。一个 batch 有 32K 样本,每个样本都是 32K-1 个负样本。这让 CLIP 学会了强大的图文对齐能力,Zero-shot 分类超越很多有监督模型。"
📚 参考:CLIP: Learning Transferable Visual Models From Natural Language Supervision(原论文)
