多模态大模型:看图、听声、画画
第 01 课说过万物皆向量,第 28 课说过文字要先切成 token。那一张照片、一段语音、一秒视频呢?答案出奇地一致:切块,编码,变成 token,然后交给同一个 Transformer。
第一步:把一张图,切成一句「话」
回想第 28 课:文字要先切成 token,再查表变成向量,Transformer 才读得懂。图像本来就是数字——一张 224×224 的彩色图,是 224 × 224 × 3 = 150,528 个数。那能不能每个像素当一个 token?
这正是 2020 年 ViT(Vision Transformer)的做法,论文标题就叫「一张图值 16×16 个词」:把图切成 16×16 像素的小块(patch),每块展平成一个长向量,再用一层线性变换(第 05 课)投影成 Transformer 的输入维度,最后加上位置编码——让模型知道哪一块在左上、哪一块在右下(第 27 课)。
逐像素:50,176 个 token → 切块后缩短了 256 倍
注意力的成本:50,176² ≈ 25 亿 vs 196² = 38,416 ——差约 6.5 万倍
亲手切一切,感受块大小和图片大小怎样影响 token 数:
第二步:给语言模型装一双「眼睛」
有了图像 token,接下来怎么让一个只会读文字的大语言模型读懂它们?最早也是最流行的做法是「拼接」:
先训练(或借用)一个视觉编码器,专门把图像变成一串向量。这里有个关键的老朋友——2021 年的 CLIP:它用几亿对「图片 + 描述」做对比学习,让配对的图和文字的向量夹角很小、不配对的夹角很大(还记得第 02 课的点积和夹角吗?)。于是图像向量和文字向量落进了同一个语义空间:「猫的照片」的向量,会靠近「一只猫」这句话的向量。
再在视觉编码器和 LLM 之间接一个很小的投影层,把视觉向量「翻译」成 LLM 能接受的维度。2023 年的 LLaVA 就是这么做的:图像 token 被当作一种「外语单词」,和文字 token 排在同一个序列里,LLM 照常预测下一个 token。
拼接式像是「先请了个翻译,再让翻译把图讲给语言模型听」:视觉和语言只在浅层的接口处对接。而且视觉编码器常常有固定的输入分辨率,遇到高清大图、密密麻麻的小字、复杂图表就容易看不清——所以后来才有了把大图切成多张小图分别处理、再配一张缩略图看全局的「动态切图」做法。
第三步:不请翻译——从一开始就「多语种」
能不能不要「外挂」,而是从预训练的第一天起,就让文字、图像、音频的 token 混在同一堆数据里、由同一个 Transformer 联合训练?这就是原生多模态(natively multimodal)。2024 年以来,主流的旗舰模型几乎都朝这个方向走。
「原生」不等于「用一个万能的 tokenizer 处理所有东西」。图像、声音依然各有各的切块或编码方式(视觉编码器、音频编码器),真正的区别在于:所有模态共享同一个 Transformer 主干,并且一起训练,模态之间的对齐是在大规模联合训练中学出来的,而不是靠后期「缝」上去的。
声音是最有代表性的例子。传统语音助手是一条三段流水线:语音识别(ASR)→ 大模型 → 语音合成(TTS)。每一段都要等前一段做完,延迟层层叠加;更糟的是,文字化的那一步把语气、情绪、停顿、背景声全丢了。
端到端的做法是:用音频编码器把波形压缩成一串离散的「音频 token」,让模型直接听、直接说。这样它能听出你在叹气,能在你插话时被打断,响应延迟也能降到几百毫秒的量级——接近人和人对话的节奏。2024 年的 GPT-4o 就是这一路线的代表。
反过来:让模型「画」出来——扩散与自回归
前面都是「看」:图像在输入端。让模型输出图像,是另一件事。主流有两条路:
扩散的直觉很有意思:把一张清晰图变成噪声很容易——往里一点点加随机噪声就行。那反过来,只要训练一个网络学会「看着一张带噪声的图,猜出里面被加了什么噪声」,就能一步步把噪声减回去。
取一个「像素」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)。把视频看成「图像 + 时间」,就是视频生成;而「一个模型既能看懂、又能画出来」——把自回归的文字理解和扩散的图像生成统一起来——是当下的热门方向之一。
代价:token 会爆炸,而且「看」不等于「看懂」
多模态很诱人,但它的账单相当吓人。以视频为例:
每帧 256 个图像 token → 240 × 256 = 61,440 个 token
一段十秒的短片,就占掉了 128K 上下文的近一半。所以实际会先抽帧、降分辨率、合并相邻块、只保留变化的部分。
视觉模型常在这些地方出错:精确计数(这张图里有几个人?)、空间关系(谁在谁的左边)、图中的小字和图表。更麻烦的是它会幻觉:图里没有的东西,它可能自信满满地「描述」出来。看图说话的流畅,不等于真的看清了。
一张图、一段音频里可以夹带人眼不易察觉的文字,诱导模型执行它本不该做的事——这叫提示词注入。当模型开始替你读网页、看截图、操作电脑时,这个风险会变得非常现实,我们会在下一课专门讲。
总结
多模态的核心套路只有一句:把任何模态切块、编码成 token,交给同一个 Transformer。图像用 ViT 切块;拼接式用视觉编码器 + 投影层,原生多模态则从头联合训练;生成图像走扩散或自回归两条路。代价是 token 爆炸,以及看不清、会幻觉。
💡 用大白话梳理:这一课的核心直觉
- 切块:224×224 的图按 16×16 切成 196 个 token,比逐像素少 256 倍;再加位置编码。
- 拼接式:视觉编码器(如 CLIP 系)→ 投影层 → 与文字 token 同序列输入 LLM;图像 token 是「外语单词」。
- 原生多模态:各模态在同一个 Transformer 里联合训练;语音端到端不再丢失语气、延迟更低。
- 扩散:前向加噪很容易,训练网络预测噪声,生成时从纯噪声一步步去噪;常在潜空间里做,骨架用 Transformer。
- 代价:视频 token 爆炸(10 秒 ≈ 6 万 token);计数、空间关系、小字易错;有幻觉与提示词注入风险。
学习小测验
动动脑筋:核心直觉小测验(选出你的答案后点击「提交」,即可查看生动通俗的详细解析)
40 智能体:从会说话到会做事
模型、工具与循环,怎样组成一个能执行任务的系统?