为了解决判别器的1-Lipschitz问题,WGAN使用了最直接的方式——权值裁剪,即将判别器的权值限制在某个范围[ -c , c ]内。训练判别器时,在每次迭代中,根据批量样本计算权值的梯度并更新得到新的权值,最后将超出[ -c , c ]范围的权值裁剪为 c 或 -c 。
权值修剪方法简单,计算速度快,但是也会产生一些问题。首先,它是一种粗糙、近似的解决办法,并不能严格保证1-Lipschit限制;其次,若阈值 c 选取得过大,则需要较长时间才能收敛并使判别器达到最优,且容易造成梯度爆炸;而若阈值 c 选取得过小,则容易产生梯度消失的问题;最后,根据实验观察,权值裁剪方法会促使判别器趋向于一个非常简单的函数,忽略了数据分布的高阶矩,即判别器会关注数据分布的均值、方差,而忽略偏度、峰度。无论是使用权值裁剪、L2范数裁剪还是L1、L2权重衰减方法,均会产生上述问题。
一个可导函数满足1-Lipschit限制当且仅当该函数在任意点的梯度的范数小于或等于1;再者,WGAN的判别器达到最优时,在 p g 和 p data 两个分布上, f ( x )的梯度的范数几乎处处为1。考虑到这两点,WGAN-GP [ 6 ] 在判别器的目标函数中引入正则项,使任意点梯度的范数接近1,即
其中, λ 为大于0的惩罚系数。需要说明,梯度惩罚项只是施加了“软”约束,并没有严格要求||▽ x f w ( x )|| 2 处处等于1,允许有上下轻微波动,故不严格满足1-Lipschit限制。
另外,实际训练时需要考虑如何获得惩罚项的样本。因为无法遍历全空间的所有样本使其梯度的范数接近1,所以我们通常需要利用线性插值构造惩罚项的样本,例如对一个来源于 p data 的样本 x data 和一个来源于 p g 的样本 x g ,产生一个随机数 ε ~ U [0,1],可得一个惩罚项的样本 x gp ,如图2-20所示。
图2-20 惩罚样本示意图(见彩插)