基于流的生成式模型
Flow-based models for Data generation(Normalizing Flows) | by Sthanikam Santhosh | Medium
我们将了解这些基于流的生成模型到底是什么,它们的内部工作原理,和其他的生成式技术有什么不同。
当前我们有俩个不同的生成式技术可用。它们是
- 扩散模型
- 生成对抗网络(GAN)
- 变分自编码器(VAE)
- 基于流模型
每一个都有特殊的数据生成方式
- 扩散模型:在传播的时候添加噪声到数据样本,在反向过程中从噪声中重建数据样本。
- 生成对抗网络:使用生成器来生成数据,检查生成的样本是否属于元数据集
- 变分自编码器:使用编码器和解码器架构,在编码器中编码数据样例到隐藏层中,解码器从隐藏层中重建数据
- 基于流的模型:与其他基于流的模型不同,使用一系列逆变换来生成图像并学习概率分布。
在学习复杂的数据分布GAN和VAE呈现了良好的结果。然而,GAN和VAE都缺乏准确的概率分布评估和概率分布推断。这导致了VAE中低质量的结果和GAN中训练过程的挑战,比如模型崩溃和梯度消失等。
通过使用逆变换,归一化流解决了GAN和VAE中的问题。
归一化留放入噪声才能生成图像,归一化流的训练过程比GAN要更稳定。
归一化流模型建模真实数据分布并提供给我们精确的数据近似,因此归一化流使用负对数似然作为损失函数。
归一化流使用可逆的变换函数将数据x映射到潜在的特征z来生成模型。这里的z必须和x是相同的形状
这里的可逆函数意思是对于每个数据点x,我们有对应的潜在表示z,这允许我们执行无损的重建(从z到x)。
假设我们有一个先验的密度pz(z)(即高斯)和可逆函数f,我们可以这样确定px(x)
$$ \begin{aligned}\int p_x(x)dx&=\int p_z(z)dz=1\quad\text{(通过概率分布的定义)}\\\Leftrightarrow p_x(x)&=p_z(z)\left|\frac{dz}{dx}\right|=p_z(f(x))\left|\frac{df(x)}{dx}\right|\end{aligned} $$
归一化流通过使用一系列逆变换函数,将一个简单的分布转化为一个复杂的分布。
从上面的z0开始,它遵循高斯分布,我们继续使用可逆的函数f1,f2,f3直到zk代表x
上述的f需要满足俩个条件
- 它是容易可逆
- 它的雅可比行列式很容易算
在训练中,基于流的模型映射输入图片到隐空间z,如下图并且通过简单的隐空间生成图像通过逆变换函数应用它们。
尽管基于流的模型使用真实数据分布来生成数据但是训练这些模型需要大量的算力,通过流的模型生成的数据不像VAE和GAN和扩散模型那样清晰。