GAN 生成对抗网络 10-6 Tips for improving GAN

在这里插入图片描述
在这里插入图片描述
在二分类问题中,使用JS散度是不合适的,因为图像的性质,PG和Pdata是不可能重叠的,不重叠的情况下计算出的JS散度永远是log2,所以上图中第一个图和第二个图没有区别,因此在二分类问题中会出现训练困难的问题。

tips1 LSGAN
在这里插入图片描述
问题:绿色点为real data,蓝色点为generated data。可能会出现一个状况,如果二分类器训练的太好(即蓝色为0,绿色为1),使用sigmoid函数进行训练会出现训练困难的问题,因为在0处梯度几乎为0。这样generator想把蓝色的点往右移发现会移不动。因此在没有这些tips的时候训练discriminator,不要训练的太差(分辨不出来),也不要训练的太好,一般边吃饭的时候边看输出(hahaha)。

有人提出使用LSGAN,即将sigmoid激活函数换成线性的。

tips2 WGAN
在之前训练GAN的时候,用的都是JS散度或者f散度,这里不再使用它们。
在这里插入图片描述
WGAN使用的是Earth Mover‘s Distance来衡量两个分布的差异。
假设有两个data P和G,假设有一台推土机,将P中的土铲到Q中走过的平均的距离即为W,上图假设一维空间下的情形,P和Q都在一个点上,则W=d。
在这里插入图片描述
但是该方法会有一个问题:铲土有好多种方法,哪个为所求呢?
一种方法:可以穷举所有铲土的方法,走过距离最小的即为所求。
在这里插入图片描述
首先要做一个moving plan。moving plan实质为一个矩阵,矩阵的值越亮代表P的土挪到Q越多。我们可以求出平均距离B(γ),然后穷举所有的B(γ),取最小值。
在这里插入图片描述

在这里插入图片描述
WGAN的discriminator应该是这样的,P中sample出的data应该尽可能大,G中sample出的data应该尽可能小。但是这样还是不够的,因为这样real会无限大,generated会无限小,永远不会收敛。因此应该加一个限制条件,D要足够平滑。
在这里插入图片描述
即输出的变化不能超过输入的变化。

问题是怎么解,如果把constraint拿掉,很好解,但是在D上加了constraint很难解。

解决办法:
最原始的解决办法是梯度裁剪,即权值绝对值超过某个值c,则把weight设置为c,结束。但是该方法达不到1-lipschitz的效果。

后来出现inproved WGAN(WGAN-GP)
在这里插入图片描述
上图中,使得D(x)在所有点的梯度小于等于1等价于D满足1-Lipschitz。
但是我们无法sample出所有的x进而计算D(x)的梯度。所以,我们从Ppenalty这个分布中sample x。
在这里插入图片描述
Ppenalty指的是:在Pdata中sample一个点,在PG中sample一个点,将两个点相连。若干个这样的连线构成的分布即Ppenalty。
一个直观的理解:WGAN的思想是将PG挪到Pdata,因此它们中间的地方才会有影响。
在这里插入图片描述
本来我们要求的是D(x)的梯度大于1有惩罚,小于1没有惩罚。但是WGAN最终做的是,让D(x)的梯度越接近1越好。文章中提出D(x)的梯度越接近1,表现越好。
实际上improved WGAN也是有问题的,比如右下角的图,将黄色的点移动到红色的点,给红色的线penalty,它可能不会沿着黑色的线走。

在这里插入图片描述
Spectrum Norm可以使得每个位置的gradient norm都小于1.具体细节请查阅文献。

训练GAN的流程
在这里插入图片描述
如果训练WGAN,需要把sigmoid拿掉,带着sigmoid实际上是JS diversion。
在这里插入图片描述
在这里插入图片描述
对于EBGAN,Generator是不变的,Discriminator使用的AutoEncoder。它的思想是将生成图片通过一个AutoEncoder,与重新生成的图片计算一下loss,将loss✖️-1得到的即为输出。
EBGAN的好处是,AutoEncoder是可以进行预训练的,它可以只用正样本进行预训练,而二分类问题是不行的。使用EBGAN可以对autoEncoder进行预训练,刚开始就可以拿到一个较强的Discriminator,否则需要先训练generator,要训练很久才能得到一个很厉害的Discriminator。
在这里插入图片描述
注意EBGAN在训练的时候,我们关注的是real data得分越大越好,并不是generate越小越好,因为建设难破坏容易。比如我们输入一个data,生成一个vector,再由vector重建图像是很困难的;但是加入一个noise就可以使得分很小,这样虽然可以使loss很小,但这不是我们要的,因此在generate的data中设置一个margin,得分小于margin即可。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值