先记住一句话
CLIP 用 batch 内图文配对做双向检索式训练;VLM 再把视觉特征投影成 LLM 能消费的 token,使模型不仅比较相似度,还能按语言自回归地产生答案。
1. 为什么固定类别监督不够?
传统分类器最后一层只有预先定义的类别,例如 1000 个 ImageNet 类。想识别新概念,通常需要新增标注和重新训练 head。互联网图文对虽然噪声大,却天然包含开放词汇描述;CLIP 把它们当作可扩展监督。
2. 双编码器怎样对齐?
Image encoder 输出 $v_i$,text encoder 输出 $t_i$。向量归一化后,batch 内所有图文两两计算 cosine similarity,形成 $B\times B$ 矩阵:
对角线 $(i=i)$ 是真实配对;非对角线是 batch negatives。训练同时做 image-to-text 和 text-to-image cross-entropy:
text 1 text 2 text 3
image 1 ✓ × ×
image 2 × ✓ ×
image 3 × × ✓
模型不需要生成 caption,只需要让正确图文相似度高于错误配对。因为图像和文本各自只编码一次,双编码器很适合大规模检索。
例 1:手算 2×2 CLIP loss
设归一化后的相似度矩阵为 $\begin{bmatrix}0.8&0.2\\0.1&0.7\end{bmatrix}$,为便于计算取 $\tau=1$。第一张图对应文本 1:
$p(t_1|v_1)=e^{0.8}/(e^{0.8}+e^{0.2})=2.226/(2.226+1.221)=0.646$。
第 1 行 loss $=-\ln0.646=0.437$。
第二行正确概率 $e^{0.7}/(e^{0.1}+e^{0.7})=0.646$,也是 0.437。
再按列算 text→image 后取平均,形成对称 loss。
3. Zero-shot classification 怎么发生?
给定类别 cat、dog,先把它们写成 prompt:
"a photo of a cat"
"a photo of a dog"
文本编码器把每个类别描述变成向量;图片编码一次后,与所有类别向量比较相似度,softmax 后选最大项。这等于把分类 head 的固定权重换成“由自然语言动态生成的类别原型”。
Prompt wording 会影响结果,因此常对多种模板和同义描述做 ensemble。Zero-shot 也不意味着从没见过相似概念;它表示没有为该 benchmark 的固定类别专门训练分类 head。
例 2:zero-shot 两类分类
图片向量与 a photo of a cat、a photo of a dog 的 cosine similarity 为 0.75、0.55。若 logit scale 为 10,logits 为 $[7.5,5.5]$:
类别文本就是动态 classifier weights;换 prompt 会改变文本向量和最终概率。
4. CLIP 学到的空间有什么边界?
- 对齐数据的偏见、噪声和长尾覆盖会进入表示。
- 全局图文相似不自动提供精确位置、计数、OCR 或细粒度空间关系。
- 相似度高表示数据分布中常关联,不保证事实、因果或安全判断正确。
- 双编码器为了独立编码和快速检索,牺牲了逐 token/region 的深度交互。
5. 从 CLIP 到能回答问题的 VLM
典型视觉语言模型包含三块:
image → vision encoder → visual features
↓ projector / resampler
text → tokenizer → LLM token space → generated answer
- Vision encoder 把图片变成 patch/region features,常由图文或视觉自监督预训练。
- Connector 用线性 projector、MLP、resampler 或 query tokens 把视觉维度和 token 数适配到 LLM。
- LLM 通过 self-attention 或 cross-attention 融合视觉与文字,并自回归生成输出。
训练通常先做图文对齐/描述,再做多模态 instruction tuning。哪些模块冻结、哪些联合训练,决定成本和视觉表示是否会为语言任务重塑。
例 3:线性 connector 的一次投影
视觉 token $v=[1,2]$,LLM hidden width 为 3;令 projector $W=\begin{bmatrix}1&0&-1\\0&2&1\end{bmatrix}$:
维度变得可与 3 维文字 embedding 拼接,但这不意味着向量已经变成某个自然语言单词。
6. “统一成 token”具体统一了什么?
它不是说图片真的变成自然语言单词,而是不同模态最终都形成固定宽度向量序列,进入相同 attention 计算。统一的是计算接口:
不同模态的 tokenizer/encoder、位置结构和训练 loss 仍然可以完全不同。
例 4:视觉 token 压缩为何重要
一张图有 576 patch tokens,prompt 128 tokens,总长 704,attention score 约 $704^2=495{,}616$。若 resampler 把视觉压成 64 tokens,总长 192,score 约 $36{,}864$,约少 13.4 倍。压缩节省计算,但可能损失细粒度空间信息。
7. 与机器人模型的关系
VLA 模型常把多视角图像、语言任务、本体状态编码成 token,再预测动作。语言提供开放任务接口,视觉提供环境证据,动作 head 或 action tokenizer 把表示接回控制空间。关键挑战不只是“看懂图”:还要保持时序、3D 几何、动作精度和闭环延迟。
CLIP 本身不是会对话的 VLM。它学习图文相似度;能生成解释和动作通常需要额外 connector、语言模型和后训练。
自测:先算后展开
1. CLIP 的一行图片在相似度矩阵中做什么分类?
它要在 batch 内所有文本中把自己的配对文本分类为正确项;text-to-image 方向同理。
2. Zero-shot classifier 的“类别权重”从哪里来?
由 text encoder 对类别 prompt 编码得到,而不是为固定类别单独训练的线性层参数。
3. VLM connector 为什么存在?
视觉特征与 LLM token embedding 在维度、数量和统计分布上不同,需要投影/压缩成语言模型可消费的表示。
4. Batch size 为 256 时相似度矩阵有多少项?
$256^2=65{,}536$ 项;每行有 1 个 positive 和 255 个 batch 内候选。
5. 两个单位向量点积为 0,cosine similarity 是多少?
0,表示它们正交;不是负相关,也不直接等同于语义完全无关。