Deep Generative Model

Pixel RNN

为了生成图片,生成一个像素每个时间点。

Pixel RNN示意图Pixel RNN示意图

Variational Autoencoder

encoder输出两个维度相同的vector m和σ\sigma,之后从正态分布中采样一个vector e,最后得到的结果c的计算公式为:
ci=exp(σi)×ei+mi c_i = exp(\sigma_i) \times e_i + m_i

VAE示意图VAE示意图

VAE得到的图不太清楚,但是VAE可以控制需要生成的图片。
Minimize
i=13(exp(σi)(1+σi)+(mi)2) \sum_{i=1}^3(exp(\sigma_i)-(1+\sigma_i)+(m_i)^2)

Why VAE?

Intuitive Reason
VAE增加了noise,从code的空间连续采样,得到的图片质量会更好。
如果不对variance进行限制,网络会认为σ\sigma和e等于0就好。

VAE

z N(0,1)xz N(μ(z),σ(z)) z ~ N(0,1)\\ x|z ~ N(\mu(z),\sigma(z))

最大似然估计
P(x)=zP(z)P(xz)dzL=xlogP(x) P(x)=\int_zP(z)P(x|z)dz\\ L=\sum_xlogP(x)
P(z)是正态分布,xz N(μ(z),σ(z))x|z ~ N(\mu(z),\sigma(z))μ(z),σ(z)\mu(z),\sigma(z)是需要被优化的值。

logP(x)=zq(zx)logP(x)dz=zq(zx)log(P(z,x)P(zx))dz=zq(zx)log(P(z,x)q(zx)q(zx)P(zx))dz=zq(zx)log(P(z,x)q(zx))dz+zq(zx)log(q(zx)P(zx))dzzq(zx)log(P(xz)P(z)q(zx))dz \begin{aligned} logP(x) &=\int_zq(z|x)logP(x)dz\\ & =\int_zq(z|x)log(\frac{P(z,x)}{P(z|x)})dz\\ & =\int_zq(z|x)log(\frac{P(z,x)}{q(z|x)}\frac{q(z|x)}{P(z|x)})dz\\ & =\int_zq(z|x)log(\frac{P(z,x)}{q(z|x)})dz+\int_zq(z|x)log(\frac{q(z|x)}{P(z|x)})dz\\ & \geq \int_zq(z|x)log(\frac{P(x|z)P(z)}{q(z|x)})dz \end{aligned}
上述化简结果的两个部分,后半部分其实是KL(q(zx)P(zx))KL(q(z|x)||P(z|x))这两个分布的KL散度,衡量了两个分布的距离,大于等于0,我们得出了L的下界。

logP(x)logP(x)

与网络的联系
Minimizing KL(q(zx)P(z))KL(q(z|x)||P(z))
Maximizing zq(zx)logP(xz)dz=Eq(zx)[logP(xz)]\int_zq(z|x)logP(x|z)dz=E_{q(z|x)}[logP(x|z)]

网络视角网络视角

Problems of VAE

VAE并没有尝试去模拟真实图片。因为如果VAE生成的图片有一个pixel错误,网络也会觉得这样的损失也比较小,虽然人可能看起来很怪,但是网络觉得没问题。
此外,VAE只记住了现有图片。

Generative Adversarial Network(GAN)

想法是演化,GAN在训练时,生成器和优化器是因为对抗越来越强的。
生成器从来没有看过真正的图片,因此它可以生成训练集中从来没有出现过图片。

GAN的训练过程GAN的训练过程