Paper Reading Note
URL:
TL;DR
17年初提出的针对于原始GAN问题本质上的改进,现在已经成为主流GAN的base-model。
作者花了两篇文章的篇幅,从证明到改进论述了原始GAN的两个重要问题:
- 【梯度消失】,即不需要再小心地平衡生成器和判别器之间的gap。
- 【模型崩塌】,原始模型优化KL散度导致的不对称会让生成器倾向于生成单一而安全的样本而放弃多样性。
Algorithm
作者在这里给出了详细的论述:
原始GAN的损失函数:
实际上这种损失函数经过变形等价为:
实际上就是原始数据的分布和生成数据的分布的js散度。而由于在大部分情况下二者在高维空间里几乎不可能有不可忽略的重叠,导致js散度的梯度几乎都等于常数。这也是原始的GAN在训练过程中常常会出现梯度消失最本质的问题。
WGAN[1]分析了问题后提出了一种“增加随机噪声”的方法,让二者的低维流形能够弥散到高维空间中,从而产生不可忽略的重叠,然后在训练的过程中逐渐退火(减小噪声方差),直到两个低维流形重叠部分可以控制就完全拿掉,这样就可以从本质上解决梯度消失的问题。但是这种方法也带来了新的问题:由于在训练不同时期引入方差不同的随机噪声,JS散度的具体数值也会发生改变而变得无法比较,这样使得模型无法准确的训练。
而对于GAN作者后来提出的对损失函数的改进方法:
同样也存在问题。改损失函数可以等价为:
这个函数存在两个很严重的问题:
- 既要最小化生成数据分布和原始数据分布直接的KL散度,同时要拉大二者的JS散度,这本身就存在矛盾。
- KL散度本身是一个不对称项:
这就会导致在“生成器没能产生真实样本”的惩罚远小于“生成器产生了不真实的样本”的惩罚。从而使得模型偏向于生成一些风险较小的sample,这就会造成model collapse。
WGAN用到的是Wasserstein距离(Earth-Move距离):
该变化本质是放弃了对两个分布总体距离(KL散度、JS散度等)的计算,而变成的对分布上的点采样计算距离的方式,这种方法的好处就是能够在两个分布不存在不可忽略的重叠时也能够有梯度。
在WGAN中,它被转换成了该种形式:
这种转化有一个限制,即f需要满足Lipschitz连续,即需要满足
时上式等价。
作者首先提出的方法是在每一次w更新时限制其范围,即超过[-c, c]时将其clip到-c/c。但是这种方法在实际训练中参数会变得很极端:
这样判别器会倾向于变成一个简单的映射函数,使得模型欠拟合。于是在此基础上,提出了一种gradient penalty的限制方法Improved Training of Wasserstein GANs,即将该限制变成样本空间处于真实数据和生成数据之间的损失函数:
其中
使用后参数的分布情况更加科学(右图):
实验证明这种方法能够解决WGAN-clipping的收敛过慢的问题。
Thoughts
这篇文章是GAN发展过程中一篇比较有里程碑意义研究文章。现在大部分GAN的衍生模型都是将WGAN-gp作为base-model。