深度学习-李宏毅GAN学习之fGAN散度函数
散度函数
上一篇讲了GAN的数学原理,这次继续深入。
这次讲fGan,也就是将GAN的散度函数的统称,上篇将了2个散度,KL散度和JS散度,当然GAN还有其他的散度函数。
上图所示,我们可以将散度函数统一定义为上面这个公式,f()就是不同的散度函数,Df就是在f散度函数下,P,Q分布的差异。规定f是凸函数(为了用琴生不等式),
f
(
1
)
=
0
f(1)=0
f(1)=0(如果两个分布一样,刚好公式=0)。
因为f是凸函数,所以可以用琴生不等式,具体可以点进去看看介绍,其实就是我们所学的凸函数的一种泛化推广不等式,可以推广到概率上,就是函数的期望>=期望的函数,
E
(
f
(
x
)
)
≥
f
(
E
(
x
)
)
E(f(x))≥f(E(x))
E(f(x))≥f(E(x)),具体有兴趣可以找资料看看怎么推导的。因此就有如下推导
可以看出,散度是个非负数,最小就是0。
我们看看上次我们讲的一些散度函数:
就是我们的KL散度。
Reverse KL散度
好像叫卡方散度
共轭函数(Fenchel Conjugate)
每一个散度函数都有对应的共轭函数,定义为:
对于每个t都可以找到一个x,使得
x
t
−
f
(
x
)
xt−f(x)
xt−f(x)最大,比如找t1,t2,两个点,x取x1,x2,x3,可以看到:
y
(
t
)
=
x
t
−
f
(
x
)
y(t)=xt−f(x)
y(t)=xt−f(x)可以看做是t的函数,是条线,t是任意的,因此可以画出很多条线,每个t总会找到一个对应的最大y值和对应的x,可以猜到这样的点连起来应该是个凸函数:
我们拿
f
(
x
)
=
x
l
o
g
x
f(x)=xlogx
f(x)=xlogx来说,当x=10,1, 0.1时可以看到相应的函数直线,可以看到最大化y的点连起来是个凸函数,很类似
e
t
−
1
e^{t-1}
et−1.
e
t
−
1
e^{t-1}
et−1公式图像:
用数学来推一下:
将
f
(
x
)
=
x
l
o
g
x
f(x)=xlogx
f(x)=xlogx 代入
y
(
t
)
=
x
t
−
f
(
x
)
y(t)=xt−f(x)
y(t)=xt−f(x),得
y
(
x
)
=
x
t
−
x
l
o
g
x
y(x)=xt-xlogx
y(x)=xt−xlogx,对于每个给定的t都可以求出最大值,求导=0即可。
求导后得:
t
−
l
o
g
x
−
1
=
0
t-logx-1=0
t−logx−1=0,即x=
e
t
−
1
e^{t-1}
et−1,代入
f
∗
(
t
)
f^*(t)
f∗(t),得
f
∗
(
t
)
=
t
e
t
−
1
−
e
t
−
1
(
t
−
1
)
=
e
t
−
1
f^*(t)=te^{t-1}-e^{t-1}(t-1)=e^{t-1}
f∗(t)=tet−1−et−1(t−1)=et−1,
同样可求得
(
f
∗
(
t
)
)
∗
=
f
(
x
)
(f^*(t))^*=f(x)
(f∗(t))∗=f(x),从而问发现这样的关系,貌似有点像矩阵求2次逆又回来了。
那这个跟GAN有啥关系呢
可以看到,我们的散度里的f(x)可以用上面求max的来表示,我们可以训练个D(x),输入x输出t,从而替换进公式,最后可得
然后可以化为期望:
我们的目标G:
可以看到,散度最后跟
f
∗
f^*
f∗是相关的,我们想用上面散度,只要换这个就行。
附上一张散度函数相关的图:
写了那么多,主要就是一个思想,不同的散度函数都可与GAN,会产生不同的效果。
一些问题
Mode Collapse
这个主要是说,我们的真实数据集是分散的,但是生成的可能比较集中,从二次元头实验可以看到,好多头像很类似,就是这个问题。
Mode Dropping
训练了几次,生成的居然是一样的,只是变了一点颜色。
出现以上问题可能是因为散度函数没选好。
不同散度函数,学到的分布是不一样的,第一个看起来比较平滑,因此可能生成的图像比较模糊,第二个生分布比较集中,就可能出现Mode Collapse和Mode Dropping问题,所以如果发现生成效果不好,那就可以更换散度函数来进行优化。
总结
写了那么多,自己都要弄晕了,其实那么多推导,就是为了说明一个,我们所衡量的散度是可以根据散度函数更换的,可以根据不同的散度函数特性来优化生成器。
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。