OpenAI打破文本和图像次元壁,提出基于对比学习的多模态预训练模型CLIP

OpenAI 打破了自然语言与视觉的次元壁,推出了一个连接文本与图像的神经网络模型CLIP

相关资料

CLIP预训练阶段(对比学习训练)

对比学习非常灵活,它只需要你一个正样本和负样本的定义,其他都是正常的套路

对角线上的是正样本,其他的都是负样本。上图共有N个正样本和 N ∗ ( N − 1 ) N*(N-1) N(N1)个负样本。有了正负样本,模型就可以用对比学习的方式训练起来了。完全不需要任何手工的标注。

OpenAI专门收集了一个数据集,里面有4亿个图片和文本的配对,这也是为什么CLIP这个预训练模型能那么强大的原因之一。作者用4亿对来自网络的图文数据集,将文本作为图像标签,进行训练。这个数据集称为WebImageText(小红书的笔记其实天然有这种图片和文本的配对关系,因为通常来说它里面的笔记图片和文本相关性是比较高的,小红书推荐系统的笔记多样性用到了CLIP模型)

# image_encoder - 残差网络 或者 ViT
# text_encoder - CBOW 或者 文本Transformer
# I[n, h, w, c] - 训练图像
# T[n, l] - 训练文本
# W_i[d_i, d_e] - 训练图像生成的特征向量
# W_t[d_t, d_e]  - 训练文本生成的特征向量
# t - softmax的温度(temperature)参数

# 提取多模态的特征
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]

# 多模态特征向特征空间的映射
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)

# 计算余弦相似度
logits = np.dot(I_e, T_e.T) * np.exp(t)

# 构建损失函数
labels = np.arange(n)
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t  = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2

在这里插入图片描述

CLIP预测阶段

CLIP如何做zero shot推理?引入Prompt思想。

在预测时,如果直接用单词作为句子,过文本特征提取器的话,会导致跟训练阶段的模式不一致(训练阶段看到的一般都是一个句子),导致效果下降。

作者提出的预测过程非常巧妙:

  • 当来一张新图片,先过图片特征提取器,得到图片向量表征 I 1 I_1 I1,然后跟所有的文本向量表征 T 1 , T 2 , . . . , T N T_1, T_2, ..., T_N T1,T2,...,TN去算余弦相似度,然后选择相似度最高的那个句子,把那个句子里面的类别单词,作为分类的结果。

CLIP彻底摆脱了categorical label的限制

之前的模型,如ResNet101,需要事先指定要1000个分类标签,然后进行模型训练和预测,并且来一张新的图片,模型只会去预测这种图片最像这1000个类别中的哪一个。

CLIP彻底摆脱了categorical label的限制,也就是在训练和预测时,我都不需要有提取定好的类别列表(如CIFAR10的10个类别标签)。任何给一张图片,如奥特曼,我只要在Prompt文本里去加入一些自己想的类别(如三轮车、奥特曼、马铃薯),然后模型就能预测这种图片是不是我感兴趣的物品。

CLIP的迁移效果很强

CLIP学习到的语义信息非常强大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捡起一束光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值