上周在调试一个条件扩散模型时,损失函数突然炸成了NaN。排查了半天,发现潜在空间的采样分布和模型先验假设对不上——这让我突然意识到,扩散模型、GAN、VAE、Flow这些生成模型,本质上都在解决同一个问题:如何用神经网络逼近一个复杂的数据分布。只是各自走了不同的路,也踩了不同的坑。
今天我们就抛开那些花哨的数学包装,从工程师视角看看这四大门派的内在联系。你会发现,它们之间的界限其实比想象中模糊。
生成模型的共同目标:分布匹配
所有生成模型的核心任务可以归结为:给定真实数据分布 ( p_{data}(x) ),学一个模型分布 ( p_{\theta}(x) ) 去逼近它。逼近得好不好,就看采样出来的图片像不像真人写的、真图画的那种感觉。
GAN走的是“对抗路线”:弄个判别器当裁判,生成器拼命造假,判别器拼命识破。两者博弈到最后,生成器造出的数据分布就和真实分布重叠了。但这条路训练不稳定,模式崩溃是老毛病——判别器一旦压倒性胜利,生成器就容易摆烂,只生成几种安全样本。
# GAN的训练循环典型结构(伪代码)forreal_dataindataset:# 训练判别器:真样本标1,假样本标