GAN和散度(divergence)的联系
根据之前的定义(可以参考之前的文章:GAN(对抗生成网络)的数学原理及基本算法),discriminator采用最大似然的方法评估生成和原样本的差异性的本质是衡量两者的JS散度:
V=−2log2+2JSD(Pdata∣∣PG)但是其实衡量两个分布之间的差异性不仅仅JS散度一种方式。那么有一个问题,即是否可以使用任意散度来作为衡量呢?JS是否是最好的呢?
解决这个问题之前,先定义一个关于散度的函数Df(P∣∣Q)(不知道为什么这样定义的,他说的是定义……),其中P和Q是两个分布,随机变量X,那么P(x)、Q(x)是关于随机变量的两个分布上面的采样。Df(P∣∣Q)定义如下:Df(P∣∣Q)=x∫q(x)f(q(x)p(x))dx其中f函数是任意函数,且满足两个要求:
- f(1)=0
-
f是一个凸函数
从第一点来看,很显然,若对于所有x都有p(x)=q(x),说明两个分布无差异,那么散度为0。通过第二点,可知Df(P∣∣Q)⩾0。根据凸函数性质,有
Df(P∣∣Q)⩾f(x∫q(x)q(x)p(x)dx)=f(1)=0所以可见,当两个分布重叠的时候,散度的函数为0,其余情况都大于0。具体来看,当f(x)=xlogx,散度函数Df为KL散度;当f(x)=−logx,散度函数Df为反KL散度(reverse KL divergence);当f(x)=(x−1)2,散度函数Df为Chi Square。
定义好散度函数之后,根据凸函数性质,每个凸函数都有一个共轭函数f∗(conjugate function),其定义如下:
f∗(t)=x∈domain(f)max{xt−f(x)}举例介绍共轭函数:
f(t1)=max{x1t1−f(x1),x2t2−f(x2)…xntn−f(xn)}则f(t1)是其中最大的一个,f∗(t)的图像可以从下图的红色线直观的看出:
反过来,共轭性有:
f(x)=t∈domain(f∗)max{xt−f∗(t)}根据这个性质可以对Df进行改写:Df(P∣∣Q)=x∫q(x)(t∈domain(f∗)max{q(x)p(x)t−f∗(t)})dx这里如果带入D(x),那么有:Df(P∣∣Q)⩾x∫q(x)({q(x)p(x)D(x)−f∗(D(x))})dx=x∫p(x)D(x)dx−x∫q(x)f∗(D(x))dx=Ex∼P[D(x)]−Ex∼Q[f∗(D(x))]根据上面的公式,可以将P视作Pdata,Q视作PG,那么上式就很好解释了。discriminator的任务就是将上式最大化——辨别数据集采样样本和生成样本,衡量的具体方式根据f∗而定,用什么散度,f∗就是对应共轭;generator的任务就是寻找分布PG。
之前最大似然对应的JS散度存在两个问题:mode collapse和mode dropping。Mode collapse即,实际数据分布较为分散,但是生成数据相对集中,这样的结果是同一张图片的近似将会反复出现:
Mode dropping即实际数据分布分成多个簇,但生成只占据其中一个,这样的结果是生成,例如图像,将会缺少某一种特性,比如没有黑色头发之类的:

所以从这个角度,选择不同的散度,衡量标准不同,最终优化的结果不同——一定程度改善上述两个问题。解决的一个方法是ensemble。
参考资料:
李宏毅老师GAN讲解视频