Libo1575899134@outlook.comdom
Libo函数
(原创文章,转发请注明做者)学习
本文章会先从Gan的简单应用示例讲起,从三个方面问题以及解决思路覆盖25篇GAN论文,第二个大部分会进一步讲Gan的全部领域应用优化
-----------------------------------------------------------------------------------spa
上一篇说到最近有人关于encoder给出了更加直观的解释:翻译
从另外一个角度理解,传统的A是咱们但愿的map,两个domain的图像,都是向左的map到一块儿,都是向右的map到一块儿,若是用传统Gan去学,会致使b的状况,Mode Missing的问题3d
这样会致使生成这样的东西很模糊,有点像生成的平均同样,能够和以前不少Gan的模型生成的比较模糊联系到一块儿code
第三个是简单把一个Gan加一个encoder的办法,细节不同,可是归纳了刚才说的三种方法,若是只加一个encoder的话,虽然能在必定程度上限制B领域的东西也能映射会A邻域,就会致使结果出现震荡,一会学到朝左的箭头,一会学到朝右的箭头,致使训练出来的结果只是一个偶然。orm
因此就有了后面三篇基本长得同样的,后面三篇基本长的同样,cycleGan 来自朱骏彦的做品,若是一个encoder学的是单向隐射,G:x->y 最好也要求F:Y->x,这个才能保证学到的东西是一一对应的blog
能够明显看到,Gan Loss函数包括了一个原始Gan+另外一个方向的Gan+CycGan
两个encoder 两组Gan
下面是CycleGan的结果,把马变斑马,夏天变冬天,把画做变真实照片,风格迁移的任务,工做的突破是能够将整幅图的风格转换成莫奈的风格,而不是莫奈某幅画的风格
还能够转换成不一样画家的做品的图片
下面是苹果变橘子,做者补充到,CycleGan只能应用到形状比较类似的物品上,马和斑马其实也是有细微的差别,苹果变成香蕉可能暂时不会work
CycleGan也提到了一些Mode-missing的问题,下图对比了BiGan和CoGan的工做,这两篇工做也用到了两个encoder,并非向那三篇说的只用了一个encoder,可是明显看到BiGan没学起来。
那么具体来看BiGan作了哪些事情,BiGan并非直接学两个样本空间的映射,而是学一个样本空间和一个隐含空间的特征映射,Z表明的就是隐空间。和CycleGan 不太同样的地方,说明了隐空间学习有时候不如在样本空间直接学。
DiscoGan 解释ModeMissing 就会更有意思一些,a,表明的是原始的图像,b ,是Gan ,c ,是加了一个encoder的Gan, D,是加了两个encoder的双向Gan。
比较后面两幅图,为何只加一个encoder对于Mode missing的问题也解决的不太好呢,C中绿色区域的三个点其实没有区出来,下面的区分状况也不太好,可是如可能是DiscoGan 就能够把10个点,10个Mode,区分的很是好。不一样的颜色和背景表明了判别器的输出大小,若是颜色的深浅很均匀的话(0.8-0.6)学的比较好。
B是一个encoder的状况,C是用2个encoder的状况。A 是传统gan Mode-missing 最严重的状况,基本学出来都是一个方向的。
因此第二个Mode-Missing的第三类问题问题已经基本解决了,双向的encoder&noise input。就是即便不考虑JS散度,优化目标会致使Mode-Missing问题,刚才的一些方法就能够解决。
最后一个是比较火的Wasserstein Distance或者也叫WGan,翻译成中文推土机距离,能够看到下图γ属于联合分布,把生成数据分布和真实数据分布作一个联合分布,γ属于联合分布中的任意一种分布,对于这样的分布,取两个点的距离的总体的指望的下界。
为何比KL散度和JS散度好呢?为何叫推土机距离,形象理解为把X变到Y须要推的土有多少
假设X和Y的分布分别以下图,须要费多大的力才能把X的形状的分布变成Y形状的分布,若是是一个离散的分布能够这么理解,假若有10个可能的样本,10种可能的取值,不一样的几率是柱子的高度,如何能够变到右边,固然变的不是样本取值而只是几率值,是一个NP问题且并非惟一的,有些解须要费的力比较大,相似汉诺塔,最优规划路径问题
因此距离能够理解成:把生成分布变到真实分布所须要的最优距离的最小值,为何比KL和JS散度好呢?在一种能够忽略不计的假设下,它是一个连续可分可微的度量,且最重要的是他直接解决了JS散度在两个分布不重合的时候,无心义这件事。即便两个分布远在天边 WD也能够衡量二者距离到底有多远,因此永远均可以提供一个有效的梯度,直接解决了梯度消失 ,不稳定的问题。
若是用JSD来作的话,两个分布就会有一些突变,可是若是Wasserstein的话就是渐变的
有了距离之后怎么具体变成Gan的目标函数呢?由于下届是不能直接计算的,因而用了一个KR对偶性的方法,作了转换,损失函数里的log被去掉了,下面再解释为何没有了。
有了以后,并非从刚才的直接等价过来的,条件是须要D的function是符合Lipschitz连续性的
解释下什么是Lipschitz连续性,对于一个连续函数或者实数的function,若是导函数的绝对值,在任意状况下都小于一个常数的话,那么就说这个函数是Lipschitz 连续的。要求函数导数的变化程度或者倾斜度角度不要太大
有了Lipschitz连续性以后就要把WD应用到Gan的损失函数中,须要知足D的函数符合这个连续性,因此原始的paper 就是把D的导数(weight)限制到必定的范围内,[-c,c] 若是超过这个范围就用weight clip的方法截断,就会出现个问题,选择C其实挺重要的,论文里也给了一些解决办法。
总之,WGan就能够改变gan中的目标函数,去掉log,应为原始的判别器是在判别一个二分类问题,fake or true ? 因此D的top layer 通常是一个sigmod layer,如今作了这个转变实际上是在逼近Wasserstein的距离,逼近两个分布的距离,至关于变成一个回归问题,把最后的sigmod直接给去掉了
因此做者发现,若是用了WD以后,绿色和蓝色是原始Gan中的分布,发现梯度消失的很剧烈,D很快就变平了,就是没有梯度了,给它啥都判断的很对,也就没有啥变化了,用Wasserstein学出来发现梯度就会很平稳,形象证实了他们能够解决这个问题。
因此第二个困难点就解决了,第二个困难点在于若是用JS散度来衡量两个几乎不可能重叠的分布的时候,梯度没有办法获得有效信息,梯度消失的问题,就被Wgan解决掉了。
接下来介绍W-gan 的优势,和能作哪些事情,由于如今D输出的不是0或者1,输出的是一个真实值,说明了它逼近distance的程度,因此做者指出D的输出能够做为衡量trianing的进度,随着训练进行的愈来愈好,距离应该下降愈来愈少,蓝色曲线愈来愈低,图像质量愈来愈好
因此它作到了两件事,一个是终于有一个可靠的数值,来衡量生成样本的质量,由于生成样本的评价问题是个很难的问题,一直在用人工评价或者不少不靠谱的方法。至关于提出了副产品。
能够看到下图,变形度在慢慢下降,清晰度在慢慢提升,坏点再慢慢减小,上面是Wgan下面是DCgan,发现用Wgan的训练方法训练DCGan的结构,能够发现质量上面的清晰度和变形度更好一些。
在介绍DC-GAN是发现了他们仍是用了BN,可是BN并非全部状况下都好,有时候还会破坏训练,发现用DC去掉BN后train不出来由于增长了稳定性,可是W-GAN即便不用BN,依然能训练不错的结果。
有了DCGAN后你们不太用MLP了,由于MLP表现能差,表如今生成的样本不能逼近很复杂的图像,MLP学mnist仍是不错的,三层就能够,可是若是SBA这种就不太好,用standard Gan学出来会更差,可是若是用W-GAN 的话,连MLP 也能够进行很好的学习了。
在最后一部分,有人发现,为了知足Lipschitz连续性的要求,直接简单粗暴的方式是weight clip,不只仅有选择困难的问题,还会出现,若是C显得比较大,下面红色的先出现了梯度爆炸的问题,选的小时会出现梯度消失,越小消失的越厉害。
因此他们提出了一种Gradient Penalty(梯度惩罚)的方法,就会一直比较平稳。
对于weight clipping的状况下 甚至会学出两种极端的状况,判别器的weight不是-c就是c,致使学出来的D变得很简单。下降了学习能力。
下面作了一个展现, Weight clipping 会忽略掉高阶的动量,因此没法完成复杂的判别任务。
进一步分析,为何会出现这个问题,用原始的W-gan 就跟gan同样会获得一个最优的D,会让判别器全部的梯度都在1左右,1就是指C,发现实际上是跟norm有关的,因此就提出不要直接clip数,去控制norm,把如今的梯度和最优的值,之间差距有多少,用一个L2的loss,加到原始的W-gan的损失函数中。
下图看到黄色跟绿色收敛的特别快,GP效果好,不加BN效果仍是好。
建议
1 若是要作Gan相关任务传统的就不要再试了,试试最新的。
2 尝试noise input
3 分析特殊结构,例如:U-net 在encoder和decoder上面加了skip connection,实际上是针对特定的pair的问题最有效的,须要让feature一一映射过去
4 不要老是尝试高斯的noise,尝试形状,大小等等
不一样的noise直接影响了学出来的东西,不是说有状况下都必定要加显性noise,好比noise input 不须要Z的vetor,好比dropout 至关于已经加了noise。
下面的链接中总结了二十多种技巧,能够看一下。
----------------------------------------------------------
至此Gan相关的原理所有介绍完毕,大体从3个主要问题,以及对应的解决对二十多篇Gan模型进行整理,下一篇会整理行业全部领域对gan的应用程度
下一篇:Generative Adversarial Networks overview(3)