生成对抗网络 (GAN) 和扩散模型是生成建模中的两种主导方法,各自具有独特的优点和不足。GAN,特别是像StyleGAN这样的高级变体,通常擅长生成清晰、高保真的细节,并在训练后提供相对快速的采样。但是,它们可能出现训练不稳定、模式崩溃以及难以完全捕捉数据分布多样性的问题。另一方面,扩散模型通常表现出更稳定的训练过程,并提供出色的模式覆盖和样本多样性。它们的主要缺点历来是由于迭代去噪过程而导致的采样速度较慢,尽管DDIM等技术已显著减轻了这一问题。鉴于这些互补特性,结合GAN与扩散模型为推动生成建模的前沿水平提供了一个有吸引力的方向。混合方法旨在汇集两者之长,可能产生训练稳定、生成多样且高保真样本,并对生成过程提供灵活控制的模型。混合模型的动机为何要整合这两类看似不同的模型?主要动机有:提升样本质量: 运用GAN的对抗训练机制有助于使扩散模型的输出更清晰,因为扩散模型有时与顶尖GAN相比会产生略微模糊的结果。可以训练一个判别器来区分真实数据和扩散过程生成的样本,从而提供额外的训练信号以增强感知质量。提高训练稳定性: 尽管扩散模型通常很稳定,但GAN的训练出了名的困难。加入扩散模型的元素,例如噪声注入或分数匹配目标,可能提供正则化GAN训练的其他方法,但这与使用GAN改进扩散模型相比是一个较少研究的方向。加速采样: GAN生成器通过单次前向传播生成样本,这与扩散模型的迭代性质不同。混合模型可以使用GAN生成器生成初始粗糙样本,或者将噪声直接映射到扩散逆向过程中的某个点,从而减少所需的去噪步骤数量。更好的模式覆盖: 扩散模型擅长捕捉完整的数据分布。运用扩散原理可能有助于缓解GAN中的模式崩溃,确保生成器学会生成更广泛多样的输出。架构与策略结合GAN和扩散模型组件已出现几种策略:扩散模型的对抗损失一种常见方法是用对抗损失增强标准扩散模型训练目标(通常是预测噪声的均方误差损失)。判别器网络 $D$ 与扩散模型的去噪网络 $p_\theta(x_{t-1}|x_t)$ 一同训练。判别器试图区分真实数据样本 $x_0$ 和在完整逆向扩散过程后获得的生成样本 $\hat{x}_0$。去噪网络接收来自判别器的额外梯度信号,鼓励它生成对 $D$ 来说更真实的样本。结合目标可能如下所示: $$ L_{总} = L_{扩散} + \lambda L_{对抗} $$ 这里,$L_{扩散}$ 是标准扩散损失(例如,噪声预测误差),$L_{对抗}$ 是应用于最终生成样本 $\hat{x}_0$ 的GAN损失(例如,非饱和GAN损失),$\lambda$ 是一个权重因子。digraph G { rankdir=LR; node [shape=box, style=filled, fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; subgraph cluster_diffusion { label = "扩散逆向过程"; bgcolor="#a5d8ff"; style=filled; node [fillcolor="#ffffff"]; noise [label="初始噪声 z ~ N(0,I)", shape=ellipse, fillcolor="#ffec99"]; step_t [label="去噪步骤 t\n(U-Net p_θ)"]; step_t_minus_1 [label="去噪步骤 t-1\n(U-Net p_θ)"]; dots [label="..."]; step_1 [label="去噪步骤 1\n(U-Net p_θ)"]; x_hat_0 [label="生成样本 ^x₀", shape=ellipse, fillcolor="#b2f2bb"]; } subgraph cluster_gan { label = "对抗组件"; bgcolor="#ffc9c9"; style=filled; node [fillcolor="#ffffff"]; D [label="判别器 D"]; real_x0 [label="真实样本 x₀", shape=ellipse, fillcolor="#b2f2bb"]; loss_adv [label="对抗损失\nL_adversarial", shape=plaintext, fillcolor="#ffc9c9"]; } noise -> step_t; step_t -> step_t_minus_1 [label="去噪"]; step_t_minus_1 -> dots; dots -> step_1; step_1 -> x_hat_0; x_hat_0 -> D [label="输入假样本"]; real_x0 -> D [label="输入真实样本"]; D -> loss_adv [label="输出真/假分数"]; loss_adv -> step_t [label="梯度更新 (通过 λ)", style=dashed, constraint=false]; loss_adv -> step_t_minus_1 [style=dashed, constraint=false]; loss_adv -> step_1 [style=dashed, constraint=false]; loss_diff [label="扩散损失\nL_diffusion", shape=plaintext, fillcolor="#a5d8ff"]; step_t -> loss_diff [style=dashed, constraint=false]; step_t_minus_1 -> loss_diff [style=dashed, constraint=false]; step_1 -> loss_diff [style=dashed, constraint=false]; }此图说明了对抗损失在扩散模型框架中的集成。判别器评估最终生成的样本,其损失有助于去噪网络(U-Net)的训练。GAN作为初始化器或细化器另一个方向是使用GAN来辅助扩散过程:GAN初始化: 我们可以不从纯高斯噪声 $x_T$ 开始扩散逆向过程,而是使用预训练的GAN生成器 $G(z)$ 生成初始估计 $\hat{x}_T = G(z)$。然后,扩散过程通过更少的步骤细化这个初始估计,可能加速采样。扩散细化: GAN可以生成一张可能合理但可能不完美的图像,然后将其视为真实图像的噪声版本(某个中间 $t$ 的 $x_t$)。随后,扩散模型执行少量去噪步骤来细化GAN的输出,添加更精细的细节或改善分布特性。共享潜在空间或架构更一体化的方法可能涉及设计共享组件或潜在空间的架构。例如,可以研究潜在变量根据扩散动力学演变但使用GAN风格生成器解码的模型,或者GAN的判别器在扩散过程中提供指导,而不仅仅是一个最终损失项。实施挑战与权衡结合这些模型自然会增加复杂性:训练动态: 平衡扩散目标与对抗目标需要仔细调整损失权重($\lambda$)和优化器超参数(例如,学习率,可能使用TTUR等不同的学习率)。两种训练信号之间的相互作用可能很复杂。计算成本: 训练通常涉及优化多个网络(去噪器、判别器,可能还有生成器),并且可能需要存储多个组件的梯度,这会增加内存和计算需求。架构设计: 有效集成组件需要周密的架构选择。例如,判别器应如何处理中间扩散状态,或者GAN生成器应如何根据扩散时间步进行条件化?尽管存在这些挑战,混合模型的潜在收益是显著的。它们为创建结合了GAN的高保真度和速度与扩散模型的训练稳定性和多样性的生成模型提供了一条有前景的途径。随着研究的进展,我们可以期待看到这些强大技术越来越精巧和有效的集成,特别是对于高分辨率图像合成、视频生成和复杂的条件生成问题等要求高的任务。