W-GAN系 (Wasserstein GAN、 Improved WGAN)
学习总结于国立台湾大学 :李宏毅老师
WGAN前作:Towards Principled Methods for Training Generative Adversarial Networks
WGAN: Wasserstein GAN
Improved WGAN: Improved Training of Wasserstein GANs
本文outline
一句话介绍WGAN: Using Earth Mover’s Distance to evaluate two distribution Earth Mover‘s Distance(EMD) = Wasserstein Distance
一. WGAN
1. Earth Mover’s Distance(EMD)
EMD: P和Q为两个分布:P分布为一堆土,Q分布为要移到的目标,那么要移动P达到Q,哪种距离更小呢?
这里有许多种可能的moving plans,利用最小平均距离的moving plans来定义EMD
那么以下是最好的moving plans:
来用矩阵直观解释移土方案:
图中每个像素点对应row需要移出多少土到对应column, 越亮表示移动越多。注意每一个row的值加起来为对应P行的分布, 每个column的值加起来为对应Q行的分布。所以可以有很多的moving plan来实现:
γ(xp,xq)表示从p移动多少土到q, || xp - xq ||表示pq之间的距离。上式就是给定一个plan时需要平均移动的距离。 那么EMD定义就是
穷举所有plan,EMD为最小的距离(最优的plan):
2. Why EMD
在更新过程中我们希望PG的分布和Pdata越来越相似:
但是Df(Pdata||PG): 因为从JS-divergence来看:无法从G0变到G100, 因为G50并没有比G0变小
用W(Pdata, PG)则不同,G0对应的距离就是d0, G50对应的距离就是G50:所以利用Wasserstein距离时,model就会有动机使得分布趋于真实分布。
3. 回到GAN框架
我们知道所有的f-divergence都可以写成以下形式:
1)
而Earth Mover’s Distance可以写成以下形式:
2)
即找一个D使得大括号里的值最大,而限制是D属于1-Lipschitz。
Lipschitz Function: 输出的变化小于等于输入的变化, k=1时为 1-Lipschitz ,即变化的不要太猛烈。
栗子:黑线为基准, 蓝线变化很猛烈不是1-Lipschitz, 而绿线变化缓和属于1-Lipschitz。
所以回到 2)式,如果没有对D的限制,当D(x1) 和D(x2)为正负无穷时可以最大化2)式,下图左。而现在对D有此限制,则D的取值如下图右:
D(x1) 和D(x2)差距一定要小于d。下图说明了利用EMD的好处是PG可以沿着梯度移动到蓝色Pdata,而原生GAN的判别器D为而二元分类器,输出为sigmoid函数。对于蓝色和橙色的分布,原生GAN可能为蓝线:对应Pdata的输出值为1,对应PG的输出值为0。所以蓝色曲线在蓝色和橙色分布的梯度为0,根本没有动力去挪动generator的输出来更新。而EMD在两个分布附近都有梯度,可以继续更新。
WGAN优点: WGAN will provide gradient to push PG towards Pdata
4. WGAN优化
那么怎么梯度更新呢?因为D有了限制,无法直接利用SGD。这里引入一种方法:Weight clipping
就是强制令权重w 限制在c ~ -c之间。在参数更新后,如果w>c,则令w=c, 如果w<-c,则令w=-c。我们这样做只为保证:
对权重的限制表示对NN的输入做一个变化,输出的变化总是有限的。实做上对于w进行限制:就可以限制了这条直线的斜率,否则D的输出为一条很斜的直线,且不断变直,给橙色的值越来越小,给蓝色的值越来越大,无法停止。
5. WGAN 算法
result:
原来的GAN是衡量JS-divergence,GAN是把JS-divergence train到底,所有case的结果几乎都是0,不管你generate的image好不好,JS-divergence都是个定值。那Discriminator就不是衡量JS-divergence,D的output就变得没有意义了。但是如果我们用WGAN的话,discriminator衡量的是EMD,而这个earth mover’s distance 衡量的就是两个分布真正的距离。所以看discriminator的loss可以真的表示出generate的图片的好坏。
6. WGAN 归纳
在 WGAN 中,D 的任务不再是尽力区分生成样本与真实样本,而是尽量拟合出样本间的 Wasserstein 距离,从分类任务转化成回归任务。而 G 的任务则变成了尽力缩短样本间的 Wasserstein 距离。
故 WGAN 对原始 GAN 做出了如下改变:
- D 的最后一层取消 sigmoid
- D 的 w 取值限制在 [-c,c] 区间内。
- 使用 RMSProp 或 SGD 并以较低的学习率进行优化 (论文作者在实验中得出的 trick)
WGAN 的个人一些使用经验总结,这些经验是基于自身的实验得出,仅供参考:
- WGAN 的论文指出使用 MLP,3 层 relu,最后一层使用 linear 也能达到可以接受的效果,但根据我实验的经验上,可能对于彩色图片,因为其数值分布式连续,所以使用 linear 会比较好。但针对于 MINST 上,因为其实二值图片,linear 的效果很差,可以使用 batch normalization sigmoid 效果更好。
- 不要在 D 中使用 batch normalization,估计原因是因为 weight clip 对 batch normalization 的影响
- 使用逆卷积来生成图片会比用全连接层效果好,全连接层会有较多的噪点,逆卷积层效果清晰。
- 关于衡量指标,Wasserstein distance 距离可以很好的衡量 WGAN 的训练进程,但这仅限于同一次,即你的代码从运行到结束这个过程内。
7. WGAN总结
WGAN前作分析了Ian Goodfellow提出的原始GAN两种形式各自的问题,第一种形式等价在最优判别器下等价于最小化生成分布与真实分布之间的JS散度,由于随机生成分布很难与真实分布有不可忽略的重叠以及JS散度的突变特性,使得生成器面临梯度消失的问题;第二种形式在最优判别器下等价于既要最小化生成分布与真实分布直接的KL散度,又要最大化其JS散度,相互矛盾,导致梯度不稳定,而且KL散度的不对称性使得生成器宁可丧失多样性也不愿丧失准确性,导致collapse mode现象。
WGAN前作针对分布重叠问题提出了一个过渡解决方案,通过对生成样本和真实样本加噪声使得两个分布产生重叠,理论上可以解决训练不稳定的问题,可以放心训练判别器到接近最优,但是未能提供一个指示训练进程的可靠指标,也未做实验验证。
WGAN本作引入了Wasserstein距离,由于它相对KL散度与JS散度具有优越的平滑特性,理论上可以解决梯度消失问题。接着通过数学变换将Wasserstein距离写成可求解的形式,利用一个参数数值范围受限的判别器神经网络来最大化这个形式,就可以近似Wasserstein距离。在此近似最优判别器下优化生成器使得Wasserstein距离缩小,就能有效拉近生成分布与真实分布。WGAN既解决了训练不稳定的问题,也提供了一个可靠的训练进程指标,而且该指标确实与生成样本的质量高度相关。作者对WGAN进行了实验验证。
二. Improved WGAN
A differentiable function is 1-Lipschitz if and only if it has gradients with norm less than or equal to 1 everywhere.
就是说如果一个函数是1-Lipschitz,那么它的gradients with morm <=1:
注意这里的gradient不是对参数,而是input对output的gradient,即x对D(x)的gradient。
注意此惩罚项penalty:如果梯度的norm>1就会惩罚,即,因不可能对所有x作积分,所以对sample的x求期望
那Ppenalty是什么呢,怎么从Ppenalty sample x呢?首先从Pdata sample一个点,再从PG sample一个点,然后在其连线中sample出x,即x是在Pdata 和 PG 之间的区域中sample:
Only give gradient constraint to the region between 𝑃_𝑑𝑎𝑡𝑎 and 𝑃_𝐺 because they influence how 𝑃_𝐺 moves to 𝑃_𝑑𝑎𝑡𝑎
仅仅对Pdata 和 PG 之间的区域的梯度进行限制,因为只有这个区域影响PG 移向Pdata 。
而进一步,Improved WGAN不是让gradient的norm小于1,而是越接近1越好: 因为希望Pdata的D(x)越大越好, PG的 D(x)越小越好,然而这个差距总是有限的,所以希望中间的蓝色区域的gradient越大越好,因为蓝色的坡度越陡,Pdata 和PG的差距越大,然而蓝色的gradient的最大值就只能取到1.
论文给出利用Weight clipping 和 Gradient penalty 学出来的discriminator有什么差距。
如果利用Weight clipping 得到的weight集中在clip的地方,而Gradient penalty得到的weight的distribution比较正常:
下图中黄色的点为true distribution,要learn一个discriminator使黄色的点值比较大,其他点值比较小。因为Weight clipping对weight进行了限制,所以很难学出复杂的discriminator, 而gradient penalty可以学到复杂的分布。WGAN的critic函数对输入的梯度相比于GAN的更好,因此对生成器的优化更简单。另外,WGAN的值函数是与生成样本的质量相关的,这个性质是GAN所没有的。WGAN的一个问题是如何高效地在critic上应用Lipschitz约束,Arjovsky提出了权重剪枝(Weight clipping)的方法。但权重剪枝会导致最优化困难。在权重剪枝约束下,大多数神经网络架构只有在学习极其简单地函数时才能达到k地最大梯度范数。因此,通过权重剪枝来实现k-Lipschitz约束将会导致critic偏向更简单的函数。如下图所示,在小型数据集上,权重剪枝不能捕捉到数据分布的高阶矩。
由于在WGAN中使用权重剪枝可能会导致不良结果,研究者考虑在训练目标上使用Lipschitz约束的一种替代方法(gradient penalty):一个可微的函数是1-Lipschitz,当且仅当它的梯度具有小于或等于1的范数时。因此,可以直接约束critic函数对其输入的梯度范数。新的critic函数为:
接下来是一些真实的实验结果:
上图主要表示不同的压力测试,Improved WGAN都有好的表现。
三. Paired Data
Conditional GAN: test to image 、 image to image
1)text to image by traditional supervised learning:
以上是传统监督方法,但这么做可能有问题,因为对于一个叙述可能有不同的image,用这个方法来训练,你的machine的output可能想同时minimize跟所有不同example之间的distance,那么可能产生的就是一个很模糊的图案:
然而用GAN方法的话,输入是c和一个distribution,那么输出x也是一个distribution:即输出可能落在蓝点的分布或绿点的分布,就不会落在红点的分布:
以下两种Discriminator左边可能产生清晰但图文无关的图,而右边则效果好很多:
2) image to image
先看用传统监督方法怎么做:Traditional supervised approach
首先搜集最右边的真实图像,然后生成最左边的几何图形,利用这种传统监督方法train来learn一个NN而不是一个GAN 的generator的话,测试时可能有以下结果:
模糊原因同上:同一个输入有许多不同的输出,machine找到的是所有输出的平均。来看看用GAN train的方法:
result: machine自己加了个小阁楼
如果再加一个限制,使得generate的图像与原图越接近越好,则得到更合理的图像:
result: 更接近原图
四. Unpaired Data
此时没有成对的图片,例如只有一大堆风景图片和一大堆梵高的油画(并没有对应关系说哪张风景画对应于哪张梵高的画),那怎么做呢?
对于这种不同Domain之间的转换,方法有:Cycle GAN, Disco GAN
Cycle GAN做法:先train一个generator,可以把Domain X转为Domain Y。
注意此时G输出会越来越像梵高的画,但可能是一张和输入完全无关的图,因为对它的要求只追求像梵高的画,上图右(原本应该产生风景油画却产生出了人物头像)。所以这里应该再加一个generator,它把梵高油画转为输入的原画(下图左):
上图右可以将训练好的两个generator用来真实画与梵高油画之间的转换。
附: