相对于原始GAN的改进点:
- 解决GAN训练不稳定的问题,不再需要小心平衡生成器和判别器的训练程度
- 基本解决了模式坍塌(collapse mode)的问题,确保了生成样本的多样性
- 训练过程中可以使用WGAN判别器loss函数的值来判断训练效果(近似Wasserstein距离的相反数),这个数值越小代表GAN训练得越好,代表生成器产生的图像质量越高
- 只需要将原始GAN的算法流程改进四点就可以实现以上效果
原始GAN的缺点
对于原始GAN中生成器G的第一种损失函数,由Theory 1./2. 证明其不足.
对于原始GAN中G的第二种损失函数,由Theory 3. 证明其不足.
Theory 1.两个不重叠分布的JS散度=log2
首先回顾一下GAN的价值函数V(G,D),因为第一项和G无关,所以最小化V(G,D)等效于最小化我们刚刚提到的
在GAN中证明过:固定G的参数时,最优的D为
将
由此我们可以得到以下结论:*根据原始GAN定义的判别器loss,我们可以得到最优判别器的形式$D_G^
上述理论也很好解释,因为我们最终希望G可以生成以假乱真的图片,即尽可能将
首先考虑两个概率分布基本不重叠的情况(实际上
根据KL散度的定义继续替换(
化简到这个式子,可以看出来前两项就是0了.因为对于任意x,p和q就四种情况:
- p(x)=0,q(x)=0.显然前两项为0
- p(x)!=0,q(x)!=0.根据假设,两个分布基本不存在重叠,因而log项里面可以认为是1.(例如p(x)足够大时,可以认为p(x)+q(x)≈p(x))所以前两项值为0.
- p(x)=0,q(x)!=0.第一项为0,第二项log中的值为1,故同样都是0.
- q(x)=0,p(x)!=0.同上
因此在两个分布基本没有重叠时,他们的JS散度就是常数
Theory 2. 和 的不重叠概率
那么
- 支撑集(support)其实就是函数的非零部分子集,比如ReLU函数的支撑集就是(0,+∞),一个概率分布的支撑集就是所有概率密度非零部分的集合
- 流形(manifold)是高维空间中曲线、曲面概念的拓广,我们可以在低维上直观理解这个概念,比如我们说三维空间中的一个曲面是一个二维流形,因为它的本质维度(intrinsic dimension)只有2,一个点在这个二维流形上移动只有两个方向的自由度。同理,三维空间或者二维空间中的一条曲线都是一个一维流形。(所以可以理解成高维空间中某个形状上的自由度?)
- 测度(measure)是高维空间中长度、面积、体积概念的拓广,可以理解为“超体积”
对于“当
那么当
综上,我们可以做以下总结:
与 之间几乎不可能有不可忽略的重叠,所以无论它们之间的“缝隙”多狭小,都肯定存在一个最优分割曲面把它们隔开,最多就是在那些可忽略的重叠处隔不开而已。- 由于判别器作为一个神经网络可以无限拟合这个分隔曲面,所以存在一个最优判别器,对几乎所有真实样本给出概率1,对几乎所有生成样本给出概率0,而那些隔不开的部分就是难以被最优判别器分类的样本,但是它们的测度为0,可忽略。
- 最优判别器情况下,生成器G的loss值为常数,造成梯度为0或梯度消失的情况。
有了以上理论分析,可以解释GAN训练不稳定的原因:如果判别器D训练得太好,生成器G梯度消失,G无法继续训练;D训练得不好,G梯度不准,无法收敛。只有D训练得不好不坏才行,但是这个火候又很难把握,甚至在同一轮训练的前后不同阶段这个火候都可能不一样,所以GAN才那么难训练.
以下图例测试了G梯度消失的现象.先分别将DCGAN训练1,20,25个epoch,然后固定G不动,判别器重新随机初始化从头开始训练,根据
Theory 3. 的矛盾之处
我们刚刚推得在
我们发现
从而得到
其中后两项与G无关,所以最小化上式意味着最小化前两项
这个等价的最小化目标代表它同时要最小化生成分布与真实分布的KL散度,却又要最大化两者的JS散度,这是前后矛盾的.其次,KL散度是不对称的,这也导致了模式坍塌的问题.(详见令人拍案叫绝的Wasserstein GAN - 知乎 (zhihu.com))
下图测试了G使用
总结
在原始GAN的(近似)最优判别器
WGAN的解决方案
Plan 1. Epsilon
方案1思想比较简单,即对生成样本和真实样本加噪声.直观上说,加完噪声后使得原本的两个低维流形“弥散”到整个高维空间,强行让它们产生不可忽略的重叠。而一旦存在重叠,JS散度就能真正发挥作用,此时如果两个分布越靠近,它们“弥散”出来的部分重叠得越多,JS散度也会越小而不会一直是一个常数,于是(在第一种原始GAN形式下)梯度消失的问题就解决了。在训练过程中,可以对所加的噪声进行退火(annealing),慢慢减小其方差,到后面两个低维流形“本体”都已经有重叠时,就算把噪声完全拿掉,JS散度也能照样发挥作用,继续产生有意义的梯度把两个低维流形拉近,直到它们接近完全重合。
在这个解决方案下可以放心地把D训练到接近最优,不必担心梯度消失的问题。而当判别器最优时,D的损失函数可以表示为
按照此式我们可以反推出两个分布的JS散度,从而得到两个分布的距离度量----------可惜答案是不行,因为每次训练
Plan 2. Earth-Mover
方案2也是WGAN最后的解决方案.它将JS散度替换成了Earth-Mover(EM)距离.
解释如下:是
Wasserstein距离相比KL散度、JS散度的优越性在于,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的远近。
考虑如下二维空间中的两个分布
可以得到
KL散度和JS散度是突变的,要么最大要么最小,Wasserstein距离却是平滑的,如果我们要用梯度下降法优化
接下来将Wasserstein距离应用到生成器G的损失函数中,因为
其中的K是某个常数,
Lipschitz常数是指:一个连续函数f如果存在一个常数K使定义域内的任意两个元素x1,x2都满足
对于函数
综上,我们可以构造一个含参数
尽可能取到最大,此时L就会近似真实分布与生成分布之间的Wasserstein距离(忽略常数倍数K).
注意原始GAN的判别器做的是真假二分类任务,所以最后一层是sigmoid,但是现在WGAN中的D(
)做的是近似拟合Wasserstein距离,属于回归任务,所以要把最后一层的sigmoid拿掉。
接下来生成器要近似地最小化Wasserstein距离,可以最小化L,由于Wasserstein距离的优良性质,我们不需要担心生成器梯度消失的问题。再考虑到L的第一项与G无关,就可以得到了WGAN中G和D的Loss
最后贴一个算法流程,使用的优化器是RMSProp
总结
至此,我们终于可以总结WGAN算法和GAN算法的4点不同了.
- 判别器最后一层去掉sigmoid(从二分类->回归)
- 生成器和判别器的loss不取
(EM距离) - 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c(使D满足Lipschitz连续)
- 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp/SGD(经验所谈)
评论
写的很好 下次不要再写了
赫赫