Generative Adversarial Network(GAN)

1. 摘要

论文:《Generative Adversarial Nets》
论文链接:https://arxiv.org/abs/1406.2661
自2014年Ian Goodfellow提出了GAN(Generative Adversarial
Network)以来,对GAN的研究可谓如火如荼。各种GAN的变体不断涌现,GAN全称对抗生成网络,顾名思义是生成模型的一种,而他的训练则是处于一种对抗博弈状态中的。

GAN的基本原理其实非常简单,这里以生成图片为例进行说明。假设我们有两个网络,G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是:

  • G是一个生成图片的网络,它接收一个随机的噪声z(可以是任意的简单分布,如高斯分布),通过这个噪声生成图片,记做G(z)。
  • D是一个判别网络,判别一张图片是由Generator生成的还是来自真实数据的。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。

在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5

2. GAN的原理

GAN主要的应用就是是集中在生成,对一个分布进行建模使其生成另一种分布,将网络当作一个Gennertor来用,特别的是我们在输入的时候加入一个随机噪声z,它是不固定的,是从一个distribution中sample出来的,这个分布足够简单,以至于我们知道他长什么样子,那么这样一来输入一个分布进入Generator就会输出另一个分布。
在这里插入图片描述
上述任务其实本质上就是在做一个极大似然估计的事情,我们希望可以用某一种具体的分布形式 ,尽可能逼真地表达另一个分布 ,这样我们就相当于是得到了最终想要的结果。
eg:

  • 给定一个数据分布 P d a t a ( x ) P_{data}(x) Pdata(x)
  • 给定一个由参数 θ \theta θ定义的数据分布 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ)
  • 我们希望求得参数 θ \theta θ使得 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ) 尽可能接近 P d a t a ( x ) P_{data}(x) Pdata(x)

可以理解成: P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ) 是某一具体的分布(比如简单的高斯分布),而 P d a t a ( x ) P_{data}(x) Pdata(x)是未知的(或者及其复杂,我们很难找到一个方式表示它),我们希望通过极大似然估计的方法来确定 θ \theta θ ,让 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ)能够大体表达 P d a t a ( x ) P_{data}(x) Pdata(x) 。然而问题在于 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ)的计算非常复杂,使用极大似然估计根本无从下手。那么这时候GAN就出现了,GAN由生成器 G G G和判别器 D D D组成。为了解决上述问题我们引入判别器 D D D

  1. 我们先选取论文中的先验分布 P p i r o r P_{piror} Ppiror( 就是上述的随机分布),从该先验分布中采样z作为输入入到 G G G中,得到 G ( z ) = x G(z)=x G(z)=x, x x x是一张图片,然后由这些图构成了生成分布 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ)此时该分布主要由G决定,我们可以通过输入 z z z来在该分布上采样 x x x
  2. 我们的目标是 P d a t a ( x ) P_{data}(x) Pdata(x) ,我们希望我们构建的 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ) 与它尽可能接近。我们无法获得 P d a t a ( x ) P_{data}(x) Pdata(x) 的具体表达形式,我们只能获得它的样本。
  3. 类似极大似然估计,我们通过比较两个分布样本的差异设计loss来调节优化神经网络G(生成器可以用神经网络来实现)的参数 θ \theta θ
    ,从而实现将分布 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ) P d a t a ( x ) P_{data}(x) Pdata(x) 拉近,从而达到用 P G P_{G} PG拟合表达 P d a t a ( x ) P_{data}(x) Pdata(x)的效果。

对于生成器 G G G:

  1. G G G 是一个Generator(可以看作一个函数),输入 z z z ~ P p i r o r P_{piror} Ppiror,输出 x x x P G P_G PG
  2. 先验分布 P p i r o r P_{piror} Ppiror G G G共同决定分布 P G P_G PG

对于判别器 D D D:

  1. D D D 是Discriminator(可以看作一个函数),输入 x x x ~ P G P_{G} PG,输出一个标量
  2. D D D 用于评估 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ) P d a t a ( x ) P_{data}(x) Pdata(x)之间的差异

那么GAN最终的目标就是:
G ∗ = a r g m i n G m a x D V ( G , D ) G^* = arg \underset{G}{min}\underset{D}{max} V(G,D) G=argGminDmaxV(G,D)
我们的目标是得到使得式子 m a x D V ( G , D ) \underset{D}{max} V(G,D) DmaxV(G,D)最小的生成器 G ∗ G^* G
关于V: V ( G , D ) = E x ~ P d a t a [ l o g D ( x ) ] + E x ~ P G [ l o g ( 1 − D ( x ) ) ] V(G,D) = E_{x~P_{data}} [logD(x)] + E_{x~P_{G}}[log(1-D(x))] V(G,D)=ExPdata[logD(x)]+ExPG[log(1D(x))]

  • 给定生成器G, m a x D V ( G , D ) \underset{D}{max} V(G,D) DmaxV(G,D),衡量的就是 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ) P d a t a ( x ) P_{data}(x) Pdata(x)之间的差异,尽可能地让判别器能够最大化地判别出样本来自于真实数据还是生成的数据。
  • 所以 a r g m i n G m a x D V ( G , D ) arg \underset{G}{min}\underset{D}{max} V(G,D) argGminDmaxV(G,D) 再将后面部分看成一个整体令 L= m a x D V ( G , D ) \underset{D}{max} V(G,D) DmaxV(G,D) ,看 m i n G L \underset{G}{min}L GminL 就是固定判别器D的条件下得到生成器G,这个G要求能够最小化真实样本与生成样本的差异。也就是我们需要的使得差异最小的 G G G
  • 通过上述min max的博弈过程,理想情况下会收敛于生成分布拟合于真实分布。

对于论文中的公式:
a r g m i n G m a x D V ( D , G ) = E x ~ P d a t a [ l o g D ( x ) ] + E z ~ P p i r o r [ l o g ( 1 − D ( G ( z ) ) ) ] arg \underset{G}{min}\underset{D}{max} V(D,G)=E_{x~P_{data}} [logD(x)] + E_{z~P_{piror}}[log(1-D(G(z)))] argGminDmaxV(D,G)=ExPdata[logD(x)]+EzPpiror[log(1D(G(z)))]

简单分析一下这个公式:

整个式子由两项构成。 x x x表示真实图片, z z z表示输入G网络的噪声,而 G ( z ) G(z) G(z)表示 G G G网络生成的图片。
D ( x ) D(x) D(x)表示 D D D网络判断真实图片是否真实的概率(因为 x x x就是真实的,所以对于 D D D来说,这个值越接近1越好)。而 D ( G ( z ) ) D(G(z)) D(G(z)) D D D网络判断 G G G生成的图片的是否真实的概率。
G的目的:上面提到过, D ( G ( z ) ) D(G(z)) D(G(z)) D D D网络判断 G G G生成的图片是否真实的概率, G G G应该希望自己生成的图片“越接近真实越好”。也就是说, G G G希望 D ( G ( z ) ) D(G(z)) D(G(z))尽可能得大,这时 V ( D , G ) V(D, G) V(D,G)会变小。因此我们看到式子的最前面的记号是 m i n G \underset{G}{min} Gmin
D的目的 D D D的能力越强, D ( x ) D(x) D(x)应该越大, D ( G ( z ) ) D(G(z)) D(G(z))应该越小。这时 V ( D , G ) V(D,G) V(D,G)会变大。因此式子对于D来说是求最大 m a x D \underset{D}{max} Dmax

那么生成器和判别器该如何训练呢?
基本流程如下:
在这里插入图片描述
在这里插入图片描述

Tips:
之所以要训练k次判别器,再训练生成器,是因为要先拥有一个好的判别器,使得能够教好地区分出真实样本和生成样本之后,才好更为准确地对生成器进行更新。更直观的理解可以参考下图:

在这里插入图片描述

注:图中的黑色虚线表示真实的样本的分布情况,蓝色虚线表示判别器判别概率的分布情况,绿色实线表示生成样本的分布。 z表示噪声,z到x表示通过生成器之后的分布的映射情况。

我们的目标是使用生成样本分布(绿色实线)去拟合真实的样本分布(黑色虚线),来达到生成以假乱真样本的目的

可以看到在(a)状态处于最初始的状态的时候,生成器生成的分布和真实分布区别较大,并且判别器判别出样本的概率不是很稳定,因此会先训练判别器来更好地分辨样本。
通过多次训练判别器来达到(b)样本状态,此时判别样本区分得非常显著和良好。然后再对生成器进行训练。训练生成器之后达到(c)样本状态,此时生成器分布相比之前,逼近了真实样本分布。经过多次反复训练迭代之后,最终希望能够达到(d)状态,生成样本分布拟合于真实样本分布,并且判别器分辨不出样本是生成的还是真实的(判别概率均为0.5)。也就是说我们这个时候就可以生成出非常真实的样本

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值