0%

Generative Adversarial Nets

一个生成模型G:学习到数据分布,使得D犯错概率最大
一个判别模型D:判别一个样本是来自真实数据还是G
存在一个特解,使得G可以涵盖住真实训练数据分布,D的判别概率始终是\(\frac{1}{2}\)
对于MLP定义的G和D,可以使用反向传播训练整个系统,而不需要使用任何的马尔科夫链或者是展开的近似推理网络。

导论

迄今为止,大多数深度学习伟大的成功都是在判别模型上,将高维复杂的输入映射到一个类别标签。
而生成模型则有着很多的困难,如很难在极大似然估计和相关策略中进行概率计算,并且生成模型的上下文中难以利用分层线性单元的优势。

本文提出了一个新的规避了这些困难的生成模型。

GAN框架能够给很多模型和优化问题提供一种训练方法。

对抗网络

为了从数据 \(x\) 上学习到生成器的分布 \(p_g\) ,我们先给定一个先验输入噪声 \(p_z(z)\)
然后利用 \(G(z;\theta_g)\) 将z映射到数据空间,其中G是一个多层感知机。
再定义一个 \(D(x;\theta_d)\) :计算x来自真实数据而不是生成器生成的分布\(p_g\)的概率。

训练D以最大化分类正确率,并且同时训练G以最小化\(\log(1-D(G(z)))\)

最终的评估函数:

\[ \min _{G} \max _{D} V(D, G)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))] \tag{1} \]

训练过程中,不会在一次训练循环里直接完成D的优化,那在有限数据集里会导致过拟合。因此,我们会在优化K次D和优化1次G中交替进行。只要G变化的足够缓慢,这将有助于保持D在它最优解的附近。

这个策略类似于SML/PCD[2]中,为了避免样本在马尔科夫链中学习迭代时burning的方式。,

实际上,公式(1)可能不能给G提供足够的梯度以供学习。在训练的初期,G效果很差,D可以轻易的分辨出数据的真假。此时 \(\log(1-D(G(z)))\) 变得饱和:即接近极限了已经,变化很小。相比于训练G以最小化 \(\log(1-D(G(z)))\) ,我们可以训练G以最大化\(\log(D(G(z)))\) ,这个目标函数可以有相同的结果但是有更好的梯度。

GAN示意图:蓝线为判别器的认为的概率分布,黑点为真实数据的分布,绿线为生成器的分布。x线为真实数据域,z线为生成器采样数据域。箭头为z通过G映射到x。(b) 训练D后,D逼近真实数据分布。(c) 更新G,D的梯度引导G向真实分布靠近。(d) 足够训练的情况下,学习到的分布完全和训练分布一致,D(x)=0.5

理论

生成器G隐式地定义了一个概率分布 \(p_g = G(z)\)——即从 \(z \sim p_z\) 中的采样结果。因此,我们希望训练算法在充分的环境下,可以最终收敛出一个不错的估计器来估计 \(p_{data}\)

接下来会证明这个minimax过程对于 $p_g = p_{data} $ 有一个全局最优解。然后会证明公式(1)可以通过训练算法来获得最优解。

训练算法

GAN的小批量随机梯度下降训练。
K:超参数,表明在判别器D上经过的step。

for number of training iterations do

  • for \(k\) steps do

    1. 从先验噪声 \(p_{g}(z)\) 中采样出m大小的小批量样本 \(\left\{z^{(1)}, \ldots, z^(m)\right\}\)
    1. 从真实数据分布 \(p_{\text {data }}(\boldsymbol{x})\) 中采样出m大小的小批量样本 \(\left\{\boldsymbol{x}^{(1)}, \ldots, \boldsymbol{x}^{(m)}\right\}\)
    1. 通过随机梯度下降更新判别器D:

\[ \nabla_{\theta_{d}} \frac{1}{m} \sum_{i=1}^{m}\left[\log D\left(\boldsymbol{x}^{(i)}\right)+\log \left(1-D\left(G\left(z^{(i)}\right)\right)\right)\right] \]

  • end \(k\) for

  • 从先验噪声 \(p_{g}(z)\) 中采样出m大小的小批量样本 \(\left\{z^{(1)}, \ldots, z^(m)\right\}\)

  • 通过随机梯度下降更新生成器G:

\[ \nabla_{\theta_{g}} \frac{1}{m} \sum_{i=1}^{m} \log \left(1-D\left(G\left(z^{(i)}\right)\right)\right) \]

end train iterations for

证明 \(p_g = p_{data}\) 的全局最优解

首先证明:固定G时,D的最优解为

\[ D_{G}^{*}(x)=\frac{p_{\text {data }}(x)}{p_{\text {data }}(x)+p_{g}(x)} \]

给定任何G,D,训练目标都是最大化 \(V(G, D)\)

\[ \begin{aligned} V(G, D) &=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))] \\ 期望展开&=\int_{\boldsymbol{x}} p_{\text {data }}(\boldsymbol{x}) \log (D(\boldsymbol{x})) d x+\int_{\boldsymbol{z}} p_{\boldsymbol{z}}(\boldsymbol{z}) \log (1-D(g(\boldsymbol{z}))) d z \\ 换元z到x&=\int_{\boldsymbol{x}} p_{\text {data }}(\boldsymbol{x}) \log (D(\boldsymbol{x}))+p_{g}(\boldsymbol{x}) \log (1-D(\boldsymbol{x})) d x \end{aligned} \]

求积分最大值可以转化为求被积函数最大值:

\[ \begin{aligned} V(G,D)&=\int_{\boldsymbol{x}} p_{\text {data }}(\boldsymbol{x}) \log (D(\boldsymbol{x}))+p_{g}(\boldsymbol{x}) \log (1-D(\boldsymbol{x})) d x \\ &\leq \int_{\boldsymbol{x}} \max _{y} p_{\text {data }}(\boldsymbol{x}) \log (y))+p_{g}(\boldsymbol{x}) \log (1-y) d x \end{aligned} \]

并且因为固定G求D的最优,因此不涉及D的都可看作常数项即:

\[ \begin{aligned} f(D(x)) &= p_{\text {data }}(\boldsymbol{x}) \log (D(\boldsymbol{x}))+p_{g}(\boldsymbol{x}) \log (1-D(\boldsymbol{x})) \\ &= a \log D + b \log (1-D) \\ 即 f(y) &= a \log y + b \log (1-y) \end{aligned} \]

其中 $ a,b (0,1) $ 。为了求最优解,对该式计算 \(y\) 的一阶导可得 \(y=\frac{a}{a+b}\),继续求该位置的二阶导可得:

\[ f^{\prime \prime}\left(\frac{a}{a+b}\right)=-\frac{a}{\left(\frac{a}{a+b}\right)^{2}}-\frac{b}{1-\left(\frac{a}{a+b}\right)^{2}}<0 \]

因此最优D为:

\[ \begin{aligned} D_{G}^{*}(x)&=\frac{p_{\text {data }}(x)}{p_{\text {data }}(x)+p_{g}(x)} \\ P_G=P_{data}时,&= \frac{1}{2} \end{aligned} \]

定理1:\(C(G)\) 当且仅当 \(p_g = p_{data}\) 时取得全局最小值 -log4

证明:

结合公式(1)和$ D $的最优解,可知 $ C(G) $ 有如下表达式 :

$$ \[\begin{aligned} C(G)&=\int_{x} p_{\text {data }}(x) \log \left(\frac{p_{\text {data }}(x)}{p_{G}(x)+p_{\text {data }}(x)}\right)+p_{G}(x) \log \left(\frac{p_{G}(x)}{p_{G}(x)+p_{\text {data }}(x)}\right) \mathrm{d} x \\ p_g = p_{data} 时 , C(G) &=- log 4 \end{aligned}\]

$$

为了检查这个 -log4 是不是最优值,构造方程:

$$ \[\begin{aligned} C(G) &=\int_{x}(\log 2-\log 2) p_{\text {data }}(x)+p_{\text {data }}(x) \log \left(\frac{p_{\text {data }}(x)}{p_{G}(x)+p_{\text {data }}(x)}\right) \\ &+(\log 2-\log 2) p_{G}(x)+p_{G}(x) \log \left(\frac{p_{G}(x)}{p_{G}(x)+p_{\text {data }}(x)}\right) \mathrm{d} x \\ \\ &=-\log 2 \int_{x} p_{G}(x)+p_{data}(x) \mathrm{d} x +\int_{x} p_{data}(x)\left(\log 2+\log \left(\frac{p_{data}(x)}{p_{G}(x)+p_{\text {data }}(x)}\right)\right) \\ &+p_{G}(x)\left(\log 2+\log \left(\frac{p_{G}(x)}{p_{G}(x)+p_{data}(x)}\right)\right) \mathrm{d} x \\ \\ C(G)&=-\log 4+\int_{x} p_{\text {data }}(x) \log \left(\frac{p_{\text {data }}(x)}{\left(p_{G}(x)+p_{\text {data }}(x)\right) / 2}\right) \mathrm{d} x \\ &+\int_{x} p_{G}(x) \log \left(\frac{p_{G}(x)}{\left(p_{G}(x)+p_{\text {data }}(x)\right) / 2}\right) \mathrm{d} x \end{aligned}\]

$$

后面两个积分式即是KL散度(一种衡量分布差异的方法):

KL散度为非负值,具有非对称性,且KL散度为0当且仅当两个离散分布处处相同。

\[ D_{\mathrm{KL}}(P \| Q)=\mathbb{E}_{\mathrm{x} \sim P}\left[\log \frac{P(x)}{Q(x)}\right]=\mathbb{E}_{\mathrm{x} \sim P}[\log P(x)-\log Q(x)] \]

\[ C(G)=-\log 4+K L\left(p_{\text {data }} \mid \frac{p_{\text {data }}+p_{G}}{2}\right)+K L\left(p_{G} \mid \frac{p_{\text {data }}+p_{G}}{2}\right) \]

由于KL散度的非负性质,我们可以得到-log4即为\(C(G)\)的全局最小值。进一步需要证明 \(p_G=p_{data}\) 是取值的唯一点。

因为KL散度是非对称的,因此构造两个相反的KL散度相加,它们的和就是对称项,即可以表示为JS散度:

\[ JSD(P \| Q) = \frac{1}{2}KL(P \|(P+Q)/2) +\frac{1}{2}KL(Q \|(P+Q)/2) \]

因此 \(C(G)\) 可表示为:

\[ C(G)=-\log 4 +2 JSD(p_{data}|p_G) \]

根据JS散度非负,且只有 $p_G=p_{data} 时 , JSD=0 $。 综上所述,得证。

实验效果

MINIST
TFD
CIFAR-10 全连接
CIFAR-10 卷积D和逆卷积G

优缺点

缺点:

  1. \(p_g (x)\) 没有显式的表达。
  2. G不能在更新D之前训练过多,要不然会发生模型崩溃问题。

模型崩溃Mode collapse 是指 GAN 生成的样本单一。当G发现一种样本可以欺骗到D时,就只会生成那一种mode的样本。判别网络最后会判别来自该 mode 的样本是假的。最后,生成网络 G 会简单地锁定到另一个 mode。该循环会无限进行,就会限制生成样本的多样性

优点:

  1. 只需要反向传播,不需要马尔科夫链,不需要推理网络
  2. 多种多样的模型可以结合在GAN的框架中。
  3. 不会直接使用真实数据样本去更新G,而是只能通过判别器的梯度引导。换句话说,生成器不会直接copy原始输入。

Other

为什么要distribution?
为了同样的输入能够产生不同的输出

JS散度的问题?
如果两个分布完全不重叠,JS散度值始终是 log 2,改进有Wasserstein distance...

参考文献

[1]Goodfellow I, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[J]. Advances in neural information processing systems, 2014, 27.

[2]Younes, L. (1999). On the convergence of Markovian stochastic algorithms with rapidly decreasing ergodicity rates. Stochastics and Stochastic Reports, 65(3), 177–228.

[3]GAN完整理论推导与实现, 机器之心, https://www.jiqizhixin.com/articles/2017-10-1-1