《VAE》论文笔记


论文链接: https://arxiv.org/pdf/1312.6114.pdf

论文代码: https://github.com/devnag/pytorch-generative-adversarial-networks

背景知识

Auto-encoder

auto-encoder是一种无监督的算法,自编码器是一个输入和学习目标相同的神经网络,其结构分为编码器和解码器两部分。其思想是输入x经过encoder生成hidden layer特征z,再将z经过decoder重新预测生成$x^{‘}$

生成模型

VAE和GAN一样都属于生成模型,即从训练数据建模真实数据的分布,再反过来用学到的模型生成新的数据。这一类模型是假设有一个数据集$X=\{x^{(i)}\}_{i=1}^N$, 理想情况下是用$x_i$拟合函数p(x), 通过p(x)能得到$X$之外的数据,但这是理想情况,GAN和VAE采用了不同的方式达到生成模型的效果,之前GAN的论文笔记中有梳理过,GAN是一个对抗网络,通过判别器来判断生成器产生数据的效果。而VAE的方式在下面会详细介绍

Method

VAE的思想是对于一个真实样本$x_k$, 假设存在后验分布$P(Z|x_k)$和$x_k$是一一对应的,$P(Z|x_k)$是一个正态分布图分布,能知道该正态分布的均值和方差,就能将其还原回X,在VAE中$P(Z|x_k)$的均值和方差是通过模型计算得到。

为了使模型具有生成能力,VAE希望$p(Z_x)$趋向于正态分布

在VAE中实际上也有两个encoder,分别用来计算均值和方差,在encoder计算的损失中会加入KL Loss,实际上是给encoder部分增加正则项,希望encoder的均值为0.VAE的损失函数会倾向于在训练初期,会降低噪声(KL loss增加),使得拟合更容易,而在decoder训练的不错时,会增加噪声(KL loss减少),使得拟合更困难

结论

实际上VAE中也有对抗的过程,因为decoder的部分希望没有噪声,而KL loss希望有高斯噪声,两者在训练的时候实际上是对立的。VAE和GAN两种方式实际上各有优缺点,GAN在训练时不稳定,而VAE生成的图像相对GAN会模糊些

欢迎关注我的公众号!

-------------本文结束感谢您的阅读-------------