这部分主要是数学上的推导:之前设置的目标函数度量的是生成图片和真实图片分布间的JS散度,如果使用其他散度,效果如何呢?引入概念f-divergence。

假设两个分布P和Q,GAN系列:李宏毅老师GAN课程P5——General FrameworkGAN系列:李宏毅老师GAN课程P5——General Framework分别为从中采样x的概率,则f-divergence表示为:

GAN系列:李宏毅老师GAN课程P5——General Framework,其中GAN系列:李宏毅老师GAN课程P5——General Framework是凸函数,且GAN系列:李宏毅老师GAN课程P5——General Framework。其实就是在用一个广泛的函数GAN系列:李宏毅老师GAN课程P5——General Framework定义散度。

这样f-divergence就可以衡量分布P和Q间的差别:如果for all x,GAN系列:李宏毅老师GAN课程P5——General Framework,应该取得f-divergence的最小值,此时GAN系列:李宏毅老师GAN课程P5——General Framework。而因为GAN系列:李宏毅老师GAN课程P5——General Framework是凸函数,根据其性质可得GAN系列:李宏毅老师GAN课程P5——General Framework,即0是f-divergence的最小值,表示分布P和Q之间的f-divergence至少为0,与上面推导相符。

根据不同的GAN系列:李宏毅老师GAN课程P5——General Framework,f-divergence可以具体表示不同的散度:

GAN系列:李宏毅老师GAN课程P5——General Framework

凸函数GAN系列:李宏毅老师GAN课程P5——General Framework的另一个性质:每一个GAN系列:李宏毅老师GAN课程P5——General Framework,都有一个对应的共轭函数GAN系列:李宏毅老师GAN课程P5——General Framework(注意共轭函数GAN系列:李宏毅老师GAN课程P5——General Framework转换了自变量)。对每一个自变量t,GAN系列:李宏毅老师GAN课程P5——General Framework的值为函数GAN系列:李宏毅老师GAN课程P5——General Framework自变量x所有取值下的GAN系列:李宏毅老师GAN课程P5——General Framework最大值,可以结合下图理解:

GAN系列:李宏毅老师GAN课程P5——General Framework

GAN系列:李宏毅老师GAN课程P5——General Framework时,对于不同的x取值(GAN系列:李宏毅老师GAN课程P5——General Framework),有不同的GAN系列:李宏毅老师GAN课程P5——General Framework值,取其中最大的GAN系列:李宏毅老师GAN课程P5——General Framework作为GAN系列:李宏毅老师GAN课程P5——General Framework的值;当GAN系列:李宏毅老师GAN课程P5——General Framework时,取其中最大的GAN系列:李宏毅老师GAN课程P5——General Framework作为GAN系列:李宏毅老师GAN课程P5——General Framework的值。其实这个函数就是一个包含max的分段函数,有子函数GAN系列:李宏毅老师GAN课程P5——General FrameworkGAN系列:李宏毅老师GAN课程P5——General FrameworkGAN系列:李宏毅老师GAN课程P5——General Framework等等,每一个子函数都是一条直线(因为只有一个自变量t),那么GAN系列:李宏毅老师GAN课程P5——General Framework就相当于在不同的t的阶段,取子函数的值最大的一个,相当于如下过程:

GAN系列:李宏毅老师GAN课程P5——General Framework

GAN系列:李宏毅老师GAN课程P5——General Framework就是图中红色的线,注意这是一个凸函数,因此GAN系列:李宏毅老师GAN课程P5——General Framework为凸函数时,它的共轭函数GAN系列:李宏毅老师GAN课程P5——General Framework也是一个凸函数。令GAN系列:李宏毅老师GAN课程P5——General Framework,如下图所示:

GAN系列:李宏毅老师GAN课程P5——General Framework

红色的GAN系列:李宏毅老师GAN课程P5——General Framework看起来就像一个指数函数:GAN系列:李宏毅老师GAN课程P5——General Framework,通过数学计算可以验证:

GAN系列:李宏毅老师GAN课程P5——General Framework时,GAN系列:李宏毅老师GAN课程P5——General Framework,只要求得对于每个t能让GAN系列:李宏毅老师GAN课程P5——General Framework最大的x值即可得到GAN系列:李宏毅老师GAN课程P5——General Framework的值(此时t为常数,x为变量),得到函数GAN系列:李宏毅老师GAN课程P5——General Framework,求其最大值求导即可:令GAN系列:李宏毅老师GAN课程P5——General Framework可得GAN系列:李宏毅老师GAN课程P5——General Framework,代入GAN系列:李宏毅老师GAN课程P5——General Framework可得:

GAN系列:李宏毅老师GAN课程P5——General Framework

          GAN系列:李宏毅老师GAN课程P5——General Framework

事实上,函数GAN系列:李宏毅老师GAN课程P5——General Framework的共轭函数就是GAN系列:李宏毅老师GAN课程P5——General Framework,即两者互为共轭,那么对于函数GAN系列:李宏毅老师GAN课程P5——General Framework,有:GAN系列:李宏毅老师GAN课程P5——General Framework,也就是说计算任一个凸函数GAN系列:李宏毅老师GAN课程P5——General Framework,可以用它的共轭函数来表示。联系到上文的f-divergence式子,可以得到:

GAN系列:李宏毅老师GAN课程P5——General Framework,其中函数GAN系列:李宏毅老师GAN课程P5——General Framework的自变量就是GAN系列:李宏毅老师GAN课程P5——General Framework,其中的变量GAN系列:李宏毅老师GAN课程P5——General Framework可以视为GAN系列:李宏毅老师GAN课程P5——General Framework也就是GAN系列:李宏毅老师GAN课程P5——General Framework的函数GAN系列:李宏毅老师GAN课程P5——General Framework,则有:

GAN系列:李宏毅老师GAN课程P5——General Framework,中间花括号中的GAN系列:李宏毅老师GAN课程P5——General Framework其实就是判别器的工作,找出一个t令这个式子达到最大值。那么判别器的函数可以写作GAN系列:李宏毅老师GAN课程P5——General FrameworkGAN系列:李宏毅老师GAN课程P5——General Framework就是采样点(也就是图像向量),输出的GAN系列:李宏毅老师GAN课程P5——General Framework就是判别器的得分。找到一个最佳的GAN系列:李宏毅老师GAN课程P5——General Framework使GAN系列:李宏毅老师GAN课程P5——General Framework最大,才能得到散度GAN系列:李宏毅老师GAN课程P5——General Framework。也就是说所有的GAN系列:李宏毅老师GAN课程P5——General Framework取值都只会得到一个小于散度GAN系列:李宏毅老师GAN课程P5——General Framework的值,即GAN系列:李宏毅老师GAN课程P5——General Framework

因此只有GAN系列:李宏毅老师GAN课程P5——General Framework越靠近最佳值(能令GAN系列:李宏毅老师GAN课程P5——General Framework最大的值),才能令式子GAN系列:李宏毅老师GAN课程P5——General Framework越接近f-divergence的形式,因此f-divergence可以继续转化:

GAN系列:李宏毅老师GAN课程P5——General Framework

                  GAN系列:李宏毅老师GAN课程P5——General Framework

                 GAN系列:李宏毅老师GAN课程P5——General Framework

在GAN中,两个分布P和Q就对应着GAN系列:李宏毅老师GAN课程P5——General FrameworkGAN系列:李宏毅老师GAN课程P5——General Framework,因此两者间的f-divergence为:GAN系列:李宏毅老师GAN课程P5——General Framework,也就是判别器的工作。而生成器的工作为:

GAN系列:李宏毅老师GAN课程P5——General Framework

      GAN系列:李宏毅老师GAN课程P5——General Framework

看到这里就觉得熟悉了,其实就是把目标函数V(G, D)变成了一个含有f的形式,随着f的改变,目标函数也在改变,因此在训练过程中得到的判别器和生成器也会有所不同,如下图所示:

GAN系列:李宏毅老师GAN课程P5——General Framework

下面看两个在训练GAN中可能会出现的问题:

1. Mode Collapse:真实的数据分布是比较大的(x分布在很大范围的取值内),而生成器产生的分布确很小(x分布在中间一小簇)。实验中体现为原本真实数据集是很多种动画脸,然而训练中会发现我们的生成器产生的动画脸越来越单一,某种脸出现的次数越来越多。相当于此时生成器越来越趋向于选择保险项,反复产生它觉得可以骗过判别器的脸(假如之前某一种脸判别器给了高分,那就反复产生这个脸,仅仅稍作改变,保证依然得到高分)。

GAN系列:李宏毅老师GAN课程P5——General Framework

2. Mode Dropping:这种情况下,真实数据集有多个分布,如下图蓝色点有两簇,但生成器在训练中却只会产生其中一种分布,抛弃了另一种。比如下面的人脸,真实分布是有白色的脸,黄色的脸,黑色的脸;而生成器在迭代中,一次产生白色,一次产生黄色,一次产生黑色,每次只产生了其中一种分布。

GAN系列:李宏毅老师GAN课程P5——General Framework

以上问题可能就是由目标函数中我们选择的散度带来的,不同的散度决定了不同的目标函数和训练结果,导致GAN向错误的方向变化。下图就是KL散度和Reverse KL散度带来的不同优化结果:

GAN系列:李宏毅老师GAN课程P5——General Framework

蓝色的真实数据分布有两个峰值,就对应了第二个问题中的两簇,如果选用KL散度,如左图所示,会优化得到绿色虚线,峰值在中间,从中采样则几乎得到的都是蓝色线的低谷处,效果是很差的;然而选用Reverse KL散度时,如右图所示,得到的绿色虚线集中在左边的分布上,采样只会得到真实分布中一簇的点,传统GAN中的JS散度其实就和Reverse KL散度类似,产生Mode Dropping的问题。其实选用不同的散度都会出现各种问题,有一个方法是如果真实数据中有25个大类的图片,就用25个生成器,分别产生其中一个分布的结果,然后ensemble到一起。

相关文章:

  • 2021-09-02
  • 2021-06-02
  • 2021-04-20
  • 2021-08-16
  • 2021-10-31
  • 2022-01-20
  • 2021-07-07
猜你喜欢
  • 2021-10-06
  • 2021-04-03
  • 2021-10-20
  • 2022-12-23
  • 2021-05-22
  • 2021-12-11
  • 2021-06-27
相关资源
相似解决方案