本文是Deep Learning Course总结系列的第五篇,本文的主要内容是对生成模型PixelCNN,PixelRNN,VAE,GANs进行介绍。
本系列前四篇传送门:第一篇 [Deep Learning] 神经网络基础;第二篇 [Deep Learning] 卷积神经网络 CNNs;第三篇 [Deep Learning] 集成学习Ensemble Learning&迁移学习Transfer Learning ;第四篇 [ [Deep Learning] 循环神经网络RNN ](//www.greatytc.com/p/5c22b41e9f07)。
生成模型分类
无监督学习包括聚类K-means、降维PCA、特征学习Antoencoders、密度估计、生成模型(图片生成、超分辨率、图片着色、时间序列数据模拟和计划[增强学习]、潜在特征推断)等,其中生成模型的分类历史如下图所示:
Explicit生成模型假设参数空间已知或可以近似估计,然而真实数据的分布往往是十分复杂的。
PixelRNN & PixelCNN
由 Google 提出的 PixelRNN和 PixelCNN从左到右,从上到下,逐步生成一个个像素,最终生成整张图像。它的基本原理是训练数据的概率最大化最优化,以之前生成的像素作为输入,输出对于下一个像素的值的统计分布的预测,然后从分布采样出下一个像素。
由于逐个生成像素,PixelRNN & PixelCNN的最大问题是速度太慢,但Pixel 系列的思想尤其适合生成音频和文字,例如 WaveNet,它用此前生成的音频采样作为输入,生成下一个采样,不断重复此过程,最终可生成高质量的语音和音乐。
AE & VAE
-
自动编码机(Auto Encoder):针对非标签化数据学习其低维特征表示
通过编码器降维关注更为重要的特征(下采样downsampling),使用解码器恢复图像(上采样upsampling)并使用L2损失函数判断重构图像和原图像的相似度。由于AE 中没有更先进的判别网络,AE 的优化目标实际只是让 x 和 G(E(x)) 尽量在像素上接近。这并不是个好目标,因此 AE 生成的图像往往很模糊、质量低。但AE生成的图像更均匀,光滑,训练过程更稳定,这也是它可以与GAN后续结合的优点。
- VAE:VAE(Variational Auto-Encoder)能解决 AE 的一个缺点:AE 的 G 只能保证将由 x 生成的 z 还原为 x。如果我们随机生成 1 个 z,经过 AE 的 G 后往往不会得到有效的图像。而 VAE 可让 E 生成的 z 尽量符合某个指定分布,例如标准差为 1 的多维正态分布。那么此时只需从这个分布采样出 z,就能通过 G 得到有效的图像。
作为生成模型的AE也可以用于分类问题:编码器和Softmax函数结合适用于样本量不足的分类监督学习,能够避免样本量不足时的过拟合问题。
对上述几种方法的对比总结:
GAN
GAN模型于2014年由Ian Goodfellow提出[1],GAN使用博弈的思想由一个生成器和一个判别器构成,生成器G从给定噪声z中(一般是指均匀分布或者正态分布)产生合成数据,判别器D分辨生成器的的输出和真实数据,在训练过程中,双方不断优化自己,直到D无法再区分真实数据和G产生的数据,到达纳什均衡。:
其中优化D的部分:当x来自真实数据集data时,D(x)应该越接近1越好,而当处理G产生的数据G(z)时,D(G(z))应该越接近0越好,所以式子中,log(D(x)),log(1-D(G(z)))应该越大越好;
而G作为生成器,它所要做的就是迷惑D,让D将自己生成的数据误认为成来自真实数据集的数据,所以D(G(z))应该越接近1越好,即log(1-D(G(z)))应该越小越好。然而当优化G时,由于在学习初期,G的表现较差,D很容易区分出G产生的数据,即D(G(z))=0, 导致log(1-D(G(z)))可能会出现饱和的问题。在出现这种问题时,可以转而用最大化log(D(G(z)))来优化G。
GAN优化
GAN自提出以来,就存在着训练困难、不易收敛、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多研究人员就在尝试解决,并提出了改进方案,切实解决了部分问题,如生成器梯度消失导致的训练困难。当然也还有很多问题亟待解决,如生成样本的评价指标问题。
DCGAN (Deep Convolutional GAN)
朴素GAN在生成器和判别器在结构上是通过以多层全连接网络为主体的多层感知机(Multi-layer Perceptron, MLP) 实现的,然而其调参难度较大,训练失败相当常见,生成图片质量也相当不佳,尤其是对较复杂的数据集而言。由于卷积神经网络比MLP有更强的拟合与表达能力,2015年Alex Radford提出使用卷积架构取代GAN中的全连接层[2]。DCGAN去掉了池化层,采用批标准化(Batch Normalization, BN)等技术,并强调了隐藏层分析和可视化技术对GAN训练的重要性和指导作用。
WGAN (Wasserstein GAN)
对于GAN的全局最优解,固定G优化D,D的最佳情况为:
根据D(x)的全局最优解可以得出:当判别器过优时,生成器的loss可以近似等价于优化真实分布与生成器产生数据分布的JS散度。然而JS对于两个完全没有overlap的情况无法收敛。具体推导可参考:https://zhuanlan.zhihu.com/p/39398823。WGAN阐述了朴素GAN因生成器梯度消失而训练失败的原因,并用Wasserstein距离替代了Jensen-Shannon散度,在理论上解决了梯度消失问题。
此外,WGAN还从理论上给出了朴素GAN发生模式坍塌(mode collapse)的原因,本质上是过拟合到某一点
模式坍塌的几种解决方案包括正则化、增加label(半监督GAN)、fe
ature matching
WGAN从实验角度说明了WGAN在这一点上的优越性。
虽然WGAN基本解决了训练失败的问题,但是无论是训练过程还是是收敛速度都要比常规 GAN 更慢。
WGAN-GP增加梯度惩罚项
Progressive GAN
BIgGAN
GraphSGAN
CVAE-GAN
CVAE-GAN包括4 个神经网络:
E:编码器(Encoder),输入图像 x,输出编码 z。
如果还给定了类别 c,那么生成的 z 就会质量更高,即更随机,因为可移除c中已包含的信息。
G:生成器(Generator)。输入编码 z,输出图像 x。
如果还给定了类别 c,那么就会生成属于类别 c 的图像。
C:分类器(Classifier)。输入图像 x,输出所属类别 c。
D:辨别器(Discriminator)。输入图像 x,判断它的真实度。
CVAE 生成的图像中规中矩,但是模糊,CGAN 生成的图像清晰,但有时会有明显错误,所以 两者互补相结合后网络共有三个目标: 对于从 x 生成的 z,G 应能还原出接近 x 的 x'(像素上的接近)。这来自 AE 的思想。G 生成的图像应可由 D 鉴别为属于真实图像。这来自 GAN 的思想。G 生成的图像应可由 C 鉴别为属于 c 类别。这与 InfoGAN 的思想有些相似。
最终的z在不同 c 下的效果:
不同 c,代表不同的明星。相同 z,代表其他的一切语义特征(如表情,角度,光照等等)都一模一样。通过保持 z,改变 c,可轻松实现换脸效果。由于 CVAE-GAN 生成的样本质量很高,还可用于增强训练样本集,进行语义插值等。
cGAN (conditional GAN)
为了生成指定标签的数据,在CGAN中,生成器不仅要输入随机数,还需要将之与标签类别做拼接(concat,一般要将标签转换成如one-hot或其它的tensor),再将其输入生成器生成所需要的数据。此外,对判别器,也需要将真实数据或生成数据与对应的标签类别做拼接,再输入判别器的神经网络进行识别和判断。
InfoGAN(MutualInformation)本质上也可以看作是一种cGAN。它将原先生成器上输入的z进行分解,除了原先的噪声z以外,还分解出一个隐含编码c。其中c除了可以表示类别以外,还可以包含多种变量。以MNIST数据集为例,还可以表示诸如光照方向,字体的倾斜角度,笔画粗细等,这使得生成过程具有一定程度的可控性,生成结果也具备了一定的可解释性。
pix2pix
生成器输入除随机数z以外,将图片x(如灰度图,素描图等)作为条件进行拼接,输出的是转换后的图片(如照片)。而判别器输入的是转换后的图片或真实照片,特别之处在于,文章发现,判别器也将生成器输入的图片x作为条件进行拼接,会极大提高实验的结果,其结构图如下所示(此处结构图隐去了生成器的随机数z):
cycleGAN、DiscoGAN & DualGAN
Pix2Pix训练需要相互配对的图片x与y,然而,这类数据是极度缺乏的,对此CycleGAN提出了无需配对数据的图像翻译方法。CycleGAN基于循环一致性(Cycle-Consistent),两类图像经过两次相应的映射后,又会变为原来的图像,简单有效地解决了这一问题。
而与CycleGAN十分类似的DiscoGAN、DualGAN与其最大区别在于DiscoGAN使用最简单直白的CNN编码器和解码器,使用全连接网络当转换器;CycleGAN使用了ResNet充当转换器;DualGAN则是使用类似WGAN的形式来表示。
StarGAN
StarGAN作为CycleGAN的推广,将两两映射变成了多领域之间的映射,能够通过一个生成器解决所有跨域类别问题。