拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Diffusion、VAE、GAN三大生成模型原理对比与选型指南

生成模型这几年几乎每隔几个月就刷一次屏从最初连人脸都画不清的GA N到后来能生成高分辨率人像的StyleGAN再到如今Stable Diffusion满大街跑的Diffusion模型这条技术路线的演进速度和迭代力度在深度学习历史上都算罕见。但很多人对这三者的认知其实停留在“都能生成图片”这个层面真正被问到“VAE和GAN的区别是什么”“为什么Diffusion训练那么慢还有人用”“原始GAN公式里的交叉熵为什么看起来没负号”时又容易卡壳。这篇文章我就把自己对Diffusion、VAE、GAN的理解从头到尾捋一遍重点拆解三者的原理差异、各自的数学逻辑、训练时的坑以及实际应用场景下到底该怎么选型。不管你是刚开始接触生成模型还是已经在跑Stable Diffusion但想补一补底层原理这篇内容应该都能给你一些干货。1. 三大模型到底是干什么的——先建立直观印象很多人一上来就看公式结果被KL散度、蒙特卡洛采样、判别器收敛性这些名词劝退。我建议换个角度先把“生成模型解决了什么问题”这个根本问题搞清楚再看公式就会顺畅很多。生成模型的核心任务只有一句话给定一批训练数据让模型学会这批数据的分布然后从这个分布里采样出新的样本。听起来很简单但难点在于真实数据的分布极其复杂比如ImageNet里的自然图像它是一个上千万维空间里的一个极低维流形直接用最大似然法去拟合这个分布计算量大到无法接受。于是各路研究者开始想各种办法逼近这个分布这就产生了三条不同的路线VAE先假设数据由一个低维的隐变量latent variable控制学习“数据→隐变量”和“隐变量→数据”两个映射通过最大化证据下界ELBO来训练。GAN不再直接建模分布而是训练一个生成器和一个判别器玩博弈游戏用“以假乱真”作为训练信号让生成器逐步逼近真实分布。Diffusion先把数据逐步加噪变成纯高斯噪声再学习如何一步步去噪还原数据把“生成”任务转化为“去噪”任务。这三条路线各有各的数学工具、训练方式和坑点下面我逐一拆开细讲。1.1 从一张图说起生成模型要解决的究竟是什么问题假设我们手里有一万张猫的图片想训练一个模型来生成“看起来像猫”的新图片。所谓的“看起来像”本质上就是模型要捕捉到猫图片的分布规律——耳朵的位置、毛发的纹理、背景的分布等等。最朴素的想法是直接统计所有像素的联合分布然后从中采样。但假设图片是256×256的彩色图像素维度是196608维每一维的取值有256种联合分布的空间大到超出宇宙中原子数量的量级直接建模完全不可能。所以生成模型真正比拼的是谁能用更聪明的办法来压缩和逼近这个超高维分布。VAE选择把高维分布压缩到一个低维的隐空间GAN选择用博弈的思路绕开显式概率建模Diffusion选择用“逐步加噪-逐步去噪”的方式把分布转化问题变成一系列更简单的子问题。理解了这一点再看各个模型的公式你会发现它们其实都在回答同一个问题如何用一个可计算的损失函数让模型产出的分布尽可能接近真实数据分布。1.2 VAE的思路把图像压缩到“潜空间”再还原VAE的全称是Variational Autoencoder变分自编码器。它认为虽然图片是高维的但决定一张图片内容的核心要素其实很少——比如猫的品种、姿势、背景、光线这些可能只需要几十个维度就能描述。于是VAE的结构就很清晰了一个编码器Encoder把图片压缩成隐变量z一个解码器Decoder从z还原出图片。训练时同时优化两个目标一个是重建误差让解码后的图片尽量接近原图另一个是KL散度约束让隐变量z的分布尽量接近标准正态分布。这个KL散度约束是VAE最关键的設計。如果没有这个约束编码器会直接把每张图映射到一个离散的点隐空间就没有连续性解码器也无法在隐空间插值生成新图片。加了KL约束后隐空间变得平滑连续这样我们随便从标准正态分布里采一个z解码器就能生成一张合理的新图。不过VAE也有一个天生缺陷它用高斯分布来拟合隐变量的后验这个假设过于简单导致生成的图片总是有点模糊。原因在于高斯分布是单峰的无法表达复杂的多模态特征。这也为后来Diffusion模型“抛弃显式潜变量建模、直接学习去噪过程”埋下了伏笔。2. 原理拆解三条不同的技术路线这一节进入核心部分。我会尽量用通俗的类比来解释数学公式但必要的符号和推导过程也都会保留因为这些细节决定了你调参时的直觉。2.1 GAN造假者与鉴定者的博弈GAN的思路可以概括成一句话用判别器代替人工来评估生成质量。生成器负责造假判别器负责打假两者在对抗中共同进步这就是“生成对抗网络”名字的由来。训练过程就像造假币的人和验钞机互相较劲。造假者不断改进伪造工艺验钞机不断升级检测手段最终造假者造出的假钞连验钞机都分辨不出来。此时生成器就学到了真实数据的分布。接下来要解释一个很多初学者看论文时的困惑原始GAN公式里的交叉熵为什么看起来没有负号我直接给出版本原始GAN的目标函数通常写成min_G max_D V(D,G) E_{x~P_data}[log D(x)] E_{z~P_z}[log(1 - D(G(z)))]其中判别器D要最大化这个V生成器G要最小化这个V。仔细观察这个形式D的目标是让V尽可能大也就是让D(x)接近1、D(G(z))接近0这恰好对应“判别器尽量区分真实和生成样本”G的目标是让V尽可能小也就是让D(G(z))接近1这意味着生成样本骗过了判别器。那“交叉熵没有负号”的问题出在哪里呢关键在于最大化目标和最小化目标的写法不同。如果你把判别器的损失写成二分类交叉熵的最小化形式那么带负号的版本就出现了L_D -E_{x}[log D(x)] - E_{z}[log(1 - D(G(z)))]这个形式和上面的max V是等价的因为max V就是min -V。很多论文为了简化直接把负号隐含在“最大化”这个表述里所以公式表面上看不到负号。初学者如果不注意这一点很容易被绕晕。其实记住一句话就行GAN的判别器本质就是一个二分类器二分类器的标准交叉熵损失必然是带负号的不带负号的版本只是把“最小化损失”写成了“最大化目标”。生成器的损失也有两种常见写法。原始论文里用的是min_G E[log(1 - D(G(z)))]这个形式在训练初期梯度很小生成器学不动。后来Goodfellow在论文里也提到实际操作中更推荐用max_G E[log D(G(z))]也就是“最大化生成样本被判别为真的概率”这个形式梯度更大训练更稳定现在几乎所有GAN实现都是这么写的。2.2 VAE用“变分”对抗不可计算的概率VAE从概率图模型的角度出发假设数据x由一个隐变量z生成。理论上我们想要最大化对数似然log p(x)但这个量需要积分掉所有可能的z也就是要算∫p(x|z)p(z)dz在连续高维空间中完全不可解。变分推断的核心思路是不直接优化log p(x)而是引入一个编码器q(z|x)来近似真实后验p(z|x)然后推导出一个可以优化的下界——ELBOELBO E_{z~q(z|x)}[log p(x|z)] - KL(q(z|x) || p(z))第一项是重建误差衡量解码器从z还原x的能力第二项是KL散度让编码器输出的隐变量分布尽量接近先验p(z)通常假设为标准正态分布。最大化ELBO等价于最大化log p(x)的下界所以VAE训练本质上是最大化似然的一个近似。这里有一个细节值得琢磨为什么VAE生成图片会模糊因为ELBO里的第二项KL散度强制每个样本的隐编码都向标准正态分布靠拢导致隐空间的信息容量被压缩解码器无法从z中恢复出高频细节。同时重建误差项用的是逐像素的均方误差或L1损失倾向于生成“平均意义上最像”的图像而平均意味着抹平细节产生了模糊效应。后来有很多工作尝试缓解这个问题比如β-VAE减小KL项的权重VQ-VAE改用离散编码但这些都是在VAE框架内的修补没能从根本上解决模糊问题。直到Diffusion模型出现人们才找到了一条质量更高的路线。2.3 Diffusion正向加噪、反向去噪的全新路径Diffusion模型的思路特别优雅既然从噪声生成图像很难那就先学会把图像变成噪声再从噪声学会变回图像。前向过程Forward Process很简单给一张图片逐步叠加高斯噪声每一步都用加权融合的方式经过T步通常1000步之后图片完全变成标准高斯噪声。这个过程不需要学习任何参数因为每一步加噪的公式是固定的q(x_t | x_{t-1}) N(x_t; √(1-β_t) x_{t-1}, β_t I)其中β_t是一个预定义的噪声调度表noise schedule控制每一步加噪的强度。这里有一个非常妙的性质由于高斯分布的叠加性我们可以直接从x_0一步算出任意时刻t的加噪结果而不需要递归地跑t步q(x_t | x_0) N(x_t; √(ᾱ_t) x_0, (1-ᾱ_t) I)其中α_t 1 - β_tᾱ_t ∏_{s1}^t α_s。这个性质极大地简化了训练因为模型不需要知道中间过程只需要根据任意时刻的噪声图预测噪声就行了。反向过程Reverse Process是Diffusion模型的训练目标。我们要学习一个去噪网络ε_θ输入是加噪的图x_t和时间步t输出是预测的噪声然后用预测噪声和真实噪声的均方误差来更新网络L E_{t, x_0, ε} [ || ε - ε_θ(x_t, t) ||² ]训练完成后推理时只需要从一个纯噪声x_T开始让去噪网络反复预测噪声并逐步去除经过T步就能还原出一张清晰的图。整个流程就是在做“从噪声中逐步雕刻出图像”的事情。Diffusion模型最大的优点是生成质量极高因为它没有VAE那种信息压缩导致的模糊问题也没有GAN那种训练不稳定和模式崩溃的问题。但它最大的缺点也很明显——推理速度太慢需要递归采样成百上千步每一步都要跑一次神经网络。这也是后来DDIM、DPM-Solver、Latent Diffusion等加速方案不断出现的核心驱动力。3. 核心细节与参数从公式到代码的关键点了解了基本原理之后我讲讲实际训练和实现这些模型时容易踩的一些坑。很多细节论文里不会写但实操中直接决定模型能不能收敛。3.1 训练细节对比三者最本质的差异是什么GAN训练的不稳定性是出了名的。常见的问题包括判别器太强导致生成器梯度消失、判别器太弱导致生成器学不到东西、模式崩溃mode collapse导致生成样本单一重复。我自己训练GAN时踩过最深的一个坑是生成器和判别器的更新比例几乎决定成败。最经典的配置是每个batch更新一次判别器、一次生成器但这个比例在不同数据集上表现差异巨大。如果你发现生成器损失降不下去或者判别器损失趋近于0先别调网络结构试着把判别器的学习率调低一个数量级或者每更新K次判别器才更新一次生成器。WGAN-GP的思路本质上就是用梯度惩罚来约束判别器的Lipschitz连续性从而缓解训练不稳定问题。VAE训练相对稳定因为损失函数是可微的、有明确上界的不存在对抗博弈。但VAE也会遇到“后验坍塌”posterior collapse问题KL散度项被优化到0编码器完全失效解码器直接根据先验生成生成的图片完全不相关。这个问题在序列数据如文本上尤其常见一个实用的缓解手段是让KL项的权重从0开始逐步warm-up或者对重建项做更强的加权。Diffusion训练反而最“朴素”它的损失函数就是一个简单的MSE没有对抗博弈没有先验坍塌只要数据预处理正确、噪声调度表设置合理基本都能稳定收敛。但这不代表Diffusion没有坑——它的训练成本很高因为每一步都要随机采样一个t时刻加噪而且通常需要训练几十万步才能出效果。另外EMA指数滑动平均几乎是必备技巧否则模型权重波动大生成质量不稳定。三者的训练细节差异我用表格总结一下对比项GANVAEDiffusion训练稳定性差需要大量调参稳定但可能后验坍塌稳定收敛曲线平滑损失函数对抗损失min-max博弈ELBO重建KL简单的MSE噪声预测生成多样性易模式崩溃多样性良好但模糊多样性好、质量高推理速度快一次前向快一次前向慢需迭代数十至上千步可解释性隐空间难解释隐空间平滑连续无显式隐空间3.2 生成质量与训练代价为什么Diffusion效果好但贵Diffusion模型的生成质量在当下全面超越GAN和VAE这个结论在FIDFréchet Inception Distance等指标上已经被反复验证。背后的原因值得深究。VAE效果差在信息瓶颈。它把整张图压缩到几十维的隐变量里再从这个低维向量还原图像信息量不够只能还原出低频轮廓高频纹理细节全部丢失。很多人不理解为什么VAE不直接把隐变量维度设大一点实际上维度一旦增大KL散度正则几乎失效隐空间退化成标准高斯分布与训练数据的简单插值训练效果反而不如低维设置。GAN效果好但容易崩。它绕过了显式概率建模用判别器作为感知损失能够生成非常锐利的图像。但是博弈的不稳定性让它在复杂数据集上容易模式崩溃生成样本的多样性不足。StyleGAN用渐进式生长、映射网络等技巧大幅缓解了这些问题但并没有从根上解决对抗训练的不稳定性。Diffusion效果好是因为它把生成任务分解成了上千个去噪子任务每一步只需要学习一个微小的高斯去噪过程对应的分布偏移非常小模型容易拟合。同时它在不同噪声尺度上学习特征——大噪声时学习全局结构小噪声时学习局部纹理这种多尺度学习天然适合图像生成。代价就是推理时计算量巨大。Stable Diffusion之所以能普及关键一步就是用VAE把图像压缩到潜空间在潜空间上运行Diffusion过程大幅降低了计算量。这也是为什么你能在消费级显卡上跑Stable Diffusion而早期用原始DDPM生成512×512图像需要几分钟。3.3 一个被忽视但影响巨大的参数噪声调度Diffusion模型里噪声调度表β_t的设定直接决定训练效果。如果噪声加的太快模型还没来得及学会细粒度特征就被噪声吞没了如果加得太慢训练后期学到的都是大噪声下的全局结构细粒度特征又学不到。最经典的DDPM用的是线性调度从β_10.0001线性增加到β_T0.02。这个设置在CIFAR和ImageNet上都表现不错但在更高分辨率图像上还有优化空间。后来Cosine调度cosine schedule在很多实现中被证明更稳定因为它避免了线性调度在倒数第二步时噪声增长过快的问题。Stable Diffusion采用的也是cosine调度的变体。我建议初学者直接用现成框架的默认设置不要一开始就调噪声调度。等模型基础跑通了再尝试不同的调度表观察生成图像的纹理细节和全局一致性差异。这个参数对最终效果的影响比很多人想象的要大得多。4. 实操过程与核心环节实现——三大模型从训练到部署要过哪些坎这一节聊聊实操层面。我假设你已经具备Python和PyTorch基础直接讲怎么把这三种模型跑起来以及跑通过程中最常遇到的坑。4.1 快速跑通一个GAN从MNIST开始的完整流程如果只想体验GAN的训练过程MNIST数据集是绝佳选择。核心代码大约不到一百行就能搞定但有几个关键细节需要特别注意。首先是标签平滑label smoothing。标准的二分类标签是0和1但实践中最常用的做法是给真实标签设为0.9而不是1.0生成标签设为0.1而不是0。这个技巧能让判别器的输出不要过于自信从而给生成器保留足够的梯度信号。其次是梯度惩罚。原始GAN的判别器理论上需要满足Lipschitz连续性但直接用权重裁剪weight clipping实现很粗糙容易导致梯度消失。WGAN-GP用梯度惩罚替代权重裁剪效果显著提升现在已经是GAN训练的事实标准。核心实现是# WGAN-GP 梯度惩罚 gradient_penalty 0 for _ in range(1): epsilon torch.rand(real_images.size(0), 1, 1, 1) interpolated epsilon * real_images (1 - epsilon) * fake_images interpolated.requires_grad_(True) d_interpolated discriminator(interpolated) gradients torch.autograd.grad( outputsd_interpolated, inputsinterpolated, grad_outputstorch.ones_like(d_interpolated), create_graphTrue, retain_graphTrue, )[0] gradients gradients.view(gradients.size(0), -1) penalty ((gradients.norm(2, dim1) - 1) ** 2).mean() gradient_penalty lambda_gp * penalty最后是keep住生成器和判别器的更新节奏。我在CIFAR-10上训练时发现判别器每更新5次、生成器更新1次的效果比1:1要好很多。原因是判别器如果更新太少梯度信号本身就不可靠生成器反而学不到有效信息。4.2 VAE训练从理论到代码的完整落地VAE的实现相对简单但要注意重参数化技巧reparameterization trick。这个技巧的核心是采样z时不直接从q(z|x)采样因为采样操作不可导而是先采样一个标准正态噪声ε再用均值μ和方差σ做线性变换z μ σ ⊙ ε这样梯度就能通过μ和σ反向传播到编码器。这是VAE能训练起来的核心技巧没有这一步整个模型无法用反向传播优化。训练VAE时我推荐一个简洁的损失实现# VAE损失重建损失 KL散度 recon_loss F.mse_loss(decoded, images, reductionsum) kl_loss -0.5 * torch.sum(1 log_var - mu.pow(2) - log_var.exp()) loss (recon_loss kl_loss) / images.size(0)注意这里用reductionsum再除以batch size而不是直接用mean因为KL散度本身就是按样本维度求和的如果用mean会破坏两者之间的量纲平衡。很多新手在这里踩坑导致重建项完全支配损失KL项一直不下降。VAE训练中最常见的问题是生成图像模糊。如果你发现VAE重构出来的图像像打了马赛克一样先别急着调网络结构检查一下是否对图像做了归一化到[0,1]区间以及损失函数是否用了MSE。MSE损失天然倾向于平均换成Perceptual Loss可以在一定程度上提升锐度但推理成本更高。4.3 用Stable Diffusion实测Diffusion模型的训练与推理Stable Diffusion是目前Diffusion模型在图像生成领域最成功的落地应用。它的核心创新在于使用一个预训练的VAEAutoEncoderKL把高分辨率图像压缩到潜空间在潜空间上运行Diffusion过程。这样做的原因是直接在像素空间上跑Diffusion计算量太大训练和推理都难以承受而潜空间的维度小得多Diffusion训练和推理都更高效。如果你想在本地体验Stable Diffusion的训练过程我的建议是先用现成的生态。比如用Diffusers库加载一个预训练模型做微调from diffusers import StableDiffusionPipeline # 加载Stable Diffusion模型 pipe StableDiffusionPipeline.from_pretrained( stable-diffusion-v1-5/stable-diffusion-v1-5, torch_dtypetorch.float16, ).to(cuda) # 文本生成图像 image pipe( a photo of a cat sitting on a windowsill, num_inference_steps30, guidance_scale7.5, ).images[0]这里num_inference_steps是采样步数guidance_scale是无分类器引导强度。步数越大质量越好但越慢引导强度越大越忠实于文本提示但可能牺牲多样性。跑过几次之后你会发现为什么越来越多的AI绘画工具都在用Diffusion——生成质量确实比早期的GAN模型高一个层次。如果你想从零训练一个Diffusion模型推荐从DDPM论文的官方实现入手用MNIST或者CIFAR-10先跑通流程再逐步扩展到更复杂的数据集。我自己第一次完整训练DDPM时印象最深的是显存占用比我预想的大很多因为反向传播要跨越所有时间步的计算图。后来改用了一种更省显存的方式不保存所有中间层而是随机采样时间步t而不是全部迭代这样每次反向传播只需要一条子路径显存压力大幅降低。5. 常见问题与排查技巧实录在实际使用这三种模型的过程中我积累了不少排查经验。很多问题看起来复杂但根因往往很朴素下面整理成表格方便查漏补缺。5.1 三大模型训练中的高频问题速查表问题现象可能原因排查方向GAN生成图像单一重复模式崩溃生成器过早被判别器压制调整更新比例、降低判别器学习率、尝试Mini-batch DiscriminationGAN训练不收敛损失震荡剧烈学习率过高、判别器过强用WGAN-GP、降低学习率、增大batch sizeVAE重建图像模糊隐变量维度太低、KL权重过大增大隐变量维度、降低β值、使用感知损失VAE重建出现色块和伪影数据归一化不当、t-SNE插值不当检查图像输入范围、检查是否使用sigmoid输出层Diffusion训练loss正常但生成图像全是噪声推理时未正确缩放噪声、去噪步数太少检查采样时是否除以√(1-ᾱ_t)、提高采样步数Diffusion推理速度太慢采样步数过多、未使用加速采样器使用DDIM、DPM-Solver、RESTART采样器显存不足batch size过大、序列长度过长降低batch size、使用梯度累积、混合精度训练5.2 解决GAN模式崩溃一次从Level 1到Level 3的排查实录我在一次人脸生成实验中遇到了典型的模式崩溃生成器产出的64张图全是同一张脸只是背景略有不同。第一次遇到时我以为是网络结构问题反复调了几版网络都没用。后来做了三轮排查才把它治明白第一轮调整训练节奏。把判别器更新次数从1次提到3次同时把生成器的学习率从0.0002降到0.00005。效果是崩溃依旧但崩溃的“周期”从每1000步一次变成了每3000步一次。这说明方向是对的但力度不够。第二轮引入WGAN-GP损失。之前用的是原始GAN的BCE损失换成WGAN-GP后模式崩溃的频率明显降低。原因在于WGAN-GP用EM距离替代了JS散度在判别器接近最优时也能给生成器提供有效梯度减少了梯度消失导致的生成器“不求进取”问题。第三轮给生成器加了一个特征匹配损失Feature Matching Loss。这个思路来自Improved GAN论文简单说就是让生成图片在判别器中间层的特征表示尽量接近真实图片的特征表示。代码实现很直接# 特征匹配损失 def feature_matching_loss(real_features, fake_features): loss 0 for r, f in zip(real_features, fake_features): loss F.mse_loss(f, r.detach()) return loss加了这个损失之后生成器不再单纯追逐“骗过判别器”这个单一目标而是被约束在“与真实图片在特征层面接近”这个方向上模式崩溃问题基本解决。5.3 Diffusion模型推理加速的两种实测方案Diffusion模型最大的痛点在于推理速度。这里我分享两个我自己实测有效的加速方案。第一个是DDIM采样器。它的核心思想是让采样过程变成确定性的也就是给定同一个初始噪声生成的图像是固定的。相比DDPM的1000步逐步去噪DDIM通常只需要20到50步就能生成质量接近的图像。我自己测试中50步DDIM和1000步DDPM在FID指标上几乎持平但速度提升了20倍。第二个是DPM-Solver。这是一个基于微分方程求解器的采样方案理论上只需要10到20步就能达到不错的质量。实际操作中我发现DPM-Solver在低步数下的表现优于DDIM但在高步数下DDIM更稳定。如果你使用的是Stable Diffusion系列模型直接在Diffusers里设置scheduler为DPMSolverMultistepScheduler即可。还有一个经验是推理时用fp16训练时用fp32。Diffusion推理时对精度不敏感用fp16可以显著降低显存占用和计算时间但训练时用fp16容易出现loss变为NaN的问题尤其是使用动态损失缩放时。如果必须用fp16训练建议开启grad_scaler并设置很大的初始缩放因子。6. 实际项目中的模型选型到底该用哪个讲完了原理和踩坑最后聊一个更实际的问题真实项目里到底该选哪个模型这个问题没有标准答案但有几个判断维度可以参考。6.1 从任务类型出发的模型选型指南表格是最直观的参考需求场景推荐模型原因图像生成高精度Diffusion / Stable Diffusion质量最高细节丰富多样性好图像生成实时性要求高GAN单次前向即可生成延迟低图像压缩与重建VAE / VQ-VAE天然适合压缩与重建任务图像编辑与风格迁移三者皆有视任务而定需要潜空间特性的用VAE或StyleGAN异常检测VAE重建误差可以作为异常分数图像超分辨率GAN或DiffusionGAN锐利但可能产生伪影Diffusion更真实3D生成Diffusion在崛起GAN也有一席之地新模型越来越多但Diffusion逐步成为主流文本到图像生成Diffusion目前在条件生成上表现最强如果你做的是ToC产品面向消费者的应用推理延迟往往是核心指标GAN可能是更现实的选择。如果你做的是艺术作品生成质量优先于延迟Diffusion几乎是不二之选。如果你做的是数据压缩、特征提取这类任务VAE家族仍然是最直接的方案。6.2 未来方向模型的融合是趋势很多人把Diffusion、VAE、GAN看作竞争关系实际并不是。Stable Diffusion本身就是VAE和Diffusion的结合体——用VAE压缩维度用Diffusion生成高质量潜变量。这种“取各家之长”的融合思路正在成为主流。近期的实践中GAN也可以作为Diffusion的加速器。比如有些工作用GAN的判别器损失替换Diffusion的均方误差损失在保持生成质量的同时减少采样步数。还有一些工作在Diffusion的去噪过程中引入对抗训练让模型在低步数时也能产出清晰的图像。所以我的建议是不要把自己锁定在某一个框架里。学会VAE的潜空间思想学会GAN的对抗思想学会Diffusion的去噪思想然后在具体任务中根据需求灵活组合这才是生成模型领域真正的核心竞争力。就像我开头说的生成模型这几年的演进速度非常快今天的最佳实践可能半年后就过时了。但背后的原理和思维模式是持久的VAE教你如何压缩和解码分布GAN教你如何用博弈逼近分布Diffusion教你如何用逐步映射逼近分布。掌握了这三条路线未来无论出现什么新模型你都能快速理解它的定位和创新点。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门