一张图
是怎么从
一片雪花点
长出来的?
Stable Diffusion 的核心做的是一件听起来非常反直觉的事: 它先把图片揉成噪声,再学着一步一步把噪声"擦"回图。 这个页面用动画和滑块带你看懂这件事——不需要数学。
它做的事其实很像雕塑。
米开朗琪罗有一句被引滥的话:"雕像本来就在石头里,我只是把多余的部分凿掉。" Stable Diffusion 的工作方式几乎是这句话的字面翻译——只不过它的"石头"是一片随机噪声。
从一整块石头里
雕塑家盯着一块毫无意义的大理石,脑子里已经有了那个雕像。他要做的就是不停地凿、不停地磨,把不属于雕像的部分一点点去掉。
"雕像本来就在石头里。"
— 米开朗琪罗(据说)
从一片噪声里
SD 盯着一片彻底随机的噪声,它的"脑子"里也有一个雕像——那是它在几十亿张图上学会的"图应该长什么样"。它一步步把不属于图的噪声擦掉。
"这片噪声里藏着一只猫。我的工作是擦掉不是猫的部分。"
— SD(如果它会说话)
先看反过来:把图变成噪声。
要让 SD 学会"擦噪声",得先教它"加噪声"是什么样。这一步叫 前向扩散(Forward Diffusion)——把一张干净的图,慢慢加噪到完全看不出来。 拖动滑块,看一只"猫"是怎么消失的。
每一步都在原图上叠一点高斯噪声。1000 步之后,图像和纯噪声统计上无法区分——这是数学上能证明的。
模型看到任意一个 t 时刻的带噪图,被要求猜出加进去的噪声是什么。猜得准 → 它就学会了反向擦噪。
现在反过来——一步一步把噪声擦回图。
这才是 SD 真正在干的事:反向扩散(Reverse Diffusion)。 模型从纯噪声出发,每一步都问自己一个问题—— "如果这张图里藏着一只猫,那此刻应该擦掉哪些像素?" 然后擦一点点,再问,再擦。
还没开始。左边是从高斯分布里随便抽的一张纯噪声 x_T——任何一次"生成"都从这里启程。
U-Net 输出的并不是图,而是它判断要从 x_t 里减掉的噪声。所以右边那张本来就该看起来像噪声——只不过是"有方向的噪声"。
SD 不是一个模型,是三个零件拼出来的。
第三章你看到的"加噪"和第四章的"去噪",其实只是 SD 流水线的中间一段。 完整的 Stable Diffusion 是三个独立训练的神经网络串在一起。 点一下任意一个零件,看它在干嘛。
Text Encoder
CLIP / T5
把你写的文字变成一串数字(向量),这串数字代表'图里应该有什么'。
U-Net
Denoiser / DiT
干苦力活的。每一步都看一眼当前带噪图、读一遍文字向量,然后猜出该擦掉哪些噪声。
VAE
Decoder
翻译官。SD 不在原图上去噪(太贵),而是在一个'压缩版的图'里干活,最后由 VAE 把它解压回 512×512 像素。
每一个零件都是一篇博士论文。但你只需要知道它们的分工:文字 → 向量 → 在压缩空间里反复去噪 → 解压成图。下面那张 GIF 是 SD 1.5 一次完整生成的全过程。
"你说的话它要听多死?"——这就是 CFG。
Classifier-Free Guidance(CFG scale)是 SD 里最常被调的参数。 它控制模型对你 prompt 的"遵从程度"。 数值低 → 模型自由发挥,可能跑题;数值高 → 严格听话,但高过头会过曝、扭曲、崩坏。
跑题 3 7
甜点 12 20
烧焦
CFG=7 是大多数 SD 模型的甜点:模型既听 prompt,又保留细节合理性。
SD 每一步同时跑两次:一次带 prompt、一次不带。然后把"带 prompt 的方向"放大 CFG 倍。CFG=1 等于不放大,CFG=20 等于把方向夸张 20 倍——所以图会"用力过猛"。
串起来跑一遍。
现在你已经认识了所有零件。最后一节交互——按下 GENERATE, 看一次完整的 SD 推理过程:文字进来、变成向量、在潜空间里被反复去噪、最后被 VAE 解压成图。 这不是真在跑模型(你的浏览器跑不动),但每一步的视觉变化都对应真实流程。
所以——
Stable Diffusion 是一个学会了"擦噪声"的网络。 它在潜空间里反复擦, 每一步都被你的 prompt 通过 U-Net 引导着擦的方向, 最后让 VAE 把擦出来的东西翻译回像素。
就这么简单——也就这么复杂。每一个零件都还能再展开成一篇博士论文。下面是几个你可以接着读下去的地方。
Lilian Weng
What are Diffusion Models?
从 DDPM 到 Score-based,最权威的中文译本来自 Lilian 本人 · OpenAI
lilianweng.github.io → 可视化 · 入门Jay Alammar
The Illustrated Stable Diffusion
本页的精神先辈。配图比这页还多。
jalammar.github.io → 动手 · 代码Hugging Face
🤗 Diffusers Docs
三行 Python 跑起 SD:from diffusers import StableDiffusionPipeline
ComfyUI
把每个零件画成节点连起来,所见即所得。社区的工作流之王。
github.com/comfyanonymous → 论文 · 原始High-Resolution Image Synthesis
with Latent Diffusion Models
Stable Diffusion 的亲爹论文,CVPR 2022。22 页,公式不多。
arxiv.org/abs/2112.10752 → 代码注释 · 进阶The Annotated Diffusion Model
把 DDPM 论文的每一行公式翻译成 PyTorch 代码——边读公式边读代码的最快方式。
huggingface.co/blog →