深度学习-2-Paper:生成对抗网络GANs——深度学习二十年间最酷的idea!
Generative Adversarial Nets
生成对抗网络(GANs)是一种深度学习框架,由 lan Goodfellow 和他的同事们于2014年提出,论文成果发表于人工智能顶会NIPS(Neural Information Processing Systems)。GANs被认为是深度学习领域的一项重大突破,其应用涵盖图像生成、图像修复、语音和文本合成、风格迁移和艺术创作、欺骗检测等多个领域。图灵奖得主,被誉为深度学习三巨头之一的 Yann LeCunn 称赞GANs为 "the coolest idea in deep learning in the last 20 years."。接下来,我们就来一起欣赏一下深度学习这二十年间最酷的idea!
论文链接:https://arxiv.org/abs/1406.2661
摘要
图1是 lan Goodfellow 在GANs的原始论文中所写的摘要全文:
摘要显示这篇论文提出了一种全新的基于对抗过程的生成模型框架。在这个框架中,存在着两个基于神经网络的模型:生成模型\(G\)与判别模型\(D\)。生成模型\(G\)的作用是估计数据的真实分布;判别模型\(D\)是用于判断所输入的样本来自于真实数据而非\(G\)所生成的概率。生成模型\(G\)的训练过程是最大化判别模型\(D\)犯错的概率;判别模型\(D\)的训练过程是最小化\(D\)犯错的概率,整个GANs的训练过程可视为 Minimax的二元博弈过程。通过理论分析发现,存在一个唯一的最优解,使得生成模型\(G\)能够正确模拟训练数据的分布,同时判别模型所给出的概率几乎处处为\(\frac{1}{2}\),即几乎不能分辨所输入的样本是来自于真实数据分布还是生成模型\(G\)。
背景及主要思想
背景
深度学习的目标是构建模型来表示在人工智能的应用中遇到的数据的概率分布,例如图像、音频、自然语言的语料等。在2014年之前,判别模型在这方面占据着主导,这些模型通常是利用反向传播算法、Dropout、ReLU等技术,直接学习一个从高维特征空间到实例类别的映射。与判别模型相比,生成模型的发展则有些相形见绌。这一方面是由于在与最大似然估计相关的策略中,有许多难以解决的概率计算问题;另一方面,判别模型在NLP任务中也难以利用分段线性单元的优势。
主要思想
本文的作者表示他们所提出的新的生成模型能够避开这些困难。生成对抗网络的主要思想可以概括为两个字——“对抗”,具体而言,在GANs框架的训练过程中,生成模型\(G\)的训练目标是最大化判别模型犯错的概率,即希望由生成模型\(G\)所生成的样本能够成功“骗过”判别模型;判别模型\(D\)的训练目标是最小化自身犯错的概率,即希望判别模型的“鉴伪”能力越高越好。当我们将生成模型\(G\)所生成的样本用于训练判别模型\(D\),并交替着训练这两个模型,便会引发这两个模型之间的“对抗”,它们为了达到自身的训练目标便会在对抗中提升各自的性能。最终,通过若干次训练,我们能得到一个性能非常好的生成模型\(G\),它所生成的样本与真实样本十分接近,以至于判别模型无法在所给的的参数量下分辨二者的区别,即生成模型所生成的样本几乎能够反映真实的数据分布。
在GANs的论文中,lan Goodfellow
用一个十分形象的比喻来说明生成对抗网络的基本思想。假设我们的目标是能够制造足够逼真的假钞,我们只需要找来两个队伍,一方是制造假钞的犯罪集团,另一方是警察队伍,犯罪集团的目标是制造假钞并在不被发现的情况下使用假钞;警察队伍的目标是鉴别假钞。这样,我们并不需要做太多的事情,只需要将这两方放在一起,让他们彼此对抗。在对抗的过程中,警察队伍鉴别假钞的能力会越来越强,犯罪集团所制造的假钞也会越来越逼真,最终我们便能得到足够逼真的假钞。
模型构成
在论文中,为了让生成模型\(G\)能够学习到真实数据(训练数据)的分布\(p_{data}\),作者首先定义了输入噪声变量的先验分布\(p_{z}(z)\);生成模型\(G(z;\theta_{g})\)由参数为\(\theta_{g}\)的神经网络定义,其作用是将噪声变量\(z\)映射到数据空间\(\mathcal{X}\):
\[G(z;\theta_{g}): z \rightarrow x\]
由生成模型\(G(z;\theta_{g})\)生成的数据\(x\)的概率分布为\(p_{g}\)。同时,作者定义了判别模型\(D(x;\theta_{d})\),判别模型\(D(x;\theta_{d})\)由参数为\(\theta_{d}\)的神经网络构成,其作用是给出输入数据\(x\)是来自于真实数据分布\(p_{data}\)而非生成模型\(G\)的概率\(p\):
\[D(x;\theta_{d}): x \rightarrow p\]
根据GANs的基本思想,在模型的训练过程中,生成模型\(G\)的训练目标是最大化判别模型\(D\)犯错的概率;判别模型\(D\)的训练目标是最小化自身犯错的概率。其训练目标构成了一个 minimax 的博弈过程。作者定义了训练的目标函数\(V(D,G)\),训练目标可以写为(1)式:
\[\begin{equation} \min_{G} \max_{D} V(D,G)=\mathbb{E}_{x \sim p_{data}(x)}[\log{D(x)}]+\mathbb{E}_{z \sim p_{z}(z)}[\log{(1-D(G(z)))}] \end{equation}\]
从目标函数可以得出,若固定\(G\),则判别模型\(D\)为(2)式:
\[\begin{equation} \begin{split} D = \arg \max_{D} V(D,G) &= \mathbb{E}_{x \sim p_{data}(x)}[\log{D(x)}]+\mathbb{E}_{z \sim p_{z}(z)}[\log{(1-D(G(z)))}] \\ &= \mathbb{E}_{x \sim p_{data}(x)}[\log{D(x)}]+\mathbb{E}_{x \sim p_{g}(x)}[\log{(1-D(x))}] \\ \end{split} \end{equation}\]
根据(2)式,在训练过程中判别模型\(D\)会调整参数\(\theta_{d}\),使得(2)式中的\(D(x)\)较大,\(D(G(z))\)较小,其含义是若判别模型\(D\)的输入数据\(x\)来自于真实的数据分布\(p_{data}\),则模型的输出概率值较大;若输入数据\(x\)来自于生成模型定义的分布\(p_{g}\),则模型的输出概率值较小。(2)式实际上就是二分类问题中的交叉熵目标函数,通过(2)式的优化,可以得到一个分类性能更好的判别模型\(D\)。
若固定\(D\),则生成模型\(G\)为(3)式:
\[\begin{equation} \begin{split} G &= \arg \min_{G} V(D,G) = \mathbb{E}_{x \sim p_{data}(x)}[\log{D(x)}]+\mathbb{E}_{z \sim p_{z}(z)}[\log{(1-D(G(z)))}] \\ & \Leftrightarrow \arg \min_{G} \mathbb{E}_{z \sim p_{z}(z)}[\log{(1-D(G(z)))}]=\mathbb{E}_{x \sim p_{g}(x)}[\log{(1-D(x))}] \\ \end{split} \end{equation}\]
根据(3)式,在训练过程中生成模型\(G\)会调整参数\(\theta_{g}\),使得(3)式中的\(D(G(z))\)较大,其含义是将从生成模型\(G\)所定义的分布\(p_{g}\)中给出的数据\(x\)输入到判别模型\(D\)中,判别模型输出的概率值较大,即判别模型误认为数据\(x\)来自于真实的数据分布\(p_{data}\),这表明生成数据分布\(p_{g}\)与真实数据分布\(p_{data}\)足够相似,以至于当前的判别模型\(D\)无法分辨这两个分布所产生的数据\(x\)。
优化算法
lan Goodfellow 在GANs的原始论文中给出的目标函数的优化算法如下
优化算法的基本思路是利用小批量随机梯度下降算法对目标函数进行优化。对于目标函数中的生成模型与判别模型,每次迭代时固定其中一个模型,利用SGD对另一个模型进行参数更新,彼此循环迭代,直至收敛。优化算法中需要特别注意的有以下几点:
- 在刚开始迭代时,应该首先固定生成模型\(G\),对判别模型\(D\)进行更新。这是因为在开始训练时,判别模型\(D\)的参数是随机初始化的,其不具备对样本进行正确分类的能力,而判别模型分类的结果又会直接影响生成模型\(G\)的训练,若首先更新生成模型\(G\),则生成模型一开始便有可能完全“骗过”判别模型,导致训练无法成功进行。
- 在训练过程中,每更新\(k\)次判别模型\(D\),再更新1次生成模型\(G\)。这会使得只要生成模型\(G\)变化得足够缓慢,判别模型\(D\)就会维持再其最优解附近。
- 在实际对生成模型\(G\)的更新中,并不使用(3)式中的最小化 \(\log{(1-D(x))}\),而是最大化 \(\log{D(x)}\) 。这是因为在开始训练时,判别模型\(D\)要强于生成模型\(G\),使得\(D(x)(x \sim p_{g})\)的值较小,此时 \(\log{(1-D(x))}\) 对\(D(x)\)的梯度很小,训练会非常缓慢;而 \(\log{D(x)}\) 在\(D(x)\)较小时,梯度较大,更有利于参数更新。
理论分析
lan Goodfellow在论文中对目标函数的理论最优解以及算法收敛性进行了分析,得出了非常有意义的结果。
总体最优解
结论: 当\(p_{g}=p_{data}\)时,目标函数达到总体最优。
证明:
训练目标:
\[\min_{G} \max_{D} V(D,G)=\mathbb{E}_{x \sim p_{data}(x)}[\log{D(x)}]+\mathbb{E}_{z \sim p_{z}(z)}[\log{(1-D(G(z)))}]\]
当固定生成模型\(G\)时,\(D^{*}=\arg \max_{D} V(D,G)\),其中:
\[\begin{split} V(D,G) &= \mathbb{E}_{x \sim p_{data}}[\log{D(x)}]+\mathbb{E}_{x \sim p_{g}}[\log{(1-D(x))}] \\ &= \int_{x} p_{data}(x)\log{D(x)} dx + \int_{x} p_{g}(x)\log{(1-D(x))} dx \\ &= \int_{x} [p_{data}(x)\log{D(x)}+p_{g}(x)\log{(1-D(x))}] dx \end{split}\]
\[\begin{split} \max_{D} V(D,G) &= \max_{D} \int_{x} [p_{data}(x)\log{D(x)}+p_{g}(x)\log{(1-D(x))}] dx \\ & \Leftrightarrow \max_{D} \space p_{data}(x)\log{D(x)}+p_{g}(x)\log{(1-D(x))} \triangleq L(D) \end{split} \]
\[\frac{\partial L(D)}{\partial D}=\frac{p_{data}(x)}{D(x)}-\frac{p_{g}(x)}{1-D(x)}=0 \Rightarrow D^{*}(x)=\frac{p_{data}(x)}{p_{data}(x)+p_{g}(x)}\]
\[\begin{split} \max_{D} V(D,G) &= V(D^{*},G) = \mathbb{E}_{x \sim p_{data}}[\log{D^{*}(x)}]+\mathbb{E}_{x \sim p_{g}}[\log{(1-D^{*}(x))}] \\ &= \int_x p_{data}(x)\log{\left( \frac{p_{data}(x)}{p_{data}(x)+p_{g}(x)} \right)} dx + \int_{x} p_{g}(x)\log{\left( \frac{p_{g}(x)}{p_{data}(x)+p_{g}(x)} \right)}dx \\ &= -2\log{2}+\int_x p_{data}(x)\log{\left( \frac{p_{data}(x)}{(p_{data}(x)+p_{g}(x))/2} \right)} dx + \int_{x} p_{g}(x)\log{\left( \frac{p_{g}(x)}{(p_{data}(x)+p_{g}(x))/2} \right)}dx \\ &= -2\log{2}+ KL \left( p_{data}(x) || \frac{p_{data}(x)+p_{g}(x)}{2} \right) + KL \left( p_{g}(x) || \frac{p_{data}(x)+p_{g}(x)}{2} \right) \\ &= -2\log{2}+2JS(p_{data}(x)||p_{g}(x)) \end{split}\]
完成对\(D\)的最大化后,再对\(G\)进行极小化:
\[\min_{G} \max_{D} V(D,G) \Leftrightarrow \min_{G} \space J(G)=-2\log{2}+2JS(p_{data}(x)||p_{g}(x))\]
当 \(p_{g}(x)=p_{data}(x)\)时,\(JS(p_{data}(x)||p_{g}(x))_{min}=0\),\(J(G)\)达到最小,证毕。
算法收敛性
结论: 若生成模型\(G\)和判别模型\(D\)拥有足够的参数量,并且在上文优化算法的每一步中,在给定生成模型\(G\)下,判别模型\(D\)都达到了其最优解,从而有:
\[p_{g}= \arg\min_{p_{g}} \mathbb{E}_{x \sim p_{data}}[\log{D^{*}_{G}(x)}]+\mathbb{E}_{x \sim p_{g}}[\log{(1-D^{*}_{G}(x))}]\]
利用上式对\(p_{g}\)进行迭代更新,最终\(p_{g}\)会收敛到\(p_{data}\).