GAN_VS_VAE
在微博上看见过一句话:「 GAN 就是把 VAE 的 encoder 和 decoder 倒了过来」。在结构上仿佛是这样的,GAN 的 generator 和 VAE 里的 decoder 差不多,都可以从 latent variable 得到样本, 而 VAE 的 encoder 和 GAN 的 discriminator 都是在近似 $P(z\vert X)$ , 只不过里面的 $z$ ,一个是 latent variable ,一个是 label 。
但是,除此之外,这两者方方面面都有很大区别。
Bengio 在 quora 上也回答过这个问题 。他的回答有以下几点:
第一,VAE 的评判指标很清晰,就是 log-likelihood ,而 GAN 并没有这种指标。
事实上,关于 GAN 的论文,在与之前工作比较时,通常使用的是 inception score ,即:
y 为 x 在 inception-net 下的 label
这里面的 intuition 是,如果生成样本足够真实,那么 $p(y\vert x)$ 的熵应该比较小($x$ 确实代表了某一类);而 $p(y)$ 的熵应该较大(这意味着生成的样本应该很丰富),结合起来就有了 inception score 。openai 说明 inception-score 与之前用的 TURK 在线人工分辨样本的指标吻合得很好。
但是 inception-score 也有失灵的时候,当生成样本变成某种对抗样本时,图像质量很低,但 inception-score 会出奇的好。这篇文章 讨论了这种情况。
同时,没有一个清楚的目标函数,也造成了 GAN 训练的困难。普通的训练只有一个 loss ,训练时收敛了,我们就认为训练完成了。但 GAN 有两个 loss ,你要时时刻刻提防着不同的情况,比如 discriminator 的 loss 一直降到 0 的时候(并不是好事,此时有可能对 generator 的 gradient 提供不足),又比如说陷入了 mode drop ,等等不一而足。所以没办法设置一个阈值来停止训练。
第二,由于 VAE 学出的那个 identity 并没有这么完美(强制让 $z$ 近似一个分布,再从 $z$ 中采样,这就带来了可能的噪声。再说 AE 本身就不完美),VAE 生成的图片并没有 GAN 看起来这么 sharp 。
我不知道这是否与 reconstruction error 的度量方式有一定关系,如果有的话,那我觉得 VAE-GAN 可能是个好点子。
第三,最大似然通常使得预测的概率密度远离数据流形。但 GAN 却可以训练出概率上不一定符合真实概率但质量更加优秀的样本。
「最大似然通常使得预测的概率密度远离数据流形」,这句话不清楚为什么……
个人补充:
VAE 在训练过程中,可以直接学到样本的一个 representation ,而 GAN 虽然也是有 latent variable 生成,但没办法直接把样本投影回去,在这方面,Inverting The Generator Of A Generative Adversarial Network 做了一些工作。
VAE 可以通过挑选相应的图片传入 encoder 来直接研究 latent space ,而且通常 representation 也会集中在若干有显著意义的几个维度。而 vanilla GAN 中的 latent space 只是噪声。当然通过 Info-GAN 可以使得 latent-space 中的一部分维度有显著意义。