Lec11 多模态建模 I(Multi-to-Text)

全局视角

这部分课程重点是 multi-to-text

  • 输入可以是图像(也可以带文本)。
  • 输出是文本。
  • 核心问题是:如何把图像映射成语言模型可消费的向量序列。

把图像表示为“token”

文本我们已有 token embedding。
图像则需要一个编码器: \[ f_{\text{enc}}(x_{\text{image}}) \rightarrow z_1,\dots,z_L \] 其中每个 \(z_i\) 都是一个向量 token。

Vision Transformer(ViT)

ViT 的思路是把图像切成 patch,线性映射为向量,再送入标准 Transformer。

给定: \[ x_{\text{image}} \in \mathbb{R}^{H \times W \times C} \]

\(P \times P\) 划分 patch: \[ N=\frac{HW}{P^2}, \quad x_p \in \mathbb{R}^{N \times (P^2C)} \]

投影到模型维度 \(D\)\[ x = x_p W_e, \quad W_e \in \mathbb{R}^{(P^2C)\times D}, \quad x \in \mathbb{R}^{N\times D} \]

再加位置编码并通过 Transformer。

image-20260304233101190

image-20260304231918596

课程中的直觉总结:

  • 浅层更偏局部结构信息。
  • 深层更偏全局语义区域。
  • ViT 随预训练算力扩大有良好的扩展性。

CLIP:用语言监督学习视觉表示

CLIP(Radford et al., 2021)在共享嵌入空间中联合学习图像与文本。

  • 图像编码器:\(f_I(x)\)
  • 文本编码器:\(f_T(y)\)
  • 配对图文应接近,不配对应远离。

image-20260304233640564

对一个 batch 中 \(N\) 对样本 \((x_n,y_n)\),定义相似度: \[ s_{ij}=\frac{f_I(x_i)^\top f_T(y_j)}{\tau} \]

对称对比学习目标: \[ \mathcal{L}_{\text{img}}=-\frac{1}{N}\sum_{i=1}^N \log \frac{e^{s_{ii}}}{\sum_j e^{s_{ij}}}, \quad \mathcal{L}_{\text{text}}=-\frac{1}{N}\sum_{i=1}^N \log \frac{e^{s_{ii}}}{\sum_j e^{s_{ji}}} \] \[ \mathcal{L}_{\text{CLIP}}=\frac{1}{2}\left(\mathcal{L}_{\text{img}}+\mathcal{L}_{\text{text}}\right) \]

它的重要性在于:

  • 用自然语言描述替代“仅类别标签”的弱监督。
  • 可扩展到 web 规模图文数据。
  • 零样本迁移能力强。

与语言模型结合:LLaVA 风格

课程给出的通用 pipeline:

  1. 图像预处理(patch/crop)。
  2. 用视觉编码器提取特征(常见是 CLIP ViT)。
  3. 线性映射到 LM 的 embedding 维度。
  4. 将视觉 token 与文本 token 拼接。
  5. 用图文指令数据训练/微调。
  6. 图像位置不计算 token-level LM loss。

可写成: \[ h_v=\text{Proj}(f_I(x_{\text{image}})), \quad p_\theta(y_t\mid y_{<t},x_{\text{text}},h_v) \]

image-20260304234617658

课程中提到的系统案例

  • Molmo(AI2): 使用 CLIP ViT-L/14(336px),经 pooling 和投影后送入 LLM,并结合全图和裁剪视图。

”image-20260305002752174”

  • PaliGemma(Google): 课上强调”联合更新视觉编码器与 LM”通常优于只更新一侧。

”image-20260305002723839”

Lec11 要点

  • ViT 给出了图像 token 化的标准接口。
  • CLIP 用对比学习提供了高可扩展的图像表示。
  • 多模态助手的工程核心是视觉 token 与语言 token 的对接方式。

Lec12 多模态建模 II(图像生成)

生成建模范式

课程对比了四大类:

  • Autoregressive(AR): 建模 \(p(x_t\mid x_{<t})\)
  • VAE: 编码到潜变量 \(z\),再解码重建。
  • GAN: 生成器与判别器对抗训练。
  • Diffusion: 从噪声逐步去噪到数据分布。

尝试一:像素级自回归

把图像展平成像素序列: \[ x_{\text{img}} \rightarrow (x_1,\dots,x_T),\quad x_t\in\{0,\dots,255\} \] \[ \mathcal{L}_{\text{MLE}}=-\sum_{t=1}^{T}\log p_\theta(x_t\mid x_{<t}) \]

课程提到的代表:PixelRNN、Image Transformer、iGPT。

主要瓶颈:

  • 序列过长(如 \(1024\times1024\times3\approx 3\)M tokens)。
  • 单个像素语义弱,训练非常吃数据。

尝试二:学习离散图像 token

核心思路:先学一个图像 tokenizer/de-tokenizer,再让 LM 建模更短、更语义化的 token 序列。

VAE 回顾

标准目标: \[ \mathcal{L}_{\text{VAE}}(x)= -\mathbb{E}_{q_{\theta_{\text{enc}}}(z\mid x)}[\log p_{\theta_{\text{dec}}}(x\mid z)] +D_{\text{KL}}\!\left(q_{\theta_{\text{enc}}}(z\mid x)\|p(z)\right) \]

等价的 ELBO 视角: \[ \log p(x)\ge \mathbb{E}_{q(z\mid x)}[\log p(x\mid z)] -D_{\text{KL}}(q(z\mid x)\|p(z)) \]

VQ-VAE:从连续到离散

编码器给连续潜变量: \[ z_e(x)\in\mathbb{R}^{d} \]

再做最近邻量化: \[ k^*=\arg\min_j\|z_e(x)-e_j\|_2,\quad z_q(x)=e_{k^*} \]

训练损失由重建项 + codebook 项 + commitment 项组成: \[ \mathcal{L}= -\log p(x\mid z_q(x)) +\|\text{sg}[z_e(x)]-e\|_2^2 +\beta\|z_e(x)-\text{sg}[e]\|_2^2 \]

之后即可对离散图像 token 做自回归建模。

VQ-GAN

VQ-GAN 在 VQ-VAE 的基础上加入对抗/感知损失来提升 tokenizer 质量,再对得到的离散 token 训练 AR Transformer。

课上的实际收益:

  • 序列长度显著降低(例如 \(32\times32=1024\));
  • 比直接像素建模更可行,质量与计算开销更平衡。

统一文本 token 和图像 token

训练完 tokenizer 后:

  1. 将图像 token 加入 LM 词表。
  2. 在混合的文本+图像 token 序列上训练/微调。
  3. 用 de-tokenizer 把图像 token 还原为像素图像。

课程案例:DALL-E(2021)、Chameleon(Meta,2024)。

Lec12 要点

  • 像素级 AR 概念直观,但扩展困难。
  • VQ-VAE/VQ-GAN 这类离散 tokenizer 是 AR 多模态生成的关键桥梁。
  • 统一 token 建模的代价是 tokenizer 引入的信息损失。

总结

  • Lec11: 关注“如何把图像编码给语言模型”。
  • Lec12: 关注“如何用 token 化范式生成图像”。
  • 两节合起来就是多模态系统三件事:
    表示(encode)+ 对齐(alignment)+ 生成(decode)

本文基于 CMU 11-711 Advanced NLP(Sean Welleck)Multimodal Modeling I & II 课件整理。