GAN 生成对抗网络 10-4 Theory behind GAN

在这里插入图片描述
我们之前的课程中学习的生成人脸,x是一个高维空间的向量,为了方便表示,我们使用二维。实际上每一个图片都有一个distribution,可能落在图中区域,生成人脸的概率大,落在其他区域生成人脸的概率小。
这节课我们的任务是寻找这个分布distribution。

在有GAN之前,我们是怎么找到这个distribution的呢?
我们使用的是最大似然估计。
在这里插入图片描述
给出一个data distribution Pdata(x),我们只能取数据,但是不知道该分布的参数是什么。现在我们有一个含参数的分布PG(x,θ),参数是未知的,这里的参数可能指的是该分布的均值和方差(如高斯分布),也可能是其他。现在我们的任务是找到参数θ,使得两个分布足够接近。
首先从Pdata分布中sample出m个样本,我们可以计算PG,然后利用最大似然估计,使得所有概率最大,找出此时的参数θ即可。

在这里插入图片描述
通过推导可得实际求的就是PG和Pdata的KL散度取最小值时的θ。(这里没明白约等于那一步,求大佬讲解一下)
如果PG是一个高斯分布,我们可以求出θ,但是如果PG是一个特别复杂的分布,比如neural network,我们很可能求不出G,因此有了以下探索,如Generator。(实际上数据生成并不是最近才开始做,早在80年带就有人做,只是那个时候,我们把PG建模成一个GMM模型,来计算GMM模型中的参数。但是如果实际分布与GMM模型不相似,那么无论怎么求参数,都差的很远。)
在这里插入图片描述
Generator可以帮助我们找到distribution,一般来说我们取Normal Distribution,送入Generator,它会得到很多sample,这些sample的集合就是我们要找的分布。Z用哪种distribution影响并不大,因为Generator是个NN,理论上可以拟合任何复杂函数。
在这里插入图片描述
现在我们要做的是,使得生成的分布PG与Pdata在某种距离上足够接近。
现在的问题是如何计算diversion,由于PG和Pdata的formulation不知道,因此不好计算,如果二者的formulation知道了,就容易计算了。
这个就是GAN的神奇之处了。
在这里插入图片描述
分别从两个分布中sample data,如从Pdata中sample data即从database中sample data;从PG中sample data即sample vector送进Generator即可得到。
在这里插入图片描述
训练Discriminator即定义一个函数V,其自变量为D(训练D的过程中,G是固定的),我们要做的是使得Pdata中sample出来的对象越大越好,PG中sample出来的对象越小越好。
实际上该过程与训练一个二分类器类似。
在这里插入图片描述
实际上V跟某种diversion是有关系的,V越大,说明二者的divergence越大。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的推导如果不懂的话没关系,推导本身不太重要,主要是为了说明,我们训练discriminator实际上是为了使得Pdata和PG两个分布之间的JS散度最大。
在这里插入图片描述
我们要求的G实际上是使得PG和Pdata最为接近的G,即argminD,把D带入可得到上述式子。
一个直观理解,假设只有G1,G2,G3三个Generator,G3即为所求。

下面来解minmax这个式子
在这里插入图片描述
实际上我们训练的过程step1和step2就是在解minmax这个问题。
下面我们来看一下为什么
在这里插入图片描述
把maxV(G,D)记作L(G),求L(G)的最小值,现在有一个问题是max能求微分吗?答案是可以,如上图所示。
在这里插入图片描述
上述算法的过程是:先随机给定一个G0,找到最大的V,然后使用梯度下降算法可以得到新的G,G1,以此类推。。。
事实上该计算过程与GAN计算过程极为类似。
在这里插入图片描述
这件事情未必在真正的decrease JS divergence
在这里插入图片描述
因为当你把G0更新到G1的时候,最大值点可能就变了,同样的D0可能已经不能衡量JS 散度。

我们可以控制步长,使得步长不要太大来更新G,这样G0和G1还是很相似的。
因此,我们在train discriminator的时候可以多迭代几次,train到底。train Generator的时候可以迭代次数稍微少一些,避免上述假设不成立。

在这里插入图片描述
在实际应用中,我们的E是无法计算的,只能通过sample来做,即
在这里插入图片描述
我们发现其实该过程和二分类问题很像,Pdata中的数据当作正丽,PG中的数据当作负例,通过训练交叉熵损失函数,使其最小即可。

在这里插入图片描述

回顾一下GAN的训练过程(上图)。特别注意Generator不能train太多,否则discriminator无法衡量JS散度。
在这里插入图片描述
在实践中,由于D(x)通常很小,上图中第一个式子该位置斜率较小,可能难以训练,因此把损失函数改为第二个式子。实际上不该问题也不大。它们有不同的名字。
在这里插入图片描述
在这里插入图片描述
直观理解:先用Generator随机生成数据,比如生成在真实数据左边,那么Discriminator会倾向于给左边低分,右边高分。这样Generator会倾向于在右边生成数据,Discriminator会给右边低分,左边高分。如此往复训练,直到Discriminator无法分开两个分布。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值