生成对抗性学习笔记

GAN思想分析+代码

2019-04-09  本文已影响0人  Lornatang

[Paper] [Code]

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

一、基本概念

1.1 符号定义

data→真实数据(groundtruth)data→真实数据(groundtruth)data\rightarrow 真实数据(groundtruth)
  pdata→真实数据的分布pdata→真实数据的分布p_{data}\rightarrow 真实数据的分布
  z→噪音(输入数据)z→噪音(输入数据)z \rightarrow 噪音(输入数据)
  pz→原始噪音的分布pz→原始噪音的分布p_{z}\rightarrow 原始噪音的分布
  pg→经过生成器后的数据分布pg→经过生成器后的数据分布p_{g}\rightarrow 经过生成器后的数据分布
  G()→生成映射函数G()→生成映射函数G()\rightarrow 生成映射函数
  D()→判别映射函数D()→判别映射函数D()\rightarrow 判别映射函数

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


1.2 目标函数

GAN的目标函数:

image

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

image

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

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

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


二、最优化问题表达

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

image

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

image

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

image

我们定义目标函数为:

image

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

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

image

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


三、理论推导

3.1 知识预备——KL散度

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

image

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

image

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

Maximun Likelihood Estimation
我们从真实数据分布 Pdata(x)Pdata(x)P_{data}(x) 里面取样 mmm 个点,x1,x2,⋯,xmx1,x2,⋯,xmx{1},x{2},\cdots ,x^{m},根据给定的参数 θθ\theta 我们可以计算如下的概率 PG(xi;θ)PG(xi;θ)P_{G}(x^{i};θ) ,那么生成这 mmm 个样本数据的似然(likelihood)就是:

image

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

image

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

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

image

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

而 PG(x;θ)PG(x;θ)P_{G}(x;θ) 如何算出来呢?

image

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

image

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


3.2 Global Optimality of pg=pdatapg=pdatap_{g}=p_{data}

下面,我们需要证明:该最优化问题有唯一解 G∗G∗G^{*},并且该唯一解满足 PG=PdataPG=PdataP_{G}=P_{data}。

Basic Idea of GAN

  • 生成器 G:
    G 是一个生成器,给定先验分布 Pprior(z)Pprior(z)P_{prior}(z) 我们希望得到生成分布 PG(x)PG(x)P_{G}(x),这里很难通过极大似然估计得到结果。
  • 判别器 D:
    D 是一个函数,来衡量 PG(x)PG(x)P_{G}(x) 与 Pdata(x)Pdata(x)P_{data}(x) 之间的差距,这是用来取代极大似然估计

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

image

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

Ez∼pz(z)log(1−D(G(z)))=Ex∼pG(x)log(1−D(x))Ez∼pz(z)log⁡(1−D(G(z)))=Ex∼pG(x)log⁡(1−D(x))E_{z\sim p_{z}(z)}\log(1-D(G(z)))=E_{x\sim p_{G(x)}}\log (1-D(x))

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

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

image

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

image

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

最优生成器
当然 GAN 过程的目标是令 PG=PdataPG=PdataP_{G}=P_{data}。这对最优的 D 意味着什么呢?我们可以将这一等式代入 DG∗DG∗D_{G*} 的表达式中:

image

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

image

即当且仅当 PG=PdataPG=PdataP_{G}=P_{data},训练标准 C(G)=maxV(G,D)C(G)=maxV(G,D)C(G)=\max V(G,D) 的可以达到全局最优。

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

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

image

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

image

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

image

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

image

因为概率密度的定义,PGPGP_{G} 和 PdataPdataP_{data} 在它们积分域上的积分等于 111,即:

image

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

image

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

image

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

image

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

如果我们进一步证明只有一个 G 能达到这一个值,因为 PG=PdataPG=PdataP_{G}=P_{data} 将会成为令 C(G)=−log4C(G)=−log⁡4C(G)=−\log 4 的唯一点,所以整个证明就能完成了。

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

image

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

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

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

image

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


3.3 收敛

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


四、训练方法

image

五、GAN的优势与缺陷

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

与PixelRNN相比,生成一个样本的运行时间更小。GAN 每次能产生一个样本,而 PixelRNN 需要一次产生一个像素来生成样本。
  与VAE 相比,它没有变化的下限。如果鉴别器网络能完美适合,那么这个生成器网络会完美地恢复训练分布。换句话说,各种对抗式生成网络会渐进一致(asymptotically consistent),而 VAE 有一定偏置。
  与深度玻尔兹曼机相比,既没有一个变化的下限,也没有棘手的分区函数。它的样本可以一次性生成,而不是通过反复应用马尔可夫链运算器(Markov chain operator)。
  与 GSN 相比,它的样本可以一次生成,而不是通过反复应用马尔可夫链运算器。
  与NICE 和 Real NVE 相比,在 latent code 的大小上没有限制。

GAN目前存在的主要问题:

参考资料: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

上一篇下一篇

猜你喜欢

热点阅读