Generative Adversarial Nets[LSGAN]

血红的双手。 提交于 2021-02-06 21:35:19

0 背景

在这之前大家在训练GAN的时候,使用的loss函数都是sigmoid_cross_entropy_loss函数,然而xudon mao等人发现当使用伪造样本去更新生成器(且此时伪造样本也被判别器判为对的时候)会导致梯度消失的问题。虽然此时伪造样本仍然离真实样本分布距离还挺远。也就是之前的损失函数虽然可以判别是真假,可是对于人肉眼来说,还是违和感太强了,也就是生成的图像质量骗得过机器,却骗不过人。

<center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224221241753-1230546101.png)</center> <center/>**图0.1 两种损失函数的不同行为**</center> 上图中加号表示假样本,圈表示真样本,五角星表示用于更新生成器的伪造样本,红线表示LSGAN的决策面,蓝线表示sigmoid交叉熵的决策面。可以从图0.1.1中看出,sigmoid函数能分真假,可是对距离却并不敏感。

所以,由此,他们提出了更好的损失函数用于将伪造样本的分布推向于决策面(虽然无法直接推向真实样本的分布)。并且从中还发现,用此损失函数,可以增加训练GAN的稳定性。并且之前也有一些论文论述到GAN的不稳定训练一部分归咎于目标函数。特别是最小化之前GAN的目标函数时候的梯度消失问题,会导致更新生成器变得困难,而LSGAN是通过基于距离惩罚那些离决策面远的那些假样本,所以具有更多的梯度用于训练迭代。

<center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224222408586-1225789756.png)</center> <center/>**图0.2 两个损失函数的函数图**</center> 如图0.2所示,最小二乘损失函数只有一个点是平的,而sigmoid交叉熵函数会当x变得足够大时就饱和了。

1. LSGAN

####1.1 目标函数

如上面所述,之前的目标函数为:

<center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224222710838-1706978380.png)</center> xudon mao等人提出的目标函数为: <center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224222723152-465769319.png)</center> 其中a,b,c满足条件:**$b-c=1$ 并且 $b-a=2$**。 所以他们推荐了两种参数的选择: <center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224222931514-1100625227.png)</center> <center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224222940426-999889928.png)</center>

####1.2 网络结构

xudon mao等人参考了vgg的网络结构,将LSGAN的生成器和判别器的网络结构设置成:

<center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224223221926-1520273773.png)</center> 上述网络结构的生成器灵感来自VGG结构,其中激活函数沿用了DCGAN的ReLU用于生成器,LeakyReLU用于判别器。

而且,他们在如何将GAN用于多类图片生成上也做了一些工作,如生成3740类的中文文字图片,这时候,自然灵感来自于条件GAN。所以,此时的网络结构不同于上面:

<center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224223434008-1044455501.png)</center> 在进行多类别生成的时候,如果直接将one-hot的很长向量作为条件gan的输入,那么会导致内存损耗和时间损耗,所以在输入到网络之前,先通过**一个线性映射层将one-hot映射成一个较小维度的向量**,比如上面的256。此时对应的目标函数自然为: <center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224224056344-1269781464.png)</center> 其中$y$为one-hot向量

2. 实验结果

xudon mao等人还做了一些实验用于验证LSGAN的训练稳定性,如图

<center/>![](https://img2018.cnblogs.com/blog/441382/201903/441382-20190325202939076-536919849.png)</center> <center/>**图2.1 关于BN和迭代器的稳定性验证**</center> <center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224225432628-271854623.png)</center> <center/>**图2.2 基于高斯混合分布数据集的对比,此时生成器和判别器都有三层fc层**</center> <center/>![](https://images2018.cnblogs.com/blog/441382/201802/441382-20180224225447578-1016872491.png)</center> <center/>**图2.3 生成中文字符图片**</center>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!