fGAN:通过f散度构造GAN.
GAN的生成器在优化时试图减小真实的数据分布\(P_{data}\)和生成分布\(P_G\)之间的KL散度。KL散度并不是唯一的选择,本文作者通过一般的f散度来构造GAN。
① f散度
一般地,$p(x)$和$q(x)$之间的f散度定义为:
\[D_f(P || Q) = \int_{x}^{} {q(x)f(\frac{p(x)}{q(x)})dx}\]其中函数$f(\cdot)$的性质:
- $f(\cdot)$是非负实数到实数的映射\(\Bbb{R}^{*} \to \Bbb{R}\);
- $f(1)=0$;对应$p(x)=q(x)$时散度为$0$;
- $f(\cdot)$是凸函数:该性质使f散度恒大于等于零(根据Jenson不等式):
当函数$f(\cdot)$选择不同时,f散度对应到不同的散度:
- KL散度:$f(x) = x \log x$
- Reverse KL散度:$f(x) = -\log x$
- $\chi^2$散度:$f(x) = (x-1)^2$
下表给出了不同的散度对应的凸函数$f(x)$:
② 凸共轭 Fenchel Conjugate
对于凸函数$f(x)$,选择任意一个点$\xi$,计算$y=f(x)$在$x=\xi$处的切线:
\[y = f(\xi) + f'(\xi)(x-\xi)\]对于凸函数,函数总在其切线上方,因此有:
\[\begin{aligned} f(x) & \geq f(\xi) + f'(\xi)(x-\xi) \\ & = f(\xi) - f'(\xi)\xi + f'(\xi)x \end{aligned}\]对于定义域内的所有点\(\xi \in \Bbb{D}\),$f(x)$可以用其所有切线簇表示:
\[f(x) = \mathop{\max}_{\xi \in \Bbb{D}} \{ f(\xi) - f'(\xi)\xi + f'(\xi)x \}\]记$t=f’(\xi)$,$f^{*}(t) = -f(\xi) + f’(\xi)\xi$,则有:
\[f(x) = \mathop{\max}_{t \in f'(\Bbb{D})} \{ xt - f^{*}(t) \}\]上式的几何意义为,对于凸函数$f(x)$,任意一点$x$处的取值为其所有切线簇在该点取值的最大值。
式中$f^{*}(t)$称为凸函数$f(x)$的共轭函数(conjugate function) ,具有如下性质:
- $f^*$也是凸函数;
- $(f^{*})^{*}=f$,因此有:
直观上,通过共轭函数$f^*(t)$给出了凸函数$f(x)$的线性近似。对于任意$x$,通过共轭函数给出$f(x)$的一个下界$xt-f^{*}(t)$,并且该下界关于$x$是线性的;通过在每一个$x$处最大化$t$才能取得$f(x)$的结果,因此该方法称为局部变分方法,$t$可以看作$x$的函数$t(x)$:
\[f(x) = \mathop{\max}_{t \in f'(\Bbb{D})} \{ xt(x) - f^{*}(t(x)) \}\]例题:KL散度的$f(x) = x\log x$对应 $f^*(t) = e^{t-1}$
求解下式:
\[f^*(t) = \mathop{\max}_{x \in \Bbb{D}} \{ xt - x\log x \}\]令\(\frac{\partial(xt-x\log x)}{\partial x}=0\)得\(t-\log x-1=0\),即\(x=e^{t-1}\),代入得:
\[f^*(t) = e^{t-1}t - e^{t-1}(t-1) = e^{t-1}\]③ f-GAN
根据f散度的计算公式:
\[D_f(P || Q) = \int_{x}^{} {q(x)f(\frac{p(x)}{q(x)})dx}\]注意到只有$p(x)$和$q(x)$的解析形式均已知时上式才能求解。在实际应用中,有些概率分布形式未知,只能通过采样获得有限的样本;比如对于生成对抗网络,将$p(x)$视为数据真实分布,$q(x)$视为生成分布,这两种分布的概率形式都是未知的。
此时可以通过共轭函数估算f散度。根据共轭函数给出的凸函数$f(x)$表达式:
\[f(x) = \mathop{\max}_{t \in f'(\Bbb{D})} \{ xt(x) - f^{*}(t(x)) \}\]f散度可以表示为:
\[\begin{aligned} D_f(P || Q)& = \int_{x}^{} {q(x)f(\frac{p(x)}{q(x)})dx} \\ &= \int_{x}^{} {q(x)(\mathop{\max}_{t \in f'(\Bbb{D})} \{ \frac{p(x)}{q(x)} t(x) - f^*(t(x)) \})dx} \\ &= \mathop{\max}_{t \in f'(\Bbb{D})}\int_{x}^{} {q(x)( \frac{p(x)}{q(x)} t(x) - f^*(t(x)) )dx} \\ &= \mathop{\max}_{t \in f'(\Bbb{D})} \int_{x}^{} p(x)t(x)- {q(x)f^*(t(x))dx} \\&= \mathop{\max}_{t \in f'(\Bbb{D})} \{ \Bbb{E}_{x\text{~}p(x)}[t(x)]- \Bbb{E}_{x\text{~}q(x)}[f^*(t(x))] \} \end{aligned}\]其中$t(x)$可以用神经网络$D(x)$拟合,相当于GAN中的“判别器”;生成分布$q(x)$是由生成器构造的。生成器的目标是减小两个分布的差异,而判别器的目标是增大两个分布的差异,两者的目标函数合并为:
\[\mathop{\min}_{G}\mathop{\max}_{D \in f'(\Bbb{D})} \{ \Bbb{E}_{x\text{~}p(x)}[D(x)]- \Bbb{E}_{x\text{~}q_G(x)}[f^*(D(x))] \}\]其中凸函数$f(x)$需自行选择。注意到选定$f$后,$t(x)$(或$D(x)$)的值域是有限制的。在实践时可以通过施加激活函数约束$D(x)$的输出范围。激活函数的选择应满足以下几点:
- 激活函数的定义域为\(\Bbb{R}\),值域为$f’(x)$的值域;
- 最好选择全局光滑的函数;如值域要求为\(\Bbb{R}^+\),则优先考虑$e^x$而不是\(\text{ReLU}(x)\);
- 选择激活函数时,应使其与$f^*(\cdot)$的复合运算比较简单。
下面列出一些凸函数对应的共轭函数及其激活函数选择:
例题:JS散度对应的目标函数
原目标函数为:
\[\mathop{\min}_{G}\mathop{\max}_{D \in f'(\Bbb{D})} \{ \Bbb{E}_{x\text{~}p(x)}[t(x)]- \Bbb{E}_{x\text{~}q(x)}[f^*(t(x))] \}\]不妨取凸函数$f(x)=-(x+1)\log \frac{1+x}{2}+x \log x$,对应JS散度。其共轭函数为$f^{*}(t)=-\log(2-\exp(t))$,此时目标函数为:
\[\Bbb{E}_{x\text{~}p(x)}[t(x)]- \Bbb{E}_{x\text{~}q(x)}[-\log(2-\exp(t(x)))]\]不妨取$D(x) = \frac{\exp(t(x))}{2}$,则上式简化为:
\[\begin{aligned} \Bbb{E}_{x\text{~}p(x)}[\log 2D(x)]- \Bbb{E}_{x\text{~}q(x)}[-\log(2-2D(x))] \\ = \Bbb{E}_{x\text{~}p(x)}[\log D(x)]+\Bbb{E}_{x\text{~}q(x)}[\log(1-D(x))] + 2\log 2 \end{aligned}\]此即标准GAN的目标函数。