2 简介:
上一篇文章中详细介绍了GAN的来龙去脉,分析了GAN的主要贡献之一在于discriminator其实是一个J-S divergence,可以用来判断生成分布 PG(z) 与真实分布 Pdata 。上节最后提到了原生GAN有G弱D强、mode collapse的问题。这一节主要介绍,后来的研究如何解决这两个问题,以及介绍一些有趣的GAN的变种,如f-GAN, WGAN, cycleGAN…同样的这篇笔记主要整理自Prof. 李宏毅的Improved Generative Adversarial Network. 由于GAN还在不断完善当中,这篇笔记也会不定期更新,随时分享自己的阅读心得。
2.1 f-GAN
f-GAN[1]是f-divergence的缩写。上一篇Blog中提到,原生GAN的discriminator为J-S divergence. 我们知道
0≤JSD(∙||∙)≤log2
,如果
PG(x)
与
Pdata(x)
是完全不同的两个分布,则
JSD(PG(x)||Pdata(x))=log2
如下所示:
分布 PG(x) 其实是在接近 Pdata(x) ,但J-S divergence是却一直等于 log2 ,这就说明,原生GAN使用的discriminator是不合理的,我们很自然的一种想法就是:J-S divergence其实是一个特例,能不能找其他的divergence代替?找出更general的 divergence. 这就是f-GAN的主要思想,找到的通用divergence称为f-divergence。
这里先给出它的定义:
P,Q
是两个分布,
p(x)
与
q(x)
是sample
x
的概率,则:
其中 f 满足
f=−logx , Df(P||Q)=∫xq(x)(−log(p(x)q(x)))dx , 也就是KL reverse divergence
原文中,给出了以下几种divergence
为了求f-divergence,我们需要求 f 的共轭,接下来的内容会涉及一点点泛函分析和实变函数的知识!
2.1 Fenchel Conjugate(凸共轭)
这个意思就说,每个凸函数
这个共轭函数也是凸的。举一个简单的栗子来说明一下:
我们固定
t
,
例:
f(x)=xlogx
根据
f∗(t)
的定义:
立刻就转化成我们熟悉的求最大值的问题,所以果断用高中数学知识,求导!!
令:
导数为0,求得 x=exp(t−1) 时, g(x) 取最大值,代入 x 得:
有了这个定理,我们就可以得出,任何一个凸函数都能找到一个共轭凸函数,反过来也一样,他们之间的关系为:
2.2更一般的GAN
上边有说,用f-divergence衡量两个分布,我们知道GAN的J-S divergence也是衡量两个分布,那f-divergence可以写成GAN的Value function吗?当然可以,如下:
利用Fenchel Conjugate 可以把 f 替换成它的共轭:
令 D(x)=t ,也就是输入 x 输出
我们找满足 D(x)=t 里边最大的 D ,则
换成我们在GAN中用的 Pdata,PG ,上式变成:
是不是与GAN中
很像呢?更准确的说,GAN中的discriminator只是 Df(P||Q) 的一个特例(终于证明完特例了),刚开始的假设正确!!!这样一来,就可以 使用各种divergence来衡量两个分布的差异,从而可以在一定程度上解决D强G弱的问题。
2.3 WGAN
之前指出,原始GAN使用的J-S divergence,可能出现两个分布其实在接近,但discriminator却检测不到的情况,fGAN试着从不同的divergence入手,而WGAN[2][3] (这两篇文章才出现了不到1年都400+引用了)则重新换了一种思路,不用divergence衡量分布,而用earth mover distance(推土机距离)或者Wasserstein distance. 找到大牛解决新问题的思路了吧:学好数学!学好数学!学好数学!虽然当时学到时候不知道这东西有什么用,但某一天万一用上了呢?废话不多说,我们来看WGAN,首先说earth mover distance,推土机距离形象的说就是,用推土机把一堆土从一个地方运到另一个地方的所做的最小功,下图是二维的情况:
有颜色的块 (i,j) 表示把第 i 行的土运到第
则earth mover distance定义为这些运送plan中最短的那个:
这种用距离估计两种不同分布的差异比divergence更直观一些,因此,我们把GAN中discriminator的 Df(Pdata||PG) 换成 W(Pdata,PG) ,WGAN的paper指出,新的value function就变成:
跟fGAN相比,共轭都省了,看这清楚多了,要注意的是D必须是1阶Lipschitz function. 所谓 f(x) 是k-Lipschitz function,其实就是:
k=1 就是1阶Lipschitz,1-Lipschitz其实是说函数值变化比变量的变化还慢。
为什么value function 要加1-Lipschitz的限制?假设没有这个限制,我们让 D(x1)=+∞,D(x2)=−∞ ,这显然是最大的value,但这样做是无法找到训练模型的,因此我的得让 ∥D(x1)−D(x2)∥≤k∥x1−x2∥ ,接下来就是如何求解带1-Lipschitz条件的value function?
答案就是做weight clipping,即把网络的权值限制在[-c,c]之间。可以这样想,正常情况下NN的weight是没有限制的,对于D,输入的
x
在weight的作用下,输出
与标准GAN的算法步骤相同,只是把value function改成了更简单的形式,原文中的发现,使用RMSprop训练会收敛,而Adam不会。之前说过,使用原生GAN时,JS divergence可能会训练到0,但模型并没达到预想的效果,也就是说JS divergence不适合评价训练出的分布的性能,而我吗刚介绍的 earth mover distance就不会出现这样的问题,因为它确实是在衡量两个分布的“距离”,原来paper中的实验结果也证明了上述说法:
使用EMD做loss,可以看出随着训练次数的增加,效果越来越好!
2.4 improved WGAN
第一篇WGAN的paper中[2],使用的weight clipping 的方法只能保证
D(x)
是k-Lipschitz的。第二篇作者就想到了1-Lipschitz的充要条件:当
f(x)∈
1-Lipschitz function, 当且仅当
||∇xD(x)||≤1
,即梯度1。D的value function
就变成:
之前是找满足1-Lipschitz的D,现在把这个条件作为一个penalty, 找所有尽可能满足penalty的D,如果 D(x) 的梯度小于1,penalty项是0也就是正常的value function,否则会减去一个loss。这样找到的D也可能是1-Lipschitz function,实际使用时,还是用sample的方法代替积分:
paper中指出,sample的这些点来自于 Pdata 与 PG 的连线,直观的理解就是说,希望 PG 朝着 Pdata 移动,选中间的连线当然是最好啦。最后,paper中还指出,其实让 D(x) 的梯度越接近1越好,于是,最终的value function就改为:
说了这么多,WGAN究竟有没有用呢?图片的实验结果就不放啦,肯定会提高的,paper中给出了用WGAN生成句子的例子,
也有童鞋把英文改成中文重新跑了一下:
有些句子还是蛮押韵的,不造唐朝诗人看到这些诗会有什么感受,或者出道高考题让高中童鞋鉴赏一下!能产生句子的GAN还有SequenceGAN,Boundary seeking GAN等,下边简单介绍一下几种GAN的变种。
2.5 cGAN
conditional GAN[4]是最早的GAN的变种之一,把原生GAN中的概率全改成条件概率,
这个条件可以是图片,标注等等,结构如下图:
真正在训练的时候,把条件直接拼接到原始数据中就好。
2.5 pix2pix
用上边的cGAN可知,既然cGAN的条件可以是图片,我们就用跟原图尺寸大小相同的图片做条件,这样借助cGAN可以完成一些paird data才能完成的任务,如把轮廓图转化成真实图片,把mask转化成真实图,把黑白图转化成真实图等,如下:
2.6 Cycle GAN 和 Disco GAN
上边说的cGAN需要有paired data,也许,我们没办法得到这样的数据,比如把彩铅画转化成真实图,不可能去找画家去画各种彩铅画。Cycle GAN[6]和Disco GAN[7]告诉我们不用paird data一样可以做到风格转移:
Cycle GAN可以把真实图片转化成梵高风格,反之亦然!
2.7 小结
从上边的发展趋势看,不同类型的GAN要不就在理论基础上做创新,要不就在结构上做创新,我们自己在设计GAN时完全可以根据自己的任务需要设计自己的结构。当然,自己作为一个数学能力很薄弱的小白,理论创新就算了吧,用别人已经证明的value function就好。
参考文献
[1] Nowozin S, Cseke B, Tomioka R, et al. f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization[J]. neural information processing systems, 2016: 271-279.
[2] Arjovsky, Martin, Soumith Chintala, and Léon Bottou. “Wasserstein gan.” arXiv preprint arXiv:1701.07875 (2017).
[3] Gulrajani, Ishaan, et al. “Improved training of wasserstein gans.” Advances in Neural Information Processing Systems. 2017.
[4]Mirza, Mehdi, and Simon Osindero. “Conditional generative adversarial nets.” arXiv preprint arXiv:1411.1784 (2014).
[5] Isola, Phillip, et al. “Image-to-image translation with conditional adversarial networks.” arXiv preprint (2017).
[6]Zhu, Jun-Yan, et al. “Unpaired image-to-image translation using cycle-consistent adversarial networks.” arXiv preprint arXiv:1703.10593 (2017).
[7]Kim T, Cha M, Kim H, et al. Learning to Discover Cross-Domain Relations with Generative Adversarial Networks[J]. 2017.