带你漫游 Wasserstein GAN

前言

上次带大家写了原始版的 GAN,只生成了高斯分布。但兔子哥哥发现在 GAN 论文的底下,有 GAN 生成图片的 example。

带你漫游 Wasserstein GAN

因此,这足以说明 GAN 亦有能力生成图片,并非只有 DCGAN 才能生成图片,这一点与我学 GAN 之前的认知大为不同。于是我就开始尝试了使用原始的 GAN 来尝试生成图像,但接下来,我就开始怀疑人生了。

在开始的时候我采用了 MINST 的数据集,按照我上一篇文章兔子哥哥带你从零写一个 GAN中提及的训练 GAN 的方式中连续训练原始 GAN 多次,得到的仍然全是噪点,并没有一点手写数字的影子。

在尝试多次后,未免让我怀疑我是不是读了假论文,自己是不是一只假兔子。

带你漫游 Wasserstein GAN

在查阅多番资料后,在知乎偶遇到,令人拍案叫绝的 Wasserstein GAN – 知乎专栏 (下文简称 WGAN) 一文,不读不知道,读了简直惊为天人。读完之后,我打消了原本打算去学习 DCGAN 的念头,改成继续学习 WGAN。因此,本文兔子哥哥将会带读者一起来领略一下 WGAN 的风采。

文章目录如下:

  • 为什么原始 GAN 训练困难重重?

  • WGAN 是什么鬼?

  • WGAN 的个人一些使用经验总结

为什么原始的 GAN 这样问题重重?

令人拍案叫绝的 Wasserstein GAN – 知乎专栏一文中提及(亦是论文中提及),原始 GAN 的优化目标经过一定的数学推断后,可以等价于最小化真实分布 P(r) 与生成分布 P(g) 的 JS 散度。那么什么叫 JS 散度呢,为此我们先引出 KL 散度。

KL 散度又称 KL 距离,亦叫相对熵。这里先给出 KL 散度的公式:

带你漫游 Wasserstein GAN

其中 p,g 为 x 的概率分布。在一定程度上,熵这个概念可以度量两个随机变量的距离,因此 KL 散度可衡量两概率分布的差异,特别注意一点是该距离并非对称距离,即:

带你漫游 Wasserstein GAN

得知 KL 散度后,那么 JS 散度就很好理解了,JS 散度的表达式是

带你漫游 Wasserstein GAN

显然,JS 散度可以解释成用 p 和 q 分布离 pq 的平均分布的相对熵来作为衡量 p,q 间的距离,这个时候,该距离就是对称的了。其中经过数学式子的推断,原始 GAN 的损失函数是可以改写成以下式子:

带你漫游 Wasserstein GAN

令人拍案叫绝的 Wasserstein GAN – 知乎专栏中分析了 p,q 各取 0 与非 0 时,对损失函数的影响,而得出的结论是,无论 p 和 q 的取值如何,其 JS 散度都是常数值 log2,既然是常数,优化就无从谈起。

而从另一个更加通俗的角度来说,在优化中,KL 散度和 JS 散度是突变的,这就导致了,如果 D 训练得太好了,那么 G 就会被按在地上摩擦,进而训练 G 的时候梯度将会梯度不稳定,但如过 D 太差了,G 的梯度不正确,会使得 G 往错误的方向前进。这么说来,就好像老婆和老妈掉进河里,你救谁一样,怎么回答的火候是难以把握的。

WGAN 是什么鬼

故名思意,WGAN 就是指用 Wasserstein distance 来替代掉 JS 散度和 KS 散度来作为优化目标的 GAN 模型咯。

那么,什么叫 Wasserstein 距离呢?

下文引用于令人拍案叫绝的 Wasserstein GAN – 知乎专栏

Wasserstein 距离又叫 Earth-Mover(EM)距离,定义如下:

带你漫游 Wasserstein GAN

解释如下:带你漫游 Wasserstein GAN是Pγ和Pg组合起来的所有可能的联合分布的集合,反过来说,带你漫游 Wasserstein GAN中每一个分布的边缘分布都是Pγ和Pg。对于每一个可能的联合分布γ而言,可以从中采样带你漫游 Wasserstein GAN得到一个真实样本x和一个生成样本y,并算出这对样本的距离带你漫游 Wasserstein GAN,所以可以计算该联合分布γ下样本对距离的期望值带你漫游 Wasserstein GAN。在所有可能的联合分布中能够对这个期望值取到的下界带你漫游 Wasserstein GAN,就定义为 Wasserstein 距离。

直观上可以把带你漫游 Wasserstein GAN理解为在这个 “路径规划” 下把Pγ这堆 “沙土” 挪到Pg“位置” 所需的 “消耗”,而带你漫游 Wasserstein GAN就是 “最优路径规划” 下的 “最小消耗”,所以才叫 Earth-Mover(推土机)距离。

而对于怎么把 Wasserstein 距离化作我们训练中的损失函数,论文作者使用 Lipschitz 连续即一些已知的数学定理来使得目标函数转化为

存在函数f(w)其满足 Lipschiz 连续,在带你漫游 Wasserstein GAN取上界,此时就是 Wasserstein 距离。显然这个函数可以用深度学习技术来拟合,而 Lipschitz 连续的限制,则可以通过限制每一层神经网络的权重的取值范围来控制。

归纳起来,在 WGAN 中,D 的任务不再是尽力区分生成样本与真实样本,而是尽量拟合出样本间的 Wasserstein 距离,从分类任务转化成回归任务。而 G 的任务则变成了尽力缩短样本间的 Wasserstein 距离。

故 WGAN 对原始 GAN 做出了如下改变:

  • D 的最后一层取消 sigmoid

  • D 的 w 取值限制在 [-c,c] 区间内。

  • 使用 RMSProp 或 SGD 并以较低的学习率进行优化 (论文作者在实验中得出的 trick)

WGAN 的个人一些使用经验总结

这些经验是基于自身的实验得出,仅供参考

  • WGAN 的论文指出使用 MLP,3 层 relu,最后一层使用 linear 也能达到可以接受的效果,但根据我实验的经验上,可能对于彩色图片,因为其数值分布式连续,所以使用 linear 会比较好。但针对于 MINST 上,因为其实二值图片,linear 的效果很差,可以使用 batch normalization + sigmoid 效果更好。

  • 不要在 D 中使用 batch normalization,估计原因是因为 weight clip 对 batch normalization 的影响

  • 使用逆卷积来生成图片会比用全连接层效果好,全连接层会有较多的噪点,逆卷积层效果清晰。

  • 关于衡量指标,Wasserstein distance 距离可以很好的衡量 WGAN 的训练进程,但这仅限于同一次,即你的代码从运行到结束这个过程内。

另外有一点,虽然在 WGAN 的论文里面把原始 GAN 说得那么不堪,但人家原始 GAN 在论文里面也是有成功生成图片的例子,所以特别想问一句,如过有小伙伴用原始 GAN 生成过质量可观的图片的话,欢迎冒泡,交流一下。

这个是我用 WGAN 用拟合出的 MINST 的效果,不算太理想,继续训练应该有较好效果,但 GAN 系列的收敛速度都好像有点感人。。。

带你漫游 Wasserstein GAN

后话

参考文献:

令人拍案叫绝的 Wasserstein GAN – 知乎专栏

[1701.07875] Wasserstein GAN

我的 Github,我的 WGAN 的代码可在这里找到

MashiMaroLjc/learn-GAN

个人的学习总结,并非教程,仅供参考,如有错误,欢迎指出和交流。

雷锋网(公众号:雷锋网)按:本文原作者兔子老大,原文来自他的知乎专栏

雷锋网版权文章,未经授权禁止转载。详情见。


带你漫游 Wasserstein GAN

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/85462.html

(0)
上一篇 2021年8月12日 23:51
下一篇 2021年8月12日 23:52

相关推荐

发表回复

登录后才能评论