☰
生成模型核心原理:概率密度与采样轨迹的权衡之道
2026/9/29 8:21:57 网站建设 项目流程

1. 生成模型到底在解决什么问题

1.1 从“生成”两个字的字面意思说起

很多人第一次接触生成模型,脑子里冒出来的第一个问题往往是:它到底在干什么?说白了,生成模型要解决的核心问题只有一个——给定一堆已有的数据,让机器学会这些数据背后的分布规律,然后从这套规律里“造”出新的、但看起来跟真的一样的数据。这个“造”的过程,就是生成。

你手头有一万张猫的照片,生成模型看完之后,你给它一个随机噪声,它就能吐出一张全新的、世界上不存在的猫。你有一段人类语音,它学完之后能合成出从未有人说过的句子。这件事听起来很玄,但拆开来看,它本质上就是一个概率建模问题:真实数据服从某个未知分布 p_data(x),我们想用一个模型 p_θ(x) 去逼近它,逼近到一定程度之后,从 p_θ(x) 里采样出来的东西,就“像”真实数据了。

这里有两个关键词贯穿全文:概率密度和采样轨迹。概率密度回答的是“这个数据出现的可能性有多大”,采样轨迹回答的是“我怎么一步步从噪声走到一个像样的样本”。不同的生成模型,本质上就是在这两件事上做了不同的取舍和设计。

1.2 为什么会有这么多流派

如果你去翻生成模型的论文,会发现名字五花八门:VAE、GAN、扩散模型、流模型、自回归模型……初学者很容易懵,觉得这是五套完全不同的东西。但如果你把视角拉高,会发现它们其实都在回答同一个问题:如何建模并采样一个复杂的高维分布。区别只在于,它们选择了不同的“中间桥梁”。

VAE 选择用隐变量加变分推断来搭桥,GAN 选择用对抗博弈绕开密度估计,扩散模型选择用逐步去噪的马尔可夫链来搭桥。这些选择背后,是对“密度好不好算”“采样稳不稳”“训练难不难”这三个问题的不同权衡。理解了这一点,你再看这些模型,就不会觉得它们是孤立的技巧,而是同一张地图上的不同路线。

1.3 这篇文章适合谁看

如果你已经用过 Stable Diffusion 出图,或者跑过几行 VAE 的代码,但对“为什么 GAN 训练这么难”“为什么扩散模型采样这么慢”“为什么 VAE 生成的图总是糊”这些问题只有模糊的感觉,那这篇内容就是写给你的。我会尽量少堆公式,多用类比和实操视角,把概率密度和采样轨迹这两条主线讲清楚,让你在调模型、选方案、排查问题时,心里有一张清晰的图。

2. 概率密度:生成模型的“世界观”

2.1 概率密度到底在描述什么

先把这个概念落地。想象你有一张 256×256 的彩色图片,把它拉平就是一个 196608 维的向量。真实世界里所有“合理的猫图”在这个超高维空间里,只占据极小极小的一个区域。概率密度函数 p(x) 描述的就是:随便扔一个点 x 到这个空间里,它落在“合理猫图”区域的概率有多大。

这个函数几乎不可能显式写出来,因为维度太高了。但它决定了生成模型的两件大事:第一,训练时我们要让模型给真实数据分配高概率;第二,采样时我们要能找到那些高概率区域。所以你会看到,几乎所有生成模型的损失函数,本质上都在做同一件事——拉高真实数据的概率,压低不合理数据的概率。

2.2 显式密度模型与隐式密度模型

这是理解生成模型流派的第一把钥匙。所谓显式密度模型,就是模型能直接告诉你某个样本的概率值是多少,比如 VAE、流模型、自回归模型。隐式密度模型则不给概率值,只给你一个采样器,你没法直接算 p(x),但能从里面采样,GAN 就是典型代表。

这个区别带来的后果非常实际。显式模型通常有明确的似然目标,训练相对稳定,可以做异常检测、密度估计这类任务,但往往在生成质量上要做一些妥协,比如 VAE 容易糊。隐式模型绕开了密度估计这个难题,生成质量往往更锐利,但训练不稳定、模式崩塌这些问题就跟着来了。你在选模型的时候,先问自己一句:我到底需不需要概率值?如果不需要,GAN 这类隐式模型就值得考虑;如果需要,那 VAE 或流模型更合适。

2.3 VAE 是怎么处理密度的

VAE 的思路很巧妙。它假设每个真实样本 x 背后都有一个隐变量 z,x 是由 z 生成的。于是 p(x) = ∫ p(x|z)p(z)dz。但这个积分在高维下算不动,所以 VAE 引入一个编码器 q(z|x) 来近似真实后验 p(z|x),然后用变分下界 ELBO 来优化。

ELBO 可以拆成两项:一项是重构误差,鼓励解码器从 z 还原出 x;另一项是 KL 散度,鼓励 q(z|x) 靠近先验 p(z)。这两项在打架:重构要准,KL 要正则,结果就是 VAE 生成的图往往偏模糊。这不是 bug,是这种密度建模方式的固有 trade-off。我实测下来,VAE 在图像压缩、特征解耦、异常检测上很好用,但你要拿它做高清出图,基本会被扩散模型按在地上摩擦。

2.4 GAN 为什么干脆不算密度

GAN 的聪明之处在于,它发现“算密度”这件事太难,那我干脆不算了。生成器 G 负责把噪声 z 映射成假样本,判别器 D 负责区分真假。两者博弈到最后,理论上 G 生成的分布会逼近真实分布。整个过程你不需要写出一行 p(x) 的表达式。

代价是什么呢?代价是你失去了对密度的掌控。你没法说“这张图概率是多少”,也没法保证生成器覆盖了所有模式。模式崩塌就是典型症状:生成器发现只要反复生成那几张最像真的图就能骗过判别器,于是多样性直接崩掉。我在早期做图像修复项目时踩过这个坑,判别器太强,生成器直接摆烂,输出全是同一种纹理。后来靠调整判别器更新频率、加标签平滑、引入谱归一化才慢慢稳住。

3. 采样轨迹:从噪声走到样本的那条路

3.1 采样到底在做什么

如果说概率密度是“世界观”,那采样轨迹就是“方法论”。采样要回答的是:我手上有一个随机噪声,怎么一步步把它变成一个合理样本?不同模型的采样轨迹差别巨大,这直接决定了生成速度、稳定性和最终质量。

自回归模型是一步一步来的,像打字一样,每次生成一个像素或一个 token,轨迹是串行的,慢但稳。GAN 是一步到位的,噪声进生成器,一次前向传播就出图,快但容易崩。扩散模型是几百步去噪,轨迹长但每一步都很简单,稳但慢。VAE 是一次解码,快但容易糊。你看,采样轨迹的设计,本质上是在速度、质量和稳定性之间做三角权衡。

3.2 扩散模型的采样轨迹为什么这么设计

扩散模型这两年是出图领域的主力,它的采样轨迹值得单独说。前向过程是不断往图片上加高斯噪声,直到变成纯噪声;反向过程是学一个网络,逐步把噪声去掉。训练目标很简单:给定加噪后的图和噪声强度,预测出加进去的噪声。

为什么这种设计有效?因为它把一个“一步生成复杂分布”的难题,拆成了几百个“一步去一点噪声”的简单问题。每一步的分布都接近高斯,网络容易学。但代价就是采样慢,因为你要跑几百次网络前向。后来 DDIM、DPM-Solver 这些加速采样方法,本质上是在不改变训练目标的前提下,把采样轨迹从几百步压缩到几十步甚至几步。我实测过,DDIM 50 步和原始 1000 步在多数场景下肉眼几乎看不出差别,速度却快了 20 倍。

3.3 采样轨迹与图像质量的关系

这里有个很实际的问题:为什么有时候 AI 生成的图片质量突然特别差?除了模型本身的问题,采样轨迹的设置往往是元凶。步数太少,去噪不充分,图就糊或者有噪点;步数太多,有时候反而会过拟合到某些伪影上。采样器的选择也很关键,Euler、DPM++、DDIM 各有脾气,同一个模型换采样器,出图风格可能完全不一样。

还有一个容易被忽略的点:随机种子和采样轨迹的交互。扩散模型的采样本身带有随机性,同一个 prompt 同一个种子,换一个采样器,出来的图可能天差地别。我在做图像修复项目时,经常遇到某个种子在 DDIM 下很好,换到 Euler 就崩了。所以排查质量问题时,先把采样器、步数、CFG scale 这三个参数固定住,再去看模型本身有没有问题。

3.4 GAN 的采样轨迹为什么是一步到位

GAN 的采样轨迹极短:从先验分布(通常是高斯)里采一个 z,过一遍生成器,结束。这种一步到位的设计带来了极快的推理速度,但也意味着生成器必须一次性完成从噪声到样本的全部映射,没有任何中间修正的机会。这就是为什么 GAN 对生成器的容量和训练稳定性要求极高。

你可以把 GAN 的生成器想象成一个杂技演员,要在一次抛接中完成所有动作,中间没有第二次机会。而扩散模型更像是一个雕塑家,先有个粗糙的石头,然后一刀一刀慢慢修。前者快但难练,后者慢但稳。理解了这一点,你就明白为什么 GAN 在实时生成、风格迁移这类场景还有优势,而扩散模型在高保真出图上更胜一筹。

4. 统一图景:把 VAE、GAN、扩散模型放在一张表里

4.1 三条路线的核心对比

维度VAEGAN扩散模型
密度建模显式,变分下界隐式,不算密度显式,逐步去噪
采样轨迹一次解码一次前向多步迭代
生成质量偏模糊锐利但易崩高保真
训练稳定性较稳难调较稳
采样速度快极快慢,可加速
典型问题模糊、后验坍塌模式崩塌采样慢、步数敏感

这张表不是让你背的,而是让你在选型时有个参照。你要做实时风格迁移,GAN 可能更合适;你要做高保真图像修复,扩散模型更稳;你要做特征解耦或异常检测,VAE 的显式密度是优势。

4.2 它们其实在同一个框架下

如果把视角再拉高一点,你会发现这三者都可以放在“从噪声到数据”的统一框架下理解。VAE 是学一个从隐变量到数据的映射,GAN 是学一个从噪声到数据的映射,扩散模型是学一个从噪声到数据的逐步映射。区别在于映射的复杂度、中间步骤的数量,以及训练信号的设计。

甚至可以说,扩散模型在某种程度上是 VAE 的极端版本:把一层隐变量扩展成几百层,每层只做一点点去噪。而 GAN 的对抗思想,也可以被看作是一种隐式的密度比估计。这些联系不是学术上的花架子,而是你在实际调模型时可以用到的直觉。比如扩散模型采样太慢,你可以借鉴 VAE 的思路做蒸馏,把多步压缩成少步;GAN 训练不稳,你可以借鉴扩散模型的逐步加噪思路做渐进式训练。

4.3 图像修复场景下的选型实战

拿图像修复这个具体场景来说,选型逻辑就很清晰了。如果修复区域小、要求速度快,GAN 类的模型可以做到实时;如果修复区域大、要求纹理合理,扩散模型的逐步去噪能更好地保持全局一致性;如果只是做低分辨率修复或者需要概率输出,VAE 也能凑合。

我在实际项目里的做法是:先用扩散模型做高质量修复,再用蒸馏或者少步采样做加速,最后用 GAN 做后处理锐化。这套组合拳打下来,质量和速度都能兼顾。当然,具体参数和模型选择要看你的数据特点和硬件条件,没有万能方案。

5. 实操中的坑与排查技巧

5.1 生成质量突然变差的排查顺序

这是被问得最多的问题。我的排查顺序是这样的:先看采样步数和采样器,再看 CFG scale,然后看种子和 prompt,最后才怀疑模型本身。很多时候问题就出在采样步数被误设成了个位数,或者采样器换了一个不兼容的。如果这些都正常,再去看是不是显存不足导致精度下降,或者模型权重加载错了。

提示:排查时一次只改一个变量,改完立刻出图对比,不要同时调三个参数,否则你永远不知道是哪个起了作用。

5.2 VAE 模糊问题的缓解手段

VAE 生成模糊是结构性的,但可以缓解。第一,用感知损失或者对抗损失替代纯 MSE 重构损失,能显著提升锐度。第二,增大隐变量维度,减少信息瓶颈。第三,用更强大的解码器架构,比如引入注意力机制。我试过在 VAE 解码器里加残差块和谱归一化,模糊程度能改善不少,但代价是训练变慢。

5.3 GAN 模式崩塌的应对

模式崩塌的典型表现是生成样本多样性极低。应对手段包括:调整判别器和生成器的更新频率比,给判别器加噪声或标签平滑,使用小批量判别,引入谱归一化,或者改用 WGAN 系列损失。我个人的经验是,判别器不要训得太狠,给它一点“容错空间”,生成器才有机会探索更多模式。

5.4 扩散模型采样加速的取舍

加速采样不是免费的。步数压得越少,质量下降越明显,尤其是细节和纹理。DDIM 在 50 步左右是个甜点,DPM-Solver 可以压到 20 步左右。如果你要压到 10 步以下,通常需要专门的蒸馏模型,比如 LCM 或者 Turbo 系列。我的建议是,先确定你能接受的最低质量,再去找对应的最少步数,不要盲目追求极速。

6. 一些个人体会

生成模型这个领域,表面上看流派林立,但底层逻辑是相通的。概率密度决定了模型能表达什么,采样轨迹决定了模型怎么把表达变成样本。你把这两条线抓住,再看 VAE、GAN、扩散模型,就不会觉得它们是互不相干的黑盒,而是同一张地图上的不同路径。

我在实际项目里最大的体会是:没有最好的模型,只有最合适的权衡。VAE 的模糊、GAN 的不稳、扩散的慢,都是它们设计选择的必然结果,不是可以轻易绕过的缺陷。你要做的,是根据你的场景、数据和硬件,选一条最不难受的路,然后在细节上慢慢磨。磨参数、磨采样器、磨损失函数,这些脏活累活,才是真正决定最终效果的地方。

最后分享一个小技巧:如果你在扩散模型和 GAN 之间犹豫,可以先跑一个小的扩散模型做 baseline,看看质量上限在哪里,再用 GAN 做加速尝试。这样你心里有个质量锚点,不会在调参的海洋里迷失方向。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询