本站内容由 AI 生成,可能存在错误。如发现问题,欢迎到 GitHub Issues 反馈。

多模态对齐:CLIP 与跨模态嵌入空间

多模态对齐:CLIP 与跨模态嵌入空间

更新于 2026-04-23

简介:让文本和图像”说同一种语言”

一张狗的照片和”a photo of a dog”这段文字,在语义上是等价的。但在传统机器学习中,图像和文本由完全不同的模型处理,生活在完全不同的向量空间里,无法直接比较。

CLIP (Contrastive Language-Image Pre-training) 解决了这个问题。Radford 等人 (OpenAI, 2021) 提出了一个看似简单但影响深远的想法:训练一个共享的嵌入空间,让匹配的图文对距离近,不匹配的距离远

CLIP 在 4 亿 互联网图文对上训练,学到的表示具有惊人的泛化能力——不需要任何额外训练,就能在新的分类任务上达到有竞争力的性能(zero-shot)。这种能力使 CLIP 成为了多模态 AI 的基础组件:Stable Diffusion 用它理解文本提示,LLaVA 用它将图像转为 LLM 能理解的 token,DALL-E 2 用它做图像检索。

CLIP 架构:双塔编码器

CLIP 的架构非常直觉:两个独立的编码器,分别处理图像和文本,最终映射到同一个向量空间

CLIP 双塔编码器架构
CLIP 双塔编码器架构图像编码器ImagePatch EmbedViT Encoder[CLS]线性投影文本编码器TextBPE TokenizeText Transformer[EOS]线性投影共享嵌入空间cos(I, T)图像向量文本向量两个独立编码器将图像和文本映射到同一向量空间,用余弦相似度衡量匹配程度
双塔结构
Image Encoder图像224×224×3ViTViT-L/14[CLS]→ D-dimText Encoder文本"a photo of a dog"Transformer12-layer[EOS]→ D-dim图像和文本各有独立的编码器CLIP 的核心是"双塔"架构:图像侧用 ViT,文本侧用 Transformer,两者完全独立

关键设计选择:

  • 图像编码器:可以是 ResNet 或 ViT(CLIP 论文中 ViT-L/14 效果最好)。图像经过 patch 化、Transformer 编码后,取 [CLS] token 的输出,再通过一个线性投影层映射到共享维度 DD
  • 文本编码器:标准 Transformer(12 层,8 头,512 维)。文本经过 BPE tokenize 后送入 Transformer,取 [EOS] token 的输出,同样投影到 DD 维。
  • 独立性:两个编码器完全独立,不共享任何参数。这使得推理时可以预计算一侧的嵌入。

最终,图像向量 IiI_i 和文本向量 TjT_j 之间的相似度用余弦相似度衡量:

sim(Ii,Tj)=IiTjIiTj\text{sim}(I_i, T_j) = \frac{I_i \cdot T_j}{\|I_i\| \|T_j\|}

对比训练:InfoNCE 损失

CLIP 的训练目标是对比学习 (contrastive learning):给定一个 batch 中的 NN 个图文对,让每个图像找到自己对应的文本(反之亦然),同时排斥不匹配的对。

CLIP 对比学习:N×N 相似度矩阵
CLIP 对比学习相似度矩阵T1T2T3T4T5I1I2I3I4I5+-----+-----+-----+-----+文本 (T₁ … Tₙ)图像 (I₁ … Iₙ)正样本对(拉近)负样本对(推远)目标:最大化对角线相似度,最小化非对角线相似度一个 batch 中 N 个图文对形成 N×N 矩阵,对角线是匹配对(正样本)
对比学习矩阵
Batch 大小:
文本a doga cara flowera house图像🐕 dog🚗 car🌸 flower🏠 house0.930.190.100.050.220.880.240.200.080.200.950.220.090.180.250.92正样本 (对角线)负样本目标:最大化对角线,最小化其余悬停查看详情

具体而言,CLIP 使用对称的 InfoNCE 损失。图像到文本方向:

Lit=1Ni=1Nlogexp(sim(Ii,Ti)/τ)j=1Nexp(sim(Ii,Tj)/τ)\mathcal{L}_{i \to t} = -\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)}

文本到图像方向类似。最终损失是两个方向的平均:

L=12(Lit+Lti)\mathcal{L} = \frac{1}{2}(\mathcal{L}_{i \to t} + \mathcal{L}_{t \to i})

其中 τ\tau 是可学习的温度参数,控制分布的锐度。τ\tau 越小,模型越”自信”,对正样本和负样本的区分越极端。

训练过程中嵌入空间的变化

下面的可视化展示了训练前后嵌入空间的变化。训练前,图像和文本各自聚类;训练后,匹配的图文对被拉近到一起:

嵌入空间对齐可视化
训练进度:0%
图像 (circle)文本 (square)🐕🚗🌸🏢🐱✈️🌳📖dogcarflowerbuildingcatplanetreebook图像 (circle)文本 (square)匹配对连线对比训练将匹配的图文对拉近,不匹配的推远

为什么 batch size 如此重要?

对比学习的有效性取决于负样本的数量——batch 中的每个不匹配对都是负样本。CLIP 使用了 32,768 的超大 batch size,这意味着每个正样本有 32,767 个负样本。更大的 batch = 更多的负样本 = 更好的对比信号。

Zero-Shot 分类

CLIP 最令人惊叹的能力是 zero-shot 迁移:不需要在目标数据集上做任何训练,直接用文本描述作为分类器。

CLIP Zero-Shot 分类
选择图像🐱🚗🌸🏢🐱catCLIPcos(I, T)文本提示"a photo of a cat"92.0%预测"a photo of a car"2.0%"a photo of a flower"3.0%"a photo of a building"3.0%无需训练 — CLIP 使用文本提示作为分类器权重

具体做法是:对于一组类别标签,构造文本提示 "a photo of a {label}",用文本编码器编码成向量。然后将待分类的图像编码为向量,计算与所有文本向量的余弦相似度,最高的就是预测类别。

这本质上是把离散的类别标签转化成了连续的语义向量。CLIP 在 ImageNet 上的 zero-shot 准确率达到了 76.2%,与从零开始训练的 ResNet-50 持平——而它从未见过 ImageNet 的训练数据。

CLIP 的下游影响

CLIP 训练出的编码器成为了多模态 AI 的基础设施,被广泛用于下游任务:

CLIP 下游应用
文本输入"a cat on the moon"CLIP 文本编码器frozen文本嵌入D=768U-Net / DiTcross-attention生成图像Noisez ~ N(0,1)Stable Diffusion / DALL-EStable Diffusion 使用 CLIP 文本编码器引导去噪过程
  • 文本生成图像:Stable Diffusion 使用 CLIP 的文本编码器(后续版本切换到 OpenCLIP)将文本提示编码为 conditioning signal,通过 cross-attention 注入 U-Net/DiT 引导去噪。
  • 多模态 LLM:LLaVA (Liu et al., 2023) 冻结 CLIP 的视觉编码器 ViT-L/14,将其输出的 patch token 经过线性投影后作为 visual tokens 拼接到 LLM 的输入中,使 LLM 能”看到”图像。
  • 跨模态检索:由于图像和文本在同一向量空间中,可以直接用图像搜文本、文本搜图像,只需计算余弦相似度后做 nearest neighbor 检索。

局限与演进

CLIP 开创了视觉-语言对齐的范式,但也存在明显的局限性:

  1. 数据质量依赖:CLIP 的训练数据来自互联网爬取,存在噪声、偏见和有害内容。数据质量直接影响模型的偏见和公平性。

  2. 细粒度理解不足:CLIP 擅长全局语义匹配,但对于计数、空间关系等细粒度理解较弱(“two cats on a red table” vs “one cat under a blue table” 难以区分)。

  3. 分布式训练瓶颈:InfoNCE 损失需要在 batch 内计算所有 pair 的相似度,这要求跨 GPU 做 all-gather 操作,通信成本高。

后续工作在不同方向上改进:

  • ALIGN (Jia et al., 2021):证明了用更大规模(18 亿对)但更嘈杂的数据也能训练出强大的对齐模型,说明数据规模可以弥补数据质量。
  • SigLIP (Zhai et al., 2023):用 sigmoid 损失 替换 softmax,每个图文对独立计算二分类损失,避免了 all-gather 操作,大幅降低了分布式训练成本,同时保持了相当的性能。
  • EVA-CLIP:通过改进的训练策略和更大规模的 ViT,在 zero-shot 评测上持续提升。

总结

CLIP 的核心贡献是建立了一种通过自然语言监督来学习视觉表示的范式。它的成功取决于三个要素:

  1. 简洁的架构:双塔编码器 + 余弦相似度,概念上极其简单
  2. 规模化训练:4 亿图文对 + 超大 batch size 的对比学习
  3. 零样本泛化:文本提示即分类器,无需任务特定的训练

这种”对齐不同模态到共享空间”的思路,已经超越了视觉-语言领域,成为多模态 AI 的通用范式。