GAN提高

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. 我们知道 0JSD(||)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 的概率,则:

Df(P||Q)=xq(x)f(p(x)q(x))dx

其中 f 满足f(1)=0,且 f 为凸函数。由定义可知,当P,Q为两个相同的分布时, Df(P||Q)=0 ,使用凸函数的性质可以证明 Df(P||Q)>0 ,这样一来, Df(P||Q)0 ,因此可以衡量任意两个分布的不相似性。根据 f 的性质,我们就可以构建这种各样的divergence,如:
f=xlogx Df(P||Q)=xq(x)p(x)q(x)log(p(x)q(x))dx ,也就是我们熟悉的KL divergence
f=logx Df(P||Q)=xq(x)(log(p(x)q(x)))dx , 也就是KL reverse divergence
原文中,给出了以下几种divergence
这里写图片描述
为了求f-divergence,我们需要求 f 的共轭,接下来的内容会涉及一点点泛函分析和实变函数的知识!

2.1 Fenchel Conjugate(凸共轭)

这个意思就说,每个凸函数f都能找到一个共轭函数 f

f(t)=maxxdom(f){xtf(x)}

这个共轭函数也是凸的。举一个简单的栗子来说明一下:
这里写图片描述
我们固定 t xtf(x)是直线簇 x1tf(x1),x2tf(x2) ,…,这时再变化 t ,在t1时取所有 x1t1f(x1),x2t1f(x2),... 的最大值点(准确的说是上确界), t2 时取 x1t2f(x1),x2t2f(x2),... 的最大值点,连续变化 t 就得到f(t)(图中的红色线),可以看出 f(t) 也是convex的。那如何求一个具体凸函数的Fenchel conjugate呢?

例: f(x)=xlogx
根据 f(t) 的定义:

f(t)=maxxdom(f){xtxlogx}

立刻就转化成我们熟悉的求最大值的问题,所以果断用高中数学知识,求导!!
令:
g(x)=xtxlogxdgdx=tlogx1

导数为0,求得 x=exp(t1) 时, g(x) 取最大值,代入 x 得:
f(t)=et1

有了这个定理,我们就可以得出,任何一个凸函数都能找到一个共轭凸函数,反过来也一样,他们之间的关系为:
f(t)=maxxdom(f){xtf(x)}f(x)=maxtdom(f){xtf(t)}

2.2更一般的GAN

上边有说,用f-divergence衡量两个分布,我们知道GAN的J-S divergence也是衡量两个分布,那f-divergence可以写成GAN的Value function吗?当然可以,如下:

Df(P||Q)=xq(x)f(p(x)q(x))dx

利用Fenchel Conjugate 可以把 f 替换成它的共轭:
Df(P||Q)=xq(x)(maxtdom(f)[p(x)q(x)tf(t)])dx

D(x)=t ,也就是输入 x 输出t,注意上式中有max项,表示固定 x ,找最大的t,我们任意找个 t=D(x) ,并不一定是最大的那个 t ,因此:
Df(P||Q)xq(x)p(x)q(x)D(x)f(D(x))dx=xp(x)D(x)dxxq(x)f(D(x))dx

我们找满足 D(x)=t 里边最大的 D ,则
Df(P||Q)
可以用low bound来近似,即:
Df(P||Q)maxDxp(x)D(x)dxxq(x)f(D(x))dx=maxD{ExPD(x)ExQf(D(x))}

换成我们在GAN中用的 Pdata,PG ,上式变成:
Df(Pdata||PG)maxD{ExPdataD(x)ExPGf(D(x))}

是不是与GAN中
maxD{ExPdatalogD(x)+ExPGlog(1(D(x))}

很像呢?更准确的说,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 行的土运到第j列,颜色越浅代表运的越多。假设有 Π 种运送plan,每种方法的平均运送距离为:
B(γ)=xp,xqγ(xp,xq)xpxq

则earth mover distance定义为这些运送plan中最短的那个:
W(P,Q)=minγΠB(γ)

这种用距离估计两种不同分布的差异比divergence更直观一些,因此,我们把GAN中discriminator的 Df(Pdata||PG) 换成 W(Pdata,PG) ,WGAN的paper指出,新的value function就变成:
W(Pdata,PG)=maxD1Lipschitz{ExPdataD(x)ExPGD(x)}

跟fGAN相比,共轭都省了,看这清楚多了,要注意的是D必须是1阶Lipschitz function. 所谓 f(x) 是k-Lipschitz function,其实就是:
f(x1)f(x2)kx1x2

k=1 就是1阶Lipschitz,1-Lipschitz其实是说函数值变化比变量的变化还慢。

为什么value function 要加1-Lipschitz的限制?假设没有这个限制,我们让 D(x1)=+,D(x2)= ,这显然是最大的value,但这样做是无法找到训练模型的,因此我的得让 D(x1)D(x2)kx1x2 ,接下来就是如何求解带1-Lipschitz条件的value function?

答案就是做weight clipping,即把网络的权值限制在[-c,c]之间。可以这样想,正常情况下NN的weight是没有限制的,对于D,输入的 x 在weight的作用下,输出D(x)。如果weight受限,则输出的 D(x) 也会受限,这相当于构造k-lipschitz function,具体算法如下:
这里写图片描述
与标准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

W(Pdata,PG)=maxD1Lipschitz{ExPdataD(x)ExPGD(x)}

就变成:
W(Pdata,PG)=maxD{ExPdataD(x)ExPGD(x)}λxmax(0,||xD(x)||1)dx

之前是找满足1-Lipschitz的D,现在把这个条件作为一个penalty, 找所有尽可能满足penalty的D,如果 D(x) 的梯度小于1,penalty项是0也就是正常的value function,否则会减去一个loss。这样找到的D也可能是1-Lipschitz function,实际使用时,还是用sample的方法代替积分:
W(Pdata,PG)=maxD{ExPdataD(x)ExPGD(x)}λExPpenalty[max(0,||xD(x)||1)dx]

这里写图片描述

paper中指出,sample的这些点来自于 Pdata PG 的连线,直观的理解就是说,希望 PG 朝着 Pdata 移动,选中间的连线当然是最好啦。最后,paper中还指出,其实让 D(x) 的梯度越接近1越好,于是,最终的value function就改为:
W(Pdata,PG)=maxD{ExPdataD(x)ExPGD(x)}λExPpenalty[(||xD(x)||1)2]

说了这么多,WGAN究竟有没有用呢?图片的实验结果就不放啦,肯定会提高的,paper中给出了用WGAN生成句子的例子,
这里写图片描述
也有童鞋把英文改成中文重新跑了一下:
这里写图片描述
有些句子还是蛮押韵的,不造唐朝诗人看到这些诗会有什么感受,或者出道高考题让高中童鞋鉴赏一下!能产生句子的GAN还有SequenceGAN,Boundary seeking GAN等,下边简单介绍一下几种GAN的变种。

2.5 cGAN

conditional GAN[4]是最早的GAN的变种之一,把原生GAN中的概率全改成条件概率,

maxD{ExPdatalogD(x|y)+ExPGlog(1(D(x|y))}

这个条件可以是图片,标注等等,结构如下图:

这里写图片描述

真正在训练的时候,把条件直接拼接到原始数据中就好。

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.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值