尧图精选

扩散模型十年演进:从DDPM到Stable Diffusion的技术脉络与实战避坑

🕒 发布时间:2026/10/1 5:41:39 📁 来源:尧图网络
1. 从一张模糊照片说起扩散模型到底在干什么2015年斯坦福大学的一间实验室里Stefano Ermon和他的学生Jascha Sohl-Dickstein在草稿纸上画了一个看似简单的想法如果先把一张图片逐步加噪直到变成纯噪声再训练一个网络把这个过程反过来是不是就能从噪声里“长”出一张全新的图片这个想法在当时并没有引起太大轰动因为生成效果远不如当时如日中天的生成对抗网络GAN。但谁也没想到这个被冷落了近五年的方向会在2020年后彻底改写整个生成式AI的格局。扩散模型Diffusion Models的核心思想可以用一句话概括学习如何从噪声中恢复数据。它的灵感来自热力学中的扩散现象——一滴墨水滴入水中会逐渐散开最终均匀分布如果我们能记录墨水散开的每一步理论上就能倒推出墨水最初滴入的位置。扩散模型做的正是这件事前向过程把数据逐步破坏成噪声反向过程则训练神经网络一步步去噪最终从随机噪声中生成全新的数据样本。这个方向适合谁如果你是对生成式AI感兴趣的开发者想理解Stable Diffusion、DALL·E 2、Imagen这些现象级产品背后的原理那扩散模型的演进史就是你必须吃透的底层逻辑。如果你是从业者正在考虑把扩散模型用到自己的业务场景里——比如图像编辑、药物分子设计、音频合成——那了解它的技术脉络能帮你少走很多弯路。哪怕你只是好奇“AI画图到底是怎么实现的”这篇文章也会用最直白的方式把关键节点讲清楚。我接触扩散模型是从2021年开始的当时DDPM的代码刚开源不久我花了一个周末在单卡上跑CIFAR-10生成出来的东西惨不忍睹但那个“从纯噪声里慢慢浮现出图像轮廓”的过程让我印象极深。后来看着它从学术界的小众方向变成工业界的标配踩过的坑、读过的论文、调过的参数都成了我理解这个领域最宝贵的素材。下面我就按时间线和技术演进两条线索把扩散模型的发展史拆开来讲。2. 史前时代从热力学到去噪得分匹配2.1 2015年的开创性论文到底说了什么Sohl-Dickstein那篇论文的标题是《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》发表在ICML 2015上。它的核心贡献是提出了一个基于马尔可夫链的扩散概率模型框架。具体来说它定义了一个前向扩散过程用一系列方差逐渐增大的高斯噪声逐步破坏原始数据分布直到数据变成标准正态分布。然后训练一个神经网络来学习反向过程也就是从噪声逐步恢复数据。这个框架在数学上很优雅但当时有个致命问题采样速度极慢。生成一张32x32的CIFAR图像需要跑上千步前向传播而且生成质量远不如同期GAN的效果。所以这篇论文在接下来的三四年里几乎被遗忘了引用量寥寥。我后来翻看这段历史时最大的感触是一个想法能不能火不光看它对不对还要看它出现的时机对不对。2015年的算力和数据规模根本撑不起扩散模型需要的训练量。2.2 去噪得分匹配另一条暗线在扩散模型沉寂的那几年另一条技术路线在悄悄发展——去噪得分匹配Denoising Score Matching。2019年Yang Song和Stefano Ermon发表了《Generative Modeling by Estimating Gradients of the Data Distribution》提出了用得分匹配来估计数据分布的梯度场。简单说就是不直接建模数据分布本身而是建模“数据分布的对数概率密度函数的梯度”然后通过朗之万动力学采样来生成样本。这条路线和扩散模型在数学上有着深刻的联系。2020年Jonathan Ho等人发表的DDPM论文实际上证明了去噪扩散概率模型本质上就是在做多尺度的去噪得分匹配。这个统一视角把两条暗线汇合到了一起也为后续的快速采样、条件生成等技术突破奠定了理论基础。提示如果你刚开始读扩散模型的论文建议先看Yang Song的得分匹配系列再看DDPM最后看Score-Based Generative Modeling through Stochastic Differential Equations。这个顺序能帮你建立从连续到离散、从一般到具体的完整认知。2.3 为什么GAN在那个阶段更受青睐要理解扩散模型为什么起步慢得先看GAN当时有多强。2018年前后StyleGAN生成的1024x1024人脸已经能以假乱真BigGAN在ImageNet上的表现也让其他生成模型望尘莫及。GAN的核心优势是单步生成——训练好的生成器只需要一次前向传播就能出图推理速度极快。而扩散模型需要几百到上千步迭代去噪推理成本高出两三个数量级。但GAN有个众所周知的毛病训练不稳定。生成器和判别器之间的博弈经常导致模式崩溃生成多样性差而且对超参数极其敏感。我在2019年尝试复现BigGAN时光调学习率和批大小就花了两周最后还是没能稳定复现论文效果。相比之下扩散模型的训练目标是一个简单的去噪回归损失训练过程稳定得多只是采样太慢。这个“慢但稳”的特性在算力逐渐充裕之后反而成了它最大的优势。3. DDPM引爆时刻2020年的转折点3.1 DDPM论文的三个关键改进2020年6月Jonathan Ho、Ajay Jain和Pieter Abbeel发表了《Denoising Diffusion Probabilistic Models》也就是后来被无数人引用的DDPM。这篇论文并没有提出全新的数学框架而是在Sohl-Dickstein的基础上做了三个关键改进直接把扩散模型从“能跑但效果差”推到了“效果媲美GAN”的水平。第一个改进是简化训练目标。原始论文的变分下界推导很复杂DDPM把它简化成了一个加权均方误差损失给定一张干净图片和随机时间步t先按扩散公式加噪得到噪声图片然后让网络预测加入的噪声。这个目标简单到可以用几行代码实现训练稳定性极好。第二个改进是特定的噪声调度。DDPM采用了线性beta调度从1e-4到0.02均匀增加。这个调度在CIFAR-10和CelebA-HQ上表现很好后来成了很多实现的默认配置。第三个改进是U-Net架构的适配。DDPM用了一个带残差连接和自注意力机制的U-Net作为去噪网络并且把时间步t通过正弦位置编码注入到每一层。这个设计后来被几乎所有扩散模型沿用。3.2 从CIFAR-10到ImageNet效果验证DDPM在CIFAR-10上取得了FID 3.17的成绩已经接近当时最好的GAN。在256x256的LSUN数据集上生成质量也相当能打。我2021年初在单张V100上跑了DDPM的CIFAR-10训练大约需要两天时间收敛生成样本的多样性明显好于同期的GAN。但采样确实慢——生成50000张样本需要跑1000步去噪耗时超过10小时。这个阶段的关键意义在于扩散模型第一次证明了自己在生成质量上可以和GAN正面竞争。虽然速度慢但训练稳定、模式覆盖好、不需要对抗训练这些优势让很多研究者开始转向这个方向。2020年下半年到2021年初arXiv上关于扩散模型的论文数量开始指数增长。3.3 我踩过的第一个坑时间步嵌入的实现我第一次复现DDPM时在时间步嵌入上卡了整整三天。论文里只说了用正弦位置编码但具体怎么注入到U-Net的每个残差块里细节没写清楚。我一开始把时间嵌入直接加到输入图片上结果训练完全不收敛。后来参考了官方代码才发现正确做法是先把时间步t通过两层MLP映射成和特征图通道数相同的向量然后在每个残差块里通过广播加到特征图上再经过GroupNorm和SiLU激活。这个细节在论文里只有一句话但实现错了就是完全不work。后来我在自己的项目里总结了一个检查清单时间嵌入的维度是否匹配、注入位置是否在归一化之后、是否用了可学习的缩放参数。这些经验在后来看其他扩散模型论文时反复用到。4. 加速采样从1000步到20步的进化4.1 DDIM确定性采样的突破DDPM最大的痛点就是采样慢。2020年10月Jiaming Song等人发表了DDIMDenoising Diffusion Implicit Models提出了一种非马尔可夫的确定性采样方法。DDIM的核心洞察是扩散模型的训练目标只依赖于边缘分布而不依赖于具体的联合分布。所以我们可以构造一个不同的反向过程只要它的边缘分布和DDPM一致就能复用同一个训练好的模型。DDIM把采样步数从1000步降到了50-100步生成质量几乎不降。更妙的是DDIM的采样过程是确定性的这意味着同一个初始噪声总是生成同一张图片而且支持插值操作——两张图片的隐变量做线性插值解码出来就是语义上的平滑过渡。这个特性后来被广泛用于图像编辑和风格迁移。4.2 高阶求解器与蒸馏方法DDIM之后加速采样成了扩散模型最活跃的研究方向之一。2022年Song等人提出了DPM-Solver把扩散模型的采样过程看作一个常微分方程的求解问题用高阶数值方法在20步左右就能达到1000步的质量。我实测下来DPM-Solver在Stable Diffusion上15步就能出可用的图25步基本和50步DDIM没区别。另一条路线是知识蒸馏。2022年底Progressive Distillation和Consistency Models等工作把采样步数压缩到了1-4步。Consistency Models的核心思想是训练一个网络让它能把任意时间步的噪声图片直接映射回干净图片从而实现单步生成。这个方向在2023年发展很快LCMLatent Consistency Models已经能在4步内生成质量不错的图像推理速度提升了两个数量级。方法采样步数相对质量关键特点DDPM1000基准随机采样质量高但慢DDIM50-100接近基准确定性采样支持插值DPM-Solver15-25接近基准高阶ODE求解无需重训练Consistency Models1-4略有下降蒸馏训练单步生成LCM2-4可接受潜在空间蒸馏适合实时应用注意加速采样方法大多不需要重新训练模型可以直接在预训练权重上使用。但蒸馏方法需要额外的训练阶段而且蒸馏后的模型通常不能再做多步精细采样。4.3 实操心得采样步数与CFG的权衡在实际使用Stable Diffusion时采样步数和CFG scale分类器自由引导强度需要一起调。我的经验是步数低于20时CFG不要超过7否则画面容易出现过度饱和和伪影步数在25-30时CFG可以到7-9如果用DPM-Solver15步配CFG 7是性价比最高的组合。另外不同采样器的“性格”不一样——Euler a适合创意发散DPM 2M Karras适合精细写实DDIM适合需要确定性的场景。这些细节在官方文档里不会写都是大量出图后总结出来的。5. 潜在扩散模型让扩散模型真正出圈5.1 Stable Diffusion的核心设计2022年8月Stability AI发布了Stable Diffusion彻底把扩散模型推向了大众视野。它的核心创新不是去噪网络本身而是在潜在空间做扩散。具体来说先用一个VAE把512x512的图片压缩成64x64的潜在表示然后在这个低维空间上训练扩散模型。这样做的好处是计算量直接降了16倍让消费级显卡也能跑得动。Stable Diffusion的架构可以拆成三部分VAE编码器把图片压到潜在空间U-Net在潜在空间做去噪VAE解码器把潜在表示还原成图片。文本条件通过CLIP文本编码器注入用交叉注意力机制融合到U-Net的每一层。这个设计后来成了文生图模型的标准范式DALL·E 2、Imagen、Midjourney都采用了类似的结构。5.2 从文生图到图生图条件控制的演进Stable Diffusion最初只支持文生图但社区很快发展出了图生图、Inpainting、Outpainting等玩法。图生图的原理很简单把输入图片加噪到某个时间步然后从这个带噪版本开始去噪通过控制加噪强度来调节生成结果和原图的相似度。加噪强度0.3左右是轻微修改0.7以上就基本重绘了。2023年ControlNet的出现把条件控制推到了新高度。它通过复制U-Net的编码器层加上一个零卷积连接让模型可以接受边缘图、深度图、姿态图等额外条件。我实测ControlNet的Canny边缘控制在建筑效果图生成上非常精准基本能做到“线稿什么样出图就什么样”。这个技术后来被广泛用于电商产品图、室内设计、游戏原画等场景。5.3 潜在空间的坑与技巧在潜在空间做扩散虽然省算力但也引入了一些新问题。最典型的是VAE重建误差——小文字、精细纹理在压缩再解压后会糊掉。我试过生成带文字的图片512x512下文字基本不可读后来改用SDXL的VAE才有所改善。另一个坑是潜在空间的插值不如像素空间直观两张图的隐变量做插值中间帧可能出现语义不连续。实操建议如果要做精细编辑先把图片放大到1024以上再编码如果要做风格混合用球面插值代替线性插值过渡更自然如果生成结果有网格状伪影检查VAE的缩放因子是否匹配——SD 1.5是0.18215SDXL是0.13025用错了就会出问题。6. 扩散模型的下一个战场视频、3D与科学发现6.1 视频生成从逐帧到时空联合建模视频生成是扩散模型最热的应用方向之一。早期的做法是把视频拆成帧逐帧用图像扩散模型生成但这样帧间一致性很差画面会闪烁。2023年的AnimateDiff提出了运动模块在U-Net里插入时序注意力层让模型能建模帧间关系。2024年的Sora则展示了更长视频、更高一致性的生成能力虽然技术细节没有完全公开但核心思路应该是时空Patch的联合建模。我在2023年底尝试过用AnimateDiff生成产品展示视频2秒的片段需要跑大约5分钟帧间一致性比逐帧生成好很多但快速运动场景还是会出现形变。经验是运动幅度不要太大镜头尽量固定配合ControlNet的姿态控制能显著提升稳定性。6.2 3D生成基于扩散模型的新视角合成基于扩散模型的新视角合成Novel View Synthesis是2023-2024年的热门方向。核心思路是给定一张或几张物体图片生成从其他视角看这个物体的图片。Zero-1-to-3、SyncDreamer等工作用扩散模型做多视角生成再配合NeRF或3D高斯泼溅做三维重建。这个方向的技术难点在于多视角一致性。如果每个视角独立生成几何结构会对不上。主流做法是在注意力层做跨视角的信息交换或者用极线约束来引导生成。我试过Zero-1-to-3做小物体的新视角生成输入一张正面照生成侧面和背面几何一致性大概能到70%左右细节还需要人工修。6.3 科学应用从分子设计到天气预报扩散模型在科学领域的应用可能是最有价值的方向。在药物发现中扩散模型可以生成满足特定结合亲和力的分子结构在材料科学中可以生成具有目标属性的晶体结构在天气预报中GraphCast和Pangu-Weather等模型用扩散框架做集合预报精度已经超过传统数值方法。我参与过一个用扩散模型做蛋白质侧链构象预测的小项目核心是把氨基酸序列和主链结构作为条件用扩散模型生成侧链的二面角。相比传统的Rosetta方法扩散模型生成的构象多样性更好但物理合理性还需要用能量函数做后筛选。这个经验让我意识到扩散模型在科学领域的价值不在于完全替代传统方法而在于提供高质量的候选解加速搜索过程。7. 常见问题与排查技巧实录7.1 训练不收敛怎么办扩散模型训练不收敛九成以上是这几个原因学习率太大建议从1e-4开始用cosine调度、时间步嵌入实现错误检查维度和注入位置、噪声调度参数不匹配线性beta和cosine beta不能混用、批大小太小至少64最好256以上。我遇到过一次loss震荡排查了两天发现是数据加载时没有做正确的归一化图片像素值在0-255而不是-1到1导致噪声预测的尺度完全不对。7.2 生成结果模糊或过曝生成图片模糊通常是采样步数不够或者CFG太低。如果步数已经到50还模糊检查VAE的缩放因子是否正确。过曝则是CFG太高一般降到7以下就能解决。还有一种情况是提示词太短模型没有足够的条件信息生成结果会趋向于数据集的平均外观看起来就是“糊”。建议提示词至少包含主体、风格、光照三个要素。7.3 显存不够的优化方案消费级显卡跑扩散模型显存是硬约束。几个立竿见影的优化开启混合精度训练fp16或bf16显存直接减半用梯度检查点用时间换显存把批大小降到1配合梯度累积如果还是不够用LoRA做微调而不是全量微调。我实测在8GB显存的卡上用LoRA微调SD 1.5分辨率512批大小1梯度累积4可以稳定训练。问题现象可能原因排查步骤解决方案loss不下降学习率过大打印每步loss降到1e-5重试生成全黑/全白数据归一化错误检查数据加载归一化到[-1,1]采样出网格伪影VAE缩放因子错误核对模型配置用正确的缩放因子显存溢出批大小过大监控显存占用降批大小梯度累积生成结果单一模式崩溃检查多样性指标增加CFG或加噪声7.4 独家避坑技巧第一个技巧先用小数据集验证流程。不要一上来就在ImageNet上跑用CIFAR-10或者自己收集的几百张图先跑通全流程确认loss正常下降、采样能出图再上大规模数据。第二个技巧保存中间采样结果。训练过程中每隔几个epoch就采样几张图看看能及早发现过拟合或模式崩溃。第三个技巧固定随机种子。调试阶段固定种子方便对比不同参数的效果最终生成时再用随机种子增加多样性。8. 写在最后我个人的一些体会回头看扩散模型这十年的发展最让我感慨的是简单方法的生命力。DDPM的核心思想——加噪再去噪——简单到可以用一句话说清楚但正是这种简单让它具备了极强的扩展性。从图像到视频从2D到3D从自然图像到科学数据同一个框架稍作调整就能迁移过去。相比之下GAN的对抗训练虽然巧妙但太脆弱很难大规模扩展。另一个体会是工程细节决定成败。扩散模型的论文通常只讲核心思想但真正复现时时间步嵌入、噪声调度、归一化方式这些细节才是决定能不能work的关键。我见过太多人卡在实现细节上最后放弃了这个方向。所以如果你正在入门我的建议是先跑通官方代码再逐行理解最后自己从头写一遍。这个过程很痛苦但走完之后你对扩散模型的理解会完全不一样。最后分享一个我最近在用的调试方法把去噪过程可视化出来。每一步的去噪结果都保存成图片拼成一个视频你能直观看到模型是怎么从噪声里“雕刻”出图像的。这个方法帮我定位过好几次问题——比如发现某几步的去噪幅度异常大最后查出来是噪声调度的参数设错了。扩散模型的可解释性其实比很多人以为的要好关键是你愿不愿意花时间去看。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →