首页 > 教程攻略 > ai资讯 >聊聊SORA背后技术之一(二):CLIP

聊聊SORA背后技术之一(二):CLIP

来源:互联网 时间:2026-08-01 13:44:05

CLIP(Contrastive Language-Image Pre-training)是多模态领域的标志性模型,后来作为基础组件被广泛用于DALL·E 2、Stable Diffusion等重要的文生图大模型中。可以说,它是跨模态理解与生成的一个关键节点。下面,我们从原理层面拆解一下CLIP的核心设计。

论文地址:https://arxiv.org/pdf/2103.00020.pdf
项目地址:https://github.com/openai/CLIP

核心思想

CLIP的训练过程可以概括为三个循序渐进的阶段:

  1. 从训练集中随机取出一张图片和对应的标签文本,分别用编码器处理。

    这里的图像编码器和文本编码器在主体结构上是对称的,不过图像侧多了一步patch embedding(将图片切分成小块并嵌入向量),后面会详细说明。
  2. 将Text Encoder和Image Encoder输出的embedding向量,通过余弦相似度进行对比。

    这一步骤的目标是判断当前随机抽取的文本-图片对是否匹配。
  3. 根据计算出的损失进行梯度反向传播,迭代优化模型参数。

训练完成后,对于配对的图片与文本,两个编码器会输出非常相似的embedding向量,余弦相似度接近1;而不匹配的组合,余弦相似度则会接近于0。在实际应用中,正是利用Text Encoder和Image Encoder的输出向量,作为跨模态任务的沟通桥梁。

CLIP损失函数

上图为前向训练过程:需要将N个标签文本与N张图片两两配对,计算所有可能的文本-图片组合的余弦相似度,形成一个N×N的相似度矩阵。其中,矩阵对角线上的元素对应真正匹配的文本-图片对(即N个正样本),其余均为负样本。CLIP的训练目标很明确——最大化正样本的余弦相似度(即对角线上的向量点积),同时最小化负样本的余弦相似度。

完成训练后,输入配对的图片和标签文本,两个编码器输出相似embedding,余弦相似度接近1;不匹配的则接近0。以下是核心代码实现:

# cosine similarity as logits
logit_scale = self.logit_scale.exp()
logits_per_text = torch.matmul(text_embeds, image_embeds.t()) * logit_scale
logits_per_image = logits_per_text.t()

loss = None
if return_loss:
    loss = clip_loss(logits_per_text)

if not return_dict:
    output = (logits_per_image, logits_per_text, text_embeds, image_embeds, text_outputs, vision_outputs)
    return ((loss,) + output) if loss is not None else output

总结

CLIP模型的优势非常突出:

  • 多模态学习:

    能同时理解文本与图像,在多种跨模态任务上表现出色。
  • 零样本学习能力:

    在大规模预训练后,模型具备很好的泛化能力,即使面对未见过的类别也能识别。
  • 语义理解:

    通过学习文本与图像之间的深层语义关联,CLIP能更精准地执行基于文本提示的图像任务。

当然,它也存在一些短板:

  • 计算资源需求高:

    模型规模大、复杂度高,训练和部署都需要大量算力和存储,成本不低。
  • 数据依赖性:

    虽然效果惊艳,但性能仍然严重依赖预训练数据的质量和多样性,在某些特定领域或语言上泛化可能不够理想。
  • 对抗攻击:

    和许多深度学习模型一样,CLIP对输入微小的扰动比较敏感,容易受到对抗性攻击,可能导致预测结果不稳定。

总体来看,CLIP依然是当前多模态领域的标杆之作。作为SORA、Stable Diffusion等模型的重要基础,值得花时间深入理解。