课程视频地址: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后,产生的图像效果非常好: