赞
踩
论文地址:https://arxiv.org/abs/2103.00020
CLIP(Contrastive Language-Image Pre-training)是OpenAI提出的一种新颖的预训练模型,旨在通过对大规模图像-文本对的对比学习,使模型能够理解丰富的视觉概念和自然语言描述。这种方法的核心优势在于它不需要手动标注的数据,而是直接利用现有的文本和图像进行学习。
CLIP由两个主要组件组成:一个视觉编码器和一个文本编码器。视觉编码器处理输入的图像,文本编码器处理相关的文本描述。这两个编码器在训练过程中共同学习,目标是使得相对应的图像和文本表示在向量空间中尽可能接近。这种训练策略被称为对比学习(Contrastive Learning)。
伪代码
# 使用图像编码器对输入图像I进行编码,得到图像特征表示I_f
I_f = image_encoder(I) # [n, d_i] 图像编码,其中n是图像数量,d_i是图像特征的维度
# 使用文本编码器对输入文本T进行编码,得到文本特征表示T_f
T_f = text_encoder(T) # [n, d_t] 文字编码,其中n是文本数量,d_t是文本特征的维度
# 通过点积和权重矩阵W_i将图像特征投影到多模态嵌入空间,并进行L2归一化
I_e = l2_normalize(np.dot(I_f, W_i), axis=1) # [n, d_e],d_e是多模态嵌入空间的维度
# 通过点积和权重矩阵W_t将文本特征投影到多模态嵌入空间,并进行L2归一化
T_e = l2_normalize(np.dot(T_f, W_t), axis=1) # [n, d_e]
# 计算图像特征和文本特征之间的点积,得到成对的余弦相似度,并乘以一个温度参数t以缩放相似度
logits = np.dot(I_e, T_e.T) * np.exp(t) # [n, n],表示n个图像特征与n个文本特征之间的相似度
# 定义损失函数,这里使用的是交叉熵损失。对于每个图像特征,计算其与所有文本特征的交叉熵损失
labels = np.arange(n) # 创建一个与图像数量相同的标签数组,用于损失计算, 主对角线上是正样本,其他位置都是负样本
loss_i = cross_entropy_loss(logits, labels, axis=0) # [n]
# 对于每个文本特征,计算其与所有图像特征的交叉熵损失
loss_t = cross_entropy_loss(logits, labels, axis=1) # [n]
# 计算最终的损失值,它是图像和文本损失的平均值
loss = (loss_i + loss_t)/2 # 计算平均损失
零样本学习:CLIP的一个显著特点是它能进行所谓的“零样本学习”(Zero-Shot Learning),即在没有看过特定任务样本的情况下完成该任务。例如,即使CLIP在训练过程中从未接触过某个特定的图像分类任务,它也能根据任务描述理解并执行该任务。
自然语言理解:CLIP模型通过对大量的图片-文本对进行预训练,学会了将图像内容与自然语言描述联系起来。这意味着CLIP可以理解和处理各种形式的文本输入,如指令、问题或任何形式的描述。
广泛的应用:由于其通用性,CLIP可以被应用于各种视觉任务,包括但不限于图像分类、对象检测、图像生成和更多。它也被证明在多个公开数据集上超越了传统训练模型的性能。
CLIP 用了七个加速器年,TPU V3 /天,意思就是用一个TPU V3去训练CLIP,要跑七年。
两个loss
loss1:文本损失
loss2: 图像损失
total_loss: (loss1 + loss2)/ 2
非线性的投射层只是用来适配单模态学习,当涉及多模态时,线性和非线性投影基本没有区别
目前基于 Transformer 的模型基本用混合精度训练
推荐博文: https://lilianweng.github.io/posts/2021-09-25-train-large/
这是用在微调或者预推理的时候用的方法
如果只是一个单词去做提示词的话会有两个问题
作者使用模板句子的方式来解决这个问题,也就是一句话只替换要表达的那个名词就可以了,例如"A photo of a remote ",这里 ‘remote’ 是一个名词,自然不会学到形容词“遥远的”那个意思,这样就巧妙的解决上面提到的那两个问题;
Linear prob 是一种使用线性分类头的方式,只有最后一层F是可以训练的,其他层都会冻住,这样能准确反映出预训练模型的好坏
1.为了研究和数据集无关的训练方式
2.基本不用调参
数据泛化性:模型的性能依赖于数据集的泛化能力。由于CLIP的数据集主要来自互联网,可能包含社会偏见,这也可能反映在模型预测中。
数据局限性:尽管CLIP通过数据增强和自训练(伪标签)尝试减少数据需求,但其性能测试和参数调整依然基于特定数据集,存在局限性。
Zero-shot vs. Few-shot:在某些情况下,提供少量训练样本(如Few-shot learning)的效果不如不提供训练样本(Zero-shot learning)的效果好,这反映了CLIP在处理新任务时的灵活性。
CLIP通过其创新的对比学习框架,实现了对图像和文本的深层次理解,并在多种视觉任务上展现了出色的迁移能力。它的出现打破了固定类别训练的传统范式,使得处理数据、训练模型和进行推理更为方便。CLIP特别适用于零样本学习场景,能够在没有特定训练样本的情况下进行多种分类任务。尽管存在数据泛化性和局限性的挑战,CLIP依然是深度学习和CV领域的一个里程碑式的进展。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。