Vanilla VAE(Variational Autoencoder)
一、AutoEncoder 回顾
生成模型
最理想的生成就是知道输入样本的分布, 然后我们并不知道该分布。那么可以近似求解。
。但我们同样不知道。但是我们可以用神经网络去学习这两个分布。上图中的latent vector可以看成是的一个采样,decoder可以看成条件概率。但是我们真的可以采样一个z,然后用加一个decoder来作为我们的生成模型吗?
- z是Encoder对应着样本X的输出,如果我们直接用Decoder对z还原,那么最终得到的是和X是差不多的,我们需要生成模型是生成一个和X类似的,而不是一模一样的
- 如果对z做一些扰动,必然加一些噪声,那是不是就可以生成类似但是不一样的东西呢?理论上是可以,但是到目前为止,我们的模型并没有保证这一点(模型还没有学习)
加噪声是一个好的思路,如何加噪声?
让z从一个分布采样(注意不是直接使用encoder的输出),就是噪声。
那不放让z从一个中采样。那需要知道, 既然不知道那就用神经网络生成吧。
如果我们按照上述去训练我们的模型,生成方差的回倾向于变成0(因为容易学)。那如何加以限制?使z倾向于一个标准正态分布,即倾向于1。 如下图
如何监督模型达到该目的,KL loss作为监督信号,KL loss如下
reparameterization trick
思考?
- 为什么要正态分布、其它分布可否?