ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

扩散模型发展脉络全解析:从DDPM到潜在扩散的演进与实战

扩散模型发展脉络全解析:从DDPM到潜在扩散的演进与实战 扩散模型这几年在生成式AI圈子里几乎是绕不开的话题。不管你是做图像生成的、搞视频合成的还是研究分子结构预测的大概率都撞见过“Diffusion”这个词。但很多人对它的理解停留在“知道有这么个东西”真要问它从哪来的、为什么突然就火了、和之前的GAN到底差在哪就说不太清楚了。我自己是从2020年前后开始跟进这块内容的从最早看DDPM论文一脸懵到后来自己跑通训练、调参、踩坑再到看着它一步步变成今天生成领域的主流方案中间积累了不少体会。这篇内容我想把扩散模型的发展脉络从头到尾捋一遍不是那种论文摘要式的罗列而是按“为什么会出现—怎么演化的—每一步解决了什么问题”这条线来讲把关键节点背后的逻辑拆开。适合对生成模型有基本了解、想系统搞清楚扩散模型来龙去脉的读者也适合正在选型、想知道该用哪个变体的从业者参考。1. 扩散模型到底在解决什么问题1.1 从“生成”这件事的本质说起要理解扩散模型为什么会出现得先搞清楚生成模型到底在干什么。简单说生成模型的目标是学会一个数据的分布然后从这个分布里采样出新的、看起来像真实数据的东西。比如你给它看一万张猫的图片它学完之后能自己“画”出一张不存在的猫。这件事听起来简单做起来极难因为真实数据比如一张512×512的彩色图片的维度高达几十万甚至上百万在这个超高维空间里描述一个概率分布计算量是天文数字。早年间大家试过很多路子。变分自编码器VAE的思路是把数据压缩到一个低维的隐空间再从隐空间解码回来但生成的图像往往偏模糊因为那个压缩过程会丢信息。生成对抗网络GAN换了个思路用一个生成器和一个判别器互相博弈生成器负责造假判别器负责识破两者对抗到平衡时生成器就能造出逼真的样本。GAN在2014年提出后确实火了好一阵StyleGAN系列生成的人脸一度让人分不清真假。但GAN有个老大难问题训练不稳定。生成器和判别器的博弈很容易失衡要么生成器崩溃只输出几种样本模式坍塌要么判别器太强导致生成器学不动。调GAN的训练参数是很多人的噩梦我自己就曾经在一个项目里调了两周才勉强让训练不崩。扩散模型走的是另一条路。它不去做对抗博弈而是把“生成”这件事拆成很多很多个微小的去噪步骤每一步只做一点点累积起来就从纯噪声变出了一张清晰的图。这个思路的好处是每一步的任务都很简单、很稳定训练起来不像GAN那样容易崩。代价是生成速度慢因为要迭代很多步。但后来的一系列改进把速度问题也逐步缓解了。可以说扩散模型的崛起本质上是拿“生成质量”和“训练稳定性”换“生成速度”而这个交换在大多数场景下是划算的。1.2 热力学启发从物理里的扩散现象借来的直觉扩散模型这个名字直接来自物理学里的扩散现象。你往一杯清水里滴一滴墨水墨水分子会从高浓度区域慢慢向低浓度区域散开最终整杯水均匀变色。这个过程是自发的、不可逆的至少宏观上不可逆而且每一步的变化都很微小。反过来想如果我能记录墨水扩散的每一步然后学会把每一步倒过来是不是就能从均匀分布的墨水恢复出最初那一滴这正是扩散模型的核心直觉。前向过程是把真实图像一步步加噪声直到变成纯高斯噪声反向过程是训练一个神经网络学会从噪声一步步去噪恢复出图像。前向过程是固定的、不需要学习的就是不断加噪声反向过程才是需要训练的部分。这个类比虽然粗糙但它抓住了关键把一个复杂的大问题拆成一串简单的小问题每个小问题都好解决。我第一次看到这个类比的时候觉得挺妙的因为它把“生成”这个抽象概念具象化了。你不需要一步到位地从噪声变出图像那太难了你只需要学会“给定一张稍微有点噪声的图把噪声去掉一点点”这个任务简单到一个小网络就能胜任。把几百上千个这样的微小去噪步骤串起来奇迹就发生了。1.3 和GAN、VAE的核心差异对比把扩散模型和它的前辈们放在一起对比能更清楚地看到它的定位。下面这张表是我自己整理的核心差异覆盖了几个最关键的维度维度GANVAE扩散模型训练稳定性差易崩溃较好好损失函数稳定生成质量高但需精细调参偏模糊高且稳定生成速度快单次前向快慢多步迭代模式覆盖易模式坍塌覆盖较好覆盖好理论框架博弈论变分推断去噪得分匹配/随机微分方程调参难度高中中低从表里能看出来扩散模型最大的优势是训练稳定和模式覆盖好最大的劣势是生成速度慢。这也解释了为什么它最早在学术界受关注但直到2020年DDPM那篇论文出来之后才真正爆发——因为DDPM把生成质量做到了和GAN可比甚至更好的水平同时保持了训练稳定性。而速度问题后来靠DDIM、潜在扩散、蒸馏等一系列技术逐步解决了。提示如果你现在要选型图像生成质量优先且不在乎推理成本扩散模型基本是默认选择如果对实时性要求极高比如移动端实时滤镜可能需要考虑蒸馏后的少步模型或者干脆用其他方案。2. 前深度学习时代的铺垫从得分匹配到去噪2.1 得分匹配一个被低估的数学工具扩散模型的理论根基之一叫“得分匹配”Score Matching这个概念其实早在2005年就被Aapo Hyvärinen提出来了。所谓“得分”在统计学里指的是对数概率密度函数对数据的梯度也就是 ∇ₓ log p(x)。这个量描述的是“在数据空间里往哪个方向走能让概率密度增大”。如果你能估计出这个得分函数就能沿着它把随机噪声逐步移动到高概率区域从而生成样本。这个思路在当年很超前但没引起太大关注因为在高维空间里估计得分函数很难而且当时的神经网络能力有限。但它埋下了一颗种子生成问题可以转化为估计得分函数的问题而估计得分函数可以用去噪的方式来做。具体来说有一个叫“去噪得分匹配”的等价形式它证明了你不需要知道真实的概率密度只需要训练一个网络去预测“加噪样本里的噪声”就能间接学到得分函数。这个等价关系是后来DDPM能成立的关键理论支撑之一。我读这部分理论的时候花了不少时间才转过弯来。直觉上理解如果你能准确地从一张脏图里把噪声分离出来说明你对“干净图长什么样”有足够强的先验知识这个先验知识本质上就是对数据分布的建模。所以“去噪”和“建模分布”是一体两面的事。2.2 去噪自编码器与噪声估计的早期实践在得分匹配理论发展的同时去噪自编码器Denoising Autoencoder这条线也在推进。去噪自编码器的做法是给输入加噪声然后训练网络恢复原始输入。这本来是被当作一种正则化手段用来让自编码器学到更鲁棒的特征表示。但后来人们发现去噪自编码器学到的东西和得分函数有深刻联系——最优的去噪函数和得分函数之间存在解析关系。这个发现把两条线连起来了一条是理论上的得分匹配一条是实践中的去噪自编码器。两者结合就为后来的扩散模型铺好了路。2019年前后有几篇工作开始尝试用多步加噪-去噪的方式做生成比如Sohl-Dickstein等人在2015年提出的扩散概率模型那篇论文其实已经搭好了扩散模型的基本框架包括前向加噪、反向去噪、变分下界损失等核心要素。但那篇论文当时没火因为生成的图像质量还比不上GAN而且计算成本高。现在回头看2015年那篇论文的框架其实相当完整只是生不逢时。它缺的是足够的算力和更好的网络架构以及一个把生成质量真正做上去的实现。这些条件要到2020年才凑齐。2.3 为什么这些早期工作没有引爆早期扩散相关工作没火起来我觉得有几个原因。第一是算力不够。扩散模型要迭代几百上千步每一步都要过一遍神经网络训练和推理成本都比GAN高一个量级。2015年那会儿GPU资源远不如现在跑不动。第二是网络架构不够强。当时主流的卷积网络容量有限难以拟合复杂的去噪函数。第三是没有一个足够惊艳的结果来证明这条路能走通。学术界对新方法的态度往往是“你先做出个像样的结果再说”而早期扩散模型的结果确实不够看。这三点在2020年前后都发生了变化GPU算力大幅提升U-Net架构被证明非常适合去噪任务DDPM拿出了和GAN可比的生成质量。条件齐了爆发就是自然的事。这也提醒我很多技术不是不好而是生错了时代。做技术选型的时候不能只看方法本身还要看它依赖的外部条件是否成熟。3. DDPM的登场扩散模型真正进入主流视野3.1 DDPM的核心贡献拆解2020年Ho等人发表的DDPMDenoising Diffusion Probabilistic Models是扩散模型发展史上的分水岭。它的核心贡献可以拆成几块来看。第一它把前向加噪过程定义成一个固定的马尔可夫链每一步加一点高斯噪声总共加T步通常T1000最终图像变成标准高斯噪声。这个前向过程有闭式解意味着你可以直接算出任意时刻t的加噪结果不需要一步步迭代这在训练时非常关键。第二它把反向去噪过程参数化为一个神经网络训练目标是预测每一步加入的噪声。损失函数简单到就是预测噪声和真实噪声之间的均方误差。这个损失函数极其稳定不像GAN那样需要平衡两个网络。第三它给出了完整的变分下界推导把训练目标简化为一个加权后的简单形式去掉了复杂的权重项直接用均匀权重就能训得很好。第四也是最关键的它用U-Net架构加上注意力机制在CIFAR-10和CelebA-HQ等数据集上做出了当时最好的生成质量FID分数超过了同期的GAN。这个结果直接说服了很多人扩散模型不只是理论优雅实际效果也能打。3.2 为什么DDPM的损失函数这么简单却有效DDPM的损失函数简单到让人怀疑就是预测噪声的MSE。为什么这么简单的目标能训出强大的生成模型这里面有几层原因。首先预测噪声等价于估计得分函数而得分函数完整地刻画了数据分布。你把这个估计准了理论上就能从噪声恢复出任意样本。其次多步加噪把复杂的分布匹配问题拆成了一千个简单的去噪问题每个问题都足够简单网络容易学好。第三均匀权重虽然理论上不是最优的但实践中效果很好因为它让网络在所有的噪声水平上都得到充分训练不会偏向某个特定尺度。我自己训DDPM的时候有个体会损失曲线非常平滑几乎不会出现GAN那种剧烈震荡。你设好学习率基本就能稳定下降。这种“省心”是扩散模型对工程实践最大的友好之处。当然代价是训练慢一个中等规模的数据集可能要跑好几天。3.3 采样速度DDPM最大的痛点DDPM最被人诟病的就是采样慢。生成一张图要跑1000步每步都要过一遍U-Net这在实践中很难接受。我最早跑DDPM采样的时候一张256×256的图要几十秒批量生成更是慢得让人抓狂。这个速度问题直接催生了后续一系列加速工作也是扩散模型能否落地的关键瓶颈。不过这里有个细节值得注意DDPM的1000步其实是有冗余的。前向加噪的马尔可夫链在信息论意义上并不是每一步都携带等量信息很多步的去噪贡献很小。这就给后来的加速方法留了空间——如果能找到一种方式跳过那些贡献小的步骤就能大幅提速而不太损失质量。DDIM就是沿着这个思路做的。注意如果你现在要复现DDPM别一上来就追求1000步采样。先用DDIM或者少步采样跑通流程确认训练没问题再回头做完整采样对比。这样能省大量调试时间。4. 加速与改进从DDIM到潜在扩散4.1 DDIM把随机采样变成确定性采样DDIMDenoising Diffusion Implicit Models是2020年底提出的核心贡献是把DDPM的随机采样过程改造成了确定性采样。DDPM的反向过程每一步都注入随机噪声所以同一个初始噪声每次采样结果不同。DDIM重新设计了反向过程的方差让它可以取0变成确定性映射。这样一来你可以用更少的步数比如50步甚至20步完成采样质量损失很小。DDIM的另一个好处是它支持“插值”。因为采样是确定性的你可以在隐空间里做线性插值得到平滑过渡的生成结果。这个特性后来在图像编辑、风格迁移等任务里被广泛使用。我第一次用DDIM做插值的时候觉得挺惊艳的两张人脸的隐表示之间线性插值中间过渡非常自然没有GAN插值那种突变感。从原理上讲DDIM对应的是扩散过程的一个非马尔可夫变体它保持了相同的边缘分布但改变了联合分布。这个数学构造比较绕但结论很实用你可以用任意子序列的步数来采样步数越少越快质量下降可控。4.2 少步采样与蒸馏技术DDIM之后加速研究分成了两条路。一条是改进采样器比如DPM-Solver、Heun求解器等用数值方法在更少的步数里逼近扩散方程的解。这些方法把采样步数压到了20步左右质量基本无损。另一条是蒸馏训练一个学生模型直接模仿教师模型的多步采样结果把1000步压缩到几步甚至一步。渐进式蒸馏、一致性模型都属于这一类。蒸馏的代价是需要额外的训练而且学生模型的多样性可能略逊于教师。但它在推理速度上的收益是巨大的一步生成意味着扩散模型可以做到和GAN一样快。这对落地应用非常关键。我在一个实时生成的项目里用过蒸馏后的模型延迟从秒级降到了毫秒级体验完全不一样。4.3 潜在扩散把扩散搬到隐空间潜在扩散模型Latent Diffusion Model是2022年的一个重要转折点也是Stable Diffusion背后的核心技术。它的思路很直接直接在像素空间做扩散太贵了因为像素维度太高。那能不能先用一个自编码器把图像压缩到低维隐空间然后在隐空间里做扩散这样计算量能降一两个数量级而生成质量几乎不受影响。具体做法是训练一个VQ-VAE或类似的自编码器把512×512×3的图像压缩成64×64×4的隐表示压缩率约48倍。然后在这个隐空间上训练扩散模型。采样时先在隐空间生成再解码回像素空间。这个设计让扩散模型第一次能在消费级显卡上跑起来直接催生了Stable Diffusion这样的开源项目把扩散模型从学术圈推向了大众。我自己的感受是潜在扩散是扩散模型发展史上“工程价值”最高的一步。它没有太多理论创新但把成本打下来了让更多人能用上。很多时候技术的普及不靠理论突破靠的是把成本降到大众可及的范围。4.4 架构演进U-Net到Transformer的迁移扩散模型的网络架构也经历了一轮演进。早期DDPM用的是U-Net这个架构本来就是为图像分割设计的有编码器-解码器结构和跳跃连接非常适合去噪任务。后来大家发现Transformer在建模长程依赖上更强于是有了DiTDiffusion Transformer。DiT把U-Net换成了纯Transformer结构在ImageNet上取得了更好的效果而且扩展性更好——模型越大效果越好这符合大模型时代的规律。Sora等视频生成模型据公开信息也采用了类似DiT的架构。从U-Net到Transformer的迁移本质上是扩散模型在跟随整个深度学习领域的架构趋势。这个趋势还在继续未来可能会有更适合扩散任务的专用架构出现。5. 扩散模型的能力边界与典型应用5.1 图像生成之外的扩展扩散模型最早在图像生成上证明自己但它的能力远不止于此。在音频领域它可以生成语音、音乐在视频领域它可以生成短视频片段在3D领域它可以生成点云、神经辐射场在分子设计领域它可以生成新的分子结构。这些应用的共同点是数据都是高维的、连续的而且有大量样本可供训练。我自己接触过的一个有意思的应用是“基于扩散模型的新视角合成”。给定几张同一场景不同角度的照片用扩散模型生成从新角度看的图像。这个任务传统上靠神经辐射场做但扩散模型在细节和真实感上往往更好。它的做法是把视角信息作为条件注入去噪过程让模型学会“从指定角度看这个场景应该是什么样”。5.2 条件生成从文本到图像条件生成是扩散模型落地最广的方向。你给一段文字描述模型生成对应的图像这就是文本到图像。实现方式是在去噪过程中注入文本条件通常用交叉注意力机制把文本嵌入融合进U-Net的中间层。Classifier-free guidance是另一个关键技术它让模型在生成时能更好地遵循文本提示代价是采样时要跑两次前向。文本到图像的质量在过去两年提升得非常快从最早的模糊、语义错乱到现在能生成相当逼真的图像。这里面有模型规模的贡献也有数据质量的贡献还有训练技巧的积累。但也要清醒地看到模型对复杂语义、空间关系、文字渲染的处理仍然有短板离“完全可控”还有距离。5.3 可控性与编辑能力扩散模型在图像编辑上的能力也值得单独说。因为它的生成过程是可逆的、逐步的你可以在中间某一步介入修改生成方向。比如用一张参考图引导生成风格或者用掩码控制只修改局部区域。Inpainting、Outpainting、风格迁移、图像修复这些任务扩散模型都做得不错。可控性的核心是“条件注入”。你可以在每一步去噪时加入额外的引导信号比如边缘图、深度图、姿态骨架等。ControlNet就是这方面的代表作它通过复制一份U-Net编码器来接收条件输入实现了精细的空间控制。这个思路让扩散模型从“随机生成”变成了“按需生成”实用性大大增强。6. 实操中绕不开的那些坑6.1 训练不收敛的排查思路虽然扩散模型训练比GAN稳定但也不是完全不会出问题。我遇到过几次训练不收敛的情况排查下来通常是这几个原因。第一是学习率设太大导致损失震荡。扩散模型的损失尺度比较小学习率一般用1e-4到2e-4太大容易发散。第二是噪声调度设计不合理beta的线性或余弦调度对训练影响很大余弦调度通常更稳。第三是数据预处理有问题比如图像归一化没做好导致输入分布和模型假设不匹配。排查的时候我一般先看损失曲线。如果损失一开始就很大且不下降多半是学习率或数据问题如果损失下降后又反弹可能是过拟合或者噪声调度问题。另外采样几张图看看质量比只看损失更直观。有时候损失看着正常但生成全是噪声那可能是反向过程的参数化方式有问题。6.2 采样质量与步数的权衡采样步数和质量的关系不是线性的。从1000步降到100步质量下降很小从100步降到20步质量开始明显下降降到10步以下基本就糊了。所以实践中要在速度和质量之间找平衡点。我的经验是用DPM-Solver这类改进采样器20到30步通常能拿到接近1000步的质量这是性价比最高的区间。如果非要更少步数就得上蒸馏。但蒸馏需要额外训练而且学生模型的多样性会打折扣。所以除非有硬性延迟要求否则不建议一上来就蒸馏。先用改进采样器把步数压到20步左右大多数场景够用了。6.3 显存与批量大小的实际约束扩散模型的显存占用主要来自两方面模型参数和中间激活。U-Net的中间激活在训练时很大因为要保存每一步的中间结果用于反向传播。批量大小往往受限于显存一张24G的卡训256×256的图批量可能只能开到8到16。想开大批量就得用梯度累积或者混合精度训练。混合精度是我强烈建议开的能省将近一半显存速度也快而且对生成质量影响很小。梯度检查点也能省显存代价是训练慢一些。如果显存实在紧张可以考虑先在低分辨率上训再逐步提升分辨率这样中间激活会小很多。提示训练扩散模型时先把批量大小设小一点跑通流程确认损失正常下降后再逐步加大。一上来就追求大批量容易因为显存不足反复重启浪费时间。7. 我对扩散模型发展脉络的几点个人判断从2015年的框架雏形到2020年DDPM引爆再到2022年潜在扩散推动普及扩散模型这条线走得其实挺清晰的每一步都在解决前一步暴露的问题。DDPM解决了生成质量和训练稳定性DDIM和蒸馏解决了速度潜在扩散解决了成本ControlNet解决了可控性。这个演化逻辑不是偶然的它反映了生成模型领域的一个基本规律——先追求质量再追求效率最后追求控制。我个人觉得扩散模型接下来几个值得关注的方向一是更高效的采样争取做到一步生成且质量无损二是更强的可控性让用户能用更自然的方式比如语言、草图精确控制生成结果三是和其他模态的融合比如视频、3D、音频的统一生成框架。这些方向目前都有不少工作在推进但离成熟还有距离。另外想说的是扩散模型不是万能的。它在需要精确数值计算、严格逻辑推理的任务上并不擅长这些任务可能更适合其他方法。技术选型的时候要看清任务本质别因为扩散模型火就硬套。我在实际项目里见过一些场景用传统方法效果更好、成本更低硬上扩散模型反而得不偿失。最后分享一个我自己的习惯跟进扩散模型这类快速演进的领域不要试图读完所有论文而是抓住几条主线——理论线得分匹配、随机微分方程、架构线U-Net、Transformer、加速线DDIM、蒸馏、求解器、应用线条件生成、编辑、跨模态。每条线挑几篇代表作精读其余的了解个大概就行。这样既能跟上进展又不会被信息淹没。
返回列表