fGAN 对GAN理论的深度理解
@Aiken 2021 onenote部分的拓展编写,到时候拷过去,整合在一起。
fGAN: 不只是JS-Div散度,我们可以将所有的散度都应用到GANs的框架中。该部分的阅读是对GAN的基本理论最重要的文章之一。
基本理论体系和推演
首先给出fGAN中提出的基本理论:可以将所有的Div放入GANs的框架中,来做那个核心的关键演化判别指标:
上述公式将衡量P和Q两个分布之间的差距,公式中的 $f$ 可以是很多不同的版本,但是要求满足如下的两个条件:
- 是一个凸函数; $f(\frac{(x1+x2)}{2})\leq \frac{[f(x1)+f(x2)]}{2}$ ,需要注意国内外的凹凸相反
- $f(1)=0$ 。
而我们知道 $q(x)$ 是概率密度分布函数,实际上可以看成凸函数性质的推广,所以我们可以证得:
显然当我们取得合适的f,KL( $f(x) = xlog(x)$ ); ReverseKL( $-log(x)$ );chi square ( $f(x) = (x-1)^2$ );
Fenchel Conjugate共轭
补充Fenchel共轭的知识来对后续的fGAN推导进行补充,定理内容如下:
每个凸函数都有一个对应的共轭函数读作 $f^*(x)$
t是给定的,对于所有的变量t, $xt-f(x)$ 对应了无数条直线:
举个例子 $f(x)=xlog(x)$ 时,我们可以将对应的 $f^*(x)$ 画出来。
实际上就是对给定的t,求 $g(x)$ 共轭方程的最大值的过程,求个导,然后就可解得 $x->t$ 然后带回就能得到共轭方程。
介绍共轭方程主要是为了和 $f(x)$ 进行转化
F-Div GAN推导
将转化方程带入,利用简单的不等式转化,我们就能将之前的F-Div转换为一个类似GAN的式子:
解释一下:第三行就是由于t是随便取值的;最后一行就是我们要求一个D使得式子最大,上界实际上就是第二行的式子。
这样我们就能推导出F-Div的变体:
对于生成器来说,我们就是要找到一个PG使得:
这样我们的推导过程就结束了,然后我们也可以使用更多的Div Function,使用不同的Div距离直接选择对应的函数就可以了。
JS Div不是最佳的Div
由于分布的数据之间是没有重合的,使用JS Div的时候就很难衡量出他的距离,Equally Bad
为什么如果两个分布完全没有重合的话,那么这两个分布的 JS Div 会是一样的?
前面有提到,JS Div 是通过判别器计算出来的,而判别器的本质是二分类器,只要 $P_G$ 与 $P_{data}$ 完全没有重合,判别器就能 100%地鉴别出 $P_G(x)$ 与 $P_{data}(x)$ 的差异,因此二者的 JS Div 就是一样的。
LSGAN最小二乘
解决的就是没有重合的问题,解决思路如下:让判别器始终都不能100%的鉴别出差异,这样就能保证在没有重合的时候也能分辨出差异程度。
当我们的D太好的时候(能将数据完全分开)这种时候生成器就优化不了了,也是Equal Bad带来的最大问题。那么如果我们将最终的激活从sigmoid换成linear激活层,这样训练出来的D就会是一个线性的直线,
这样只有当完全重合的时候D才会是一个没有梯度的直线,但是这个也并没有真正的解决这个问题,而只是绕开了这个问题。
真正解决了这个核心问题的是下面的WGAN
Wasserstein-GAN
核心思想:用Wasserstrin距离(EM距离)取代JS距离