如何把“图”和“文”放进同一张地图
CLIP(Contrastive Language-Image Pre-training)是由OpenAI提出的跨模态预训练对比学习模型,是多模态研究的重要突破之一。多模态真正站稳脚跟,是从“把图像与文字放进同一张语义地图上”开始的。CLIP 做的,恰是这件看似朴素却最要紧的图文对齐的基本建设。
想象一间教室,三十二位同学每人手里一张图片和一句描述。老师发出一道题:请给每张图找到它唯一对应的那句描述;同时,每句描述也要只配上属于它的那张图。若把这三十二张图和三十二句描述两两比对,就得到一张 32×32 的相似度表格。对角线上的三十二格是“真配对”,其余都是“错配”。CLIP 就是在一遍又一遍地优化这张表格:让对角线越发亮堂,其余格子统统暗下去。
做这件事,CLIP 用的是两支“翻译笔”。一支翻译图像:用深度卷积或视觉 Transformer(ViT) 把图片压成一个向量;另一支翻译文字:用 Transformer 把文字描述压成一个向量。接着,它把两支笔写出的向量都映射到同一维度,并规范到单位长度。这样,两者的“接近程度”就能用一个最简单的量来衡量——余弦相似度。越像的一对,两个向量越对齐,夹角越小。
训练 CLIP 的秘诀有两个。第一是数据的“广”:谢天谢地谢互联网,我们不再需要临时请人来打标签,而是直接收集互联网上数量巨大、与日俱增的“网页图片 + 周边的文字”(如 <img>
的 alt
、标题、邻近句子等),一抓就准,轻轻松松数以亿计。文字质地参差,但覆盖丰富,恰好契合现实世界的混沌与长尾(当然总还配有垃圾过滤等)。第二是负例特“多”:上面的班级比喻里,一次“练习”就自带了海量错误配对,这是设计使然,无需人为构造。CLIP 让每个训练批次都像一场“谁配谁”的大考——批次越大,负例越多,区分能力越强。
对于一个包含 N 对图文的批次,图像文本分别编码后对齐,把所有两两点积除以一个可学习的温度 τ,得到一张 的相似度矩阵。随后从两个方向计算“谁应该选谁”的交叉熵:以每一张图为起点,正确答案是哪一句;以每一句为起点,正确答案是哪张图。两个方向的损失取平均,就是 CLIP 的训练目标。温度参数的存在,使得模型能自适应地调节“分数的对比度”,在稳定与锋利之间找到平衡。
训练完毕后,CLIP 就得到了一张跨模态共享的“语义地图”。这张地图有两个直接好处。第一是检索与匹配:给一张猫的照片,它会在句子堆里把“a cat”拉到最近;给一句“a dog playing frisbee”,它能从图片库里把相应画面挑出来。第二是零样本分类:不再需要训练一个固定类别的分类器,只要把类名写成一句话(最好配上几种不同表述),编码成向量,与图片向量一比,分数最高的那一类就是答案。文本成了类别的可编程接口,开放词表与长尾概念因此得以纳入。
需要强调的是,CLIP 并不直接“会画画”。它的贡献在于让图像与语言真正“对上号”。而正是这张对齐良好的地图,让后来的多模态模型能“看图说话、听话作图”,让多模态问答与检索能“互通语义、互证细节”。给图片和视频自动标注,很多也是以此为基础的。在多模态的长路上,CLIP 是底座式的里程碑:把感知与语言接到了一起,把人工标注的天花板打通到了开放世界。
现实网页数据不可避免会出现“同义对”或近重复样本。它们在批内被当作负例,形成所谓“同类碰撞”。这会让模型在训练时对一些本应接近的样本产生轻微排斥。CLIP 之所以仍能学到稳健的语义地图,原因在于:其目标只是让真配对在行/列的排序中位居第一,而非把所有负例压到零;双向损失会把各自的真配对拉近,削弱对近义负例的过度排斥;同时,海量数据与大批次使偶发的“假负例”在统计上被摊薄。这样,CLIP 既保持了开放词表与零样本的优势,又避免了“同义排斥”带来的系统性偏差。
CLIP 的对比目标是对称的:同一批次里,模型既最小化‘从图到文’的交叉熵,也最小化‘从文到图’的交叉熵。前者逼近 p(text|image),后者逼近 p(image|text)。两项合起来,相当于把两种方向的匹配都训练到位,既避免了某一塔的表征过度聚团或过度发散,也让两个方向的检索都能受益。实现上并不增加额外前向计算:一张相似度矩阵,分别做行、列 softmax 即可。