CLIP模型手算实测:AI胶体性能精准对比

2026-05-31阅读 0热度 0
人工智能
好的,没问题。作为一名在深度学习和多模态领域“摸爬滚打”多年的老兵,我非常理解这种“技术干货”和“舒服阅读”之间的微妙平衡。下面,我将对这篇文章进行人性化重写,保留其硬核的技术细节,同时洗去AI的生硬感,让它读起来更像是一位同行在分享心得。 ---

我们先来聊聊一个经典的问题:传统的图像分类模型,像大家熟悉的 CNN,本质上其实是个“死记硬背”的高手。你给它看一百万张猫的照片,它能精准认出猫;但要是突然扔给它一张“米粉”的图,而训练集里从没见过这玩意儿——它直接就傻眼了。更让人头疼的是,每次想让它认识新物种,就得重新收集数据、打标签、重新训练一轮。这套流程下来,费时费力,扩展性也差得不行。

那么,有没有什么办法,能让模型像我们人类一样,面对未知的事物也能“心里有个谱”,猜个八九不离十?

OpenAI 的 CLIP 模型团队,就给出了一个很有意思的答案。他们的想法很直白:与其让模型死记图片的类别标签,不如直接让它在自然语言描述中学习图片的含义。毕竟,互联网上这类“一张图配一句话”的数据简直不要太多。于是,OpenAI 的研究者们从网上收集了 4 亿个图文对作为训练素材。每一份数据,就是一张图片加上一句简短的文字描述。有了这么大规模的数据,模型也许就能学会:图片里的视觉元素,和文字背后的语义,到底是怎么“对上号”的。

文本编码器

网络结构

项目官方数值对应结构图位置
模型总参数量63M完整文本塔
Transformer 堆叠层数12 层图左侧 12x,重复堆叠 12 次同一个模块
特征隐藏维度(宽度)d_model=512所有向量统一 512 维
注意力头数8 头Masked Multi Self Attention
最大文本序列长度77输入 [SOS]文本[EOS] 总长度
MLP 前馈中间维度10656Feed Forward 层
输入[SOS]词嵌入 → 位置编码Position Embedding
→ 12层Transformer块(掩码自注意力+残差→LayerNorm→FFN前馈+残差→LayerNorm)
→ 提取最后[EOS]token特征 → 输出文本特征

为了能手动推敲一下,我们来构建一个“迷你版”的 CLIP 文本编码器。它的结构和官方的完全一样,只是把数字缩小了方便计算:隐藏维度 d_model=2(官方的 512,逻辑一致)、Transformer 层数为 1 层(官方 12 层,只是重复 12 次这套计算)、注意力头为 1 头(官方 8 头,分 8 份再拼回来)、最大序列长度为 3 个 token(官方 77):[SOS]、cat、[EOS]、MLP 中间维度为 4(官方 10656,对应关系是迷你 2→4,官方 512→10656),最后把每个 token 转为 2 维向量。

然后加上位置编码 Position Embedding(固定位置向量)。

二者相加,就得到了 Transformer 的输入。

接下来是 Masked Multi Self Attention,也就是掩码多头自注意力。这里的“掩码”含义是:每个 token 只能看到它前面的 token,看不到后面的(这就是因果掩码)。

然后进行 LayerNorm 层归一化,再通过 Feed Forward 前馈网络。

最终用于图文对齐的文本特征,来源只有一个:最后一个 [EOS] token 的输出。

后续操作流程如下:

输入文字
   ↓
12 层 Masked Self-Attention (类 Decoder 结构)
   ↓
取最后 [EOS] 位置的输出 → 512 维
   ↓
可学习线性层 (512 → 512)
   ↓
L2 单位归一化
   ↓
最终文本特征向量 t̂  (模长 = 1)

图片编码器

网络结构

部分文本编码器图像编码器
架构Decoder(带掩码单向注意力)ViT Encoder(双向无掩码)
层数12 层12 层
隐藏维512512
FFN 中间维1065610656
全局特征来源最后一位 EOS token第一位 CLS token
原始空间语言私有空间视觉私有空间
投影层Text Projection WtImage Projection Wi
最终特征512 共享空间文本特征512 共享空间图像特征

具体流程如下:

原始图片
(224, 224, 3)
   ↓
切成 32×32 的 Patch,共 49 个
(49, 3072)        ← 49 个 patch,每个拉平是 32×32×3 = 3072
   ↓
线性投影 (3072 → 768)
(49, 768)
   ↓
+ 1 个 [CLS] token
(50, 768)
   ↓
+ Positional Embedding
(50, 768)
   ↓
× 12 层 Self-Attention
(50, 768)
   ↓
取 [CLS] 位置的向量
(768,)
   ↓
线性层 (768 → 512)
(512,)
   ↓
L2 归一化
(512,)            ← 最终图像特征 î

总结一下关键区别:图像编码器 = ViT Encoder,输出的是 CLS token;文本编码器 = Masked Decoder,输出的是 EOS token;然后各自通过投影层进入同一个共享空间,做归一化,再进行图文对比学习。

图文相似度计算

接下来这一步很关键:计算每张图片和每段文字之间的相似度。

假设一个 batch 里有 3 个图文对:

描述
图像 î₁一只猫
图像 î₂一只狗
图像 î₃一辆车

对应的文本是:

描述
文本 t̂₁"a cat"
文本 t̂₂"a dog"
文本 t̂₃"a car"

相似度矩阵

因为两个特征都做了 L2 归一化,所以可以直接用点积来表示余弦相似度:

在这个矩阵中,绿色的对角线位置就是正确的配对,其值应该尽量大;其余位置是负样本,值则应该尽量小。

乘以温度系数 τ

直接用原始相似度来训练可能会不稳定,所以 CLIP 引入了一个可学习的温度系数 τ,初始化为 0.07:

这个 τ 的作用是放大相似度的差异,让正样本更突出,负样本差距拉得更开。τ 越小,区分度越强;τ 越大,就越平滑。

双向对比损失(Contrastive Loss)

在 CLIP 的训练过程中,一个 Batch 包含 N 张图像和 N 段对应的文本。图像经过 ViT Encoder 编码,得到 N×D 的图像特征矩阵 image_features;文本经过 Masked Decoder 编码,得到 N×D 的文本特征矩阵 text_features。这两个矩阵是后续计算 N×N 相似度矩阵和双向对比损失的基础。

得到图文特征矩阵后,CLIP 通过矩阵乘法计算双向相似度:

  • 计算 图像对文本 的相似度矩阵 logits_per_image (形状 N×N),其中每一行代表一张图对所有文本的相似度得分;
  • 计算 文本对图像 的相似度矩阵 logits_per_text (形状 N×N),其中每一行代表一段文本对所有图片的相似度得分。

可以这样理解:上面的矩阵是“图找所有文”的相似度,下面的是“文找所有图”的相似度。这两个矩阵互为转置(行列互换),是完全对称的。

具体来说:上图把“图片匹配文本”视为一个“N 分类任务”,类别就是 batch 里的所有文本;下图把“文本匹配图片”视为另一个“N 分类任务”,类别是 batch 里的所有图片。这两个都是标准的交叉熵分类损失,合在一起就是 CLIP 的双向对比损失。模型的目标就是:让两个分类任务都能精准选中对角线上的正样本配对。

整个流程可以概括为:先计算图像 - 文本双向相似度矩阵;设定分类标签 targets,对角线位置为正样本;分别对两个相似度矩阵计算交叉熵损失;CLIP 最终的损失 = 图像方向损失 + 文本方向损失。

CLIP 推理阶段:Zero-Shot 预测

到了推理阶段,CLIP 的能力就体现出来了。对于一张图片,它会和所有候选的类别文本描述(比如“A photo of a dog.”)计算余弦相似度,然后取 argmax,找出得分最高的那个类别。最终输出就是自然语言的类别,比如 “A photo of a dog.”。

CLIP 的应用

聊完了原理,我们来看看 CLIP 到底能用在哪些地方。

图文检索

这是最直观的应用场景。比如,你可以用自然语言查询:

文本查询检索结果
"A bicyclist with a blue shirt"找到了路口骑蓝色上衣自行车的人
"A white car"找到了画面中央的白色轿车
"A truck with the text 'JCN'"找到了带有 JCN 字样的货车

它的输入是两路:文本端是一条自然语言查询,在线实时输入;图像端是监控视频拆出的所有图像帧(数据库),通常离线预先编码好。输出就是数据库中与查询文本余弦相似度最高的那张图像。

其他的应用

当然,CLIP 的应用远不止图文检索,它在多个方向上都发挥着重要作用:

应用方向一句话说明是否需要微调 CLIP
零样本图像分类不用训练,直接用文字描述类别给图片分类❌ 零样本,完全不用微调
图文检索文字搜图片、图片搜文字❌ 零样本推理
开放词汇检测分割识别任意新词物体,不用标注训练⚠️ 少量微调下游头
AIGC 生成打分引导控制文生图图文匹配度❌ 直接复用特征
视频动作识别零样本识别视频动作⚠️ 简单下游适配
多模态大模型底座几乎所有图文大模型的基础组件✅ 后续二次开发微调

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策