🏠 总目录📚 本教程 10d · CLIP 与对比学习 ← →
📑 本页目录(点开跳转)

10d · CLIP 与对比学习

⏱ 26 分钟 | ⭐ 和推荐系统的双塔召回是同一套东西


🎯 一句话

CLIP 训出来的不是一个分类器,是一个图片和文字共享的向量空间 —— 于是可以用文字搜图、图搜图、零样本分类,还能直接复用向量检索那套基础设施。 ⭐ 而它的训练方式,和推荐系统的双塔召回是同一套东西,连坑都一样。

⚠️ 这一页是原理层。只做视觉应用的话,上一页就够用了。


CLIP:图文对齐的地基

结果对照

训练:几亿对(图片,描述文字)
目标:让匹配的图文向量靠近,不匹配的远离(对比学习)
结果:图片和文字进入同一个向量空间
可以用文字搜图、用图搜图、零样本分类

🔗 这就是推荐算法第 10 章向量检索的多模态版本——同一套 ANN 基础设施。

训练目标 InfoNCE:说白了是一道 batch 内的多选题

拿一个 batch 的 N 对(图片,描述)。把 N 张图和 N 段文字各自编码、L2 归一化,得到一个 N×N 的相似度矩阵,然后要求对角线最大:

$$\mathcal{L} = -\frac{1}{N}\sum_{i=1}^{N} \log \frac{\exp(\text{sim}(I_i, T_i)/\tau)}{\sum_{j=1}^{N} \exp(\text{sim}(I_i, T_j)/\tau)}$$

💡 人话:对角线是正确答案,同一个 batch 里其他所有文字都是干扰项。 这个式子就是"N 选 1 选对"的交叉熵;训练时图找文、文找图各算一次取平均(所以是对称的)。

⭐ 关键在于负样本是白捡的:不用专门去采负样本——同一批次里别人的正样本,就是我的负样本(in-batch 负采样)。这是对比学习最省事的地方,也正是它对 batch size 极度敏感的原因。

温度系数 τ 到底在干什么

$\tau$ 就是第 6 章解码策略里那个 temperature,只不过用在了训练的 loss 上:

τ 分布 后果
小(如 0.01) 尖锐 把最难的那个负样本的梯度放到极大 → 学得"锋利",但对错标极敏感、容易训崩
大(如 0.5) 平坦 所有负样本一视同仁 → 训练稳,但区分度不够,向量都挤在一起

⭐ CLIP 的做法是把 τ 当成可学习参数(存它的对数,并夹住上限防止训练时自己跑飞)——它重要到值得让模型自己学。

为什么 batch size 对对比学习特别重要

结果对照

batch = 256→每张图面对 255 个干扰项
batch = 32768→每张图面对 32767 个干扰项 ⭐ CLIP 用的就是这个量级
干扰项越多→这道多选题越难→学到的向量必须分得越开
这是对比学习【最直接的效果杠杆】,比改网络结构管用
⚠️ 代价是显存:N×N 相似度矩阵 + N 份激活,batch 一大就必须多卡
(把各卡的特征 all-gather 到一起再算 loss,通信量还不小)

⚠️ SigLIP 就是冲着这一条来的:它把 softmax 对比损失换成逐对的 sigmoid 二分类损失——每一对图文自己判断"配不配",不再需要对整行做归一化。于是不必凑齐全局负样本,小 batch 也能训、多卡通信也省了。现在很多新模型的视觉编码器用的是 SigLIP 而不是 CLIP。

⭐ 一条跨板块的连线(这一章最值钱的一句)

CLIP 的训练方式,和推荐系统的双塔召回是同一个东西。

CLIP 推荐算法的双塔
图片编码器 / 文本编码器 用户塔 / 物品塔
in-batch 负采样(别人的正样本当我的负样本) 一模一样
温度系数 τ 一模一样(那边建议从 0.05 开始调)
图文进同一空间 → 用文字搜图 用户物品进同一空间 → ANN 召回

连坑都一样:热门样本会被过度当成负样本(推荐那边用 LogQ 校正 修)、负样本选错会训废、batch 越大越好。

🔗 推荐算法第 8 章有一段可跑的「双塔 + In-batch 负采样」代码—— 把"用户"换成"图片"、"物品"换成"文字",那就是 CLIP 的训练循环。 想动手复现对比学习,去那一节抄。

🔌 LLaVA vs Q-Former:投影层的两条路线

三段式里中间那一层有两种主流实现,差别在于视觉 token 有没有被压过:

路线 代表 投影层是什么 视觉 token 数 取舍
直接投影 LLaVA 一个 MLP(最早的版本就是一层线性) 等于 ViT 的 patch 数(几百个) ✅ 简单、训得快、细节不丢
❌ 吃 token
查询压缩 BLIP-2 的 Q-Former 一个小 Transformer,带一组可学习的 query 向量,用交叉注意力去"问"视觉特征 等于 query 个数(比如固定 32 个) ✅ token 少、多图/长上下文友好
❌ 结构复杂、压缩必然丢细节(OCR 和小字场景最明显)

LLaVA 的两阶段训练("多模态模型怎么训"这道题的标准答案):

操作步骤

阶段一:只训投影层 ← 视觉编码器和 LLM 全部冻住
数据:大量【图片→简短描述】
目标:把视觉向量对齐到 LLM 的词空间
⭐ 这一阶段本质上就是在训一个「翻译器」
阶段二:训投影层 + LLM ← 视觉编码器仍然冻住
数据:【图片 + 多轮指令问答】
从"能描述图片"变成"能按指令回答关于图片的问题"
⚠️ 视觉编码器(CLIP / SigLIP 的那个 ViT)通常全程不解冻,
或只在最后小幅解冻 —— 它的表征是几亿图文对训出来的,
随便动会把好不容易对齐的空间破坏掉

🔑 为什么 LLaVA 这条"看起来太简单"的路线赢了:Q-Former 那一坨结构要单独预训练,而 MLP 投影层几乎没有超参、几个小时就训完,效果还不差。 ⭐ 现在的主流做法是「LLaVA 式直接投影 + 想省 token 时在 ViT 输出上做池化或切图」——把复杂度留在数据和分辨率策略上,而不是留在结构上。


🔗 想再深一层,去哪一套

去哪 为什么
推荐算法 08 · 深度学习推荐模型 ⭐⭐ 这一页最值钱的一条连线:CLIP 和双塔召回是同一套东西 —— 图文编码器 ↔ 用户塔/物品塔、in-batch 负采样、温度系数 τ(那边从 0.05 开始调),连坑都一样(热门样本被过度当负样本要做 LogQ 校正)
推荐算法 10 · 向量检索与 ANN 「图文进同一个空间」之后拿它干什么:HNSW / IVF 怎么在千万级向量里秒选一批
06c · 解码参数怎么调 这一页的温度系数 τ,和你调 API 的 temperature 是同一个东西 —— 那一页讲它落在采样上是什么样
机器学习与深度学习基础 05 · 评估与过拟合 「阶段一冻住、阶段二解冻」这类训练安排背后的判据:什么时候该冻、解冻会过拟合到什么程度

✅ 检查点

  1. CLIP 训练出来的是什么?能用来做什么?
  2. CLIP 的 InfoNCE 在优化什么?它的负样本从哪里来?
  3. 温度系数 τ 调小、调大分别有什么后果?CLIP 是怎么处理 τ 的?
  4. 为什么 batch size 对对比学习特别重要?SigLIP 改了什么来绕开这个限制?
  5. ⭐ CLIP 的训练方式和推荐系统的哪个模型是同一套?列出至少三条对应关系。
  6. LLaVA 和 BLIP-2 的 Q-Former 在投影层上有什么区别?各自的取舍是什么?
  7. LLaVA 的两个训练阶段分别训什么、冻什么?为什么视觉编码器通常不解冻?
👀 答案
  1. 让图片和文字进入同一个向量空间。可以用文字搜图、图搜图、零样本分类,且能复用同一套向量检索基础设施。
  2. 一个 batch 的 N 对图文编码后得到 N×N 相似度矩阵,InfoNCE 要求对角线最大——本质是“N 选 1 选对”的交叉熵(图找文、文找图各算一次取平均)。负样本是白捡的:同一批次里别人的正样本就是我的负样本(in-batch 负采样)。
  3. τ 小(0.01)→ 分布尖锐,最难的负样本梯度极大,学得锋利但对错标极敏感、容易训崩;τ 大(0.5)→ 分布平坦,所有负样本一视同仁,训得稳但区分度不够、向量挤在一起。CLIP 把它做成可学习参数(存对数值并夹住上限),说明它重要到值得让模型自己学。
  4. 因为负样本就是 batch 里的其他样本:batch=256 只有 255 个干扰项,batch=32768 有 32767 个(CLIP 用的量级)。干扰项越多多选题越难,向量必须分得越开——这是对比学习最直接的效果杠杆。代价是显存(N×N 矩阵,得多卡 all-gather)。SigLIP 把 softmax 对比损失换成逐对的 sigmoid 二分类,每对自己判“配不配”,不再需要对整行归一化,于是小 batch 也能训。
  5. 推荐算法第 8 章的双塔召回。 对应关系:图片/文本编码器 ↔ 用户塔/物品塔;in-batch 负采样一模一样;温度系数 τ 一模一样(那边从 0.05 开始调);图文进同一空间用文字搜图 ↔ 用户物品进同一空间做 ANN 召回。连坑都一样(热门样本被过度当负样本 → LogQ 校正、负样本选错会训废、batch 越大越好)。
  6. LLaVA 是一个 MLP 直接投影,视觉 token 数 = ViT 的 patch 数(几百个)——简单、训得快、细节不丢,但吃 token;Q-Former 是一个带可学习 query 的小 Transformer,用交叉注意力把视觉特征压成固定个数(比如 32 个)——省 token、多图友好,但结构复杂且压缩必然丢细节,OCR 和小字场景最明显。主流赢家是 LLaVA 这条:MLP 几乎没有超参、几小时训完。
  7. 阶段一只训投影层(视觉编码器和 LLM 全冻),用【图片 → 简短描述】把视觉向量对齐到 LLM 的词空间,本质是训一个“翻译器”;阶段二训投影层 + LLM(视觉编码器仍冻),用【图片 + 多轮指令问答】做指令微调。视觉编码器不解冻是因为它的表征是几亿图文对训出来的,随便动会破坏好不容易对齐的空间。

🛑 可以停在这里

⚡ 走神救援

先记住这几件事

下一节 👉 10b-图像生成.md

打卡记录保存在你的浏览器里,首页能看到总进度