你打开一个 AI 绘图工具,输入一句话:
一只橘猫,坐在月光下,柔和毛发,电影感光线。
屏幕上先出现的不是猫。
而是一团雪花。
然后,混乱里似乎冒出一个模糊的圆。圆的上方长出两只耳朵。接着是眼睛、鼻子、胡须、毛发、阴影。几十步之后,一只猫从噪声里浮出来。
这件事看起来像魔法。
但扩散模型最美的地方,恰恰是它把魔法拆成了一个非常朴素的问题:
这一步,哪里不像一张真实图片?
AI 并不是从虚无中画出一只猫。
它先学会一万种"猫是如何被噪声毁掉的",再学会把这个毁掉的过程一步步倒放。

说明:本文配图是为了讲清原理而制作的示意图,不是真实扩散模型输出。真实模型工作在高维像素或潜空间里,不会真的画这只卡通猫。
一、生成不是画画,是修复
我们习惯把 AI 绘图想象成一个画家。
画家拿起笔,从空白画布开始:
空白画布 -> 草稿 -> 线稿 -> 上色 -> 成图
但扩散模型不是这样。
它更像一个修复师。
它拿到的不是空白画布,而是一张被严重污染的图片。它的任务不是"凭空画猫",而是判断:
如果这张图原本是一只猫,那么哪些噪声应该被去掉?
所以扩散模型的生成过程更像:
纯噪声 -> 少一点噪声 -> 再少一点噪声 -> 轮廓 -> 细节 -> 图片
它没有一次性回答"猫长什么样"。
它只是在每一步回答一个小问题:
刚才混进来的那一点噪声,大概是什么?
然后把它减掉。
再问一次。
再减掉一点。
重复几十次、几百次,直到噪声背后显出结构。
这就是扩散模型最核心的反直觉:
创造,不是从无到有。创造是连续的修复。
二、先学会破坏
要理解扩散模型,先不要看生成过程。
先看训练过程。
假设我们有一张清晰的猫图,记作 x0。
训练时,模型会做一件看起来很奇怪的事:
往猫身上加噪声。
第一步,加一点点噪声,猫还很清楚。
第二步,再加一些,猫开始模糊。
第三步,继续加,轮廓逐渐消失。
最后,猫完全不见,只剩一团随机噪声。

这个过程叫正向扩散过程。
写成公式,大概是这样:
$$ x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon $$
不用被公式吓到。它只说了一句话:
第 t 步的图片 = 一部分原图 + 一部分噪声。
其中:
x0是原来的清晰图片;xt是第 t 步被污染后的图片;ε是随机噪声;α控制这一刻还保留多少原图。
一开始,原图占大头,噪声很少。
越往后,原图越来越少,噪声越来越多。
到最后,原图信息几乎完全消失。
这就是"扩散"这个名字的来源。
它很像一滴墨水滴进水里:最开始墨水集中在一点,后来一点点散开,最后整个杯子都变成淡淡的颜色。局部结构消失了,随机性占据了全部。
如果用《看见物理(五):熵》的语言说:
正向扩散,就是熵增。
清晰图片是低熵状态。
纯噪声是高熵状态。
猫变成噪声,就是秩序被抹平。
三、再学会倒放
如果训练只是把猫毁掉,那模型当然不会画画。
关键在下一步。
模型会被问一个问题:
我给你一张第 t 步的带噪图片,你能猜出刚才加进去的噪声是什么吗?
也就是说,模型看到:
带噪图片 xt
时间步 t
然后输出:
预测噪声 εθ(xt, t)
训练目标很简单:
$$ \text{Loss} = |\epsilon - \epsilon_\theta(x_t, t)|^2 $$
翻译成人话:
真实噪声和模型猜的噪声,差得越远,损失越大。
模型并不是直接学习"猫是什么"。
它学习的是:
在各种污染程度下,真实图片和随机噪声之间的差别在哪里。
这件事听起来绕,但非常关键。
因为只要模型能猜出噪声,就能把噪声减掉:
更干净的图 ≈ 带噪图 - 预测噪声

这就是扩散模型的"倒放"。
训练时,我们从清晰图片走向噪声:
x0 -> x1 -> x2 -> ... -> xT
生成时,我们从噪声走回图片:
xT -> xT-1 -> xT-2 -> ... -> x0
注意这里的美感:
模型不是学会了直接画猫。它学会了在任意混乱程度下,指出回到真实世界的方向。
如果梯度下降是在损失地形上找下坡方向,那么扩散模型就是在噪声海洋里找"更像真实图片"的方向。
每一步都很小。
但小步连续起来,就会出现一只猫。
这和《马尔科夫的幽灵》里讲的状态链很像:
当前状态 -> 下一步状态 -> 再下一步状态
LLM 预测下一个 token。
Agent 选择下一步行动。
扩散模型选择下一步去噪。
三者都不是一次性完成奇迹,而是在一个状态空间里,反复回答:
下一步往哪里走?
四、噪声里为什么会有猫?
这里会出现一个自然的问题:
既然一开始是纯噪声,里面根本没有猫,那猫从哪里来?
答案是:
猫不在那一团噪声里。猫在模型学到的概率分布里。
这句话很重要。
一张纯噪声图片,单独看,什么都不是。
但模型不是单独看它。模型带着训练中学到的"真实图片分布"来看它。
它见过大量猫、狗、树、脸、街道、建筑。它不记住某一张猫图,而是学到:
真实图片通常有哪些局部结构?
眼睛和鼻子的关系是什么?
毛发纹理大概如何连续?
边缘如何从背景里分离?
光影怎样才像自然世界?
所以生成时,模型做的不是"从噪声里发现一只已经存在的猫"。
它做的是:
从随机起点出发,沿着概率分布的坡度,走向一个更像真实图片的区域。
在扩散模型的理论里,这个方向常常被叫做 score:
$$ \nabla_x \log p(x) $$
可以粗略理解为:
在当前这个位置,往哪里走,图片会更像训练数据?
这就是为什么同样从随机噪声开始,不同随机种子会生成不同图片。
起点不同,最终走到的山谷也不同。
但只要模型学得足够好,这些山谷都会落在"真实图片分布"附近。
它们不是训练集里的原图复印件。
它们是这个概率分布允许的一个新样本。
五、训练数据如何把文字和图像接上
上面只解释了模型怎么学会"去噪"。
但真实的 AI 绘图工具还有一个更关键的问题:
它怎么知道这一团噪声应该变成"橘猫",而不是"汽车"或"城堡"?
答案藏在训练数据里。
现代文生图模型通常不是只看孤立图片,而是看大量图文对:
图片:一只橘猫坐在窗台上,背景有月光
文字:orange tabby cat sitting on a windowsill, moonlight, soft fur
这样的配对可能来自人工标注、网页 alt 文本、图片标题、图文数据集,也可能很嘈杂。训练规模越大,模型见到的组合越丰富:
"cat" 经常和耳朵、胡须、眼睛、毛发纹理一起出现
"moonlight" 经常和冷色光、暗背景、边缘高光一起出现
"cinematic lighting" 经常和强对比、景深、侧光一起出现
这里要稍微纠正一个常见直觉。
模型通常不是把原始像素和字词 token直接放进同一个抽屉里。
在 Stable Diffusion 这类模型里,图片会先经过 VAE 压缩成 latent。这个 latent 仍然有空间位置,可以粗略理解成一格一格的图像 token,但它们已经不是单个像素,而是压缩后的视觉特征。
文字则走另一条路:
提示词 -> 分词 -> text tokens -> Embedding -> 文本向量
然后,图像 latent 的每个位置和文字 token 的向量通过 cross-attention 相遇:
图像位置:我现在应该看提示词里的哪个词?
文字 token:"cat"、"moonlight"、"soft fur" 分别提供方向
attention 权重:这一块图像更该听哪个词
更技术一点说:
图像 latent 特征 -> Query
文字 token 向量 -> Key / Value
Query 和 Key 的相似度 -> 决定这一块图像关注哪些词
所以,与其说"像素 token 和字词 token 被硬塞进同一个 Embedding",不如说:
图像特征和文字 token 被投到可以互相比较、互相影响的向量空间里。
训练时,模型反复看到"猫"这个词和猫的视觉结构一起出现。
反向传播会慢慢调整参数,让包含 "cat" 的文字向量,在去噪时更容易支持耳朵、眼睛、胡须、毛发这些结构;让包含 "moonlight" 的文字向量,更容易支持冷色光、暗背景和边缘高光。
这不是模型背下了"cat = 两只耳朵 + 胡须"这条规则。
而是大量图文对把一件事压进了参数里:
哪些文字,应该把噪声往哪些视觉结构上拉。
完整训练过程可以粗略写成这样:
1. 取一张图片和它的文字说明;
2. 用 VAE 把图片压缩成 latent z0;
3. 随机选一个时间步 t;
4. 给 z0 加噪,得到 zt;
5. 把文字说明变成 text token Embedding;
6. 让 U-Net 同时看到 zt、t、文字 Embedding;
7. 让它预测刚才加进去的噪声 ε;
8. 预测错了,就用损失函数和反向传播更新参数。
这就是为什么生成时只输入一句话,模型也能"听懂"大致方向。
因为在训练时,它已经看过无数次:
这句话附近,应该长出什么样的视觉结构。
六、文字如何控制图像
那提示词又是怎么起作用的?
为什么输入"猫",它就更容易生成猫;输入"赛博朋克城市",它就生成霓虹灯和高楼?
关键是:
文字也会先变成向量。
提示词不是直接变成像素。
它会先经过文本编码器,变成一组向量表示。然后在每一步去噪时,这组文字向量都会参与判断:
这一步去噪之后,图像是不是更像这句话?

没有文字条件时,模型只需要生成"像真实图片"的东西。
有文字条件时,模型要同时满足两个要求:
像真实图片
像这句话
所以提示词不是最后贴上去的标签。
它从第一步去噪就开始参与。
每一步,模型都被文字向量轻轻拉偏一点:
别只变成一张普通图片。
朝“橘猫”走。
朝“月光”走。
朝“柔和毛发”走。
真实系统里,这个"拉偏"还会被专门放大。
比如 classifier-free guidance 会让模型做两次判断:
不看提示词时,下一步该怎么去噪?
看提示词时,下一步该怎么去噪?
两者的差,就是文字提示词施加的方向。生成器再把这个方向乘上一个系数:
最终方向 = 无提示词方向 + guidance scale × 文字带来的偏移
guidance scale 越大,图片越努力贴近提示词,但也更容易过度用力,出现僵硬、失真或细节异常。
这和《万物皆向量》的主题正好接上:
文字、图像、风格、构图,最后都要在某个向量空间里相遇。
AI 绘图的底层不是"语言变成图片"。
更准确地说,是:
文字向量在每一步去噪中,改变图像向量的运动方向。
七、为什么它比 GAN 稳
在扩散模型流行之前,图像生成领域最耀眼的路线是 GAN。
GAN 的思路很戏剧化:
一个模型负责造假图。
另一个模型负责验真假。
造假者越来越会骗,鉴别者越来越会抓。两者对抗,最后造假者学会生成逼真的图片。
这个想法很漂亮,但训练很难。
因为它像让两个学生互相考试:
生成器太弱 -> 鉴别器一眼看穿 -> 生成器学不到东西
鉴别器太弱 -> 生成器随便糊弄 -> 图片质量上不去
两者不平衡 -> 训练崩掉
扩散模型的气质完全不同。
它不安排两个模型打架。
它把一个巨大问题拆成很多小问题:
第 999 步:从纯噪声里去掉一点噪声
第 998 步:再去掉一点
第 997 步:再去掉一点
...
第 1 步:修最后一点细节
每一步都不要求天才。
每一步只要求模型把方向判断得稍微准一点。
这就是扩散模型稳定的原因之一:
它不是让模型一次跳到答案,而是给模型修了一千级台阶。
台阶多,所以慢。
但台阶多,也让它稳。
早期扩散模型生成一张图需要很多步,这也是它被批评"慢"的原因。后来的 DDIM、Latent Diffusion、Consistency Models 等方向,都在努力减少步数。
但无论步数怎么压缩,核心精神仍然没变:
把生成拆成连续的、可学习的去噪过程。
八、Stable Diffusion 为什么能跑起来
如果真的在高清图片的每个像素上做扩散,成本会非常高。
一张 1024×1024 的 RGB 图片,有三百多万个数字。
每一步去噪都在这么大的空间里跑,太贵。
Stable Diffusion 的关键改造是:
不要直接在像素空间里扩散。先把图片压缩到潜空间。
所谓潜空间(latent space),可以理解为图片的压缩表示。
不是每个像素都保留,而是保留对图像结构最重要的那些信息:
大致构图
物体位置
颜色关系
纹理倾向
语义结构
然后,扩散模型主要在这个更小的潜空间里工作。

这件事有点像你不直接修改一部高清电影的每一帧,而是先写一个分镜脚本、灯光方案和角色位置,再把它还原成画面。
当然这只是直觉。
技术上,Stable Diffusion 使用的是变分自编码器(VAE)把图片压缩成 latent,再在 latent 上做扩散,最后由解码器还原成图片。
这一步让高分辨率图像生成从"实验室玩具"变成了"普通显卡能跑的工具"。
也让 AI 绘图真正走向大众。
九、从熵增到熵减
现在我们可以把整件事重新看一遍。
正向过程:
清晰图片 -> 加噪 -> 更乱 -> 纯噪声
这是熵增。
反向过程:
纯噪声 -> 去噪 -> 更有结构 -> 清晰图片
这是熵减。
看起来,扩散模型像在反抗热力学第二定律。
它把混乱变成秩序。
它从雪花里恢复出猫。
但它没有真的违反物理。
因为这个"熵减"不是免费的。
它背后有训练数据,有 GPU,有电力,有散热,有数据中心的空调。你在屏幕上看到一只猫从噪声中浮现,现实世界里有另一部分能量正在变成废热。
这正好回到《看见物理(五):熵》里的那句话:
信息不是虚无的东西。信息有物理代价。
扩散模型真正做的,是把人类图像世界中的结构压进神经网络参数里。
生成时,它再用这些结构去约束随机噪声。
所以更准确地说:
扩散模型不是让宇宙倒放,而是用已经学到的信息,局部地逆转混乱。
十、这和 LLM 是同一种思想吗?
表面上看,LLM 和扩散模型完全不同。
一个写字,一个画图。
一个每次预测下一个 token,一个每次去掉一点噪声。
但底层有一种很深的相似性:
LLM:
当前文本状态 -> 下一个 token 的概率分布 -> 采样
扩散模型:
当前噪声状态 -> 下一步更干净图像的概率分布 -> 采样
LLM 问的是:
在这段上下文后面,下一个词最合理是什么?
扩散模型问的是:
在这团噪声里面,下一步往哪里去更像真实图片?
Agent 问的是:
在当前环境状态下,下一步行动最合理是什么?
三者都在做同一件事:
在不确定中,一步步选择更合理的下一个状态。
这里可以和《马尔科夫的幽灵》接上。
马尔科夫链给了我们一个最小框架:
状态 -> 下一步
扩散模型把这个框架放进图像生成里:
噪声状态 -> 下一步去噪
LLM 把它放进语言里:
上下文状态 -> 下一个 token
Agent 把它放进行动里:
环境状态 -> 下一步动作
AI 时代很多看似不同的技术,背后都藏着这条线:
智能不是一次性抵达答案,而是在状态空间里连续修正方向。
十一、从噪声中看见世界
现在再回到开头那只猫。
它不是藏在噪声里,等 AI 把它挖出来。
也不是模型像人类画家一样,先在脑中想象一只猫,再把它画到画布上。
真正发生的是:
- 人类把大量图片和文字说明配对交给模型;
- 模型把图片压缩成 latent,把文字变成 token Embedding;
- 模型学会这些 latent 被噪声破坏时的规律;
- 模型学会在文字条件下判断"更像这句话里的真实图片"的方向;
- 生成时,文字提示词把去噪方向进一步拉向"猫"、“月光”、“柔和毛发”;
- 一步一步,随机噪声被约束成一个具体图像。
所以扩散模型的秘密不是想象力。
它的秘密是:
可逆的破坏。
它先把世界拆散,再学习如何把世界拼回来。
它先让猫消失在噪声里,再学习如何让猫重新出现。
这就是扩散模型的数学美学:
生成的本质,不是凭空创造。
生成的本质,是给噪声一个方向。
参考与延伸
- Jascha Sohl-Dickstein et al., 2015, Deep Unsupervised Learning using Nonequilibrium Thermodynamics —— 早期把非平衡热力学和扩散式生成模型连接起来的经典论文。
- Jonathan Ho, Ajay Jain, Pieter Abbeel, 2020, Denoising Diffusion Probabilistic Models —— DDPM,现代扩散模型的重要转折点。
- Yang Song et al., 2021, Score-Based Generative Modeling through Stochastic Differential Equations —— 用随机微分方程统一 score-based model 和扩散模型。
- Robin Rombach et al., 2022, High-Resolution Image Synthesis with Latent Diffusion Models —— Stable Diffusion 背后的 Latent Diffusion 思想。
- Jonathan Ho, Tim Salimans, 2022, Classifier-Free Diffusion Guidance —— 解释无分类器引导如何让模型更听提示词。
- Alec Radford et al., 2021, Learning Transferable Visual Models From Natural Language Supervision —— CLIP,用图文对学习图像和文字之间的语义对齐。
本公众号延伸阅读
- 《看见物理(五):熵——承认无知的勇气》:理解正向扩散为什么是熵增。
- 《玻尔兹曼的遗产》:理解概率分布、Temperature 和 AI 生成之间的物理暗线。
- 《马尔科夫的幽灵——从预测下一个词到预测下一步行动》:理解"状态 -> 下一步"这条最小语法。
- 《万物皆向量——当 AI 选择用数学理解世界》:理解文字提示词为什么要先变成向量。

