7.1 视觉-语言对齐
核心问题: 如何让模型理解图像和文本的关系?
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
问题
图像和文本是两种不同的模态,如何在同一个模型中处理?
挑战:
- 图像是像素矩阵
- 文本是离散的单词
- 需要找到共同的表示空间
核心组件速览
在深入之前,先理解多模态 LLM 的三个关键组件及其角色。这里的重点是组件职责,不是固定模型列表:
| 组件 | 输入 | 输出 | 角色 | 代表模型 |
|---|---|---|---|---|
| ViT | 图像 | 图像特征向量 | 视觉编码器 | LLaVA、Qwen2.5-VL |
| CLIP | 图像+文本 | 联合嵌入空间 | 图文对齐(桥梁) | 零样本分类、检索 |
| LLM | 文本+视觉特征 | 文本响应 | 语言理解与生成 | 多模态助手 |
关键区别:
- ViT:单向(图像→特征),用于特征提取
- CLIP:双向(图像+文本→对齐),用于对齐
- LLM:多模态理解,用于推理和生成
多模态架构的演进
早期方法:特征拼接
思想: 分别提取图像和文本特征,然后拼接。
图像 → CNN → 特征1
文本 → RNN → 特征2
↓
拼接 → 分类器问题:
- 特征空间不对齐
- 跨模态信息利用不足
对比学习方法:CLIP
思想: 用对比学习对齐图像和文本特征。
损失函数:
其中
优势:
- 特征空间对齐
- 零样本学习能力强
融合方法:LLaVA
思想: 用投影层连接视觉编码器和LLM。
图像 → ViT → 投影层 → LLM → 输出
↑
文本关键组件:
- 视觉编码器:提取图像特征
- 投影层:对齐特征空间
- LLM:理解和生成文本
视觉编码器详解
步骤1:提取图像特征
用CNN或Vision Transformer(ViT)提取图像特征。
图像(3×H×W)
↓
ViT或CNN
↓
图像特征(N×D)Vision Transformer(ViT)
基本思想: 把图像分成小块(patches),用Transformer处理。
图像
↓
分成16×16的patches
↓
线性投影
↓
Transformer
↓
图像特征
图7.1a:Vision Transformer 图像分块可视化——原始图像分割成 16×16 的 patches,每个 patch 线性展开后加位置编码送入 Transformer。
代码文件: code/ch07_multimodal_llm/vit_patches.py
运行方式: python code/ch07_multimodal_llm/vit_patches.py
ViT的详细步骤
分块:把图像分成
的patches - 图像大小:
- Patch大小:
- Patch数量:
- 图像大小:
线性投影:把每个patch投影到向量
- 输入:
的patch - 输出:
维向量
- 输入:
位置编码:添加位置信息
- 类似NLP中的位置编码
- 让模型知道patch的位置
Transformer:处理patch序列
- 自注意力:学习patch之间的关系
- 前馈网络:非线性变换
ViT的优势
- 可扩展性:可以扩展到不同分辨率的图像,但会受到 visual token 数和位置编码设计的限制
- 全局建模:自注意力可以直接建模 patch 之间的长距离关系
- 统一架构:与NLP中的Transformer一致
计算复杂度
自注意力复杂度:
对于大图像:
- 图像大小:
- Patch大小:
- Patch数量:
- 复杂度:
优化方法:
- 分层ViT:多尺度处理
- 局部注意力:只关注附近的patch
- 稀疏注意力:减少计算量
文本编码器
用标准的Transformer编码文本。
文本
↓
Tokenization
↓
Embedding
↓
Transformer
↓
文本特征对比学习的原理深度
对比学习的几何直观
核心思想: 在高维特征空间中,相似的样本应该聚集在一起,不相似的样本应该分散开来。
几何解释:
特征空间(高维)
相似对(应该接近):
图像1 ●
╲
╲ 小距离
╲
● 文本1
不相似对(应该远离):
图像1 ●
╲
╲ 大距离
╲
● 文本2(不匹配)为什么这样有效:
- 相似对接近 → 模型学会识别匹配的图像-文本对
- 不相似对远离 → 模型学会区分不匹配的对
- 自动形成对齐的特征空间 → 不需要显式的对齐标签
与其他方法的对比:
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| MSE损失 | 最小化预测误差 | 简单 | 不能处理多模态 |
| 对比学习 | 相似对接近,不相似对远离 | 自动对齐,零样本能力强 | 需要大批大小 |
| 三元损失 | 相似对比不相似对更接近 | 直观 | 需要手工选择负样本 |
为什么对比学习能对齐特征?
关键机制: 通过最大化相似对的相似度、最小化不相似对的相似度,自动学习对齐。
数学直观:
给定一个图像-文本对
- 目标:
应该大(相似对接近) - 约束:
应该小,其中 是不匹配的文本
为什么这能创建共同的表示空间:
- 相似对的拉力: 模型被迫让匹配的图像和文本特征接近
- 不相似对的推力: 模型被迫让不匹配的对分散
- 自动对齐: 这两个力共同作用,自动创建对齐的特征空间
与显式对齐的区别:
- 显式对齐:需要手工标注对应关系
- 对比学习:从数据中自动学习对应关系
对齐质量与下游任务的关系
对齐质量的度量:
相似度分布: 相似对的相似度应该高,不相似对应该低
好的对齐: 相似对相似度:0.8-0.95 不相似对相似度:0.1-0.3 差的对齐: 相似对相似度:0.5-0.6 不相似对相似度:0.4-0.5检索准确率: 给定图像,能否正确检索对应的文本
- 好的对齐:Top-1准确率 > 90%
- 差的对齐:Top-1准确率 < 50%
对齐与零样本学习的关系:
零样本分类的原理:
1. 给定图像和类别文本描述
2. 计算图像与每个类别的相似度
3. 选择相似度最高的类别
这只有在特征空间对齐时才能工作!对齐与下游任务的关系:
| 任务 | 对齐的重要性 | 原因 |
|---|---|---|
| 零样本分类 | 🔴 极高 | 主要依赖相似度排序 |
| 图像检索 | 🔴 极高 | 需要准确的相似度排序 |
| VQA | 🟠 中等 | 需要理解图像内容 |
| 图像描述 | 🟠 中等 | 需要理解图像内容 |
常见失败模式:
- 图像文字太小或模糊,视觉编码器无法提取细节
- 图文描述存在歧义,对比学习可能学到粗粒度相关而不是精确对应
- 空间关系、计数和细粒度属性比普通图文检索更难
- 下游任务要求的证据粒度高于预训练对齐数据提供的粒度
ViT vs CNN:为什么Transformer常用于图文对齐?
CNN的特点: 局部卷积从小感受野开始,依靠多层堆叠、池化或大卷积核逐步扩大感受野。它可以建模整体语义,但全局关系通常不是第一层就直接可见。
ViT的优势: 自注意力机制让每个 patch 可以直接关注其他 patch,更容易形成全局图像表示;这与文本描述通常表达全局语义的方式更接近,因此常用于图文对齐模型。

图7.1c:CNN 局部感受野(每次只看 3×3 区域)vs ViT 全局自注意力(每个 patch 关注所有其他 patch)的直观对比。
代码文件: code/ch07_multimodal_llm/architecture_diagrams.py运行方式: python code/ch07_multimodal_llm/architecture_diagrams.py
为什么全局感受野对对齐更重要:
语义理解: 图像的语义通常需要全局信息
- 例如:"一个人在公园里"需要看到人、公园、背景的关系
特征一致性: 全局特征更稳定,更容易与文本对齐
- CNN的局部特征容易受到位置变化影响
- ViT的全局特征对位置变化更鲁棒
跨模态对齐: 文本是全局的,图像特征也应该是全局的
- 文本"一个人在公园里"是全局概念
- 应该与全局图像特征对齐,而不是局部特征
温度参数的深层原理
温度参数与softmax分布的关系:
softmax(z_i / τ) = exp(z_i / τ) / Σ exp(z_j / τ)
τ的作用:控制分布的"尖锐度"不同τ值的效果:

图7.1d:三种温度参数下的 softmax 概率分布——τ=0.07 分布较尖,τ=0.5 适中,τ=10.0 分布极平(学习信号弱)。
代码文件: code/ch07_multimodal_llm/architecture_diagrams.py运行方式: python code/ch07_multimodal_llm/architecture_diagrams.py
为什么过小的τ可能导致训练不稳定或过度自信:
梯度爆炸: 小τ导致softmax分布尖锐,梯度很大
∂L/∂z_i ∝ 1/τ (τ越小,梯度越大)学习不稳定: 大梯度导致参数更新不稳定
w_new = w_old - α * (∂L/∂w) 如果∂L/∂w很大,w_new可能跳过最优点过度自信: 模型可能过度拟合训练数据中的相似对
- 对训练数据中的相似对非常自信
- 对新数据的泛化能力差
为什么大τ导致学习效率低:
梯度消失: 大τ导致softmax分布平缓,梯度很小
∂L/∂z_i ∝ 1/τ (τ越大,梯度越小)学习缓慢: 小梯度导致参数更新缓慢
w_new = w_old - α * (∂L/∂w) 如果∂L/∂w很小,w_new变化不大信号弱: 模型无法区分相似对和不相似对
- 所有对的相似度都接近
- 模型无法学到有意义的对齐
如何选择τ:
- 经验值: τ = 0.07 是CLIP中的标准值
- 原理: 平衡梯度大小和学习稳定性
- 调整:
- 如果过拟合,增大τ
- 如果学习太慢,减小τ
- 通常在0.01-0.1之间
对齐:对比学习的数学基础
对齐的目标
让图像特征和文本特征在同一个空间中。
对比学习的目标
最大化相似的样本对之间的相似度,最小化不相似的样本对之间的相似度。
损失函数
NT-Xent(Normalized Temperature-scaled Cross Entropy):
其中:
:特征向量 :相似度函数(通常是余弦相似度) :温度参数(控制分布的尖锐度)
温度参数的作用
典型值:
批大小的影响
大批大小:
- 优点:更多的负样本,更稳定的梯度
- 缺点:需要更多显存
小批大小:
- 优点:显存占用少
- 缺点:负样本少,学习效率低
对比学习的方法
用对比学习(Contrastive Learning):
- 相关的图像-文本对应该接近
- 不相关的图像-文本对应该远离
代码实验

图7.1b:CLIP 图像-文本相似度矩阵——对角线最亮表示对比学习对齐效果好,相似对相似度高,不相似对相似度低。
代码文件: code/ch07_multimodal_llm/clip_similarity.py
运行方式: python code/ch07_multimodal_llm/clip_similarity.py
本节小结
视觉-语言对齐经历了从特征拼接到对比学习再到融合方法的演进。核心思想是:
- 用ViT提取图像特征
- 用Transformer提取文本特征
- 用对比学习对齐两个特征空间
下一节: 7.2 Qwen2.5-VL:高分辨率多模态LLM案例
扩展阅读: 对比学习与投影层深度细节(InfoNCE 推导、温度参数原理、投影层设计)
