f-GAN作为GAN的变种之一,它在真实数据的分布与生成数据的分布之间DIvergence(差距)的测量方面做出了改进,即使用F-Divergence来代替,其中F的意为函数function,它可以是KL(进而构成KL散度)、JS(进而构成JS散度)、W(进而构成Wasserstein散度)等等。其通式如下:
D
f
(
P
∣
∣
Q
)
=
∫
x
q
(
x
)
f
(
p
(
x
)
q
(
x
)
)
d
x
D_f(P||Q)=\int_xq(x)f(\frac{p(x)}{q(x)})dx
Df(P∣∣Q)=∫xq(x)f(q(x)p(x))dx
并满足约束条件:
- f为凸函数;
- f(1)=0恒成立。
f-Divergence有如下性质:
- if p(x) = q(x) for all x, then D f ( P ∣ ∣ Q ) D_f(P||Q) Df(P∣∣Q)=0(最小值).
- D f ( P ∣ ∣ Q ) D_f(P||Q) Df(P∣∣Q)始终 ≥ \geq ≥ 0.
当f取不同的函数时, D f ( P ∣ ∣ Q ) D_f(P||Q) Df(P∣∣Q) 得到实例化,其中几个特例如下:
- 当f(x) = xlogx时,得KL Divergence = ∫ x p ( x ) l o g p ( x ) q ( x ) d x \int_xp(x)log\frac{p(x)}{q(x)}dx ∫xp(x)logq(x)p(x)dx
- 当f(x) = -logx时,得Reverse KL Divergence = ∫ x q ( x ) l o g q ( x ) p ( x ) d x \int_xq(x)log\frac{q(x)}{p(x)}dx ∫xq(x)logp(x)q(x)dx
- 当f(x) = ( x − 1 ) 2 (x-1)^{2} (x−1)2时,得ChiSquare Divergence = ∫ x l o g ( p ( x ) − q ( x ) ) 2 q ( x ) d x \int_xlog\frac{(p(x) - q(x))^{2}}{q(x)}dx ∫xlogq(x)(p(x)−q(x))2dx
由共轭函数推及GAN的优化目标
f
∗
(
t
)
=
m
a
x
x
∈
d
o
m
(
f
)
x
t
−
f
(
x
)
f^{*}(t)=\mathop{max}\limits_{x\in dom(f)}{xt-f(x)}
f∗(t)=x∈dom(f)maxxt−f(x), 换成用x做未知量的函数,即
f
∗
(
x
)
=
m
a
x
t
∈
d
o
m
(
f
)
x
t
−
f
(
t
)
f^{*}(x)=\mathop{max}\limits_{t\in dom(f)}{xt-f(t)}
f∗(x)=t∈dom(f)maxxt−f(t)
用
p
(
x
)
q
(
x
)
\frac{p(x)}{q(x)}
q(x)p(x)代替f(x)中的x,可得
D
f
(
P
∣
∣
Q
)
=
∫
x
q
(
x
)
f
(
p
(
x
)
q
(
x
)
)
d
x
D_f(P||Q)=\int\limits_{x}q(x)f(\frac{p(x)}{q(x)})dx
Df(P∣∣Q)=x∫q(x)f(q(x)p(x))dx
=
∫
x
q
(
x
)
(
m
a
x
t
∈
d
o
m
(
f
)
p
(
x
)
q
(
x
)
t
−
f
∗
(
t
)
)
d
x
=\int\limits_{x}{q(x)(\mathop{max}\limits_{t\in dom(f)}{\frac{p(x)}{q(x)}t-f^{*}(t)})}dx
=x∫q(x)(t∈dom(f)maxq(x)p(x)t−f∗(t))dx
再用D(x)代替t,得到:
D
f
(
P
∣
∣
Q
)
≈
m
a
x
D
∫
x
p
(
x
)
D
(
x
)
d
x
−
∫
x
q
(
x
)
f
∗
(
D
(
x
)
)
d
x
D_f(P||Q)\approx\mathop{max}\limits_{D}{\int\limits_{x}p(x)D(x)dx - \int\limits_{x}q(x)f^{*}(D(x))dx}
Df(P∣∣Q)≈Dmaxx∫p(x)D(x)dx−x∫q(x)f∗(D(x))dx
D是一个函数,它的输入是x,输出是t. 而优化的过程即找到 D f ( P ∣ ∣ Q ) D_f(P||Q) Df(P∣∣Q),找到的D使得上式越大,对应得到的t就越准确,越能逼近真实的 D f ( P ∣ ∣ Q ) D_f(P||Q) Df(P∣∣Q).
在上式中引入期望E,得到:
D
f
(
P
∣
∣
Q
)
=
m
a
x
D
∫
x
E
x
∼
P
D
(
x
)
d
x
−
∫
x
E
x
∼
Q
f
∗
(
D
(
x
)
)
d
x
D_f(P||Q)=\mathop{max}\limits_{D}{\int\limits_{x}E_{x\sim P}D(x)dx - \int\limits_{x}E_{x\sim Q}f^{*}(D(x))dx}
Df(P∣∣Q)=Dmaxx∫Ex∼PD(x)dx−x∫Ex∼Qf∗(D(x))dx
用GAN中的真实数据分布
P
d
a
t
a
P_{data}
Pdata代替分布P,生成数据分布
P
g
e
n
P_{gen}
Pgen代替Q, 得到如下:
D
f
(
P
∣
∣
Q
)
=
m
a
x
D
∫
x
E
x
∼
P
d
a
t
a
D
(
x
)
d
x
−
∫
x
E
x
∼
P
g
e
n
f
∗
(
D
(
x
)
)
d
x
D_f(P||Q)=\mathop{max}\limits_{D}{\int\limits_{x}E_{x\sim P_{data}}D(x)dx - \int\limits_{x}E_{x\sim P_{gen}}f^{*}(D(x))dx}
Df(P∣∣Q)=Dmaxx∫Ex∼PdataD(x)dx−x∫Ex∼Pgenf∗(D(x))dx,
再在前加入一个求最小约束,即得到Generator的目标函数:
G
∗
=
a
r
g
m
i
n
G
D
f
(
P
d
a
t
a
∣
∣
P
G
)
G^{*}=\mathop {argmin}\limits_{G}D_f(P_{data}||P_G)
G∗=GargminDf(Pdata∣∣PG)
=
a
r
g
m
i
n
G
m
a
x
D
∫
x
E
x
∼
P
d
a
t
a
D
(
x
)
d
x
−
∫
x
E
x
∼
P
g
e
n
f
∗
(
D
(
x
)
)
d
x
=arg\mathop {min}\limits_{G}\mathop{max}\limits_{D}{\int\limits_{x}E_{x\sim P_{data}}D(x)dx - \int\limits_{x}E_{x\sim P_{gen}}f^{*}(D(x))dx}
=argGminDmaxx∫Ex∼PdataD(x)dx−x∫Ex∼Pgenf∗(D(x))dx
=
a
r
g
m
i
n
G
m
a
x
D
V
(
G
,
D
)
=arg\mathop {min}\limits_{G}\mathop{max}\limits_{D}V(G, D)
=argGminDmaxV(G,D)
我们想让判别器将来自真实分布的数据判断为正类,将生成得到的数据判断为负类,因此需要极大化上式;同时,对于生成器来说,要想让自己生成的数据尽可能骗过判别器,即判别器给生成的数据打高分(接近正类),因此需极小化上式的第二项。其中, f ∗ f^* f∗为待定函数,当f取何种divergence,后者就计算什么。
为什么要引入f-GAN?
- 可以有效解决Mode Collapse(指生成的内容会局限于真实空间的某一个形态,无法捕捉到各种模式的信息,变得less diverse).
- 可以有效解决Mode Dropping(训练过程中,生成信息的某一维度发生改变,其他维度均保持不变的).