2014-NIPS-Generative Adversarial Nets

1. 摘要

这篇文章[1]主要提出了一种新的估计生成模型的方法:即同时训练两个模型 GGDD,其中生成模型 GG 用来捕获数据分布,鉴别模型 DD 用来估计样本是来自于真实数据还是由生成模型产生的概率(也即尽可能区分开真实样本和 GG 生成的样本)。训练 GG 是通过最大化 DD 犯错的概率来进行优化的,而训练 DD 则是通过最小化样本分类损失来进行优化的。以博弈论的角度来看,作者提出的这个 GAN 框架相当于就是一个 minimax 双人博弈的游戏。同时,作者证明了,在假定的函数空间中,GAN 框架存在一个唯一的解,使得 GG 学习到真实的数据分布,从而产生和给定样本一样的样本,DD 则无法分辨真实样本和 GG 产生的样本,即对于这个二分类给出的概率总是 12\frac{1}{2}

2. 动机

以往很多工作,都是尝试通过神经网络去直接学习出原始数据分布,比如首先假设数据分布模型,然后通过最大似估计来求得这个模型的具体参数。然而真实数据分布往往都很复杂,很难直接求得真实数据的分布。近些年,以 VAE 为代表的一类方法,退而求其次,直接学习构建一个能拟合数据的近似分布,GAN 也是这样,不过更简单粗暴。作者发现了下面一个公式,这也是对 GAN 在反向传播时计算梯度的依据:

limσ0xEϵN(0,σ2I)f(x+ϵ)=xf(x)(1)\lim _{\sigma \rightarrow 0} \nabla_{\boldsymbol{x}} \mathbb{E}_{\epsilon \sim \mathcal{N}\left(0, \sigma^{2} \boldsymbol{I}\right)} f(\boldsymbol{x}+\epsilon)=\nabla_{\boldsymbol{x}} f(\boldsymbol{x}) \tag{1}

3. 方法

对于生成器,设生成器在数据 x\boldsymbol{x} 上学习到的分布为 pgp_g,输入噪声变量采样于分布 pz(z)p_{\boldsymbol{z}}(\boldsymbol{z}),生成器将采样噪声 z\boldsymbol{z} 通过变换 G(z;θg)G(\boldsymbol{z}; \theta_g) 变换到目标数据空间,θg\theta_g 为参数;对于辨别器,设辨别器使用函数 D(x;θd)D(\boldsymbol{x}; \theta_d) 计算数据 x\boldsymbol{x} 来自真实数据分布而不是 pgp_g 的概率。训练这样一个模型本质上是优化一个 minimax 价值函数,如下所示:

minGmaxDV(D,G)=Expdata (x)[logD(x)]+Ezpz(z)[log(1D(G(z)))](2)\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{2}

  • 训练辨别器 DD 时,最大化式 (2)(2),此时会使用真实数据和 pgp_g 生成的数据进行训练。当 DD 达到完美时,式 (2)(2) 中的两项都是 log1=0\log{1} = 0,否则就是一个负数,因此需要最大化式 (2)(2) 来优化 DD

  • 训练生成器 GG 时,最小化式 (2)(2),此时式 (2)(2) 的第一项相对于 GG 是常数,因此只需要最化化第二项。当 GG 达到完美时,(2)(2) 中的第二项为 log0\log{0},即 -\infty,因此需要最小化式 (1)(1) 来优化 GG

    不过作者在实际中发现,最大化式 (2)(2) 中的第二项并不能很好地优化 GG。于是作者建议在优化 GG 的时候可以把最小化式 (2)(2) 换成最大化 Ezpz(z)[logD(G(z))]\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log D(G(\boldsymbol{z}))]

作者给出的具体算法实现如下:

4. 证明

作者文章中的理论部分主要包含两块:

  • 证明 GAN 在上述给定的算法下能求得最优解;
  • 证明上述给定的算法能够收敛。

4.1 生成器的收敛性

命题 1:当 GG 固定时,最优的辨别器由如下公式给出:

DG(x)=pdata(x)pdata(x)+pg(x)(3)D^*_G(\boldsymbol{x}) = \frac{p_{data}(\boldsymbol{x})}{p_{data}(\boldsymbol{x}) + p_g(\boldsymbol{x})} \tag{3}

证明:根据前面的训练算法,给定任一生成器 GG,训练辨别器 DD 是通过最大化价值函数 V(G,D)V(G, D) 来实现的:

V(G,D)=xpdata (x)log(D(x))dx+zpz(z)log(1D(g(z)))dz=xpdata (x)log(D(x))+pg(x)log(1D(x))dx\begin{aligned} V(G, D) &=\int_{\boldsymbol{x}} p_{\text {data }}(\boldsymbol{x}) \log (D(\boldsymbol{x})) d x+\int_{z} p_{\boldsymbol{z}}(\boldsymbol{z}) \log (1-D(g(\boldsymbol{z}))) d z \\ &=\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}

对于任一的 (a,b)R2 {0,0}(a, b) \in \mathbb{R}^2 \ \{0, 0\} 上的函数 yalog(y)+blog(1y)y \rightarrow a \log{(y)} + b \log{(1-y)} 在区间 [0,1][0, 1] 上的最大值为 aa+b\frac{a}{a + b},即如式 (3)(3) 给出的那样。将式 (3)(3) 代入到上述价值函数 V(G,D)V(G, D) 中,即可得:

C(G)=maxDV(G,D)=Expdata [logDG(x)]+Ezpz[log(1DG(G(z)))]=Expdata [logDG(x)]+Expg[log(1DG(x))]=Expdata [logpdata (x)Pdata (x)+pg(x)]+Expg[logpg(x)pdata (x)+pg(x)]\begin{aligned} C(G) &=\max _{D} V(G, D) \\ &=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}}\left[\log D_{G}^{*}(\boldsymbol{x})\right]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}}\left[\log \left(1-D_{G}^{*}(G(\boldsymbol{z}))\right)\right] \\ &=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}}\left[\log D_{G}^{*}(\boldsymbol{x})\right]+\mathbb{E}_{\boldsymbol{x} \sim p_{g}}\left[\log \left(1-D_{G}^{*}(\boldsymbol{x})\right)\right] \\ &=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}}\left[\log \frac{p_{\text {data }}(\boldsymbol{x})}{P_{\text {data }}(\boldsymbol{x})+p_{g}(\boldsymbol{x})}\right]+\mathbb{E}_{\boldsymbol{x} \sim p_{g}}\left[\log \frac{p_{g}(\boldsymbol{x})}{p_{\text {data }}(\boldsymbol{x})+p_{g}(\boldsymbol{x})}\right] \end{aligned}

定理 1:上述 C(G)C(G) 取得最小值当且仅当 pg=pdatap_g = p_{data},此时 C(G)=log4C(G) = -\log{4}

证明:通过对 C(G)C(G) 进行一个简单的变换,可以将其写成如下形式:

C(G)=log(4)+KL(pdata pdata +pg2)+KL(pgpdata +pg2)(4)C(G)=-\log (4)+K L\left(p_{\text {data }} \left\Vert \frac{p_{\text {data }}+p_{g}}{2}\right. \right)+K L\left(p_{g} \left\Vert \frac{p_{\text {data }}+p_{g}}{2}\right. \right) \tag{4}

C(G)C(G) 取到最小时即式 (4)(4) 中的两项 KL 散度均为 00,此时 pdata=pgp_{data} = p_g。故证明了在上述给定的算法框架下,生成器 GG 能收敛到最优值。

4.2 算法的收敛性

命题 2:如果 GGDD 都有足够的模型容量,且在给定的上述算法中的每一步,当给定 GG 时辨别器 DD 都能达到其最优解,而在优化 pgp_g 时是通过最大化如下价值 函数时,pgp_g 能够收敛到 pdatap_{data}

V(G,D)=Expdata [logDG(x)]+Expg[log(1DG(x))](5)V(G, D) = \mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}}\left[\log D_{G}^{*}(\boldsymbol{x})\right]+\mathbb{E}_{\boldsymbol{x} \sim p_{g}}\left[\log \left(1-D_{G}^{*}(\boldsymbol{x})\right)\right] \tag{5}

其中,DGD^*_G 此时是给定 GG 时的最优解。

证明:将 V(G,D)V(G, D) 看成是 pgp_g 的函数,则有 V(G,D)=U(pg,D)V(G, D) = U(p_g, D)。其实展开式 (5)(5) 可以发现,U(pg,D)U(p_g, D) 就是关于 pgp_g 的一个线性函数,也是 pgp_g 的凸泛函。那这样的话,对所有可能的 UU 取逐点上确界得到 supDU(pg,D)\sup_{D}U(p_g, D),其也是 pgp_g 的凸泛函。因此就可以使用梯度下降求得最优解 pgp_g^*

5. 实验

现在看来效果不是很好,但在当时应该还是不错的一个效果。

6. 总结

作者提出了一种新的网络架构用来近似学习到数据分布,并取得不错的效果。不过作者也提到,在本文中对生成器没有任何限制,所以导致训练成器时会不受控制,更好的做法是考虑条件 GAN,这个工作在后续也确实有人做了。最后,作者还附上了一张讨论表格来分析各类生成模型的特点和面临的挑战:

7. 讨论

虽然作者给出了 GAN 能够收敛到最优解的理论证明,但实际训练时 GAN 还是非常不稳定的。主要原因是我们需要控制好生成器 GG 和辨别器 DD,它们两要旗鼓相当共同进步才行。不能一方很强而另一方很弱,否则训练可能无法收敛。比如说,如果一开即 DD 就很强,那么价值函数的第二项的梯度就很小,很难引起生成器 GG 的进步。不过,由于 GAN 这种思想的有效性,后续有很多很多文章对其进行了改进,现在已经达到很好的效果了。

附录

  1. Goodfellow, I., Pouget-Abadie, J., Mirza, M., Xu, B., Warde-Farley, D., Ozair, S., ... & Bengio, Y. (2014). Generative adversarial nets. Advances in neural information processing systems, 27.