论文阅读之Generative Adversarial Nets

论文阅读之Generative Adversarial Nets

Generative Adversarial Nets(GAN)

作者:IanJ.Goodfellow

.

一个生动的比喻:

生成器(Generator,G)即假钞制造者,辨别器(Discriminator,D)的任务是识别假钞,前者想要尽力蒙混过关,而后者则是努力识别出是真钞(来自于原样本)还是假钞(生成器生成的样本)。两者左右互搏(bushi),最后达到一种平衡:生成器能够以假乱真(或者说生成的与原样本再也没差),而判别器以1/2概率来瞎猜。

一些数学定义:

数学符号含义

两个模型数学上的衡量:

衡量的函数如下:
其中判别器D的任务是最大化右边这个函数,而生成器G的任务是最小化右边函数。
那么这个函数是个啥意思呢,咱来感性地理解一下。首先先看一个式子:D(x)(1-D(G(z)),D(x)就是判别器D认为样本来自于原分布的概率,而D(G(z))就是判别器D误把来自于生成器G造的假样本判别成真的概率。那么D的任务自然是要最大化D(x)同时最小化D(G(z))嘛(即最大化1-D(G(z))),所以综合一下就是最大化D(x)(1-D(G(z)),为了以后方便干脆取个log,增减性不变,所以就成了logD(x)+log(1-D(G(z))。
而G想让pg和pdata足够像,也就是D(G(z))足够大;而logD(x)并不对它本身有啥影响,所以他的衡量函数可以只是min{log(1-D(z))},也可以加一个对他来说的常数后变为->minV(G,D)

这里作一点说明为何是1-D而不是D: 训练早期,当G的生成效果很差时,D会以高置信度拒绝生成样本,因为它们与训练数据明显不同,log(1-D(G(z)))饱和。因此选择最大化logD(G(z))而不是最小化log(1-D(G(z)))来训练G较好。

训练方法及算法

最小化目标函数的优化:迭代数值法。分别对判别器D和生成器G进行交互迭代,固定G优化D,之后再固定D优化G,直至过程收敛。

在这里插入图片描述
算法如上。 先选定m个z生成假样本pg(z),再选定m个真样本pdata(x),然后沿着梯度方向(函数上升最快方向)更新判别器D;然后固定D,更新生成器G。训练过程

上图为一例子,真实样本为黑点线,生成器G的生成样本pg为绿线,而判别器D的判别模型为蓝色点线,z噪声,为一个不变的分布,而被生成器G映射到x上(随着G的改进映射也在改变,本均匀的z在x轴上不同地方密度不一样代表着pg的变化)。
a图中最开始判别器D(蓝线)无法很好识别出二者(即使绿线是黑线的一个很糟糕的模拟);
然后我们固定绿线不动优化判别器D,可以看出b图中蓝线在右边生成器pg高的时候概率很低,说明已经能很好识别出二者;
接下来我们固定D来改进G,让它不断往判别器给的数值高的地方(同时也是原分布)接近,更加像pdata;
然后重复b和c过程直到d,最终收敛到了这样一个结果:G的pg完全模拟了原分布,而D也只能以处处1/2的概率瞎猜

数学推导

1.首先考虑任意给定G后,D的最佳:

在这里插入图片描述
证明:给定G,D的目的都是最大化V(G,D):(将期望E换为了计算式子积分形式)
在这里插入图片描述
其中第二个等式是把G将z转化为x的过程考虑进来了,直接用∫pg(x)log(1-D(x))dx,来代替
∫pz(z)log(1-D(g(z))dz,(当然这里应该再加个括号,两个都是积分项…一开始以为前一个是积分后一个直接把积分算出来了,吓了一跳)
而考虑函数:f(y)=alog(y)+blog(1-y),其最值取在y=a/(a+b)处,这里ab代入后也就是,给定pdata(x),pg(x)后,D(x)=pdata(x)/(pdata(x)+pg(x))可以使得积分号里面的东西取得最大值,也就是可以使得函数V取得最大值。那么就相当于任意G可以确定使得max达到的最好的D了,那么此时我们的V(G,D)就可以变为一个G的函数C(G):
在这里插入图片描述
(鬼知道这个图和上下行挨得有多紧密我截了多少次图…sigh 还是不太干净 就这样吧555)
那么接下来任务就是找到可以使得C(G)最小的G了。

2.可以证明pg=pdata时,C(G)取到最小值-log4。

证明:首先pg=pdata时,D*G(x)=1/2,此时代入后C(G)=log1/2+log1/2=-log4。然后证明其他情况的C(G)≥-log4。

因为:在这里插入图片描述
所以C(G)=V(G,D*)=V(G,D*)-log4-Ex-pdata[-log2]-Ex-pg[-log2]
=-log4+KL(pdata||(pdata+pg)/2)+KL(pg||(pdata+pg)/2) =-log4+2JSD(pdata||pg)
又写了一遍具体运算过程,字丑orz
在这里插入图片描述

而KL散度或者JS距离来度量两个概率分布之间的相似性,JSD是≥0的,只能两分布相等取到0,故C(G)≥-log4,且仅在pg=pdata时取得最小值。因此,我们证明了所需结论。
但是,光证明了啥时候取得不够,我们还需要证明收敛性。

3.证明收敛性

命题:如果G和D有足够的性能,对于算法1中的每一步,给定G时,判别器D能够达到它的最优,并且通过更新pg来提高判别准则:在这里插入图片描述
那么pg将收敛到pdata

证明:将V(G,D)=U(pg,D)视作pg的函数,则U为pg的凸函数,其上确界的次导数一定包括该函数最大值处的导数,所以给定D时,通过梯度下降算法更新pg从而优化G时,pg一定会收敛到最优值。而之前又证明了目标函数只有唯一的全局最优解,所以pg会收敛到pdata。(其实本人并没有很搞清楚这一步,上确界什么的…orz)
实际上优化G时是更新θg而不是pg。尽管缺乏理论证明,但是(据论文中说)实践效果不错。

实验

理论部分结束~下面来康康论文中提到的实验效果

  • 该模型是多个数据集上进行了实验:MNIST、TFD、CIFAR-10
  • 采用了多种激活函数(生成器混合使用rectifier linear activations和sigmoid激活函数,而判别器使用maxout激活):激活函数作用是可以在网络中引进非线性性质,否则网络就变成了一堆矩阵相乘的简单形式orz
  • 衡量的标准为对数似然(熟悉的这货):在这里插入图片描述

补充:
MNIST:https://www.cnblogs.com/xianhan/p/9145966.html
TFD未找到orz
CIFAR-10:https://blog.csdn.net/qq_36653505/article/details/87864405

训练生成样本结果:在这里插入图片描述这图说实话没有特别看懂啥意思orz大概就是说右边框框里的是原来的图,左边那堆是咱们生成器G生成的。看别的还行,反正看那个人脸嘴的那块我jio还是不太行 有点瘆人(
在这里插入图片描述这货还有另一个用途:就是随便选几个图片他给你生成连续的过渡图片,比如两头的给定,中间再插一个,他就能给你生成一串,左边那个可能康不出来,但是右边那个图很明显是插了一个7一个9和一个1,然后G就给你瞎编了这么多过渡图片出来,这好像是之前什么VAN做不到的(

实验结果数据:
在这里插入图片描述这个数据应该就是那个C(G)在不同数据集上的数值表现了,那个±后面的数是方差。

  • 缺点:方差较大,高维空间表现不是很好,但是即使这样仍然是已知方法中较好的一个了
  • 优点:可以采样而非直接估计似然,促进了该模型的进一步评估

理论总结优缺点:

缺点:

  • 没有明确给出pg(x)的式子来
  • 训练期间G与D必须较好地同步,尤其是必须注意D的更新,否则比如固定一个较低级的D然后使劲更新G,那G不用很努力就能骗过这个D了,就懒得更新了,即使你给他不同的z可能生成的还是一样的x,反正都能骗过去了。这叫Helvetica
    (https://blog.csdn.net/sdnuwjw/article/details/88691504,可以看出这位老哥真的是个文化人儿orz)

优点:

  • 通过反向传播就能获得梯度,不用马尔科夫链(减少计算量 & 也可以模拟一些马尔科夫链弄不了的,比如很尖锐甚至退化的分布,而马尔可夫这货只能弄一些很模糊的)
  • 学习期间无需推理(咱不懂啥意思orz)
  • 模型可融入多种函数
  • 对比其他模型,优势主要在计算上(一个大表格,对比各种方法,懒得弄进去了)
  • 可用于数据实例

结论&未来研究方向:

该框架允许多种直接的拓展:

  • 将c作为G和D的输入条件,可获得p(x|c)

  • 给定x,可通过训练一个任意的模型来学习近似推理,从而预测z

  • 可近似模型的条件概率: 在这里插入图片描述(S为x的某一子集)(这条太丑了 不知道咋排版 就这样凑合着吧)

  • 半监督学习:来自鉴别器或推理网络的特征,可以在标记数据有限时提高分类器的性能

  • 效率改善:可设计更好方法来协调G和D/确定更好的分布来获得z

最后他老人家还建议了往这些方向努努力(

补充:

小班课上老师还说了一种情况,作为一个缺点补充:
比如原分布是有两种峰值的(比如产生猫和兔子的图片),而G只学习到了一种峰值(比如只会产出猫);而如果D不够厉害,只会说判断猫图片来了,对属于原样本,兔子图片来了,也属于原样本,那么一个只会产生猫图片的G也能完全骗过去D(因为产生图片全为猫,D全说对对)
在这里插入图片描述就像这样,黑线是原样本,而红线只模拟了一个峰,就很菜(x

而这时候就需要更新D,比如让他还要判断判断生成图片猫和兔子比例啊之类的,不能让G只学一个峰。
但是实验中你如何判定D该更新了是很难的,这也是一个缺点吧hhh

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值