Generative Adversial Nets 理解及实现

1. 前言

GAN中蕴含了零和(zero-sum)游戏的理论。GAN有两个网络,一个生成器(G)和一个判别器(D),两者互相竞争。生成器目的是使判别器无法区分输入的数据是来自真实数据还是它生成的假数据。判别器目的是学习当前的数据是来自真实数据还是G生成的数据。这个游戏论的最优解是它俩达到纳什平衡,即G生成的假数据的分布和原始数据的分布是基本一致的,而D对当前数据来自真实数据还是假数据的概率输出只能是0.5。

假设真实数据分布是 P x P_x Px,假数据是先从先验分布 P z P_z Pz采样得到噪音数据 z z z,然后将其输入到生成网络G,得到 G ( z ) G(z) G(z)。其中假数据 G ( z ) G(z) G(z)是通过生成器表示的分布 P g P_g Pg生成的。平衡状态时候 P x ( x ) P_x(x) Px(x) P g ( G ( z ) ) P_g(G(z)) Pg(G(z))逼近一致,即 P x ( x ) P_x(x) Px(x)~ P g ( G ( z ) ) P_g(G(z)) Pg(G(z))。也就是真实数据 x x x与假数据 G ( z ) G(z) G(z)无法区分,真实分布 P x P_x Px与生成器的分布 P g P_g Pg基本一致。

了解后续原理之前,应先了解关于零和(zero-sum)游戏,nash平衡,最小最大(Maximin)形式。

这篇博文详细介绍了相关知识:http://www.cnblogs.com/shouhuxianjian/p/8119904.html#commentform

2. Abstract

论文提出了一个通过对抗过程中评估生成模型的新框架,新框架中,同时训练两个模型:生成模型G捕捉数据分布,判别模型D给出样本来自训练数据还是G的概率。这个框架类似于最小最大的二人博弈游戏。最优解唯一存在(见前言)。在G和D由多层感知器定义的情况下,整个系统可以用反向传播进行训练。在训练或生成样本期间,不需要任何马尔科夫链或展开的近似推理网络。实验通过对生成的样本进行定性和定量评估来展示这个框架的潜力。

3. Introduction

深度学习的任务是寻找丰富的层次模型,在人工智能领域表示各种数据的概率分布,如自然图像,包含语音的音频,自然语言语料中的符号等。目前深度学习领域最成功的的模型是判别模型,它们通常将丰富的感知输入映射到类标签上。判别模型显著成功主要是基于backpropagation和dropout,以及具有良好梯度的分段线性单元。深度生成模型影响很小的原因主要是难以估计在最大似然和相关策略中出现的很多难以计算的概率,在生成环境中难以利用分段线性单元的好处。本文提出了一个新的生成模型估计程序来分步处理这些难题。

在提到的对抗网络框架中,生成模型与判别模型对抗,判别模型学习区分样本来自模型分步还是数据分布。生成模型可以被认为是一个伪造团队,试图产生假币并在不被发现的情况下使用它,而判别模型类似于警察,试图检测假币。在这个游戏中的竞争驱使两个团队改进他们的方法,直到真假难分为止。

这个框架可以针对多种模型和优化算法提供特定的训练算法。在这篇文章中,探讨的特例,生成模型将随机噪声传输到多层感知机来生成样本,判别模型也通过多层感知机实现的,称这个特例为对抗网络。在这种情况下,我们可以仅使用非常成熟的反向传播和丢弃算法训练两个模型,生成模型在生成样本时只使用前向传播算法。不需要近似推理和马尔可夫链。

4. Related work

待续。

5. Adversarial nets

当模型都是多层感知器时,对抗模型框架是最容易直接应用的。为了在数据 x x x上学习生成分布 p g p_g pg,我们在输入变量上定义 p z ( z ) p_z(z) pz(z)作为先验,用 G ( z , θ g ) G(z,\theta_g) G(z,θg)来表示数据空间的一个映射(输入噪声到数据),这里 G G G是一个由含有参数 θ g \theta_g θg的多层感知机表示的可微函数。再定义一个多层感知机 D ( x ; θ d ) D(x;\theta_d) D(x;θd)用来输出一个单独的标量。 D ( x ) D(x) D(x)表示 x x x来自真实数据分布而不是 P g P_g Pg的概率。我们训练D来最大化分配正确标签给训练样例和由G生成的样例的概率。同时训练G来最小化 l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z)))。即,D和G的训练是关于值函数 V ( G , D ) V(G,D) V(G,D)的极小极大的二人博弈问题。

据此,优化的目标函数定义为:优化函数

  • 在对判别模型D的参数进行更新时:对于来自真实分布 p d a t a p_{data} pdata的样本 x x x而言,我们希望 D ( x ) D(x) D(x)的输出越接近1越好,即 l o g D ( x ) logD(x) logD(x)越大越好;对于通过噪声 z z z生成的数据 G ( z ) G(z) G(z)而言,我们希望 D ( G ( z ) ) D(G(z)) D(G(z))尽量接近于0(即 D D D能够区分出真假数据),因此 l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z)))也是越大越好,所以需要 m a x   D max~D max D
  • 在对生成模型 G G G的参数进行更新时:我们希望 G ( z ) G(z) G(z)尽可能和真实数据一样,即 p g = p d a t a p_g=p_{data} pg=pdata。因此我们希望 D ( G ( z ) ) D(G(z)) D(G(z))尽量接近于1,即 l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z)))越小越好,因此需要 m i n   G min~G min G。需要说明, l o g ( D ( x ) ) log(D(x)) log(D(x))是与 G ( z ) G(z) G(z)无关的项,在求导时直接为0。

在这下一节中,我们提出了对抗网络的理论分析,表明只要 G G G D D D被赋予足够的容量,比如不限参数,就可以获得数据的生成分布。下图直观的解释了该过程。实际上我们使用迭代数值方法实现这个过程。在实现过程中,如果将D和G都写入同一个循环中,即迭代一次D,迭代一次G,这种情况需要的计算能力不可实现,而且在有限的数据集基础上会导致过拟合。所以Goodfellow推荐:先训练D模型K步,然后再训练G一步。这样可以让D很好的接近最优解,并且让G改变的足够慢。

实际上,上面的目标函数可能无法为G的学习提供好的梯度。在早期的训练过程中,生成器生成的数据很不同于真实数据,因此判别器很容易判别,这导致 D ( G ( z ) ) D(G(z)) D(G(z))接近0,所以梯度 ▽ θ G [ 1 m ∑ i = 1 m l o g ( 1 − D ( G ( z ( i ) ) ) ) ] ▽_{θG}[\frac1m∑^m_{i=1}log(1−D(G(z^{(i)})))] θG[m1i=1mlog(1D(G(z(i))))]就饱和了,导致生成器 G G G的参数有梯度消失的问题,为了解决这个问题,不最小化 E z ∼ P z ( z ) [ l o g ( 1 − D ( G ( z ) ) ) ] E_{z∼P_z(z)}[log(1−D(G(z)))] EzPz(z)[log(1D(G(z)))], 而是最大化 E z ∼ P z ( z ) [ l o g G ( z ) ] E_{z∼P_z(z)}[logG(z)] EzPz(z)[logG(z)],即最小化 E z ∼ P z ( z ) [ − l o g G ( z ) ] E_{z∼P_z(z)}[−logG(z)] EzPz(z)[logG(z)]。这样训练方法不再是纯粹的最小最大游戏,不过也是一个近似的方法,且有助于解决训练早期梯度饱和的问题。
过程
其中,蓝色虚线为判别模型 D D D的分布,黑色虚线为真实数据的分布 p d a t a p_{data} pdata,绿色实线为生成模型 G G G学习的分布 p g p_g pg。下方的水平线为均匀采样噪声 z z z的区域,上方的水平线为数据 x x x的区域。朝上的箭头表示将随机噪声转化成数据,即 x = G ( z ) x=G(z) x=G(z)。从图(a)到图(b)给出了一个 G A N s GAN_s GANs的收敛过程。图(a)中 p g p_g pg p d a t a p_{data} pdata存在相似性,但还未完全收敛, D D D是个部分准确的分类器。图(b)中,固定 G G G更新 D D D,收敛到 D ∗ ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D^∗(x)=\frac{p_{data}(x)}{p_{data}(x)+p_g(x)} D(x)=pdata(x)+pg(x)pdata(x)。图(c)中对 G G G进行了1次更新, D D D的梯度引导 G ( z ) G(z) G(z)移向更可能分类为真实数据的区域。图(d)中,训练若干步后,若 G G G D D D均有足够的capacity,它们接近某个稳定点,此时 p g = p d a t a p_g=p_{data} pg=pdata。判别模型将无法区分真实数据分布和生成数据分布,即 D ( x ) = 0.5 D(x)=0.5 D(x)=0.5

6. Theoretical Results

z ∼ P z z∼P_z zPz时,生成器 G G G隐式的定义 P g P_g Pg为获得的样本 G ( z ) G(z) G(z)的概率分布。

6.1 迭代方法训练GAN的过程

训练过程

6.2 最优解 p g = p d a t a p_g=p_{data} pg=pdata

首先对于任意的生成器 G G G,考虑最优判别器 D D D

  • 命题1. 固定生成器 G G G,最优判别器 D D D D G ∗ ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D^*_G(x)=\frac{p_{data}(x)}{p_{data}(x)+p_g(x)} DG(x)=pdata(x)+pg(x)pdata(x)
  • 证明.

6.3 算法的收敛性

  • 命题2.
  • 证明.

7. Experiments

待续。

8. Advantages and disadvantages

待续。

9. 实现

参考资料:

[1] 理论详解:http://www.cnblogs.com/shouhuxianjian/p/8119904.html#commentform
[2] 实现:https://www.cnblogs.com/shouhuxianjian/p/8182742.html
[3] 翻译:https://www.jianshu.com/p/8e1a95c81dfd
[4] 理论解释:https://blog.csdn.net/u010089444/article/details/78946039

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值