前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GAN的发展系列一(CGAN、DCGAN、WGAN、WGAN-GP、LSGAN、BEGAN)

GAN的发展系列一(CGAN、DCGAN、WGAN、WGAN-GP、LSGAN、BEGAN)

作者头像
Minerva
发布2020-06-16 17:26:53
12.8K0
发布2020-06-16 17:26:53
举报

GAN的发展系列一(CGAN、DCGAN、WGAN、WGAN-GP、LSGAN、BEGAN)

在上一篇文章中我们介绍了GAN的原理(GAN生成对抗网络入门介绍),生成对抗网络GAN主要由两部分组成,生成网络Generator和判别网络Discriminator,生成模型G的思想是将一个随机噪声包装成一个逼真的样本,判别模型D则需要判断输入的样本是真实的还是生成的假样本,通过对抗训练共同进步,判别模型D对样本的判别能力不断上升,生成模型G的造假能力也不断上升,但GAN存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题,下面介绍一系列在此基础上的各种改进。 一、 CGAN条件GAN 论文《Conditional Generative Adversarial Nets》 论文地址:https://arxiv.org/pdf/1411.1784.pdf 1、原理 原始GAN的生成过程采用随机噪声就可以开始训练,不再需要一个假设的数据分布,但是这样自由散漫的方式对于较大的图像就不太可控了,CGAN方法提出了一种带有条件约束的GAN,通过额外的信息对模型增加条件,来指导数据生成过程。本文将额外信息y输送给判别模型和生成模型,作为输入层的一部分,从而实现条件GAN,是在Mnist数据集上以类别标签为条件变量,生成指定类别的图像,把纯无监督的GAN变成有监督的模型。

2、目标函数 条件 GAN 的目标函数是带有条件概率的二人极小极大值博弈(two-player minimax game ):

CGAN的网络结构:

本文针对Mnist数据集,生成器的输入是100维服从均匀分布的噪声向量,以类别标签(one-hot编码)为条件来训练条件GAN,生成器经过sigmoid生成784维(28x28)的单通道图像,判别器的输入为784维的图像和类别标签(one-hot编码),输出是该样本来自训练集的的概率。

二、 DCGAN深度卷积GAN 论文《unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks》 论文地址:https://arxiv.org/pdf/1511.06434.pdf DCGAN使用卷积层代替了全连接层,采用带步长的卷积代替上采样,更好的提取图像特征,判别器和生成器对称存在,极大的提升了GAN训练的稳定性和生成结果的质量。判别器中采用leakyRELU而不是RELU来防止梯度稀疏,而生成器仍然采用RELU,但输出层采用tanh。本文采用adam优化器训练GAN,设置学习率为0.0002。 DCGAN的生成器结构如下,通过卷积的方式将100维的随机噪声输入映射成一张图像,

一些生成的图像如下:

DCGAN并没有从根本上解决GAN训练不稳定的问题,训练的时候仍需要小心的平衡生成器和判别器的训练,往往是训练一个多次,训练另一个一次。 三、WGAN 论文《Wasserstein GAN》 论文地址:https://arxiv.org/pdf/1701.07875.pdf WGAN主要是从损失函数的角度对GAN进行了改进,这种改进即使在全连接层也能得到很好的表现结果,在理论上给出了GAN训练不稳定的原因,就是之前的损失函数交叉熵(JS散度)不适合衡量具有不相交部分的分布之间的距离,而使用文章提出的Wassertein距离来衡量数据分布和真实数据分布之间的距离,理论上解决了训练不稳定的问题,不再需要小心平衡生成器和判别器的训练。同时也解决了模式崩溃问题(collapse mode)(生成器倾向于生成一些有把握但相似的图片,而不敢轻易地尝试去生成没把握的新图片,从而缺乏多样性的情况),使得生成器生成结果更加多样。 具体的改进有: 1) 判别器最后一层去掉了sigmoid, 2) 生成器和判别器的损失函数loss不含有log 3) 在梯度更新后的权重强制截断到一定的范围[-0.01,0.01],来满足论文中提到的lipschitz连续性条件(在样本空间中,要求判别器函数D(x)梯度值不大于一个有限的常数K) 4) 论文提出采用其他SGD,RMSprop优化器也可以,不再使用基于动量的优化算法(momentum和Adam) 5) 提出了一个评价指标来表示GAN训练的好坏 训练过程如下:

原目标函数的问题: 原始GAN的目标函数为:

当固定生成器时,最优的判别器是

当判别器最优时,生成器的优化目标为

可以写成JS散度的形式

上述有关JS散度的目标函数会带来梯度消失的问题,如果判别器训练得太好,生成器就无法得到足够的梯度继续优化,而如果判别器训练得太弱,指示作用不显著,同样不能让生成器进行有效的学习。这样一来,判别器的训练火候就非常难把控,这就是GAN训练难的根源。 四、WGAN-GP 论文《Improved Training of Wasserstein GANs》 论文地址:https://arxiv.org/pdf/1704.00028.pdf WGAN有时候也会伴随样本质量低、难以收敛等问题,WGAN-GP是WGAN的改进版,主要改进Lipschitz连续性限制条件,之前是直接采用weight clipping将权重裁剪到一定范围[-0.01,0.01],但这样过于简单粗暴,会导致模型建模能力弱化、梯度消失或爆炸。WGAN-GP引入了Gradient Penalty

GP项的设计逻辑是:当且仅当一个可微函数的梯度范数(gradient norm)在任意处都不超过1时,该函数满足1-Lipschitz条件。从理论上最优Critic的梯度范数应当处处接近1,对Lipschitz条件的影响不大,同时从实验中发现two-sided penalty效果比one-sided penalty略好。 详细的算法流程如下:

WGAN-GP在训练的速度和生成样本的质量上,都略胜WGAN一筹。由于是对每个batch中的每一个样本都做了梯度惩罚(随机数的维度是(batchsize,1)),因此判别器中不能使用batch norm,但是可以使用其他的normalization方法,比如Layer Normalization、Weight Normalization和Instance Normalization,论文中使用了Layer Normalization,weight normalization效果也是可以的。

五、LSGAN最小二乘GAN 论文《Least Squares Generative Adversarial Networks》 论文地址:https://arxiv.org/pdf/1611.04076.pdf LSGAN采用最小二乘损失函数代替原始GAN的交叉熵损失函数,主要针对原始GAN生成器生成的图像质量不高和训练过程不稳定两个问题,作者认为以交叉熵作为损失,会使得生成器不会再优化那些被判别器识别为真实图片的生成图片,即使这些生成图片距离判别器的决策边界仍然很远,也就是距真实数据比较远。这意味着生成器的生成图片质量并不高。为什么生成器不再优化优化生成图片呢?是因为生成器已经完成我们为它设定的目标——尽可能地混淆判别器,所以交叉熵损失已经很小了。而最小二乘就不一样了,要想最小二乘损失比较小,在混淆判别器的前提下还得让生成器把距离决策边界比较远的生成图片拉向决策边界。

损失函数定义如下

sigmoid交叉熵损失很容易就达到饱和状态(饱和是指梯度为0),而最小二乘损失只在一点达到饱和,因此LSGAN使得GAN的训练更加稳定。

一些生成结果如下:

六、BEGAN(Boundary Equilibrium GAN)边界均衡GAN 论文《BEGAN: Boundary Equilibrium Generative Adversarial Networks》 论文地址:https://arxiv.org/pdf/1703.10717.pdf BEGAN是一种基于均衡思想的改进,其不需要训练的trick,使用标准的训练步骤就可以快速稳定的收敛,使得判别器和生成器在训练过程中保持平衡,BEGAN使用了自动编码器(auto-encoder)作为判别器,判别器的输入是图片,输出是经过编码解码后的图片,使用重构误差来衡量样本是生成的还是真实的,尽可能匹配误差的分布而不是样本的分布,如果误差的分布之间足够接近,那么真实样本之间的分布也会足够接近,最后生成的图像质量也不会差。BEGAN提供了一个超参数,这个超参数可以在图像的多样性和生成质量之间做均衡,提出了一种收敛程度的估计。 网络结构为:

重构误差L(v)为:

设真实样本的重构误差分布u1的均值为m1,生成样本的重构误差分布u2的均值为m2,采用EM距离来衡量该距离

它的下界为

BEGAN中G和D对应的损失函数为:

系统达到均衡时应该满足

引入超参数diversity ratio来进行trade-off,当该值 比较小时,D的目标是最小化真实样本的重构误差,相对来说,而对生成样本的关注较少,这将导致生成样本的多样性降低。

BEGAN的目标为

一些生成结果如下:

当改变超参数时模型生成结果的多样性和清晰度在变化,值越小图像越清晰但多样性降低,值越大图像质量下降但多样性提高了。

上图显示了随着模型的逐渐收敛,生成图像的质量不断提高。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python编程和深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档