1. 写在前面
今天分享的一篇论文《LLM2CLIP: P OWERFUL L ANGUAGE M ODEL U NLOCKS
R ICHER V ISUAL R EPRESENTATION》, 2024年9月微软和同济大学的一篇paper, 是多模态领域的一篇工作,主要探索了如何将大模型融合到Clip模型里面来进一步提高视觉表征的性能。在本文中,提出了一种新颖的方法LLM2CLIP,它利用LLMs的力量来解锁CLIP的潜力。通过对LLM在说明文空间内进行对比学习微调,将它的文本能力提取到输出embedding中,大大提高了输出层的文本辨别性。然后,设计了一种高效的训练流程,在此流程中,微调后的LLM充当CLIP视觉编码器的强大教师。由于LLM的存在,现在能够整合更长且更复杂的说明文,而不受原始CLIP文本编码器上下文窗口和能力限制的影响,使Clip的能力更加的强大。
- 论文地址: https://arxiv.org/pdf/2411.04997v2
- GitHub地址: https://github.com/microsoft/LLM2CLIP/
大纲如下
- 1. 写在前面
- 2. 简单回顾下Clip模型
- 2.1 预训练
- 2.2 推理
- 2.3 思考
- 2.3.1 Zero-shot Transfer
- 2.3.2 Limitition (clip的不足之处):
- 2.3.3 总结
- 3. 引言
- 4. 方法
- 4.1 原生的LLMS不适合直接作为clip的文本编码器
- 4.2 关键训练:LLM学习用于图像说明文辨别
- 4.3 LLM2CLIP:LLMs与clip结合起来
- 4.4 概览和效率讨论
- 5. 实验
- 6. 总结
Ok, lets to!
2. 简单回顾下Clip模型
clip来自论文《Learning Transferable Visual Models From Natural Language Supervision》, 2021年OpenAI的工作。全称是Contrastive Language-Image Pre-training,顾名思义,这是一个基于对比学习的语言图像多模态学习方法。亮点是通过自然语言的监督信号学习一个迁移效果好的视觉模型
CLIP训练的目的其实主要还是获得通用的图像表征模型,因此在CLIP框架里,语言数据可以认为是作为监督信号存在的,类似图像分类任务中的类别信号,只是从一个one hot label扩展成了自然语言的形式。使用自然语言作为监督信号的好处是,自然语言信号更加灵活,可以支持扩展到zero-shot的推理,并且能够提供更加丰富的监督信息。
2.1 预训练
框架如下:
clip的预训练过程:
- 数据准备: 图片和语言的数据对,一张图片过一个编码器得到向量, 一个句子过编码器得到向量,然后进行配对
- 上面图片里面N张图片,N个句子,最后得到了 N 2 N^2 N2的对, 对角线上的是配对成功的,label为1, 其他 N 2 − N N^2-N N2−N个数据是负样本
- 有了标签, 就可以做自监督的对比学习进行预训练了,即把文本-图像match的距离拉进, 把不match的距离尽量拉远拉大
- clip用了4亿个(text, image)对进行的预训练,多模态的对比学习
- 可作zero-shot推理
伪代码:
# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images
# T[n, l] - minibatch of aligned texts
# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter
# extract feature representations of each modality
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]
# joint multimodal embedding [n, d_e]
# 投射层的参数w_i和w_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)
# scaled pairwise cosine similarities [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)
# symmetric loss function
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是这么干的:
- 以英文维基百科中出现至少 100 次的所有单词为基础构建词集,并增加了双词组合和所有 WordNet 同义词
- 爬取网上的数据,试(图像,文本)数据对中的文本包含词集中的一个词
- 为了尽可能覆盖广泛的视觉概念,对结果进行平衡,每个概念最多包括 20,000 个(图像,文本)对
- 构建的 WIT(WebImageText) 数据集包含 4 亿个(图像,文本)对
WIT数据集比之前很多多模态数据集都大,包含的内容也更丰富。
在clip的训练框架中,text encoder和image encoder的地位是对称的。
和之前的对比学习一样,为了提升学习的效果,负样本需要尽量多,因此实验中使用32,768的batch size。
理论上,text encoder和image encoder可以是任意模型。OpenAI选择了ResNet/EfficientNet-style的模型和几个ViT(ViT-B/32、ViT-B/16、ViT-L/14)作为image encoder进行实验,而text encoder则是使用GPT-2的结构,最后一层的 [EOS] token 就作为text representation。
训练中,image encoder和text encoder都是随机初始化的,不需要预先训练。
完成预训练之后,一个常规的用法是基于image encoder进行微调,包括仅训练classifier,和完整模型的训练。
2.2 推理
预训练完之后进行推理:
- clip是如何做分类的呢? 下图拿了imagenet的1000个类别演示了过程, 1000个类别,套用了一个prompt template,把单词变成一句话
a photo of a {object}
,然后过text encoder得到1000个向量 - 给图片做分类的时候,把图片过预训练好的image encoder,然后得到向量,与1000个向量做余弦相似度,就能得到分类结果了
clip的魅力就是这个prompt template, 摆脱了categorical label的限制,可以预测出任意自己定义的类别,而不是要事先定义好类别。比如上面那1000个类里面,我们可以自己添加没在1000类的其他类别,然后给出自己场景的图片,就可以预测出自定义的类别,非常灵活。 这是clip的强大之处。
- 不论是在训练还是推理,都不需要有一个提前定好类别限制的列表,任意给照片,都可以通过给模型喂不同的文本句子,从而知道图片里有没有感兴趣的物体
- clip不光能识别新的物体, 并且把视觉和文本语义联系起来的能力也非常强
所以文本监督信号,帮助训练一个视觉模型是非常有潜力的,能更好的进行zero-shot样本的学习。
2.3 思考
2.3.1 Zero-shot Transfer
openAI是一个gpt化的公司,但这次clip为啥要用对比学习呢?
- 给定一张图片,去预测文本的话,这是一个很难的任务,因为一张图片,可以有很多很多文本,所以如果用预测性的任务去训练这个模型的话,就有太多可能性,模型训练很慢
- 如果把预测性任务转成一个对比任务,判断这个图片和文本是不是配对,任务就简单了
- 把预测型的目标函数换成对比型的目标函数,训练效率提升了4倍,并且听起来要合理一些
zero-shot transfer的动机:
- 之前的自监督或者无监督学习的方法,主要研究特征学习的能力,目标是学习一种泛化性比较好的特征,即使学习到了很好的特征,应用到下游数据的时候, 还是需要标签的数据做微调,但这里面可能还有各种个样的问题,比如下游数据不好收集等,比如distribution shift的问题
- 如何能训练一个模型, 接下来就不需要训练或者微调呢?, 这就是zero-shot transfer的动机
- 借助文本,学习好了一个很大的模型之后,就可以用文本作为引导,灵活的做zero-shot的迁移学习, 如何用文本更好的引导,这就是prompt engineering
prompt engineering和prompt ensembling(提示工程): 如何用文本加以引导,让模型更好的做zero-shot迁移呢
- 为什么做?
- 文本本身有多义性,如果用一个单词去做Prompt,很容易出现歧义性的问题
- 另外就是在做预训练的时候, 图片匹配的都是文本,很少是一个单词,所以推理的时候,也不应该每次都是一个单词,会出现distubution gap的问题,所以在真正推理的时候,使用了prompt的方法, 把单词变成了一个句子A photo of a {label}, 这是一个模板
- 如果你明确做什么任务了,比如知道标签里面的图片都是动物,那么此时提示工程里面,可以再用语言加以限制,把解空间进一步缩小,就很容易得到正确答案。所以提示工程很重要。
- prompt ensembilng
- 用多种不同的提示模板作多次推理,然后把结果综合起来, 多个提示模板尽量详细描述到每个物体的具体特征
2.3.2 Limitition (clip的不足之处):
- clip zero-shot模型在imagenet数据集上和resnet50打了个平手,但resnet50根本不是目前的start-of-art模型,和当前的vit, mae等比,clip依然还有很大的差距,差了10几个点
- 有些数据集上的zero-shot结果也并不好,比如细分类数据集,效果也是低于resnet50这个基线网络的
- clip无法处理特别抽象的任务,比如图片里到底多少个物体,区分当前这一帧是正常还是异常,擅长分类物体,但不了解正常和异常的概念,什么叫安全
- 自然图像的分布迁移,模型相对稳健,泛化还行,但是推理时,如果数据和训练的数据差的真很远,out of distrubtion了,clip的泛化性可能也很差, clip模型在mnist数据集上表现不好,原因是因为clip训练的4亿样本里面,没有和mnist数据集长的像的,这时候对于clip模型,也无能为力。
- 虽然clip可以作zero-shot的分类任务,但还是从给定的类别中做的选择,相比而言,一种更灵活的方式,直接生成图像的标题,一切让模型自己处理,可以生成新的输出,而不是像clip一样,给定新类别,然后去判断是不是这种, 也就是作者最终还是偏向gpt化的这种(生成式模型), 后面是不是可以把对比学习函数和生成式函数结合起来, 既有生成式模型的灵活性又有对比模型的高效性
- clip模型对数据的利用不是很高效,需要大量大量的数据投喂,后面能不能减少数据量呢? 一种方式是数据增强,一种是自监督,一种是伪标签
- 虽然作者说zero-shot上clip效果好,但是在下游任务反复测试的时候,已经无形带入了偏见,不是单纯的zero-shot了
- 预训练的数据是从网上爬取的,没有经过任何的清洗和审查,所以可能会带有社会偏见
2.3.3 总结
clip这篇paper最大的贡献就是打破了之前固定类别标签的训练推理范式,不需要提前做类别限制了, 处理数据方便,训练模型方便,推理的时候也很方便,可以zero-shot的做各种分类任务。
价值衡量:
- 新意度100分,打破固定类别标签做法,放飞视觉模型的训练过程
- 有效性100分, 泛化性能,准确性能
- 问题规模100分,一个模型就能解决大部分的分类任务,而且是zero-shot解决,问题本身很大,利用好这个模型,在其他领域稍微适配,就能把别的领域也做掉,很强。
3. 引言
CLIP是当今最重要的多模态基础模型之一。它通过在大规模图像-文本对上采用简单的对比学习损失,将视觉和语言信号对齐到一个共享特征空间中。
- 作为一个检索器,CLIP支持广泛的任务,包括零样本分类、检测、分割以及图像-文本检索。
- 作为特征提取器,它几乎在所有跨模态表示任务中占据了主导地位,例如图像理解、视频理解以及文本到图像/视频的生成。
- 像LLaVA和Qwen-VL这样的工作就利用CLIP的image-encoder为文本模型获取视觉特征
- 像Stable Diffusion和DALL·E 2这样的模型则使用CLIP的text-encoder为视觉模型提取文本特征。
是什么让CLIP如此强大,尤其是在作为视觉编码器方面?其力量的核心在于它无与伦比地将视觉预训练与自然语言——人类知识的载体——相匹配的能力。与早期仅用几个词训练的视觉模型不同,CLIP是基于网络规模的数据,并使用丰富的描述性文本进行训练。与语言的这种对齐使CLIP与众不同并解锁了其巨大的潜力。
然而,自从CLIP推出以来,大型语言模型(LLMs)已经取得了显著的进步。像GPT-4和Llama这样的模型现在展现了非凡的语言能力,但这些进步并没有转化为视觉表示学习方面的相应改进。这促使人们提出一个问题:是否可以利用LLMs的能力进一步改进多模态表示学习?
所以,本文的主要工作是,用大型语言模型(LLMs)来使CLIP学习更加强大、精细且丰富的视觉表示, 突破clip模型text-encoder的两个限制:
- 在长文本和复杂文本上的局限性
- 受限于模型大小、有限的上下文长度,并且主要在图像说明数据上进行训练,缺乏接触多样世界语料的机会, 表达丰富信息的机会
那么,一个直观的想法就是,我直接用LLMs替换掉text-encoder行不行, 答案是不行, 原因如下:
在CLIP所采用的跨模态对比学习框架中,文本编码器在共享潜空间中作为一组知识锚点,指导视觉编码器与人类对物理世界的知识对齐。
这些知识锚点的结构、丰富性和辨别性对于视觉模型的有效性至关重要。
相比之下,LLMs主要设计用于预测下一个单词,而不是生成其所包含知识的明确表示。它们的文本理解能力和开放世界知识潜藏于模型内部,而不是体现在输出embedding中,这使得它们难以以与CLIP文本编码器相同的方式明确使用。
因此,使用LLMs作为文本编码器可能不会产生线性可分离的特征,这对于有效的特征对齐至关重要。
这个意思就是,LLMs在训练的时候是预测下一个词的任务, 这样训练出来的模型可能觉得相邻的词,要比描述的图片的相关性更大。
后面论文里面还用实验证明了这一点。
4. 方法
论文中的方法论贡献有三个方面
- 首先,我们设计了实验来分析阻止大型语言模型(LLMs)直接参与多模态表示学习的关键原因——即它们输出特征的弱辨别性。
- 其次,我们引入了说明文对比微调方法,显著提高了特征的辨别性。
- 第三,我们开发了LLM2CLIP训练框架,已被证明是一种有效利用LLMs来大幅提升预训练CLIP模型性能的方法。
整个框架如下:
4.1 原生的LLMS不适合直接作为clip的文本编码器
引言中提到了这一点,这里作者设计了实验来证明这个观点。
-
实验背景:尽管LLMs表现出强大的文本理解能力,但直接用作文本嵌入模型却很困难。这是因为它们的知识封装在模型内部,而它们的输出特征严重偏向于单个词语的预测。作为生成模型,它们并未经过训练以确保输出特征的良好线性可分性,这使得它们在解释CLIP说明文时效果不佳。CLIP中的跨模态对比学习要求每个模态都具备强内部辨别性。
-
实验设计:为了评估各种语言模型在文本辨别性方面的有效性,并检验原生LLM输出特征是否确实难以区分图像说明文,我们引入了一个新度量:MS COCO说明文检索准确率(CRA)。MS COCO是一个广泛使用的多模态数据集,包含超过33万张图片,每张图片配有五个说明文。这些说明文由不同的注解者编写,提供了每张图片的多样化描述。在我们对MS COCO验证集的评估中,我们只使用每张图片的前两条说明文,并将同一图片的说明文视为正样本对,而所有其他的说明文作为负样本。随后我们进行说明文到说明文的检索,并使用不同的语言模型评估Top-1准确率,将其结果定义为其CRA得分。较高的CRA得分表明语言模型在图像说明文上的辨别性更好。
-
使用纯LLM得到的CRA得分仅为18.4%,表明大多数说明文在输出空间中不能很好地分离。事实上,如图2所示,距离相近的说明文可能完全不相关。然而,来自原始最先进CLIP模型的文本编码器达到了66%的CRA得分,证明了原生LLM输出特征在说明文辨别性上的不足。因此,直接应用LLMs于CLIP模型训练是具有挑战性的。
上面的核心就是说: LLMS训练的时候是用海量的文本对,预测下一个单词的任务训练出来的,此时大模型学习到的语义特征本质上都存到了模型的内部, 输出层面上仅仅是对于下一个单词的预测。而clip模型训练的时候, 是通过图片+对图片的描述训练出来的,这时候的text_encoder更关注于图片上的关键信息。
比如上面这一张图片里面有狗, 训练clip的时候,可能标注的描述是狗,小动物, 小宠物等信息,clip的text encoder就会学到,知道这张图片里面的狗,动物和宠物都指的是狗。而LLMs是不知道的,LLMs训练的时候,可能狗和猫经常出现在一起, 晴天和狗出现在一起, 这时候LLMs学出来的特征空间与clip的text encoder学出来的特征空间差距是很大的,所以本质上我觉得是这两个text encoder的语义空间不同, 直接用LLMs替换clip的text encoder是不合适的。
那么怎么能更好的用LLMs替换呢?
4.2 关键训练:LLM学习用于图像说明文辨别
目标: 对LLM的token输出进行微调,以便更好地捕捉能够区分图像说明文的特征。
思路:提高LLM输出特征在说明文文本上的辨别性的过程相当直接,需要使同一图像的不同说明文之间的距离更近,而不同图像的说明文之间距离更远。因此,我们对LLM的输出特征应用说明文对比(CC)微调,将同一图像的不同说明文视为正样本,其余说明文视为负样本。
数据集:为了获得足够的多样化描述,我们使用了ShareCaptioner(Zheng等人,2024;Chen等人,2023)修改过的CC-3M(Sharma等人,2018)数据集,它为每张图片提供了原始说明文和增强的密集说明文。这些可以被视为正样本对。我们遵循了LLM2Vec(BehnamGhader等人,2024)的训练方法,首先扩展LLM的注意力机制为双向注意力,并使用掩码下一位令牌预测(MNTP)进行初始化以获得更好的结果。
训练方法:
- 首先,我们将LLM的因果注意力机制转换为双向注意力,不再需要保持其生成能力,而是让它作为编码器工作。由于不需要自回归训练,转向双向注意力提高了其捕捉上下文信息的能力。
- 其次,我们采用MNTP来训练新增加的双向注意力机制,提供了一个强大的初始化。对于给定的N个令牌序列,我们掩盖一部分并预测它们的值,类似于BERT(Devlin等人,2018)。但是,与BERT不同,我们通过预测被掩盖令牌之前的令牌来适应LLM的本质。在图像说明文和纯文本上以相同的权重进行训练。除了CC-3M之外,我们还使用Wikitext-103(Merity等人,2016)数据集来保持LLM的文本能力,防止偏离其原有的优势。
- 最后,我们进行实际的说明文对比微调,使用监督的SimCSE损失函数将同一图像的说明文拉得更近,并将不同图像的说明文推得更远。使用两种提示模板:
- “给定一个说明文,检索一个详细的关联说明文”和“给定一个详细说明文,检索一个简短的相关说明文”,这些模板被添加到查询(原始或密集说明文)前面,以检索相应的密集或原始说明文。
- 同样,我们使用Springer等人(2024)整理的150万对普通文本数据集来维持在纯语言任务中的强劲表现。
- 所有训练都高效地使用LoRA进行,并在仅仅一个epoch内完成,确保了较低的计算成本。
显著的结果随之而来:在CC-3M上仅对LLM进行一个epoch的说明文编码器微调后,Llama-3 8B的CRA得分从18.4%跃升至73.0%,随后的实验表明,在CC微调之后,LLM最终释放了其强大的能力,显著提升了之前最先进CLIP模型的表现,与未进行CC微调的结果形成了鲜明对比。这一突破揭示了LLMs在CLIP训练中的潜力,并消除了利用LLMs推进视觉基础模型的一个主要障碍。
4.3 LLM2CLIP:LLMs与clip结合起来
通过对LLM的上述改造,我们现在得到了一个非常适合CLIP训练的超级文本编码器。
下一步是将这个LLM与预训练的最先进CLIP视觉编码器结合起来,重构一个更强大的跨模态特征空间。
如图1所示,在LLM2CLIP训练阶段,我们冻结了LLM的梯度以保留其固有能力,主要有两个原因。
- 首先,这大大减少了微调的计算成本和内存占用。CLIP训练需要非常大的批量大小以保持负样本的有效性。分配内存给LLM可能会损害CLIP的性能。
- 其次,通过冻结LLM,我们确保它从大规模语料库中获得的开放世界知识在多模态对齐过程中保持完整。
为了补偿被冻结的LLM,并受到如FuseMix(Vouitsis等人,2023)和APE(Rosenfeld等人,2022)等方法的启发,我们在LLM之后引入了几个新的线性层作为适配器。这些层作为可学习参数,以改善LLM与CLIP视觉编码器之间的对齐。遵循CLIP的原始设计,我们也使用了一个投影层来对齐两个编码器的维度,促进使用CLIP损失函数进行训练。
借助这一强大的基于LLM的超级文本编码器,在CLIP的语言理解能力上实现了质的飞跃。LLM的开放世界知识使CLIP视觉编码器能够学习到更多结构化且全局知情的视觉表示,这些表示与人类知识对齐。
此外,这种方法使我们能够充分利用高质量、长且密集的说明文数据集,而无需进行任何特殊的架构调整,这是以前的工作如DCI、DreamLip和Recaption难以有效利用的。LLM2CLIP使任何现有的最先进CLIP模型变得更加出色,显著超越了先前的表现。
4.4 概览和效率讨论
我们提出了LLM2CLIP作为一种方法,能够有效地将大型语言模型(LLMs)融入到CLIP训练中,利用LLMs的能力显著增强跨模态表示学习的效果。在实验中,我们评估了包括10亿参数和80亿参数的Llama以及120亿参数的Mistral-Nemo在内的大型语言模型。尽管将如此庞大的LLMs纳入进来似乎会大幅增加CLIP训练的计算负担,特别是考虑到CLIP本身就是一个计算密集型的任务,需要较大的批量大小。然而,我们提出的LLM2CLIP异常轻量化。其训练开销几乎与微调原始CLIP模型相同,仅有极少的额外成本,但LLM提供的监督要强大得多。
在此,我们强调一些显著提升训练效率的设计细节:
-
在说明文对比微调阶段,我们对LLM采用了LoRA训练。即使是120亿参数的LLM,使用512的批量大小训练也只需要大约70GB的GPU内存,这意味着可以在单个拥有80GB内存的8个A100 GPU节点上运行。Lora训练微调和普通训练微调拿文哲老师的一个图来看:
-
. 在LLM2CLIP阶段,我们冻结了LLM的梯度,只训练可学习的适配器、CLIP原有的视觉编码器以及两个投影层。额外的可训练参数数量大致相当于原始CLIP中的参数数量,从而最小化了开销。为了进一步降低使用LLM的推理成本,我们预先从训练数据中提取所有的文本特征并将它们存储在内存中。这样即使LLM提供了强大的文本监督,训练期间的内存和计算成本也几乎与标准CLIP训练保持一致。
例如,当我们使用集成有常见EVAViT-L/14-224的Mistral-Nemo* 12B模型训练LLM2CLIP时,在8个H100 GPU上使用4096的批量大小,每个GPU的内存使用量仅为30GB,并且整个训练过程仅需9小时。尽管训练成本如此高效,LLM2CLIP还是在下游任务中带来了变革性的改进,比如长短文本检索、跨语言检索以及LLAVA训练。
通过这样的设计,LLM2CLIP不仅提高了CLIP模型在多模态任务上的性能,而且保持了相对较低的训练成本,使得即便是资源有限的研究团队也能参与到先进的多模态研究当中。这种方法展示了如何巧妙地结合现有技术,以最小的代价实现最大化的性能增益。此外,它也为未来的研究提供了参考,如何将强大的语言模型整合到其他视觉和多模态任务中去。
5. 实验
实验部分可以参考这篇文章, 不是我这里整理的重点。直接整理下实验结果:
- 直接用原始的LLM替换Clip的文本编码器有害
- 提高LLM输出特征的辨别性是将LLM与Clip集成的关键, 为了增强辨别性, 用了说明文对比微调
- LLM2Clip使预训练的SOTA Clip更加出色
- LLM使英文clip在没有接触中文数据的情况下学会中文, LLM的知识迁移能力能应用在clip中, 这个还挺有意思的
- LLM2CLIP可以提升VLLM的性能。。Llava将CLIP视觉编码器整合进LLM中,用于多模态指令学习,这意味着视觉编码器的质量可以显著影响Llava的性能。我们将原始CLIP与经过我们LLM2CLIP微调增强的版本进行了比较,并按照Llava官方实现的方式运行了两个版本的实验,以确保公平比较。结果显示,在超过87.5%的基准测试中,我们取得了实质性的性能提升,其余基准测试的结果也非常接近。这表明LLM2CLIP在复杂的图像推理及相关任务上具有潜力。
6. 总结
最后总结下这篇文章做的事情:
参考:
- 多模态入门–CLIP
- LLM2CLIP: 强大的语言模型解锁更丰富的视觉表示
- 李沐老师带读clip论文