GAN实质上是先学习训练数据集 p data 和生成数据集 p g 两个概率分布之间的距离的度量——JS散度,再训练生成器使距离度量达到最小,最终实现 p data = p g 。GAN不仅可以选择使用JS散度作为两个概率分布之间的距离的度量,也可以使用KL散度、总变分距离、Wasserstein距离等作为度量,只要其能合理度量分布的距离即可。其中,一部分距离度量均被包含在f散度的框架中。
在fGAN中 [ 3 ] ,定义f散度(f-divergence)表达式为:
在此框架下,我们可以选择不同的 f ( x )得到相应的不同度量,其中要求 f ( x )为从正实数到实数的映射, f (1)=0,且 f ( x )为凸函数,当两个分布完全重合时,f散度的数值达到最小值,即0。例如要得到JS散度,则使
即可,其中, u = p data ( x )/ p g ( x )。其他度量与 f ( u )的对应关系如表2-1所示。由于不知道训练数据集 p data 和生成数据集 p g 的表达式(或近似表达式),所以无法直接计算f散度。可以根据训练数据集{ x (1) , x (2) ,…, x ( N ) }和生成器生成的样本集 },再利用共轭函数,通过训练一个神经网络 T ( x )得到f散度估计值。
表2-1 各种度量及对应的表达式
定义函数 f ( u )的共轭函数 g ( t )为:
其中 u 的定义域表示为dom f ,且可证明 g ( t )为凸函数。我们可以得到f散度的表达式:
其中, T ( x )为任意函数。证明过程如下,根据共轭函数的定义,有:
f散度的表达式为:
进一步,根据詹森不等式,可获得其下界:
其中,T表示函数族,包括所有输入为样本 x 而输出为实数值的函数。对于所有 T ( t )∈T,将其代入式(2.36)后得到的值均小于或等于 D f ( p data || p g )。理论上,对于任意的 u ,存在最优的 T * 使等号成立,即
故对于任意 x ,也有最优的 T * ( x )与之对应,两者具有复杂的解析关系。我们使用参数化的神经网络来拟合该关系,这样,我们就把求解f散度下界的最大值的过程转换成了神经网络的训练过程,有:
另外,根据式(2.37),我们需要限定神经网络 T ( x )的输出,使其保持在 f ( u )的一阶导数的值域内。
共轭函数 g ( t )的表达式由 f ( u )决定,并且其对 T ( x )的值域有一些限制。例如选择逆KL散度作为度量时, f ( u )=-log u ,可计算得 g ( t )=-1-log( -t ),且 T ( x )的值域被限制为(-∞,0),此时相应设置 T ( x )的激活函数为-e x 即可。选择其他度量的操作与此类似,总结如表2-2所示。
表2-2 各种度量的形式
至此,判别器 T ( x )(我们仍使用判别器的名称,但其实它已经不再具备直观的分辨真伪的功能,而是一个具有特定激活函数的神经网络)的目标函数为:
生成器 G ( z )的训练目标自然是要将学得的f散度最小化,故目标函数为:
fGAN与原始GAN的原理是一样的,都是先学习分布之间的距离,再以距离为目标函数训练生成器,只是fGAN的泛化性更强,可以选择不同的度量从而衍生出不同的GAN,许多GAN其实都与fGAN有本质的联系。例如,在某些特定条件下,LSGAN的生成器目标函数等价于Pearson χ 2 散度,EBGAN的生成器目标函数等价于总变分距离。