1. 从噪声到图像:扩散模型的核心思想与直觉
如果你最近关注过AI绘画、图像生成或者视频生成,那么“Diffusion Model”(扩散模型)这个词一定频繁地出现在你的视野里。从Stable Diffusion到DALL-E 2,再到Sora,这些令人惊叹的AI生成能力背后,都离不开扩散模型这一核心架构。李宏毅老师2023年的课程讲解,可以说是为我们这些从业者提供了一个绝佳的、深入浅出的原理梳理窗口。它不像一些论文那样充斥着复杂的数学公式,而是从最根本的“直觉”出发,一步步拆解这个看似复杂的模型是如何工作的。
简单来说,扩散模型解决的是一个“无中生有”的问题:如何让计算机从纯粹的随机噪声中,生成一张符合我们文字描述(或任何其他条件)的、逼真且富有细节的图像。它的核心思想非常巧妙,借鉴了物理学中的“扩散”概念:一个清晰的信号(比如一张猫的图片)会随着时间的推移,逐渐被噪声污染,最终变成一片完全随机的噪声。扩散模型所做的,就是学习这个过程的逆过程——如何从一片噪声中,一步步“去噪”,还原出我们想要的清晰图像。
这个过程听起来有点反直觉:我们为什么要先学会“破坏”(加噪),再去学“修复”(去噪)呢?这正是扩散模型的精妙之处。通过定义一个清晰、可控的“破坏”过程(前向扩散),模型在学习“修复”时就有了一个明确、可计算的目标。这比直接让模型从零开始学习生成复杂图像要稳定和高效得多。接下来,我们就沿着李宏毅老师梳理的脉络,深入这个“先破坏再重建”的世界,看看它到底是如何运作的,以及为什么它能成为当前生成式AI的基石。
2. 前向扩散:为图像注入可控的随机性
理解扩散模型,必须从它的“前半生”——前向扩散过程开始。这是整个模型的基石,也是一个确定性(非学习)的过程。我们可以把它想象成一个非常缓慢的“模糊化”或“老化”过程。
2.1 逐步加噪的数学描述
假设我们有一张原始图像,用数学表示为x₀。前向扩散过程的目标,是在T个时间步内,逐步向这张图像中添加高斯噪声(Gaussian Noise)。每一步的加噪操作都遵循一个简单的规则:
xₜ = √(1-βₜ) * xₜ₋₁ + √βₜ * εₜ
这里需要拆解一下每个符号的含义:
- xₜ和xₜ₋₁:分别代表第t步和第t-1步的图像。t从1到T。
- βₜ:这是一个预先定义好的、很小的正数序列(例如从0.0001线性增长到0.02),它控制了每一步添加的噪声量。βₜ 会随着t增大而缓慢增大,意味着越到后期,加入的噪声“力度”越强。
- εₜ:这是一个从标准正态分布中采样得到的随机噪声向量,即 εₜ ~ N(0, I)。
这个公式的直观理解是:下一步的图像xₜ,是由上一步图像xₜ₋₁按比例√(1-βₜ)保留,再加上一个按比例√βₜ缩放的全新随机噪声εₜ混合而成。因为βₜ很小,所以√(1-βₜ)接近1,√βₜ接近0,这意味着每一步图像的大部分信息都被保留,只混入了一点点新的噪声。
注意:这里使用√(1-βₜ)和√βₜ是为了保证无论βₜ如何取值,混合后图像的方差(能量)能保持稳定,这是一个重要的数学设计,确保了过程的稳定性。
2.2 重参数化技巧与任意步直达
如果我们需要一步步模拟从x₀到x_T的过程,计算会非常繁琐。但得益于高斯分布的良好性质,我们可以通过“重参数化技巧”直接计算出任意时间步t的图像xₜ,而无需迭代t次。
经过推导(李宏毅老师课程中给出了清晰的推导过程),我们可以得到:xₜ = √(ᾱₜ) * x₀ + √(1-ᾱₜ) * ε
其中:
- αₜ = 1 - βₜ
- ᾱₜ = Πᵢ₌₁ᵗ αᵢ,即从第1步到第t步所有αᵢ的连乘。
- ε是一个从标准正态分布采样的噪声。
这个公式是理解前向扩散的关键!它告诉我们,第t步的带噪图像 xₜ,可以直接由原始图像 x₀ 和一个噪声 ε 线性组合而成。系数√(ᾱₜ)和√(1-ᾱₜ)是预先计算好的常数。
这带来了一个巨大的工程优势:在训练时,我们不需要真的模拟T步扩散过程。我们可以随机采样一个时间步t,然后直接用上述公式合成出对应的xₜ。当t很大时,ᾱₜ会趋近于0,√(1-ᾱₜ)趋近于1,此时xₜ ≈ ε,就变成了一幅纯高斯噪声图像。这完美实现了我们“将任何图像转化为噪声”的目标。
2.3 前向过程的意义:提供一个清晰的学习目标
前向扩散过程本身不包含任何需要学习的参数。它的核心价值在于为逆向过程定义了一个完美、无歧义的学习目标。
- 它制造了“问题”:它生成了一系列中间状态{x₁, x₂, ..., x_T},每个状态都是原始图像和一定比例噪声的混合体。
- 它揭示了“答案”:对于任何一个中间状态xₜ,我们都知道它是从xₜ₋₁加上特定噪声εₜ得来的。那么在逆向过程中,如果我们想从xₜ回到xₜ₋₁,一个很自然的想法就是去预测当初加进来的那个噪声εₜ。
因此,前向过程将生成图像的复杂问题,转化为了一个相对简单的“去噪”问题。模型不需要一次性想象出完整的图像,只需要学习如何根据当前嘈杂的图像,预测出其中混杂的噪声成分。这一步的简化,是扩散模型得以成功训练的关键。
3. 逆向扩散:神经网络学习去噪的艺术
如果说前向扩散是一个已知的、简单的物理过程,那么逆向扩散就是我们需要教会神经网络的核心本领。我们的目标是训练一个模型,它能够观察一张在时间步t的带噪图像xₜ,然后预测出其中的噪声,或者直接预测出更干净的上一时刻图像xₜ₋₁。
3.1 目标函数的推导:预测噪声
最主流、也是最有效的方法,是让神经网络直接预测在前向过程中添加到x_{t-1}上,从而得到xₜ的那个噪声ε。为什么可以这么做?
根据前向过程的公式xₜ = √(ᾱₜ) * x₀ + √(1-ᾱₜ) * ε,我们可以反解出原始噪声ε:ε = (xₜ - √(ᾱₜ) * x₀) / √(1-ᾱₜ)
在训练阶段,x₀(干净图像)和xₜ(我们按公式合成的带噪图像)都是已知的,ᾱₜ是预计算的常数。因此,对于每一个训练样本(x₀,t),我们都可以计算出那个“真实的噪声”ε_true。
我们的神经网络(通常是一个U-Net结构的模型)以带噪图像xₜ和时间步嵌入t为输入,输出一个对噪声的预测ε_θ(xₜ, t)。这里θ代表网络参数。
训练目标就是最小化预测噪声和真实噪声之间的差距。因此,损失函数(Loss Function)通常采用均方误差(MSE):L = E[|| ε - ε_θ(xₜ, t) ||²]
其中,E表示期望,即对训练集中的所有图像和所有随机采样时间步t求平均。
实操心得:这里有一个非常重要的技巧——时间步t的输入。U-Net需要知道当前是在去噪的哪个阶段(早期、中期还是晚期),因为不同阶段的噪声水平和去噪策略是不同的。通常我们会将时间步t编码成一个向量(如通过正弦位置编码或MLP),然后将其作为条件信息注入到U-Net的每一层,例如通过特征相加(AdaIN)或交叉注意力(Cross-Attention)机制。这是确保模型能学会整个去噪轨迹,而不仅仅是某个特定噪声水平的关键。
3.2 采样生成:从噪声中迭代“雕刻”图像
训练好噪声预测模型ε_θ后,我们就可以进行采样(生成)了。这是一个迭代过程,从纯噪声x_T ~ N(0, I)开始,逐步回溯到x₀。
采样算法(以DDPM为例)的核心步骤如下:
- 从标准正态分布采样初始噪声:x_T ~ N(0, I)。
- 从 t = T 循环到 t = 1: a. 使用训练好的网络预测当前xₜ中的噪声:ε_θ = ε_θ(xₜ, t)。 b. 计算当前步的“去噪后”图像均值。根据推导,给定xₜ和预测噪声ε_θ,x_{t-1}的均值μ_θ(xₜ, t)可以通过公式计算出来,这个公式包含了xₜ、ε_θ以及预定义的系数βₜ,αₜ等。 c. 从分布N(μ_θ(xₜ, t), σₜ²I)中采样得到x_{t-1}。这里的σₜ²是方差,通常直接设置为βₜ或一个与之相关的固定值。添加这一步的随机噪声至关重要,它引入了不确定性,使得生成过程是随机的,可以产生多样化的输出。
- 循环结束后,x₀即为最终生成的图像。
这个过程就像一位雕刻家,面对一块完全随机的石料(x_T),他根据心中的蓝图(模型学到的图像分布),每一步都凿掉一些不符合蓝图的部分(减去预测的噪声ε_θ),并保留一些随机性以便调整细节(添加随机噪声σₜ*z)。经过成百上千次这样的迭代,一块顽石最终变成了精美的雕像。
3.3 为什么是U-Net?网络结构的选择
扩散模型通常选择U-Net作为其主干网络,这并非偶然。U-Net最初是为医学图像分割设计的,它具有一个关键的“编码器-解码器”结构,中间通过跳跃连接(Skip Connections)将浅层的高分辨率细节信息传递到深层。
这对于图像去噪任务来说是完美的:
- 编码器(下采样):通过卷积和池化,逐步压缩图像尺寸,增加通道数,从而捕捉图像的全局语义信息(这是一只猫,它在草地上)。
- 解码器(上采样):通过转置卷积或插值,逐步恢复图像尺寸,将全局语义信息“翻译”回像素空间。
- 跳跃连接:直接将编码器对应层的高分辨率特征图拼接到解码器。这对于恢复图像的细节纹理(如毛发、草叶)至关重要,因为纯噪声图像在编码过程中会丢失大量细节,需要靠跳跃连接来补充。
此外,为了融入时间步信息t,现代扩散模型的U-Net还广泛采用了Transformer中的交叉注意力(Cross-Attention)机制。当我们需要进行“文生图”时,文本提示词(Prompt)会被编码成一系列向量。在U-Net的某些层(通常在中间层),会引入一个交叉注意力模块,让图像特征去“查询”文本特征,从而让生成过程被文本内容所引导。这是Stable Diffusion等模型实现精准文本控制的核心。
4. 潜在扩散模型:在压缩空间里高效奔跑
原始的扩散模型(DDPM)直接在像素空间(如256x256x3)进行操作,每一步的去噪都需要处理数十万计的像素点,计算成本极高。这也是早期扩散模型训练和采样非常缓慢的原因。潜在扩散模型(Latent Diffusion Model, LDM)的出现,彻底改变了这一局面,是Stable Diffusion成功的关键。
4.1 动机:像素空间的沉重负担
在像素空间做扩散,有两个主要问题:
- 计算冗余:图像中包含大量高频细节(如每个像素的精确值),但对人类感知和语义理解而言,许多细节是冗余的。模型需要花费大量算力去学习这些细节的噪声模式。
- 维度灾难:高维空间的扩散过程更加复杂和不稳定,需要更多的采样步数才能得到好结果。
LDM的核心思想是:在一个低维、稠密的“潜在空间”中进行扩散过程,而不是在原始的高维像素空间。
4.2 架构:编码器、扩散、解码器三部曲
LDM包含三个核心组件:
- 编码器(Encoder):一个预训练好的自编码器(如VAE)的编码器部分。它的作用是将一张高分辨率图像x(如512x512)压缩到一个低维的潜在表示z(如64x64x4)。这个潜在空间比像素空间小得多(64x64x4 vs 512x512x3,维度减少了约48倍),但包含了重建原始图像所需的几乎所有语义信息。
- 扩散模型(Diffusion Model):这是LDM的主体。但关键区别在于,它的操作对象不再是图像x,而是潜在表示z。所有前向、逆向过程,以及U-Net的训练,都发生在潜在空间。由于潜在空间维度低、信息稠密,U-Net可以设计得更小,训练和采样速度得到数量级的提升。
- 解码器(Decoder):同样是预训练自编码器的解码器部分。当扩散模型在潜在空间中从噪声z_T生成出干净的潜在表示z₀后,解码器负责将z₀上采样、解码回高分辨率的像素图像x。
这个过程可以类比为:我们不是直接雕刻一座巨大的大理石雕像(像素空间),而是先制作一个精巧的粘土小样(潜在空间)。在粘土小样上修改造型(扩散去噪)要容易和快速得多。修改完成后,再根据这个小样,用一套成熟的模具(解码器)浇铸出最终的大理石雕像。
4.3 带来的巨大优势
- 效率飞跃:这是最直接的收益。计算复杂度与数据维度高度相关,在潜在空间操作使得训练速度提升数倍,采样速度提升数十倍,同时大幅降低显存占用。
- 生成质量提升:潜在空间过滤掉了一些像素级的噪声和不重要细节,迫使扩散模型专注于学习图像的高级语义和结构信息,这反而常常能带来更连贯、更少 artifacts 的生成结果。
- 灵活的 Conditioning:由于U-Net处理的是抽象的潜在表示,引入外部条件(如文本、语义图、其他图像)变得更加自然和高效。文本编码(如CLIP)可以直接通过交叉注意力机制注入到潜在空间的扩散过程中,实现精准控制。
踩坑实录:在初次尝试理解或复现LDM时,一个常见的困惑是VAE的引入。很多人会问:“既然最终目标是生成图像,为什么还要额外训练一个VAE?” 关键在于解耦。VAE(编码器-解码器)负责解决“如何高效、保真地压缩和重建图像”这个任务。而扩散模型负责解决“如何在压缩后的空间里,学习数据的分布并生成新的数据”这个任务。这两个任务通过分开预训练再组合,比直接训练一个端到端的、既要做压缩又要做生成的巨型模型要稳定和高效得多。在实践中,Stable Diffusion就是使用了在大型图像数据集上预训练好的VAE,其编码器和解码器在扩散模型训练阶段是冻结的,不参与训练。
5. 条件生成:为扩散过程注入灵魂
基础的扩散模型可以从噪声生成随机的图像,但我们需要的是可控的生成,比如“一只戴着墨镜的柯基犬在冲浪”。这就需要条件生成技术。李宏毅老师的课程也重点讲解了如何将条件信息(如类别标签、文本、图像等)融入到扩散模型中。
5.1 条件控制的基本原理
条件生成的核心思想是让去噪过程不再是“盲目的”,而是被一个条件信号y所引导。这意味着我们训练的噪声预测网络变成了ε_θ(xₜ, t, y)。在采样时,我们也需要提供这个条件y。
如何将条件y注入模型?主要有以下几种方式,它们常常被组合使用:
- 条件输入拼接(Concatenation):最简单直接的方法。对于类别标签(如数字0-9),可以将其编码成one-hot向量,然后与时间步嵌入向量拼接,一起输入到U-Net的每一层。对于低维条件,这种方法简单有效。
- 交叉注意力(Cross-Attention):这是处理序列条件(如文本)的利器。文本提示词通过一个文本编码器(如CLIP的文本编码器或BERT)转换成一系列特征向量{c₁, c₂, ..., c_L}。在U-Net的中间层,我们插入交叉注意力模块。在这个模块中,图像的特征图被当作“查询(Query)”,文本特征向量被当作“键(Key)”和“值(Value)”。通过注意力机制,图像特征会主动去“关注”与之相关的文本描述,从而将文本语义信息融合到图像生成过程中。这是Stable Diffusion实现高质量文生图的核心。
- 自适应层归一化(AdaIN):将条件信息(如经过MLP处理后的时间步和类别向量)融入到特征图的归一化层中,具体来说是去影响归一化后的缩放(scale)和平移(shift)参数。这种方式计算高效,适合注入全局的、风格类的条件。
5.2 无分类器引导:大幅提升生成质量与对齐度的“魔法”
即使引入了条件,模型在训练时仍然会看到大量的无条件数据,或者条件与数据的对应关系不够强,这可能导致生成时条件控制力弱、图像质量不稳定。无分类器引导(Classifier-Free Guidance)是一种简单却极其强大的技巧,它不需要额外训练一个分类器,就能显著提升生成图像与给定条件的对齐度以及图像本身的清晰度。
它的核心思想是同时训练一个条件预测模型和一个无条件预测模型。具体做法是在训练时,以一定的概率(例如10%)随机地将条件y置为空(null),比如将文本提示词替换成一个空字符串。这样,同一个神经网络ε_θ就同时学会了两种模式:
- 当输入条件y时,它预测ε_θ(xₜ, t, y)(条件预测)。
- 当输入为空时,它预测ε_θ(xₜ, t)(无条件预测)。
在采样生成时,我们并不直接使用条件预测的噪声,而是使用一个“引导”后的噪声:ε̃ = ε_θ(xₜ, t) + w * (ε_θ(xₜ, t, y) - ε_θ(xₜ, t))
其中w是引导尺度(guidance scale),通常是一个大于1的数(如7.5)。
这个公式的直观解释是:最终的噪声方向,是在无条件噪声的基础上,朝着条件噪声的方向“推”了一把,推的力度由w控制。
- ε_θ(xₜ, t, y) - ε_θ(xₜ, t):这个差值代表了“因为条件y的存在,噪声应该做出的改变”。
- 当w = 1时,ε̃ = ε_θ(xₜ, t, y),就是普通的条件生成。
- 当w > 1时,我们放大了条件带来的影响。这会使生成结果更严格地遵循条件y,同时经验上发现,这也能显著提升图像的饱和度和细节清晰度。
实操心得与调参陷阱:无分类器引导的尺度w是一个超级重要的超参数。w 并非越大越好。
- w 太小(如1-3):条件控制力弱,图像可能偏离提示词,多样性高但质量可能一般。
- w 适中(如5-10):通常能取得很好的效果,条件对齐和图像质量俱佳。这是Stable Diffusion等模型的常用范围。
- w 过大(如>15):会导致“过度引导”。图像会变得过于饱和、对比度过强,出现不自然的纹理,甚至产生畸变。同时,多样性会急剧下降,因为模型被强行拉向一个极端的方向。在实践中,需要针对不同的模型和任务进行微调测试。一个常见的技巧是,对于追求艺术性和创造性的生成,可以用较低的w;对于需要精确符合文本描述的生成,可以用较高的w。
6. 扩散模型的优势、挑战与未来方向
经过前面的拆解,我们可以看到扩散模型是一个理论优雅、效果强大的框架。但它并非没有缺点。结合李宏毅老师的讲解和社区实践,我们来客观看待它的优劣。
6.1 核心优势:为何是它脱颖而出?
- 训练稳定性:相比于GAN(生成对抗网络)中生成器和判别器之间艰难的对抗平衡,扩散模型的训练目标(最小化预测噪声的MSE)是明确且稳定的。它不会遭遇模式崩溃(mode collapse)等典型GAN训练难题。
- 生成质量与多样性:扩散模型能够生成极高分辨率、细节丰富的图像,并且在多样性和保真度之间取得了很好的平衡。其迭代去噪的过程,类似于一种“渐进式精修”,有助于生成结构复杂的场景。
- 灵活的 Conditioning:如前所述,通过交叉注意力等机制,扩散模型可以非常自然、高效地融入各种条件信息(文本、图像、语义图、深度图等),实现高度可控的生成。
- 概率建模的完备性:扩散模型是一个显式的概率模型,它学习的是数据分布。理论上,它可以计算生成图像的概率密度,这在一些需要不确定性估计的应用中是一个优势。
6.2 无法回避的挑战:效率与可控性
- 采样速度慢:这是扩散模型最被诟病的一点。生成一张图像需要迭代调用U-Net数十次甚至数百次(如DDPM需要1000步),计算成本高昂。尽管有DDIM、PLMS、DPM-Solver等加速采样算法,以及潜在扩散模型(LDM)对计算量的巨幅削减,但相比GAN的单次前向传播生成,其速度仍有差距。
- 复杂控制仍具挑战:虽然文本控制已经很强,但对于更精细的空间控制(如“让猫坐在沙发左边,狗在右边”)、复杂属性组合(如同时控制颜色、材质、姿势)等,扩散模型仍然容易出错或忽略部分提示词。这需要更复杂的条件注入架构和更高质量的训练数据。
- 对提示词非常敏感:生成结果的质量高度依赖于提示词(Prompt)的写法。微小的措辞变化可能导致输出迥异,需要用户掌握一定的“提示词工程”技巧。
- “幻觉”问题:模型可能会生成提示词中未要求的细节,或者错误地组合概念(比如生成“六根手指”的人)。这是因为模型学到的知识来源于训练数据中的统计规律,而非真正的理解。
6.3 前沿探索与未来展望
社区和学术界正在积极应对这些挑战:
- 更快的采样器:研究如一致性模型(Consistency Models)等,旨在用极少的步数(甚至一步)完成高质量采样,是当前的热点。
- 更好的控制器:ControlNet的提出是里程碑式的。它通过一个可训练的、与预训练扩散模型并行的网络,注入额外的空间条件(如边缘图、深度图、姿态关键点),实现了像素级的精确控制,极大地拓展了扩散模型的应用边界。
- 视频与3D生成:将扩散模型从图像扩展到视频(如Sora)和3D领域。视频生成需要建模时间维度的一致性,3D生成则需要从2D图像中推理3D结构,这些都是极具挑战性的前沿方向。
- 多模态统一:探索一个统一的扩散模型架构,能够处理文本、图像、音频、视频等多种模态的生成和理解任务,通向更通用的人工智能。
我个人在学习和使用扩散模型的过程中,一个很深的体会是,它成功地将一个复杂的生成问题,分解成了数百个简单的去噪子问题。这种“分而治之”的思想,不仅让训练变得稳定,也让整个框架具备了强大的可扩展性和可控制性。尽管它采样慢,但当你看到它从一片混沌的噪声中,一步步浮现出你脑海中想象的画面时,那种感觉依然充满了工程与艺术结合的魅力。对于想要深入AI生成领域的同行来说,吃透扩散模型的原理,是理解当前所有主流AIGC应用不可或缺的一课。