[Deep Learning] 生成模型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Deep Learning] 生成模型相关的知识,希望对你有一定的参考价值。
参考技术A 无监督学习包括聚类K-means、降维PCA、特征学习Antoencoders、密度估计、生成模型(图片生成、超分辨率、图片着色、时间序列数据模拟和计划[增强学习]、潜在特征推断)等,其中生成模型的分类历史如下图所示:Explicit生成模型假设参数空间已知或可以近似估计,然而真实数据的分布往往是十分复杂的。
由 Google 提出的 PixelRNN 和 PixelCNN 从左到右,从上到下,逐步生成一个个像素,最终生成整张图像。它的基本原理是训练数据的概率最大化最优化,以之前生成的像素作为输入,输出对于下一个像素的值的统计分布的预测,然后从分布采样出下一个像素。
作为生成模型的AE也可以用于分类问题:编码器和Softmax函数结合适用于样本量不足的分类监督学习,能够避免样本量不足时的过拟合问题。
对上述几种方法的对比总结:
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自提出以来,就存在着训练困难、不易收敛、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多研究人员就在尝试解决,并提出了改进方案,切实解决了部分问题,如生成器梯度消失导致的训练困难。当然也还有很多问题亟待解决,如生成样本的评价指标问题。
朴素GAN在生成器和判别器在结构上是通过以多层全连接网络为主体的多层感知机(Multi-layer Perceptron, MLP) 实现的,然而其调参难度较大,训练失败相当常见,生成图片质量也相当不佳,尤其是对较复杂的数据集而言。由于卷积神经网络比MLP有更强的拟合与表达能力,2015年Alex Radford提出使用卷积架构取代GAN中的全连接层 [2] 。DCGAN去掉了池化层,采用批标准化(Batch Normalization, BN)等技术,并强调了隐藏层分析和可视化技术对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增加梯度惩罚项
CVAE-GAN 包括4 个神经网络:
E:编码器(Encoder),输入图像 x,输出编码 z。
如果还给定了类别 c,那么生成的 z 就会质量更高,即更随机,因为可移除c中已包含的信息。
G:生成器(Generator)。输入编码 z,输出图像 x。
如果还给定了类别 c,那么就会生成属于类别 c 的图像。
C:分类器(Classifier)。输入图像 x,输出所属类别 c。
D:辨别器(Discriminator)。输入图像 x,判断它的真实度。
不同 c,代表不同的明星。相同 z,代表其他的一切语义特征(如表情,角度,光照等等)都一模一样。通过保持 z,改变 c,可轻松实现换脸效果。由于 CVAE-GAN 生成的样本质量很高,还可用于增强训练样本集,进行语义插值等。
为了生成指定标签的数据,在CGAN中,生成器不仅要输入随机数,还需要将之与标签类别做拼接(concat,一般要将标签转换成如one-hot或其它的tensor),再将其输入生成器生成所需要的数据。此外,对判别器,也需要将真实数据或生成数据与对应的标签类别做拼接,再输入判别器的神经网络进行识别和判断。
InfoGAN(MutualInformation)本质上也可以看作是一种cGAN。它将原先生成器上输入的z进行分解,除了原先的噪声z以外,还分解出一个隐含编码c。其中c除了可以表示类别以外,还可以包含多种变量。以MNIST数据集为例,还可以表示诸如光照方向,字体的倾斜角度,笔画粗细等,这使得生成过程具有一定程度的可控性,生成结果也具备了一定的可解释性。
生成器输入除随机数z以外,将图片x(如灰度图,素描图等)作为条件进行拼接,输出的是转换后的图片(如照片)。而判别器输入的是转换后的图片或真实照片,特别之处在于,文章发现,判别器也将生成器输入的图片x作为条件进行拼接,会极大提高实验的结果,其结构图如下所示(此处结构图隐去了生成器的随机数z):
Pix2Pix训练需要相互配对的图片x与y,然而,这类数据是极度缺乏的,对此CycleGAN提出了无需配对数据的图像翻译方法。CycleGAN基于循环一致性(Cycle-Consistent),两类图像经过两次相应的映射后,又会变为原来的图像,简单有效地解决了这一问题。
而与CycleGAN十分类似的DiscoGAN、DualGAN与其最大区别在于DiscoGAN使用最简单直白的CNN编码器和解码器,使用全连接网络当转换器;CycleGAN使用了ResNet充当转换器;DualGAN则是使用类似WGAN的形式来表示。
StarGAN作为CycleGAN的推广,将两两映射变成了多领域之间的映射,能够通过一个生成器解决所有跨域类别问题。
深度学习deep learning整理
统计学习三要素(模型,策略,算法):
模型:假设空间,假设输入到输出之间的关系,获得一个参数向量
策略:按照什么准则(损失函数,风险函数,经验风险函数=>结构风险函数)选择最好的模型
算法:学习模型的具体计算方法
卷积神经网络CNN
超参数
以上是关于[Deep Learning] 生成模型的主要内容,如果未能解决你的问题,请参考以下文章
Deep Learning(深度学习)之Deep Learning的常用模型或者方法
[Deep-Learning-with-Python]GAN图片生成
动手学深度学习 4 Deep-learning-computation
转载 Deep learning:五(regularized线性回归练习)