LESSON 39 · 卷IV 大语言模型

多模态大模型:看图、听声、画画

第 01 课说过万物皆向量,第 28 课说过文字要先切成 token。那一张照片、一段语音、一秒视频呢?答案出奇地一致:切块,编码,变成 token,然后交给同一个 Transformer。

第 1 站

第一步:把一张图,切成一句「话」

回想第 28 课:文字要先切成 token,再查表变成向量,Transformer 才读得懂。图像本来就是数字——一张 224×224 的彩色图,是 224 × 224 × 3 = 150,528 个数。那能不能每个像素当一个 token?

一张 224×224 的图有 50,176 个像素。如果每个像素当 1 个 token,会出什么问题?

这正是 2020 年 ViT(Vision Transformer)的做法,论文标题就叫「一张图值 16×16 个词」:把图切成 16×16 像素的小块(patch),每块展平成一个长向量,再用一层线性变换(第 05 课)投影成 Transformer 的输入维度,最后加上位置编码——让模型知道哪一块在左上、哪一块在右下(第 27 课)。

224 × 224 的图切块1234每块 16×16×3 = 768 个数先展平成一个长向量线性投影+ 位置编码1234…共 14 × 14 = 196 个「图像 token」一张图 = 一句由 196 个「视觉单词」组成的话
图 39-1ViT 的切块流程:图 → 小块 → 展平 → 线性投影 + 位置编码 → 图像 token。此后它们和文字 token 没有本质区别。
224 ÷ 16 = 14 → 14 × 14 = 196 个 token  每块 16 × 16 × 3 = 768 个数
逐像素:50,176 个 token → 切块后缩短了 256 倍
注意力的成本:50,176² ≈ 25 亿 vs 196² = 38,416 ——差约 6.5 万倍

亲手切一切,感受块大小和图片大小怎样影响 token 数:

LAB · 33-A
图片切块器:图越大、块越小,token 就爆炸式增长
图片边长(像素)–
每块边长(像素)–
切成的块数 = token 数
–
每块含多少个数
–
占 128K 上下文
–
10 秒视频(24 帧/秒)
–
第 2 站

第二步:给语言模型装一双「眼睛」

有了图像 token,接下来怎么让一个只会读文字的大语言模型读懂它们?最早也是最流行的做法是「拼接」:

先训练(或借用)一个视觉编码器,专门把图像变成一串向量。这里有个关键的老朋友——2021 年的 CLIP:它用几亿对「图片 + 描述」做对比学习,让配对的图和文字的向量夹角很小、不配对的夹角很大(还记得第 02 课的点积和夹角吗?)。于是图像向量和文字向量落进了同一个语义空间:「猫的照片」的向量,会靠近「一只猫」这句话的向量。

再在视觉编码器和 LLM 之间接一个很小的投影层,把视觉向量「翻译」成 LLM 能接受的维度。2023 年的 LLaVA 就是这么做的:图像 token 被当作一种「外语单词」,和文字 token 排在同一个序列里,LLM 照常预测下一个 token。

图像像素视觉编码器ViT / CLIP(图 → 一串向量)投影层小 MLP图像token文字token大语言模型照常预测下一个 token图像 token 被当成一种「外语单词」,和文字 token 排在同一个序列里LLM 本身几乎没改,只是多学会了读这门「外语」
图 39-2拼接式多模态模型:图像 → 视觉编码器 → 投影层 → 与文字 token 拼成一个序列 → 大语言模型。训练通常先只训练投影层做「对齐」,再整体做指令微调。
⚠️ 遇到的拦路虎 · 方案局限

拼接式像是「先请了个翻译,再让翻译把图讲给语言模型听」:视觉和语言只在浅层的接口处对接。而且视觉编码器常常有固定的输入分辨率,遇到高清大图、密密麻麻的小字、复杂图表就容易看不清——所以后来才有了把大图切成多张小图分别处理、再配一张缩略图看全局的「动态切图」做法。

第 3 站

第三步:不请翻译——从一开始就「多语种」

能不能不要「外挂」,而是从预训练的第一天起,就让文字、图像、音频的 token 混在同一堆数据里、由同一个 Transformer 联合训练?这就是原生多模态(natively multimodal)。2024 年以来,主流的旗舰模型几乎都朝这个方向走。

先澄清一个常见误会

「原生」不等于「用一个万能的 tokenizer 处理所有东西」。图像、声音依然各有各的切块或编码方式(视觉编码器、音频编码器),真正的区别在于:所有模态共享同一个 Transformer 主干,并且一起训练,模态之间的对齐是在大规模联合训练中学出来的,而不是靠后期「缝」上去的。

声音是最有代表性的例子。传统语音助手是一条三段流水线:语音识别(ASR)→ 大模型 → 语音合成(TTS)。每一段都要等前一段做完,延迟层层叠加;更糟的是,文字化的那一步把语气、情绪、停顿、背景声全丢了。

端到端的做法是:用音频编码器把波形压缩成一串离散的「音频 token」,让模型直接听、直接说。这样它能听出你在叹气,能在你插话时被打断,响应延迟也能降到几百毫秒的量级——接近人和人对话的节奏。2024 年的 GPT-4o 就是这一路线的代表。

第 4 站

反过来:让模型「画」出来——扩散与自回归

前面都是「看」:图像在输入端。让模型输出图像,是另一件事。主流有两条路:

AUTOREGRESSIVE
自回归:一块一块「写」
把图像也切成离散的 token,像写文章一样一个接一个预测,和 LLM 的生成方式完全一致,方便「文字、图像」统一在一个模型里。
DIFFUSION
扩散:从噪声里「雕」出来
从一团纯噪声出发,反复去掉一点噪声,一步步露出图像。是目前图像和视频生成的主流路线。

扩散的直觉很有意思:把一张清晰图变成噪声很容易——往里一点点加随机噪声就行。那反过来,只要训练一个网络学会「看着一张带噪声的图,猜出里面被加了什么噪声」,就能一步步把噪声减回去。

t=0 原图t=1t=2t=3t=T 纯噪声前向:逐步加噪(不用学,随便写个公式就行)反向:训练网络学会「每一步去掉一点噪声」——生成时从纯噪声出发,一步步雕出图像
图 39-3扩散模型:上方是「不用学」的前向加噪,下方是需要训练的反向去噪。生成新图时,从纯噪声开始,反复运行反向去噪。
前向加噪:xt = √ᾱ · x₀ + √(1 − ᾱ) · ε  (ᾱ 越小,噪声越多)
取一个「像素」x₀ = 0.8,噪声 ε = −0.5,ᾱ = 0.5 → √ᾱ = √(1 − ᾱ) ≈ 0.707
xt = 0.707 × 0.8 + 0.707 × (−0.5) ≈ 0.566 − 0.354 = 0.212
训练:让网络看着 xt 预测 ε。假如它猜对了 ε̂ = −0.5,就能反推原图:
x₀ = (xt − 0.707 × ε̂) ÷ 0.707 = (0.212 + 0.354) ÷ 0.707 = 0.8 ✓

实际的模型(如 Stable Diffusion)还有两个关键设计:先用一个自编码器把图压缩到小得多的潜空间,在潜空间里去噪,省下大量计算;去噪网络的骨架,也从卷积网络逐步换成了 Transformer(DiT)。把视频看成「图像 + 时间」,就是视频生成;而「一个模型既能看懂、又能画出来」——把自回归的文字理解和扩散的图像生成统一起来——是当下的热门方向之一。

第 5 站

代价:token 会爆炸,而且「看」不等于「看懂」

多模态很诱人,但它的账单相当吓人。以视频为例:

10 秒视频 × 24 帧/秒 = 240 帧
每帧 256 个图像 token → 240 × 256 = 61,440 个 token
一段十秒的短片,就占掉了 128K 上下文的近一半。所以实际会先抽帧、降分辨率、合并相邻块、只保留变化的部分。
⚠️ 遇到的拦路虎 · 看不清,还会「脑补」

视觉模型常在这些地方出错:精确计数(这张图里有几个人?)、空间关系(谁在谁的左边)、图中的小字和图表。更麻烦的是它会幻觉:图里没有的东西,它可能自信满满地「描述」出来。看图说话的流畅,不等于真的看清了。

坑二:图片里也能藏指令

一张图、一段音频里可以夹带人眼不易察觉的文字,诱导模型执行它本不该做的事——这叫提示词注入。当模型开始替你读网页、看截图、操作电脑时,这个风险会变得非常现实,我们会在下一课专门讲。

第 6 站

总结

💡 章节速记 · 本课核心

多模态的核心套路只有一句:把任何模态切块、编码成 token,交给同一个 Transformer。图像用 ViT 切块;拼接式用视觉编码器 + 投影层,原生多模态则从头联合训练;生成图像走扩散或自回归两条路。代价是 token 爆炸,以及看不清、会幻觉。

💡 用大白话梳理:这一课的核心直觉

  • 切块:224×224 的图按 16×16 切成 196 个 token,比逐像素少 256 倍;再加位置编码。
  • 拼接式:视觉编码器(如 CLIP 系)→ 投影层 → 与文字 token 同序列输入 LLM;图像 token 是「外语单词」。
  • 原生多模态:各模态在同一个 Transformer 里联合训练;语音端到端不再丢失语气、延迟更低。
  • 扩散:前向加噪很容易,训练网络预测噪声,生成时从纯噪声一步步去噪;常在潜空间里做,骨架用 Transformer。
  • 代价:视频 token 爆炸(10 秒 ≈ 6 万 token);计数、空间关系、小字易错;有幻觉与提示词注入风险。
小测验

学习小测验

动动脑筋:核心直觉小测验(选出你的答案后点击「提交」,即可查看生动通俗的详细解析)

Q1ViT 为什么把图像切成 16×16 的小块(patch),而不是让每个像素都当一个 token?
Q2关于扩散模型的训练与生成,下面哪种说法最准确?