Improved GAN

https://www.bilibili.com/video/av9770302/?p=16

从之前讲的basic gan延伸到unified framework,到WGAN

再到通过WGAN进行Generation和Transformation

Improved GAN

复习一下GAN,

首先我们有一个目标,target分布,Pdata,

蓝色部分表示Pdata高,即从这部分取出的x都是符合预期的,比如这里的头像图片

Improved GAN

GAN的目的就是训练一个generator nn,让它的输出尽量接近Pdata分布

generator的输入一般都是normal distribution,输出接近Pdata,那么就意味着generator输出的x,高概率会落在蓝色区域,即我们想看到的图片

但这里的问题是,PG是算不出来的,其实这里Pdata我们也是不知道的,我们只有一些训练集,比如一批头像的图片

所以只有用sample的方式来训练

Improved GAN

下面给出如何通过sample来训练,

先随机从v1 generator中sample 4张图片作为false,从训练集中取4个作为true,来训练v1 discriminator

然后固定V1 discriminator,来训练出V2 generator

Improved GAN

然后固定V1 discriminator,来训练出V2 generator,它产生的x,v1 discriminator都会判true

Improved GAN

再训练产生V2 discriminator,让V2 generator生成的x,都被判false

Improved GAN

下面的图更形象的表示这一过程,

需要注意的是PG为蓝色曲线,调整generator nn的参数让它close Pdata,这个过程不是渐进的过程,而是一个反复的过程

nn的参数很难调的刚合适,往往或调过了,所以真实的过程是一个反复震荡close的过程

直到两者重合,discriminator就完全无法区分

Improved GAN

简单的列出算法,

discriminator训练多次来max V,intuitive的理解V,让D(x)尽量大,即让训练集数据被判true,让D(x~)尽量小,即让generator生成的数据被判false

generator仅仅训练一次来min V,前面一项和generator无关所以不用考虑,min V,就要max D(G(z)),即让generator生成的数据尽量被判true

Improved GAN

Unified Framework

下面来学习unifed framework,分成3部分

Improved GAN

f-divergence

这篇论文称为f-Gan,Gan中Discriminator和JS-Divergence相关,其实可以任何f-divergence相关

Improved GAN

f-divergence就可以用来衡量两个分布的相似度

这个定义对于函数f有两个约束,

其中f(1)=0,当p和q分布相同时,divergence就会取到0

f是convex,可以证明D的最小值就是0,下面通过jensen不等式,很容易证明

Improved GAN

举几个f-divergence的例子,

Improved GAN

Fenchel Conjugate(共轭)

对于每个convex函数,都存在一个对应的conjugate函数f*

定义是给定一个t,需要调整x,使得后面的式子最大,其中x需要在f的定义域中

这里假设先固定x,这样蓝框中的部分就变成线性函数,对不同的x就是不同的直线,现在对于某个给定t,只是找出最大的那个交点

从图上可以看出,f*也是convex的

右边举个例子,对于xlogx,他的f*就是exponential,从图上也能intuitive的看出

Improved GANImproved GAN

计算过程如下,maximizing就是求微分=0

Improved GAN

这里有个重要的特性,就是f** = f,即

Improved GAN

代入f-divergence的公式,得到

Improved GAN

这个红框中的式子,给定x,找到一个t可以使得它取到最大值,那这个式子可以有个lowbound

如果随便给一个t,那么得到值一定是小于等于这个最大值

假设有个函数D,输入这个x,输出t,就有,因为对于任意一个D,从x算出的t,不一定是可以取到最大值的t

Improved GAN

任意D代表下届,那么我们只要调整D,使得让其max,就可以逼近真实值

Improved GAN

把上面的式子中,代入Pdata和PG,就得到Pdata和Pg的f-divergence的定义

如果我们要找一个PG,和Pdata尽量相似,也就是要找一个G,使得Df最小,于是得到G*

Improved GAN

推导到这里就可以看出,之前GAN的V是怎么来的,这里用不同的f-divergence,即f不同,就可以得到不同的V

之前的GAN只是一种特殊形式罢了

所以这里就得到一种GAN的unified framework,这里列出各种不同的f-divergence

Improved GAN

WGAN

Improved GAN

WGAN的论文,简单说,就是用earth mover's distance,或者wasserstein distance来衡量分布之间的差异

Improved GAN

什么是earth mover's distance?

把P分布变成Q分布,有很多种moving plan,其中最小的称为earth mover's distance,如右图

Improved GANImproved GAN

形式化的表示,plan r可以表示成一个矩阵,每个value表示在这个位置上,需要从P移动多少到Q

这里定义出B(r),表示某个plan的平均距离

那么Earch Mover‘s Distance就是所有plan中最小的那个,可以看出算这个distance是很麻烦的,因为要先求一个最优化问题

Improved GAN

那Earch Mover‘s Distance有什么用,为什么要用它来替代f-divergence来衡量分布间的差异?

f-divergence计算差异的时候,是看两个分布是否有相同的部分,交集,这样的问题就是很难train,因为下面的例子,Pg0,Pg50的JS-divergence都是一样的,没有梯度

说明这样衡量两个分布的差异,不科学;所以用Earch Mover‘s Distance

虽然Pg0和Pg50都不相交,但是他们之间的距离是变小的,这样更容易训练

Improved GAN

回到GAN Framework

之前说,从f-divergence是可以推导出GAN的公式的

那么现在从f-divergence换到Earch Mover‘s Distance,会是怎么样?

WGAN的论文说明,也可以从Earch Mover‘s Distance推导出下面的公式

找出一个function D,让Pdata中抽样的x的D(x)尽量的大,而Pg中抽样的x的D(x)尽量的小

但这里D有个约束,必须是1-lipschitz

从lipschitz的定义可以看出,这样的函数,变化比较缓慢,即f(x)的变化要小于x的变化

Improved GAN

为何要加上1-lipschitz的约束?

因为如果不加,D会倾向于给D(x1) 正无穷,而D(x2)负无穷

而现在加了这个约束,x1和x2间的距离为d,那么D(x1)和D(x2)间的距离不能大于d

对于GAN,D(x)是一个二元分类器,输出是sigmod,在两端几乎没有梯度

而WGAN,D(x)是一个直线,训练起来更简单

Improved GANImproved GAN

那么这个式子怎么求解?

关键是1-lipschitz的约束,怎么处理

这里的方法是weight clipping,就是限制w的参数在[-c,c],这样也就限制函数输出的变化程度

有两个问题,

这里weight clipping,只能做到K-lipschitz,而不是1-lipschitz,论文里面说这里放宽到k-lipschitz也是没有问题的

这个条件是充分非必要条件,也就是说weigth clipping后,得到的D集合是真正D集合的子集,所以得到的D也许无法Max大括号中的式子

Improved GAN

图中显示,weight clipping的作用,如果没有weight clipping,线会趋向垂直,因为要使得max
加上weight clipping,其实就是限制住斜率

对比之前的GAN的算法,W-GAN的算法会做如下改动,

Improved GAN

用WGAN还有一个好处是,我们真的可以用W来衡量生成图片质量好坏

在GAN中,W是JS-divergence,衡量的是交集,只要不想交,JS-divergence都是一样的值,而WGAN衡量的确实是两个分布的距离,所以距离越近,生成的图片质量越好

Improved GAN

Improved GAN,Gradient penalty

改进的点,主要是如果保证1-lipschitz,之前用的是weight clipping

现在换一种方式,

当D是1-lipschitz时,D对x的gradients的norm小于等于1,比较自觉的定义,因为1-lipschitz就是D的变化率要小于x的变化率

所以我们通过加一个罚项来近似这个约束,罚项的定义就是倾向于让gradients的norm小于等于1,这样罚项就会为0;这样虽然不能保证这个约束,但是当参数lambda足够大时,即罚项的权重足够大时,可以近似满足

这里的罚项是个积分,是对所有x的积分,实践中无法做到,所以改成抽样,x从Ppenalty中抽样

Improved GAN

那这里的Ppenalty是怎么样的分布,这是有定义的,如下是Pdata和PG中间的区域

Pdata和PG各sample一个点,然后在连线,再在线上sample一个点作为Ppenalty

Improved GAN

paper说这样做是因为实验效果比较好,给出的intuitive的解释是,generator是要将PG移向Pdata,所以他们之间的gradient是最有意义的

进一步优化罚项是,让gradient尽量接近于1,而非小于1

这样算法的收敛速度会更快,对于D而言肯定是gradient越大收敛的越快,而1-lipschitz约束gradient最大就是1

Improved GAN

用gradient penalty的好处,

如果用weight clipping,显然很多weight都会被clip在边界上,很不自然,而gradient penalty的weight分布会更合理

同时生成的分布也更为合理

Improved GAN

Transformation

Improved GAN

Transformation,

Paired data,比如Text to image,从一段话,生成一张图片

那么如果用传统的supervised learning的方法,会有下面的问题

比如train,所代表的火车有各种各样,所以生成的train会是所有火车的综合,变成一个很糊的输出图片

Improved GAN

所以这里用GAN来生成,GAN的输入有两个,除了train,还有一个分布z

所以得到的输出也不是一个值,而是一个分布,分布中的点就可以代表各种各样的case,所以每次sample都可能得到不一样值,蓝色或绿色点的任意一个,而不会是红点

Improved GAN

Conditional GAN的训练不同的地方,就是Discriminator的输入是两个,Negative example也要给出两种

如下图右,可以对比一下左边普通的discriminator

Improved GAN

Unpaired Data,没有成对的训练集,比如有一堆普通图片,一堆梵高的图片

然后就想把普通图片转化成梵高风格

Improved GAN

可以通过,风格迁移,sytle transfer来做,也可以用Cycle GAN

如果用普通的GAN,用Discriminator来判断生成的图片和梵高的画比,是否是一副梵高的画

很容易会产生下面的效果,generator确实会生成梵高的画,但是和input无关

Improved GAN

所以要加上约束,其实就是auto-encoding

但中间的编码要符合特定的分布,这里就是梵高画的分布

Improved GAN

完整的版本就是这样的,

Improved GAN

上一篇:【DevExpress v17.2新功能预告】增强ASP.NET TreeList


下一篇:Eclipse.Error.gen already exists but is not a source folder.