您的位置:首页 > 其它

GAN论文阅读——原始GAN(基本概念及理论推导)

2018-02-23 20:12 447 查看
参考资料:http://blog.csdn.net/sallyxyl1993/article/details/64123922

     https://baijiahao.baidu.com/s?id=1580024390078548003&wfr=spider&for=pc

     https://sherlockliao.github.io/2017/06/20/gan_math/

     http://blog.csdn.net/u011534057/article/details/52840788

GAN背后的思想其实非常朴素和直观,就是生成器和判别器两个极大极小的博弈。下面我们进一步了解该理论背后的证明与推导。

一、基本概念

1.1 符号定义

  data→真实数据(groundtruth)

  pdata→真实数据的分布

  z→噪音(输入数据)

  pz→原始噪音的分布

  pg→经过生成器后的数据分布

  G()→生成映射函数

  D()→判别映射函数

G 是生成器,结构为一个多层感知机,参数为 θg,G(z;θg) 为生成映射函数,将噪音 z 映射到新的数据空间。D 是判别器,也是一个多层感知机,参数为 θd,D(x;θd) 输出为一个标量,表示 x 来自真实数据data而不是生成数据的概率。

1.2 目标函数

GAN的目标函数:



从判别器 D 的角度看,它希望自己能尽可能区分真实样本和虚假样本,因此希望 D(x) 尽可能大,D(G(z)) 尽可能小, 即 V(D,G) 尽可能大。从生成器 G 的角度看,它希望自己尽可能骗过 D,也就是希望 D(G(z)) 尽可能大,即 V(D,G) 尽可能小。两个模型相对抗,最后达到全局最优。



图中,黑色曲线是真实样本的概率分布函数,绿色曲线是虚假样本的概率分布函数,蓝色曲线是判别器D的输出,它的值越大表示这个样本越有可能是真实样本。最下方的平行线是噪声z,它映射到了x。

我们可以看到,一开始, 虽然 G(z) 和 x 是在同一个特征空间里的,但它们分布的差异很大,这时,虽然鉴别真实样本和虚假样本的模型 D 性能也不强,但它很容易就能把两者区分开来,而随着训练的推进,虚假样本的分布逐渐与真实样本重合,D 虽然也在不断更新,但也已经力不从心了。

最后,黑线和绿线最后几乎重合,模型达到了最优状态,这时 D 的输出对于任意样本都是 0.5。

二、最优化问题表达

定义最优化问题的方法由两部分组成。首先我们需要定义一个判别器 D 以判别样本是不是从 Pdata(x) 分布中取出来的,因此有:



其中 E 指代取期望。这一项是根据「正类」(即辨别出 x 属于真实数据 data)的对数损失函数而构建的。最大化这一项相当于令判别器 D 在 x 服从于 data 的概率密度时能准确地预测 D(x)=1,即:



另外一项是企图欺骗判别器的生成器 G。该项根据「负类」的对数损失函数而构建,即:



我们定义目标函数为:



对于 D 而言要尽量使公式最大化(识别能力强),而对于 G 又想使之最小(生成的数据接近实际数据)。整个训练是一个迭代过程。其实极小极大化博弈可以分开理解,即在给定 G 的情况下先最大化 V(D,G) 而取 D,然后固定 D,并最小化 V(D,G) 而得到 G。其中,给定 G,最大化 V(D,G) 评估了 Pg 和 Pdata 之间的差异或距离。

最后,我们可以将最优化问题表达为:



上文给出了 GAN 概念和优化过程的形式化表达。通过这些表达,我们可以理解整个生成对抗网络的基本过程与优化方法。当然,有了这些概念我们完全可以直接在 GitHub 上找一段 GAN 代码稍加修改并很好地运行它。但如果我们希望更加透彻地理解 GAN,更加全面地理解实现代码,那么我们还需要知道很多推导过程。比如什么时候 D 能令价值函数 V(D,G) 取最大值、G 能令 V(D,G) 取最小值,而 D 和 G 该用什么样的神经网络(或函数),它们的损失函数又需要用什么等等。总之,还有很多理论细节与推导过程需要我们进一步挖掘。

三、理论推导

3.1 知识预备——KL散度

要进行接下来的理论推导,我们首先需要一点预备知识,KL散度(KL divergence),这是统计中的一个概念,是衡量两种概率分布的相似程度,其越小,表示两种概率分布越接近。

对于离散的概率分布,定义如下:



对于连续的概率分布,定义如下:



我们想要将一个随机高斯噪声z通过一个生成网络G得到一个和真的数据分布 Pdata(x) 差不多的生成分布 PG(x;θ),其中的参数 θ 是网络的参数决定的,我们希望找到 θ 使得 PG(x;θ) 和Pdata(x) 尽可能接近。

Maximun Likelihood Estimation

我们从真实数据分布 Pdata(x) 里面取样 m 个点,x1,x2,⋯,xm,根据给定的参数 θ 我们可以计算如下的概率 PG(xi;θ),那么生成这 m 个样本数据的似然(likelihood)就是:



我们想要做的事情就是找到 θ∗ 来最大化这个似然估计:



在上面的推导中,我们希望最大化似然函数 L。若对似然函数取对数,那么累乘 ∏ 就能转化为累加 ∑,并且这一过程并不会改变最优化的结果。因此我们可以将极大似然估计化为求令 logPG(x;θ) 期望最大化的 θ ,而期望 ElogPG(x;θ)可以展开为在 x 上的积分形式 ∫Pdata(x)logPG(x;θ)dx。

又因为该最优化过程是针对 θ 的,所以我们添加一项不含 θ 的积分并不影响最优化效果,即可添加 ∫Pdata(x)logPdata(x)dx。添加该积分后,我们可以合并这两个积分并构建类似 KL 散度的形式。该过程如下:



这里在前面添加一个负号,将 log 里面的分数倒一下,就变成了KL 散度:

而 PG(x;θ) 如何算出来呢?



里面的I表示示性函数,也就是:



这样我们其实根本没办法求出这个 PG(x) 出来,这就是生成模型的基本想法。

3.2 Global Optimality of pg=pdata

下面,我们需要证明:该最优化问题有唯一解 G∗,并且该唯一解满足 PG=Pdata。

Basic Idea of GAN

生成器 G:

G 是一个生成器,给定先验分布 Pprior(z) 我们希望得到生成分布 PG(x),这里很难通过极大似然估计得到结果。

判别器 D:

D 是一个函数,来衡量 PG(x) 与 Pdata(x) 之间的差距,这是用来取代极大似然估计

最优判别器

在极小极大博弈的第一步中,给定生成器 G,最大化 V(D,G) 而得出最优判别器 D。其中,最大化 V(D,G) 评估了 PG 和 Pdata 之间的差异或距离。因为在原论文中价值函数可写为在 x 上的积分,即将数学期望展开为积分形式:



关于上面积分式的证明

在 GAN 原论文中,有一个思想和其它很多方法都不同,即生成器 G 不需要满足可逆条件。Scott Rome 认为这一点非常重要,因为实践中 G 就是不可逆的。而很多证明笔记都忽略了这一点,他们在证明时错误地使用了积分换元公式,而积分换元却又恰好基于 G 的可逆条件。Scott 认为证明只能基于以下等式的成立性:

Ez∼pz(z)log(1−D(G(z)))=Ex∼pG(x)log(1−D(x))

该等式来源于测度论中的 Radon-Nikodym 定理。

有一些证明过程使用了积分换元公式,但进行积分换元就必须计算 G(−1),而 G 的逆却并没有假定为存在。并且在神经网络的实践中,它也并不存在。可能这个方法在机器学习和统计学文献中太常见了,因此我们忽略了它。

在数据给定,G 给定的前提下, Pdata(x) 与 PG(x) 都可以看作是常数,我们可以分别用 a,b 来表示他们,这样我们就可以得到如下的式子:



由此,我们得到论文中的第一个推论:



其实该最优的 D 在实践中并不是可计算的,但在数学上十分重要。我们并不知道先验的 Pdata(x),所以我们在训练中永远不会用到它。另一方面,它的存在令我们可以证明最优的 G 是存在的,并且在训练中我们只需要逼近 D。

最优生成器

当然 GAN 过程的目标是令 PG=Pdata。这对最优的 D 意味着什么呢?我们可以将这一等式代入 DG∗ 的表达式中:



这意味着判别器已经完全困惑了,它完全分辨不出 Pdata 和 PG 的区别,即判断样本来自 Pdata 和 PG 的概率都为 12。基于这一观点,GAN 作者证明了 G 就是极小极大博弈的解。该定理如下:



即当且仅当 PG=Pdata,训练标准 C(G)=maxV(G,D) 的可以达到全局最优。

以上定理即极大极小博弈的第二步,求令 V(G,D∗) 最小的生成器 G(其中 D∗ 代表最优的判别器)。之所以当 PG=Pdata 可以令价值函数最小化,是因为这时候两个分布的 JS 散度 JSD(Pdata(x)||PG(x)) 等于零,这一过程的详细解释如下。

原论文中的这一定理是「当且仅当」声明,所以我们需要从两个方向证明。首先我们先从反向逼近并证明 C(G) 的取值,然后再利用由反向获得的新知识从正向证明。设 PG=Pdata(反向指预先知道最优条件并做推导),我们可以反向推出:



该值是全局最小值的候选,因为它只有在 PG=Pdata 的时候才出现。我们现在需要从正向证明这一个值常常为最小值,也就是同时满足「当」和「仅当」的条件。现在放弃 PG=Pdata 的假设,对任意一个 G,我们可以将上一步求出的最优判别器 D∗ 代入到 C(G)=maxV(G,D) 中:



因为已知 -log4 为全局最小候选值,所以我们希望构造某个值以使方程式中出现 log2。因此我们可以在每个积分中加上或减去 log2,并乘上概率密度。这是一个十分常见并且不会改变等式的数学证明技巧,因为本质上我们只是在方程加上了 0。



采用该技巧主要是希望能够构建成含 log2 和 JS 散度的形式,上式化简后可以得到以下表达式:



因为概率密度的定义,PG 和 Pdata 在它们积分域上的积分等于 1,即:



此外,根据对数的定义,我们有:



因此代入该等式,我们可以写为:



现在,如果读者阅读了前文的 KL 散度,那么我们就会发现每一个积分正好就是它。具体来说:



KL 散度是非负的,所以我们马上就能看出来 -log4 为 C(G) 的全局最小值。

如果我们进一步证明只有一个 G 能达到这一个值,因为 PG=Pdata 将会成为令 C(G)=−log4 的唯一点,所以整个证明就能完成了。

从前文可知 KL 散度是非对称的,所以 C(G) 中的 KL(Pdata||(Pdata+PG)/2) 左右两项是不能交换的,但如果同时加上另一项 KL(Pdata||(Pdata+PG)/2),它们的和就能变成对称项。这两项 KL 散度的和即可以表示为 JS 散度(Jenson-Shannon divergence):



假设存在两个分布 P 和 Q,且这两个分布的平均分布 M=(P+Q)/2,那么这两个分布之间的 JS 散度为 P 与 M 之间的 KL 散度加上 Q 与 M 之间的 KL 散度再除以 2。

JS 散度的取值为 0 到 log2。若两个分布完全没有交集,那么 JS 散度取最大值 log2;若两个分布完全一样,那么 JS 散度取最小值 0。

因此 C(G) 可以根据 JS 散度的定义改写为:



这一散度其实就是 Jenson-Shannon 距离度量的平方。根据它的属性:当 PG=Pdata 时,JSD(Pdata(x)||PG(x)) 为 0。综上所述,生成分布当且仅当等于真实数据分布式时,我们可以取得最优生成器。

3.3 收敛

现在,该论文的主要部分已经得到了证明:即 PG=Pdata 为 maxV(G,D) 的最优点。此外,原论文还有额外的证明白表示:给定足够的训练数据和正确的环境,训练过程将收敛到最优 G,我们并不详细讨论这一块。

四、训练方法



五、GAN的优势与缺陷

与其他生成式模型相比较,生成式对抗网络有以下四个优势OpenAI Ian Goodfellow的Quora问答】:

根据实际的结果,它们看上去可以比其它模型产生了更好的样本(图像更锐利、清晰)。

生成对抗式网络框架能训练任何一种生成器网络(理论上-实践中,用 REINFORCE 来训练带有离散输出的生成网络非常困难)。大部分其他的框架需要该生成器网络有一些特定的函数形式,比如输出层是高斯的。重要的是所有其他的框架需要生成器网络遍布非零质量(non-zero mass)。生成对抗式网络能学习可以仅在与数据接近的细流形(thin manifold)上生成点。

不需要设计遵循任何种类的因式分解的模型,任何生成器网络和任何鉴别器都会有用。

无需利用马尔科夫链反复采样,无需在学习过程中进行推断(Inference),回避了近似计算棘手的概率的难题。

  与PixelRNN相比,生成一个样本的运行时间更小。GAN 每次能产生一个样本,而 PixelRNN 需要一次产生一个像素来生成样本。

  与VAE 相比,它没有变化的下限。如果鉴别器网络能完美适合,那么这个生成器网络会完美地恢复训练分布。换句话说,各种对抗式生成网络会渐进一致(asymptotically consistent),而 VAE 有一定偏置。

  与深度玻尔兹曼机相比,既没有一个变化的下限,也没有棘手的分区函数。它的样本可以一次性生成,而不是通过反复应用马尔可夫链运算器(Markov chain operator)。

  与 GSN 相比,它的样本可以一次生成,而不是通过反复应用马尔可夫链运算器。

  与NICE 和 Real NVE 相比,在 latent code 的大小上没有限制。

GAN目前存在的主要问题:

解决不收敛(non-convergence)的问题。

目前面临的基本问题是:所有的理论都认为 GAN 应该在纳什均衡(Nash equilibrium)上有卓越的表现,但梯度下降只有在凸函数的情况下才能保证实现纳什均衡。当博弈双方都由神经网络表示时,在没有实际达到均衡的情况下,让它们永远保持对自己策略的调整是可能的【OpenAI Ian Goodfellow的Quora】。

难以训练:崩溃问题(collapse problem)

GAN模型被定义为极小极大问题,没有损失函数,在训练过程中很难区分是否正在取得进展。GAN的学习过程可能发生崩溃问题(collapse problem),生成器开始退化,总是生成同样的样本点,无法继续学习。当生成模型崩溃时,判别模型也会对相似的样本点指向相似的方向,训练无法继续。【Improved Techniques for Training GANs

无需预先建模,模型过于自由不可控。

与其他生成式模型相比,GAN这种竞争的方式不再要求一个假设的数据分布,即不需要formulate p(x),而是使用一种分布直接进行采样sampling,从而真正达到理论上可以完全逼近真实数据,这也是GAN最大的优势。然而,这种不需要预先建模的方法缺点是太过自由了,对于较大的图片,较多的 pixel的情形,基于简单 GAN 的方式就不太可控了(超高维)。在GAN[Goodfellow Ian, Pouget-Abadie J] 中,每次学习参数的更新过程,被设为D更新k回,G才更新1回,也是出于类似的考虑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  GAN