深度学习算法-GAN

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)data→真实数据(groundtruth)

GG 来自真实数据data而不是生成数据的概率。


1.2 目标函数

GAN的目标函数:

深度学习算法-GAN

从判别器 DD 尽可能小。两个模型相对抗,最后达到全局最优。

深度学习算法-GAN

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

我们可以看到,一开始, 虽然 G(z)G(z) 虽然也在不断更新,但也已经力不从心了。

最后,黑线和绿线最后几乎重合,模型达到了最优状态,这时 DD。


二、最优化问题表达

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

深度学习算法-GAN

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

深度学习算法-GAN

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

深度学习算法-GAN

我们定义目标函数为:

深度学习算法-GAN

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

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

深度学习算法-GAN

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


三、理论推导

3.1 知识预备——KL散度

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

深度学习算法-GAN

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

深度学习算法-GAN

我们想要将一个随机高斯噪声z通过一个生成网络G得到一个和真的数据分布 Pdata(x)Pdata(x) 尽可能接近。

Maximun Likelihood Estimation
我们从真实数据分布 Pdata(x)Pdata(x) 个样本数据的似然(likelihood)就是:

深度学习算法-GAN

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

深度学习算法-GAN

在上面的推导中,我们希望最大化似然函数 LL。

又因为该最优化过程是针对 θθ。添加该积分后,我们可以合并这两个积分并构建类似 KL 散度的形式。该过程如下:

深度学习算法-GAN

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

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

深度学习算法-GAN

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

深度学习算法-GAN

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


3.2 Global Optimality of pg=pdatapg=pdata

下面,我们需要证明:该最优化问题有唯一解 G∗G∗。

Basic Idea of GAN

  • 生成器 G:
    G 是一个生成器,给定先验分布 Pprior(z)Pprior(z) 之间的差距,这是用来取代极大似然估计

最优判别器
在极小极大博弈的第一步中,给定生成器 G,最大化 V(D,G)V(D,G) 上的积分,即将数学期望展开为积分形式:

深度学习算法-GAN

关于上面积分式的证明
在 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))

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

在数据给定,G 给定的前提下, Pdata(x)Pdata(x) 来表示他们,这样我们就可以得到如下的式子:

深度学习算法-GAN

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

深度学习算法-GAN

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

最优生成器
当然 GAN 过程的目标是令 PG=PdataPG=Pdata 的表达式中:

深度学习算法-GAN

这意味着判别器已经完全困惑了,它完全分辨不出 PdataPdata。基于这一观点,GAN 作者证明了 G 就是极小极大博弈的解。该定理如下:

深度学习算法-GAN

即当且仅当 PG=PdataPG=Pdata 的可以达到全局最优。

以上定理即极大极小博弈的第二步,求令 V(G,D∗)V(G,D∗) 等于零,这一过程的详细解释如下。

原论文中的这一定理是「当且仅当」声明,所以我们需要从两个方向证明。首先我们先从反向逼近并证明

上一篇:linux学习笔记-开机流程与主引导分区(MBR)


下一篇:windows下引导双系统卸载Linux