抛开复杂证实,咱们从直觉上理解W-GAN为啥这么好训

这篇文章要结合另外一篇生成对抗网络-GAN---一个好老师的重要性来看.讲述的挺清晰的,好评!网络

欢迎关注做者 函数


关于GAN基础的知识,你们能够参考我另外一篇生成对抗网络-GAN---一个好老师的重要性cdn

最关键的地方实际上是D(X),即对整个H*W*C这个高维空间的评分系统,好很差训,最关键的地方实际上是D(X)的打分是不是从G(X)(生成分布)的支撑集的低分逐渐升高到R(X)(真实分布)的支撑集处的高分,从而使得G(X)这个生成分布能够顺着D(X)的梯度不断靠近真实分布R(X)。blog

以往的损失函数在固定G后train出来的D(X)都没能很好的构造出这种梯度,因此train不起来,而W-GAN作到了。图片

W-GAN: 论文证实原始GAN的损失在D取极值时候描述的是JS散度,而具备特定语义特征的图片在高维空间中呈现的应该是一个manifold,两分布支撑集冲重叠部分的measure为0,随机初始化参数后,训练完D,对G来讲,G的的梯度一直都是零,由于生分布与真实分布没有重合的时候,JS散度一直都是0,因此才有了D不能train的太好的训练经验。至于Ian Goodfellow提出的“- log D trick”,对G来讲,包含梯度的部分实际是ip

KL(P_G||P_R) - 2JS(P_R||P_G)

注意KL散度是非对称的, P_G -> 0,P_R -> 1 ,KL散度趋于0,即G会趋向于不生成这部分真实的图片,由于这时候惩罚很小,而 P_G -> 1,P_R -> 0 ,KL趋向于 +\infty ,惩罚巨大,所以G确实就趋向于不生成假的图片,这种不对称性,就使得G仅仅在学到的部分真实分布停滞不前,而把其余尚未学到的几率空间的某些 P_R 存在分布的地方直接置为零,由于这样惩罚很小,就产生了所说的collapse mode状况。为了解决这样的问题,做者提出了Wassertein 距离,其能够度量两个分布没有重合时候的距离,也就是能够提供 P_G(X) 改善本身的梯度,其实具体的推导没有看懂,可是从最后结果的表示来看,能够有一个直观的理解。get

W = \frac{1}{K} \sup \limits_{||D||_L < K }  {E[D(P_R(X))] - E[D(P(P_G(X))]}

D的目标就是最大化 E[D(P_R(X))] - E[D(P(P_G(X))] ,同时要让D知足L-Lipschitz < 某个常数K,咱们从直觉上理解这种限制,假如不进行Lipschitz常数的限制,那么D会倾向于给fake sample打低分,给real sample打高分,而二者之间的D(X)会倾向于产生一个gap,这样对于与真实分布 P_R(X) 与G映射出来的分布 P_G(X) 之间就造成不了有效的梯度(看我垃圾手绘中的图一),即G会不知道如何让fake sample改变来得到高分。加上Lipschitz限制条件以后,在D使得上面的损失函数最大化的时候,由于梯度不能太大,D不能无脑的而且无限制的给fake打低分,给real打给分,由于这样会使得fake与real只之间的Lipschitz大于k,也就是加上此限制后,D(X)并不会在fake分布的区域打很低的分数,而后经历一个gap到real分布的很高的参数,而是在fake与real之间造成一个较为平缓的坡,fake处G能够了解到往哪里移动过能够得到更高的分数,从而解决对G来讲梯度消失的问题。实现的时候想到了一个方法就是简单将参数clip,简单的限制到一个区间中,这样通过简单的乘加,Lipschitz一定是限制在某个上限下。it



W-GANGP: 很快你们发现简单的限制参数范围效果并很差,由于W的简单限制使得网络的表达能力受限,由于D为了使得fake 与real的差距变大,那么大多数参数一定都简单的达到clip的上限或者下限,极大的限制了网络的拟合能力,而且在这样的简单的clip状况下,很是容易引发梯度消失或者梯度爆炸,由于许多的clip上界或者下界相乘,clip稍大就可能爆炸,稍小就可能消失。因而做者就想到了另外一种限制Lipschitz的方法 --- Gradient Penalty。想法是朴素的,就是为了限制D的梯度,干脆直接设置一个惩罚项,最后选择惩罚项为io

[||\nabla_x(D(X)) - K]^2

本来咱们是但愿不出现fake 与 real 之间的梯度不要很大大,而fake跟real的区域几乎没有梯度,而这个惩罚项,如今直接但愿其梯度能尽可能接近某个常数,做者仅仅是说实验上这个带来的更好的效果,可是我看来这是能够解释的,由于这个限制可让fake sample1之间也能产生梯度,由于同是fake可是距离真实的分布的距离仍是有所不一样的,加上此限制后,每一个fake sample 都处在一个有梯度地方(渣渣手绘的图三),此时梯度降低时显然会收敛的更快,而相似class

Relu[||\nabla_x D(X)||_p -K]

这样的panalty,其可能仅仅限制fake 与 real 之间的梯度,使得距离real 较近的fake 点能够感觉到梯度,而距离较远的可能就感觉不到,梯度降低时候仍是较慢。

我手画了一张图来对比这些不一样。

实际实现的时候,咱们想要在整个样本空间上对梯度加以限制是困难的,那么如何施加这种限制呢,其实咱们仅仅限制fake 与real,以及他们之间的空间梯度就能够了,咱们能够在fake 与real 的sample之间进行线性的插值,做为中间区域的空间的取样,并对他们的梯度作策划惩罚就能够了。

相关文章
相关标签/搜索