上篇把模型压缩与 ONNX 部署打通,而「图文一起理解」这类多模态能力,正在重新定义模型的边界。
人类一眼看图、一读文字就能把两者联系起来——"这是只橘猫"。但模型长期被割裂成"看图的"和"读字的"。多模态学习要做的,就是给 AI 一双能跨模态对齐的眼睛和耳朵。2021 年 CLIP 的出现彻底点燃了这个领域,今天的所有视觉大模型(VLM)、文生图、以文搜图都建立在"图文联合表征"之上。本篇拆解这条主线,并给你零样本分类的实战代码。
一、多模态表征定义
核心目标:把图像编码器和文本编码器的输出映射到同一个语义向量空间,使得配对的图像-文本向量接近、不配对的远离。
image_encoder(image) -> v_img ∈ R^d text_encoder(text) -> v_txt ∈ R^d 目标: sim(v_img, v_txt+) 大, sim(v_img, v_txt-) 小当这个空间训好后,"猫的照片"和"a photo of a cat"的向量就会彼此靠近。一旦对齐,任何用文字描述的新类别都不用重新训练——这就是零样本(zero-shot)能力的来源。
二、CLIP 对比学习范式
CLIP(Contrastive Language-Image Pre-training)用4 亿图文对做了件朴素又暴力的事:
图像过 Vision Transformer / ResNet 得
I,文本过 Transformer 得T。一个 batch 内,
N个图文对构成N个正例(对角线),其余N²-N个为负例。用对比损失(InfoNCE)拉正例、推负例。
L = -1/N Σ log[ exp(sim(I_i,T_i)/τ) / Σ_j exp(sim(I_i,T_j)/τ) ]
为什么强:
监督信号来自"图文是否配对",无需人工标注类别,可规模化的弱监督。
文本侧天然是开放词汇,所以能零样本做分类:把类别名写成 prompt,哪个文本向量和图像最像就判哪类。
迁移性极好,是后续 DALL·E、Stable Diffusion、BLIP-2 的视觉编码器基石。
三、BLIP 及后续演进
CLIP 只有"对齐",没有"生成"。BLIP补足了这一环:
统一了理解(ITM、ITC)与生成(LM)三个预训练目标,能同时做检索和看图说话(captioning)。
用生成式模型给网络爬取的噪声图文对"洗数据",再用干净数据回训,缓解网络数据噪声问题。
BLIP-2进一步用轻量Q-Former桥接模块,把冻结的视觉编码器(如 CLIP ViT)连到冻结的大语言模型(如 OPT/LLaMA),既保留视觉先验又借到语言推理能力,训练成本极低。
Flamingo类似思路,强调少样本视觉对话。
一句话趋势:"冻结大模型 + 轻量桥接"正在取代"全参数多模态预训练",因为前者省钱且能复用单模态 SOTA。
四、零样本分类与图文检索实战
用open_clip几行代码就能跑通零样本分类:
import open_clip import torch from PIL import Image model, _, preprocess = open_clip.create_model_and_transforms( "ViT-B-32", pretrained="laion2b_s34b_b79k") tokenizer = open_clip.get_tokenizer("ViT-B-32") model.eval() image = preprocess(Image.open("cat.jpg")).unsqueeze(0) # 用自然语言描述候选类别 text = tokenizer(["a photo of a cat", "a photo of a dog", "a photo of a car"]) with torch.no_grad(): logits = (model(image) @ model(text).t()) * model.logit_scale.exp() probs = logits.softmax(dim=-1) print(probs) # 无需任何微调,直接判类以文搜图:把图库全部过model(image)存成向量,查询文本过model(text),算余弦相似度排序即可。这正是现代以文搜图引擎的最小原型。
五、偏见与评测难点
多模态不是没有代价:
数据偏见:训练语料来自网络,会继承其中的刻板印象(如某些职业与性别的错误关联)。
分布偏移:CLIP 在欧美场景训得多,对中文、特定文化对象可能失灵——中文多模态模型(如国产 VLM)因此重要。
评测难:零样本泛化好,但细粒度/长尾类别仍弱;需要多基准(ImageNet 系列、检索 Recall、VQA)综合评估,单一指标易误导。
六、前沿趋势
统一架构:把图像、文本、音频、视频都塞进一个 LLM(如 GPT-4V、Qwen-VL),用统一 tokenizer 处理。
视频/3D 多模态:从图像-文本扩展到时序与空间。
端侧多模态:把 CLIP 量级模型量化部署到手机(呼应第 16 篇压缩)。
总结
多模态的本质,是把"看图"和"读字"拉进同一个向量空间。CLIP 用对比学习点燃、BLIP-2 用轻量桥接降本,今天几乎所有视觉语言应用都建立在这套范式上。本文的 open_clip 零样本代码可直接体验"不用训练就能认新东西"的魔力——这正是大模型时代最实用的能力之一。
参考资料
Radford, A., et al. (2021).Learning Transferable Visual Models From Natural Language Supervision(CLIP).
Li, J., et al. (2022).BLIP: Bootstrapping Language-Image Pre-training.
Li, J., et al. (2023).BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models.
open_clip 项目:https://github.com/mlfoundations/open_clip
往期回顾
- 模型训练调参技巧——学习率、正则化与优化器
- 文本分类任务——从传统机器学习到深度学习
- 生成对抗网络 GAN 原理与图像生成应用
📚本篇出自专栏《深学之路:从感知机到智能体》—— 从感知机到大模型智能体的完整深度学习连载(基础+工程化 +扩散模型 / RAG / Agent 等)。每篇附可运行代码与原创实验,收藏专栏不迷路。