GAN开山之作论文解读及感想

GAN开山之作论文解读及感想

​ 研一生涯快结束了,看了一些论文,最终还是决定继续深度学习,本科阶段学过了TensorFlow,也还算有一些基础吧,了解了一下GAN生成对抗网络,写一写学习心得

GAN模型介绍

​ 《Generative Adversarial Nets》是Ian J.Goodfellow发表在NIPS 2014上的一篇论文,也是GANs的开山之作。文中提出了GAN的模型定义以及数学公式定义与证明,并用警察和印假钞的犯罪分子的例子去解释生成器G和判别器D,最后给出了在理想情况下G能生成以假乱真的样本,而此时D的损失值loss为1/2的结论。

​ 在原文中使用了印假钞的犯罪分子与辨识假钞的警察为例,犯罪分子希望能够印刷骗过警察的假钞,而警察希望能够辨识出假钞。在一次次的博弈中,警察的辨识手段越来越丰富,而犯罪分子的技术也越来越高明。最后,假钞能够以假乱真,而警察完全无法辨识,双方在不断的博弈中达到纳什均衡。其中犯罪分子对应生成器G,而警察对应判别器D。

​ 这里我想补充一点的是,在警察和印假钞的犯罪分子的博弈之间,警察是需要分辨真钞和假钞的,也就是说,真钞和假钞都是警察所要判断的数据集,而犯罪分子是需要通过自己的手段去使假币尽量成真,也就是说生成器并不是以真实图像作为自己的目标,而是以判别器为目标,生成能够骗过判别器的数据,从而使判别器无法分辨此时的图像是真实的还是生成器生成的图片,也就是让警察分辨不出他所印的不是真钞。如果还是不太明白的话,可以拿枯叶蝶举个例子,枯叶蝶想要不让天敌发现自己,将自己伪装成枯叶,可它本身是不可能变成枯叶的,只能让自己在枯叶中不被天敌发现。

模型结构

image-20220523101914795.png

​ 这张图可以简化成下图:

image-20220523102203673.png

​ 模型分为生成器G和判别器D两部分,生成器G输入噪声z生成样本,判别器D输入真实样x和G生成的样本G(z),并输出表示输入的样本是否为真实样本概率的一个标量。

D希望最大化甄别真实样本的概率
E x ∼ p d a t a ( x ) [ l o g D ( x ) ] E_{x∼pdata(x)}[logD(x)] Expdata(x)[logD(x)]
和甄别生成样本的概率
E z ∼ p z ( z ) [ l o g ( 1 − D ( G ( z ) ) ] E_{z∼pz(z)}[log( 1−D(G(z))] Ezpz(z)[log(1D(G(z))]
而G的目标则是最小化第二项。文中使用V (G ,D)来表述这一过程:

image-20220523103124417.png

其中,z表示随机噪声,pz(z)表示随机噪声z服从的概率分布,G(z)表示生成器输入z输出假图像,x~p_data表示真实数据服从的概率分布,D(x)表示输入图像输出改图像来自x的概率。

训练过程

image-20220523103715302.png

图中黑色虚线表示真实数据分布,蓝色虚线表示判别器预测x为真实数据的概率,绿色实线为生成器生成图像分布,水平线x是图像空间,z为噪声空间。

首先,通过训练判别器D,可以在b图中看出,判别器在前期准确判断的判断率很高,在绿色实线附近蓝色虚线是很低的,这说明在训练刚开始时D能轻易分辨出真实样本,其次,训练生成器G,固定判别器D,此时c图反映出判别器还是能够大概率分辨出真实样本和生成样本,最后,随着生成器和判别器交替训练若干轮,两者达到纳什均衡,此时判别器判断输入是数据是真实数据的概率为0.5,即判别器完全无法区分两个分布。

证明过程

对于给定G,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)
由(1)式最大化判别器价值函数

image-20220523105418250.png

将上式的期望改为积分形式,可以得到:

image-20220523105552382.png

期望与积分的转化其实就是期望的定义:
E p ( X ) [ f ( x ) ] = ∫ x p ( x ) f ( x ) d x E_{p_{(X)}}[f(x)]=\int_xp(x)f(x)dx Ep(X)[f(x)]=xp(x)f(x)dx
而当z-x为单射时,对噪声z采样相当于对假图像采样,故
E p z ( z ) l o g ( 1 − D ( G ( z ) ) ) = E p G ( x ) l o g ( 1 − D ( x ) ) E_{p_z(z)}log(1-D(G(z)))=E_{p_G(x)}log(1-D(x)) Epz(z)log(1D(G(z)))=EpG(x)log(1D(x))
对于任何
( a , b ) ∈ R 2 \ { 0 , 0 } (a,b)\in\mathbb{R}^{2}\backslash\{0,0\} (a,b)R2\{0,0}
方程
a log ⁡ ( y ) + b log ⁡ ( 1 − y ) a\log(y)+b \log(1-y) alog(y)+blog(1y)
总是能够在
y = a a + b y=\frac{a}{a+b} y=a+ba
时取到最大值,
y ∈ [ 0 , 1 ] y\in[0,1] y[0,1]
在原式中
a = p d a t a ( x ) , b = p g ( x ) a=p_{data}(x),b=p_{g}(x) a=pdata(x)b=pg(x)
因此求得
D ∗ = p data  ( x ) p data  ( x ) + p g ( x ) D^*=\frac{p_{\text {data }}(\boldsymbol{x})}{p_{\text {data }}(\boldsymbol{x})+p_{g}(\boldsymbol{x})} D=pdata (x)+pg(x)pdata (x)
这里其实用得是凸函数的性质,推断公式如下:

image-20220523110537356.png

当且仅当
p g = p d a t a p_{g} = p_{data} pg=pdata
时,生成器价值函数C(G)取得全局最小解-log4.

image-20220523110925081.png

image-20220523111156495.png

image-20220523111222704.png

其实此篇文章最难懂的就是数学证明这一部分,这一部分的证明当时也是看的头很大,然后去B站搜了一些视频看,好在最后看懂了一些,GAN的学习之旅算是开了个头,以后要继续深入学习,争取有时间就把感想写下来,把输入转变为输出,继续努力!

本文所提到的文献地址:https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf

最后,书读百遍,其义自见!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值