📑 本页目录(点开跳转)
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 对对比学习特别重要
结果对照
⚠️ 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 的两阶段训练("多模态模型怎么训"这道题的标准答案):
操作步骤
🔑 为什么 LLaVA 这条"看起来太简单"的路线赢了:Q-Former 那一坨结构要单独预训练,而 MLP 投影层几乎没有超参、几个小时就训完,效果还不差。 ⭐ 现在的主流做法是「LLaVA 式直接投影 + 想省 token 时在 ViT 输出上做池化或切图」——把复杂度留在数据和分辨率策略上,而不是留在结构上。
🔗 想再深一层,去哪一套
| 去哪 | 为什么 |
|---|---|
| 推荐算法 08 · 深度学习推荐模型 | ⭐⭐ 这一页最值钱的一条连线:CLIP 和双塔召回是同一套东西 —— 图文编码器 ↔ 用户塔/物品塔、in-batch 负采样、温度系数 τ(那边从 0.05 开始调),连坑都一样(热门样本被过度当负样本要做 LogQ 校正) |
| 推荐算法 10 · 向量检索与 ANN | 「图文进同一个空间」之后拿它干什么:HNSW / IVF 怎么在千万级向量里秒选一批 |
| 06c · 解码参数怎么调 | 这一页的温度系数 τ,和你调 API 的 temperature 是同一个东西 —— 那一页讲它落在采样上是什么样 |
| 机器学习与深度学习基础 05 · 评估与过拟合 | 「阶段一冻住、阶段二解冻」这类训练安排背后的判据:什么时候该冻、解冻会过拟合到什么程度 |
✅ 检查点
- CLIP 训练出来的是什么?能用来做什么?
- CLIP 的 InfoNCE 在优化什么?它的负样本从哪里来?
- 温度系数 τ 调小、调大分别有什么后果?CLIP 是怎么处理 τ 的?
- 为什么 batch size 对对比学习特别重要?SigLIP 改了什么来绕开这个限制?
- ⭐ CLIP 的训练方式和推荐系统的哪个模型是同一套?列出至少三条对应关系。
- LLaVA 和 BLIP-2 的 Q-Former 在投影层上有什么区别?各自的取舍是什么?
- LLaVA 的两个训练阶段分别训什么、冻什么?为什么视觉编码器通常不解冻?
👀 答案
- 让图片和文字进入同一个向量空间。可以用文字搜图、图搜图、零样本分类,且能复用同一套向量检索基础设施。
- 一个 batch 的 N 对图文编码后得到 N×N 相似度矩阵,InfoNCE 要求对角线最大——本质是“N 选 1 选对”的交叉熵(图找文、文找图各算一次取平均)。负样本是白捡的:同一批次里别人的正样本就是我的负样本(in-batch 负采样)。
- τ 小(0.01)→ 分布尖锐,最难的负样本梯度极大,学得锋利但对错标极敏感、容易训崩;τ 大(0.5)→ 分布平坦,所有负样本一视同仁,训得稳但区分度不够、向量挤在一起。CLIP 把它做成可学习参数(存对数值并夹住上限),说明它重要到值得让模型自己学。
- 因为负样本就是 batch 里的其他样本:batch=256 只有 255 个干扰项,batch=32768 有 32767 个(CLIP 用的量级)。干扰项越多多选题越难,向量必须分得越开——这是对比学习最直接的效果杠杆。代价是显存(N×N 矩阵,得多卡 all-gather)。SigLIP 把 softmax 对比损失换成逐对的 sigmoid 二分类,每对自己判“配不配”,不再需要对整行归一化,于是小 batch 也能训。
- 推荐算法第 8 章的双塔召回。 对应关系:图片/文本编码器 ↔ 用户塔/物品塔;in-batch 负采样一模一样;温度系数 τ 一模一样(那边从 0.05 开始调);图文进同一空间用文字搜图 ↔ 用户物品进同一空间做 ANN 召回。连坑都一样(热门样本被过度当负样本 → LogQ 校正、负样本选错会训废、batch 越大越好)。
- LLaVA 是一个 MLP 直接投影,视觉 token 数 = ViT 的 patch 数(几百个)——简单、训得快、细节不丢,但吃 token;Q-Former 是一个带可学习 query 的小 Transformer,用交叉注意力把视觉特征压成固定个数(比如 32 个)——省 token、多图友好,但结构复杂且压缩必然丢细节,OCR 和小字场景最明显。主流赢家是 LLaVA 这条:MLP 几乎没有超参、几小时训完。
- 阶段一只训投影层(视觉编码器和 LLM 全冻),用【图片 → 简短描述】把视觉向量对齐到 LLM 的词空间,本质是训一个“翻译器”;阶段二训投影层 + LLM(视觉编码器仍冻),用【图片 + 多轮指令问答】做指令微调。视觉编码器不解冻是因为它的表征是几亿图文对训出来的,随便动会破坏好不容易对齐的空间。
🛑 可以停在这里
⚡ 走神救援
先记住这几件事
- CLIP 把图片与文字映射到可比较的表示空间,用配对关系训练匹配能力。
- 批内负样本与温度影响区分难度,也会放大错配数据的影响。
- 视觉投影还要权衡保留细节与输入长度,不是所有压缩都没有代价。
下一节 👉 10b-图像生成.md