
2.1.3 GAN的本质
为了深入探究GAN的本质,我们对其进行理论上的分析。首先,在每次迭代的过程中,我们都可以计算出最优判别器D*,只需令目标函数的一阶导数为0,可得

具体证明过程如下所示。
首先,我们对目标函数中的项进行变换:

则判别器的目标函数变为:

使其一阶导数为0,则

当判别器达到最优时,生成器的目标函数为:

可改写为:

具体的计算步骤为:


JS散度是一种度量两个概率分布之间的差异的常用方式。为了加深理解,我们对JS散度稍作解释。我们非常熟悉这样一件事:在一个二维平面上,每个点便是一个元素,点与点之间的距离即欧氏距离,可通过勾股定理计算,如(3,0)与(1,0)的距离肯定要比(0,1)与(1,0)的距离大。其实元素是一个抽象的概念,平面上的点可视为元素,矩阵、多项式、函数也均可视为元素,类似刚才的例子,若将每一个概率分布p(x)也视为一个元素(如图2-5所示),则概率分布之间的距离可使用JS散度计算,有


图2-5 JS散度解释
相应地,JS散度越小,表示两个概率分布越相似;JS散度越大,表示两个概率分布差异越多;两个分布完全相同时,JS散度为0。对于图2-5中的例子,计算可知JS(p1(x)|| p2(x))>JS(p2(x)||p3(x))。
可以看出,GAN本质上是先通过训练判别器得到pdata和pg的JS散度,然后训练生成器使JS散度达到最小,当JS散度为0时,生成器达到全局最优,即pdata=pg。理论上也可以证明,当生成器和判别器具有足够的容量,并且在给定生成器时,如果判别器能够达到最优解,则GAN可以实现全局最优,当然这在实践中几乎是不可能的。
另外,对于生成器的非饱和形式目标函数,同样在最优判别器D*的条件下,目标函数变为:

具体的计算步骤:

可以看出这里存在理论上的矛盾,即非饱和形式的生成器在最小化KL散度的同时也在最大化JS散度,这是两个方向相反的优化方向,但从实际效果上看,它确实在一定程度上避免了训练梯度饱和的问题。