CS231 第十三讲 生成模型
课程视频地址:https://study.163.com/courses-search?keyword=CS231
课程主页:http://cs231n.stanford.edu/2017/
这一讲介绍了Pixel RNN/CNN,变分自编码器以及生产对抗网络。
Generative Models
首先介绍生成模型,生成模型是学习数据的分布:
分类如下:
这一部分主要讨论Pixel RNN/CNN,变分自编码器(Variational Autoencoder)以及生产对抗网络(GAN)。
PixelRNN and PixelCNN
首先利用链式法则分解图像出现的概率:
PixelRNN,PixelCNN就是利用上述公式产生图像:
因为图像是逐个像素产生的,所以产生图像的速度非常慢,总的来说,这两张方法的优点缺点总结如下:
Variational Autoencoders (VAE,变分自编码器)
之前介绍的方法是优化如下概率
VAE则是通过隐变量$z $计算上述概率
继续介绍VAE之前,我们先介绍Autoencoders。
Autoencoders
Autoencoders是利用无监督学习学习数据的特征,分为Encoder和Decoder:
当训练完成之后,我们只需要Encoder,可以将产生的特征初始化监督学习模型:
VAE模型的Encoder和Decoder如下:
现在我们计算对数似然概率:
注意到
所以$p_{\theta}(z|x)$很难计算,但是由于$D_{KL}(q_{\phi}(z|x^{(i)})||p_{\theta}(z|x^{(i)}))\ge 0$,我们实际上可以忽略这一项,转而计算对数似然的下界
通过最大化上式来让对数似然函数下界变大(类似EM算法)。整个训练过程如下
当训练完成后,我们从高斯分布$\mathcal N(0,I)$中产生$z$,然后产生数据$\hat x$:
优势劣势如下:
Generative Adversarial Networks (GAN,及生产对抗网络)
GAN分为生成网络和判别网络两个部分,生成网络产生数据,判别网络判断数据的真假:
两者的作用如下:
- 生成网络:尝试通过生成逼真的图像来欺骗判别器。
- 判别网络:尝试区分真实和虚假的图像。
训练模式如下:
训练过程分为两个部分:
但是由于$\log(1-D_{\theta_d}(G_{\theta_g}(z))$一开始梯度很小,上述训练过程会很慢,所以实际中用如下方式训练:
完整算法如下:
图中第一部分需要运行$k$步,有人认为$1$步更稳定,有人则认为$k>1$更好。
一开始的GAN的生成网络是前馈神经网络,将其改为CNN后,产生的图像效果非常好: