目录
[(1)对比预训练(Contrastive pre-training)](#(1)对比预训练(Contrastive pre-training))
[(2)从标签文本创建数据集分类器(Create dataset classifier from label text)](#(2)从标签文本创建数据集分类器(Create dataset classifier from label text))
[(3)用于零样本预测(Use for zero-shot prediction)](#(3)用于零样本预测(Use for zero-shot prediction))
[Paper 中提到"We train CLIP from scratch without initializing the image encoder with ImageNet weights or the text encoder with pre-trained weights."为什么?](#Paper 中提到“We train CLIP from scratch without initializing the image encoder with ImageNet weights or the text encoder with pre-trained weights.”为什么?)
为什么这种情况可能是由于Zero-Shot与Few-Shot方法之间的一个重要区别有关?
[2.如何理解"Zero-shot CLIP匹配4-Shot逻辑回归表现"?](#2.如何理解”Zero-shot CLIP匹配4-Shot逻辑回归表现“?)
一、引言
今天我们选择精读的论文是2021年OpenAI提出的图文对齐模型,在零样本分类等任务表现优异,而这篇论文也是多模态大模型领域的一篇经典论文。论文原文:Learning Transferable Visual Models From Natural Language Supervision(CLIP)
二、方法概览与解读
CLIP 方法概览------从对比预训练到零样本预测
CLIP通过自然语言监督,极大地提升了模型的泛化能力。整个流程分为三个主要部分:
-
对比预训练(Contrastive pre-training)
-
从标签文本创建数据集分类器(Create dataset classifier from label text)
-
用于零样本预测(Use for zero-shot prediction)
(1)对比预训练(Contrastive pre-training)
**Motivation:**是CLIP学习图像和文本之间对齐表示的关键,旨在让模型能够识别哪些图像和文本描述是相互匹配的。
关键模块与协作关系:
Text Encoder & Image Encoder
1)功能:
Text Encoder将输入文本(如图片描述)转换为其对应的特征向量(即文本嵌入T1,T2,...,TN)。同样,Image Encoder将输入的图像转换为其对应的特征向量(即图像嵌入I1,I2,...,IN)。
2)协作:
在预训练过程中,模型会接收一个包含 N 对(图像,文本)的批次数据。例如,批次中可能有图像 I1 和其对应的文本 T1,图像 I2 和 T2,以此类推。
相似度矩阵计算
1)功能:
图像编码器输出的图像嵌入 和文本编码器输出的文本嵌入
会被用来计算它们之间的余弦相似度(或点积)。这形成一个 N×N 的相似度矩阵。矩阵中的每个元素
表示第 i个图像和第 j个文本之间的相似度。
2)协作:
-
正样本对 (Positive Pairs): 矩阵的对角线元素(例如 I1⋅T1, I2⋅T2, ...)代表批次中真实匹配的(图像,文本)对。CLIP的目标是最大化这些正样本对的相似度。
-
负样本对 (Negative Pairs): 非对角线元素(例如 I1⋅T2, I1⋅T3, ...)代表不匹配的(图像,文本)对。CLIP的目标是最小化这些负样本对的相似度。
损失函数 (Symmetric Cross-Entropy Loss):
1)功能:
CLIP通过优化一个对称的交叉熵损失函数来训练这两个编码器。这个损失函数促使模型将正确匹配的图像-文本对的相似度推高,同时将不匹配对的相似度压低。
2)设计原理:
这种对比学习的方式使得模型能够学习到一个多模态嵌入空间,在这个空间中,语义相关的图像和文本嵌入会彼此靠近,而语义不相关的则会彼此远离。这是一种**"授人以渔"的策略,模型不是学习具体的类别标签,而是学习图像和语言之间更深层次的语义对应关系**。
(2)从标签文本创建数据集分类器(Create dataset classifier from label text)
目的: 这一阶段展示了CLIP如何利用其预训练好的文本编码器,为任意给定的目标数据集动态地构建一个零样本分类器,而无需额外的标注数据。
关键模块与协作关系:
目标数据集类别名称(Target Dataset Class Names):
-
功能: 对于一个下游任务,我们有一系列预定义的类别名称(例如,"plane"、"car"、"dog"、"bird"等)。
-
协作: 这些原始的类别名称并不是直接用于分类的。
提示模板(Prompt Template):
-
功能: 为了更好地将这些类别名称与预训练期间模型看到的自然语言描述风格对齐,CLIP引入了提示模板 。例如,类别名称"dog"会被转换为"A photo of a {object}.",其中
{object}被替换为"dog",形成"A photo of a dog."。 -
设计原理: 论文(第7页,3.1.4节)强调,预训练数据中的文本通常是描述图像的完整句子,而不是单个词。使用像"A photo of a {label}."这样的提示模板,有助于弥合这一分布差距 ,并提供上下文信息,解决多义性问题(例如,"crane"既可以是起重机也可以是鸟),从而提高分类性能。
文本 编码器 (Text Encoder):
-
功能: 预训练好的文本编码器再次被使用,将这些经过提示模板处理后的类别描述(例如"A photo of a dog.")编码成相应的文本嵌入 (T1,T2,...,TN)。
-
协作: 这一步为零样本分类准备了"分类头"的权重,这些权重是文本编码器在多模态嵌入空间中为每个类别生成的语义表示。
为何这一步为零样本分类准备了"分类头"的权重?
a.传统 分类器 :
-
在传统的图像分类任务中(例如ImageNet),模型通常由一个图像特征提取器 (比如ResNet)和一个线性分类器头(一个全连接层)组成。
-
这个线性分类器头的权重是在训练过程中学习的,用于将图像特征映射到预定义的类别标签(例如,1000个ImageNet类别)的logits。
-
一旦训练完成,这个分类器头就是固定的。如果需要对新的类别进行分类(零样本任务),它无法直接处理,因为它的权重没有见过这些新类别。
b.CLIP的零样本哲学:
-
CLIP的目标是开放世界理解,即能够识别模型在训练时从未见过的视觉概念。
-
为了实现这一点,CLIP不能依赖于一个固定、预训练好的分类器头。它需要一种机制,能够根据新的类别描述动态地生成分类能力。
-
关键洞察: 如果我们能把每个类别描述(比如"猫"、"狗")也嵌入到一个与图像嵌入相同的语义空间 中,那么对图像进行分类就变成了在嵌入空间中找到与图像最相似的类别描述。
因此,文本编码器之所以为零样本分类"准备了分类头权重",是因为它能够将抽象的类别名称 转化为在多模态嵌入空间中具有语义意义的向量表示 。这些向量本质上充当了动态的" 分类器 权重",使得模型可以在不重新训练的情况下,对任何由文本描述的新类别进行分类。
文本编码器是如何准备"分类头"权重的?
巧妙地利用了预训练阶段学习到的图像-文本对齐能力。具体步骤如下:
a.获取目标数据集的类别名称:
-
假设我们要对一个包含"飞机"、"汽车"、"狗"、"鸟"等类别的新数据集进行零样本分类。我们首先收集这些类别的文本名称。
-
例子: "plane", "car", "dog", "bird"。
b.应用提示工程(Prompt Engineering):
-
这是至关重要的一步。直接将单个单词(如"dog")输入文本编码器可能效果不佳,原因在论文中提到了:
-
分布差距: CLIP的预训练数据通常是包含完整句子的图像描述(如"A photo of a dog."),而不是孤立的单词。
-
多义性(Polysemy): 单个单词可能存在多种含义(如"crane")。提供上下文有助于消除歧义。
-
-
解决方法: 使用一个提示模板 (prompt template),将类别名称嵌入到更具描述性的句子中。
-
例子: 模板可以是"A photo of a {object}."。将类别名称填入模板,得到:
-
"A photo of a plane."
-
"A photo of a car."
-
"A photo of a dog."
-
"A photo of a bird."
-
-
设计动机: 这种做法使得输入的文本与模型在预训练时见过的自然语言描述的风格保持一致,从而更好地激活文本编码器学习到的语义知识。论文(第7页,3.1.4节)明确指出,仅仅使用"A photo of a {label}."这样的提示模板就可以将ImageNet的准确率提高1.3%,这证明了提示工程的有效性。
c.通过文本 编码器 生成类别嵌入:
-
将这些经过提示工程处理后的类别描述句子 (例如"A photo of a dog.")逐一输入到预训练好的文本 编码器中。
-
文本编码器会为每个句子生成一个固定维度的 特征向量 ,即文本嵌入。
-
例子:
-
"A photo of a plane." →→ 文本嵌入
-
"A photo of a car." →→ 文本嵌入
-
"A photo of a dog." →→ 文本嵌入
-
"A photo of a bird." →→ 文本嵌入
-
d.这些类别嵌入即为"分类头"权重:
-
在CLIP的零样本分类中,这些生成的**文本嵌入
**就充当了传统线性分类器中的**"权重向量"**。
-
当一张新的图像
输入到图像编码器中,得到图像嵌入
后,我们计算
与所有类别文本嵌入
之间的余弦相似度。
-
数学表示: 预测概率
,其中 t是温度参数。
-
核心思想: 余弦相似度衡量了两个向量在嵌入空间中的方向一致性。如果图像嵌入与某个类别描述的文本嵌入方向相似,则表示该图像很可能属于这个类别。
文本编码器通过将带有上下文的类别名称(例如"A photo of a dog.")编码成语义嵌入,巧妙地为零样本分类"准备"了分类器的"权重"。这些"权重"不是通过监督学习直接学习类别边界,而是通过对比预训练阶段学习到的图像-文本对齐能力,将文本语义直接映射到可用于分类的嵌入空间中。这种动态生成分类器的能力是CLIP实现强大零样本泛化能力的关键。
(3)用于零样本预测(Use for zero-shot prediction)
目的: 这一阶段将预训练和分类器创建结合起来,展示了CLIP如何对新的、未见过的图像进行零样本分类。
关键模块与协作关系:
输入图像与图像 编码器 ( Input Image & Image Encoder):
-
功能: 对于一个待分类的图像(例如一张狗的图片),它首先通过预训练好的图像编码器,生成其图像嵌入 I1。
-
协作: 这个图像嵌入代表了图像在多模态嵌入空间中的语义信息。
与类别文本嵌入的相似度计算(Similarity Calculation with Class Text Embeddings):
-
功能: 图像嵌入 I1 会与第二阶段生成的所有类别文本嵌入 (T1,T2,...,TN) 计算余弦相似度。这会得到一个向量,其中每个元素 I1⋅Tj表示输入图像与每个类别描述的相似度。
-
协作: 这些相似度得分表明了图像与每个文本描述的匹配程度。
零样本预测(Zero-Shot Prediction):
-
功能: 计算出的相似度得分会经过一个温度参数 t 的缩放,然后通过 Softmax 函数转换为概率分布。模型选择概率最高的类别作为最终的预测结果。
-
设计原理: 这种机制的核心在于,模型在预训练阶段从未见过这些具体的下游任务类别,但由于它学习了图像和任意文本描述之间的语义对齐 ,因此可以直接通过文本描述来识别图像内容。这使得CLIP具有强大的零样本迁移能力,无需任何针对新任务的微调。
-
与传统 分类器 的对比: 传统图像模型通常会训练一个线性分类器(linear classifier)来预测固定数量的类别。CLIP的零样本方法则通过文本编码器动态生成分类器的"权重",从而实现了对开放世界概念的识别。
三、高效预训练方法
Given a batch of N (image,text) pairs,CLIP被训练来预测在一个批次中,N × N个可能的(图像,文本)配对中实际发生了哪些配对
CLIP通过联合训练图像编码器和文本编码器来学习一个多模态嵌入空间,以最大化批次中N个真实配对的图像和文本嵌入的余弦相似度,同时最小化个不正确配对的嵌入的余弦相似度。对这些相似度分数优化一个对称交叉熵损失。
由于预训练数据集的规模很大,因此过拟合不是主要问题,可以将CLIP的训练细节简化。
Paper 中提到"We train CLIP from scratch without initializing the image encoder with ImageNet weights or the text encoder with pre-trained weights."为什么?
1.为什么不使用ImageNet权重初始化图像编码器?
ImageNet预训练的局限性与CLIP的愿景冲突:
(1)固定类别集与开放世界理解的矛盾:
-
ImageNet 训练: 传统的ImageNet预训练模型(如ResNet-50)被训练来识别1000个预定义的、固定的对象类别 。这意味着模型在训练过程中学习到的视觉概念是狭窄且受限的。
-
CLIP的愿景: CLIP旨在实现开放世界的视觉理解,能够识别任何可以通过自然语言描述的视觉概念,包括训练中从未见过的类别(零样本能力)。
-
冲突: 如果使用ImageNet权重初始化图像编码器,模型可能会过度偏向于ImageNet的1000个类别 ,并学习到对这些特定类别有用的**"捷径"或"偏见"(例如,倾向于识别名词类物体)。这可能 限制其学习更通用、更抽象的视觉表示**,从而阻碍其在更广泛、更开放的视觉概念上的零样本泛化能力。CLIP希望从一开始就让模型专注于通过语言学习视觉概念,而不是继承ImageNet的特定任务偏差。
(2)监督信号的来源不同:
-
ImageNet 监督: 依赖于高质量、人工标注的"金标签"(例如,一张图片是"猫"),这种标注成本高昂且难以扩展到海量数据。
-
CLIP监督: 利用自然语言(图像-文本对)作为监督信号,这些数据可以从互联网上大规模获取(4亿对图像-文本数据)。
-
设计动机: 作者希望验证大规模自然语言监督本身是否足以驱动模型学习强大的视觉表示,甚至超越ImageNet带来的效果。从头开始训练可以更纯粹地评估这种新型监督信号的潜力,避免将ImageNet特定的归纳偏置引入模型。
(3)数据规模的差异:
-
ImageNet数据集相对较小(1.28百万张图片),而CLIP的WIT数据集包含4亿对图像-文本对。
-
在如此大规模、多样化的数据上从头训练,模型有潜力学习到比 ImageNet 预训练更丰富、更全面的视觉特征 。如果使用ImageNet权重初始化,可能会限制模型充分利用这4亿对数据的能力,使其在训练初期就"锁定"在ImageNet的特征空间中。
2.为什么不使用预训练权重初始化文本编码器?
NLP 预训练的局限性与多模态对齐的优先级:
(1)任务目标的不同:
-
传统 NLP 预训练: 像BERT、GPT等模型通常通过自回归 或掩码语言建模 等任务进行预训练,目标是理解和生成文本的语言特性 (语法、语义、上下文)。它们主要处理纯文本模态。
-
CLIP的任务: 文本编码器在CLIP中的核心任务是学习将文本映射到与图像共享的、语义对齐的嵌入空间中 。它不仅仅需要理解语言本身,更需要理解语言如何描述视觉世界。
-
设计动机: 如果使用仅在文本上预训练的编码器,它可能已经学习了强大的语言表示,但这些表示不一定与视觉信息很好地对齐 。CLIP希望文本编码器从一开始就专注于学习图像和文本之间的"桥梁" ,即多模态对齐 ,而不是单纯的语言理解。从头训练可以确保文本编码器在学习语言表示的同时,始终以与图像编码器对齐为目标。
(2)多模态嵌入空间的构建:
-
CLIP的核心是构建一个联合的多模态嵌入空间,使得匹配的图像-文本对的嵌入相似度高,不匹配的对相似度低。
-
使用预训练的文本编码器可能会引入其自身的单模态归纳偏置,使得在联合训练中,文本嵌入空间难以与图像嵌入空间有效对齐,或者需要更复杂的机制来"纠正"这种偏置。
-
从头开始训练可以确保图像 编码器 和文本编码器在同一个多模态对比学习目标下协同进化 ,共同构建一个内聚且语义丰富的共享嵌入空间。
(3)计算效率和简化:
-
论文在2.3节中提到,他们尝试了类似VirTex的方法(联合训练图像CNN和文本Transformer来预测图像的标题),但发现这种方法难以高效地扩展 。最终他们选择了对比学习作为更高效的预训练方法。
-
"从头开始训练"并在大规模数据上进行对比学习,虽然模型参数量大,但其目标函数相对简单,避免了复杂的非线性投影层和文本转换函数,这些在其他对比学习方法中常见。这种简化使得训练过程更高效,也更容易扩展。
预训练期间使用的唯一数据增强方法:从调整大小的图像中随机裁剪正方形。
四、选择和缩放模型

文本编码器中使用Masked self-attention,以保留使用与训练语言模型初始化添加语言建模作为辅助目标的能力。
将额外的计算资源平均分配给增加模型的宽度、深度和分辨率。对于文本编码器,我们仅按比例缩放模型的宽度,使其与 ResNet 计算出的宽度增加成正比,而根本不缩放深度,因为我们发现 CLIP 的性能对文本编码器的容量不太敏感。
五、Motivation
在一些像CIFAR-10数据集衡量的"真实"任务未知的数据集上,零样本迁移更多的是对CLIP对分布偏移和领域泛化的鲁棒性的评估,而不是任务泛化。
六、使用CLIP进行零样本迁移
首先通过各自的编码器计算图像的特征嵌入和可能的文本集合的特征嵌入。然后计算这些嵌入的余弦相似度,通过温度参数τ进行缩放,并通过softmax归一化为概率分布。
++请注意,此预测层是一个多项逻辑回归++ ++分类器++ ++,具有L2++ ++归一化++ ++输入、L2归一化权重、无偏差和温度缩放。++
为什么这种情况可能是由于Zero-Shot与Few-Shot方法之间的一个重要区别有关?
1.Zero-Shot与Few-Shot学习的核心区别
论文中强调的"重要区别"在于 Zero-shot CLIP 分类器 如何获取视觉概念的定义,以及传统 监督学习 (包括 Few-shot 学习)如何推断这些概念。
(1)Zero-Shot CLIP:通过自然语言直接"沟通"视觉概念
-
概念来源: Zero-shot CLIP 分类器的独特之处在于,它通过自然语言来生成。用户可以直接通过文本提示(例如,"一张狗的照片")来描述他们想要识别的视觉概念。
-
工作机制: CLIP 的文本编码器将这些自然语言描述转化为嵌入向量,这些向量直接作为线性分类器的权重 。这意味着视觉概念的定义是显式地、直接地"沟通"给模型的。模型被告知"是什么"(例如,'dog'),以及如何通过语言来描述它。
-
优势: 这种直接沟通提供了明确的、无歧义的语义信息,帮助模型理解每个类别的核心特征。它避免了从有限样本中推断概念时可能出现的模糊性。
(2)"正常"监督学习(包括Few-Shot):通过训练示例间接推断概念
-
概念来源: 传统的监督学习方法,包括 Few-shot 学习,必须从有限的训练示例 中间接推断视觉概念。模型被赋予少量带有标签的图像,并需要从这些图像中归纳出每个类别的视觉特征。
-
工作机制: 在 Few-shot 设置中,模型看到每个类别的一小部分图像(例如,每个类别4张图片),然后学习一个线性分类器来区分这些类别。模型需要从这些有限的例子中推断出"狗"的视觉特征。
-
局限性:
-
上下文缺失: 这种基于示例的学习往往缺乏上下文。仅仅通过几张图片,模型很难完全理解一个概念的所有细微之处。
-
多重假设的风险: 单个图像通常包含许多不同的视觉概念 。在 Few-shot 学习的少样本情况下,许多不同的假设都可能与给定的数据一致。例如,一张包含狗的图片可能同时包含草地、天空、树木等概念。模型在没有明确语言指导的情况下,可能难以确定哪个才是要学习的"主要对象"或"核心概念"。即使一个能干的学习器能够利用视觉线索和启发式方法(例如,假设图像中的主要物体是概念),也无法保证其准确性。
-
不确定性: 尤其是在 1-shot 情况下,模型可能会基于不完整或有偏见的信息形成对概念的理解。
-
2.如何理解"Zero-shot CLIP匹配4-Shot逻辑回归表现"?
这个"重要区别"导致Zero-shot CLIP能够匹配甚至超越Few-shot逻辑回归的性能,原因如下:
-
Zero-shot CLIP 的语义 清晰度 弥补了样本量的不足:
-
虽然 Zero-shot CLIP 没有看到任何训练示例,但它通过直接的语言描述 获得了高度清晰和准确的类别定义 。这种语义清晰度有效地弥补了零样本的劣势。
-
相比之下,4-shot 逻辑回归虽然看到了4个示例,但它必须从这些有限且可能模糊的视觉输入中推断概念。它需要自行解决"一张狗的照片"中究竟哪些视觉特征对应"狗"的问题。如果模型从这些少量样本中推断出的概念定义不够准确或包含噪声,其性能就会受限。
-
-
减少了推断误差和多重假设问题:
-
Zero-shot CLIP 避免了 Few-shot 学习中由于样本不足而导致的推断误差和多重假设问题。它不需要猜测一张图片中的主导对象,也不需要从少数模糊的例子中提取共同特征。
-
通过语言提示,CLIP 直接获得了"正确"的分类器权重,这些权重已经编码了"狗"在广泛互联网数据中学习到的视觉语义。这使得它在没有看到具体示例的情况下,也能构建一个相当有效的分类器。
-
-
高质量的预训练表示:
-
CLIP 在大规模、多样化的图像-文本数据 上进行预训练,学习到的图像和文本嵌入本身就具有高度的语义性和泛化能力。这些表示能够捕捉到丰富的视觉概念,并能通过语言进行精确索引。
-
因此,即使是零样本,CLIP 也能基于其强大的通用表示能力,结合语言提供的明确概念定义,构建出与从少量示例中学习到的分类器同样有效,甚至更优的分类器。
-
总结来说,Zero-shot CLIP 和 4-shot 逻辑回归之所以表现相匹配,是因为 Zero-shot CLIP 通过自然语言获得了"有深度的清晰"概念定义,这抵消了其缺乏训练样本的劣势,并避免了 Few-shot 学习中从有限样本中推断概念所固有的模糊性和多重假设问题。 语言作为一种强大的监督信号,使得 CLIP 在零样本设置下也能达到令人印象深刻的性能。
七、表征学习
评估表征学习的方法有很多,并且对于"理想"表征应具备的属性也存在争议。
一种常见的方法是在从模型中提取的表征上拟合线性分类器,并测量其在各种数据集上的性能。
另一种方法是测量模型端到端微调的性能。这增加了灵活性,并且先前的工作已经令人信服地证明,在大多数图像分类数据集上,微调优于线性分类。
八、不足
(1)CLIP在解决 深度学习 模型脆弱泛化的根本问题上几乎没有作用。相反,CLIP试图规避这个问题,并希望通过在如此庞大且多样化的数据集上进行训练,所有数据都能有效地成为分布内的。这是一个幼稚的假设,正如MNIST所展示的那样,很容易被打破。
(2)CLIP 也没有解决 深度学习 **数据效率低下的问题。**相反,CLIP 通过使用可以扩展到数亿个训练样本的监督源来进行补偿。如果在 CLIP 模型的训练过程中,每秒显示一张图像,那么迭代 32 个训练周期中看到的 128 亿张图像将需要 405 年。将 CLIP 与自监督和自训练方法相结合是一个很有希望的方向,因为它们已证明能够提高标准监督学习的数据效率。
九、说明
本文仅仅是本人在读这篇Paper时的一点理解以及对我的一些疑惑解答后的整理总结,希望能够帮助大家真正深刻的理解CLIP,帮助大家找到好的idea。如果大家觉得有所帮助的话,欢迎大家一键三连;如果觉得哪里有什么问题,欢迎评论区交流一下!