公式13的意思就是在要求函数 f的 Lipschitz 常数不超过 K的条件下,对所有可能满足条件的 f取到的上界,然后再除以 K。特别地,我们可以用一组参数 w来定义一系列可能的函数 ,此时求解公式13可以近似变成求解如下形式 再用上我们搞深度学习的人最熟悉的那一套,不就可以把 f用一个带参数 w的神经网络来表示嘛!由于神经网络的拟合能力足够强大,我们有理由相信,这样定义出来的一系列 虽然无法囊括所有可能,但是也足以高度近似公式13要求的那个了。 最后,还不能忘了满足公式14中这个限制。我们其实不关心具体的K是多少,只要它不是正无穷就行,因为它只是会使得梯度变大 K 倍,并不会影响梯度的方向。所以作者采取了一个非常简单的做法,就是限制神经网络的所有参数的不超过某个范围 [-c, c],比如,此时所有偏导数也不会超过某个范围,所以一定存在某个不知道的常数 K使得 的局部变动幅度不会超过它,Lipschitz连续条件得以满足。具体在算法实现中,只需要每次更新完 w后把它clip回这个范围就可以了。 到此为止,我们可以构造一个含参数 w、最后一层不是非线性激活层的判别器网络,在限制 w不超过某个范围的条件下,使得 尽可能取到最大,此时L就会近似真实分布与生成分布之间的Wasserstein距离(忽略常数倍数 K)。注意原始GAN的判别器做的是真假二分类任务,所以最后一层是sigmoid,但是现在WGAN中的判别器 做的是近似拟合Wasserstein距离,属于回归任务,所以要把最后一层的sigmoid拿掉。 接下来生成器要近似地最小化Wasserstein距离,可以最小化 L,由于Wasserstein距离的优良性质,我们不需要担心生成器梯度消失的问题。再考虑到 L的第一项与生成器无关,就得到了WGAN的两个loss
公式15是公式17的反,可以指示训练进程,其数值越小,表示真实分布与生成分布的Wasserstein距离越小,GAN训练得越好。 WGAN完整的算法流程已经贴过了,为了方便读者此处再贴一遍:
上文说过,WGAN与原始GAN第一种形式相比,只改了四点: 判别器最后一层去掉sigmoid 生成器和判别器的loss不取log 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行 前三点都是从理论分析中得到的,已经介绍完毕;第四点却是作者从实验中发现的,属于trick,相对比较“玄”。作者发现如果使用Adam,判别器的loss有时候会崩掉,当它崩掉时,Adam给出的更新方向与梯度方向夹角的cos值就变成负数,更新方向与梯度方向南辕北辙,这意味着判别器的loss梯度是不稳定的,直播,所以不适合用Adam这类基于动量的优化算法。作者改用RMSProp之后,问题就解决了,因为RMSProp适合梯度不稳定的情况。 对WGAN作者做了不少实验验证,本文只提比较重要的两点。第一,判别器所近似的Wasserstein距离与生成器的生成图片质量高度相关,如下所示:
第二,WGAN如果用类似DCGAN架构,生成图片的效果与DCGAN差不多:
但是厉害的地方在于WGAN不用DCGAN各种特殊的架构设计也能做到不错的效果,比如如果大家一起拿掉Batch Normalization的话,DCGAN就崩了:
如果WGAN和原始GAN都使用多层全连接网络(MLP),不用CNN,WGAN质量会变差些,但是原始GAN不仅质量变得更差,而且还出现了collapse mode,即多样性不足:
第五部分:总结 (责任编辑:本港台直播) |