探讨GAN背后的数学原理(下)

电子说

1.3w人已加入

描述

2.2 判别器:有问题?GAN来了!

GAN由生成器G和判别器D组成。

其实上面我们已经基本介绍了生成器G的由来了,并且我们遇到了一个问题: 生成器极其复杂的计算方式导致使用极大似然估计根本无从下手啊!!!

为了解决这个问题,我们引入了判别器D!

现在GAN的结构就完备了!!

对于生成器G:

  1. G 是一个函数,输入生成器 ,输出(上面已经介绍了)

    生成器

  2. 先验分布 生成器, 生成器和G共同决定的分布生成器

对于判别器D:

  1. D是一个函数,输入生成器,输出一个scalar
  2. D用于评估生成器生成器之间的差异(解决上一小节提出的问题)

那么,GAN的最终目标-->用符号化语言表示就是:

生成器

我们的目标是得到使得式子生成器最小的生成器生成器.

关于V:

生成器

给定G, 生成器衡量的就是分布生成器生成器的差异。

因此,生成器也就是我们需要的使得差异最小的 G .

详细解释 V(G,D) :

对于生成器:

固定G ,最优生成器 最大化:

生成器

假设D(x) 可以表达任何函数

此时再固定 x ,则对于 生成器,我们可将其看成是关于D的函数: 生成器

生成器

解得

生成器

即:

生成器

则此时对于原式 V(G,D) (将生成器代入):

生成器

JSD表示JS散度,它是KL散度的一种变形,也表示两个分布之间的差异:

生成器

与KL散度不同,JS散度是对称的。

以上的公式推导,证明了生成器确实是衡量了 生成器生成器之间的差异。

生成器

此时,最优的G:

生成器

也就是使得生成器最小的G

生成器

生成器时,表示两个分布完全相同。

对于生成器 ,令 生成器

我们该如何优化从而获得生成器呢???

我们希望通过最小化损失函数L(G) ,找到最优的G。

这一步可以通过梯度下降实现:

生成器

具体算法参考:

第一代:

  1. 给定生成器(随机初始化)
  • 确定生成器 使得 V(生成器,D) 最大。此时 V(生成器,生成器) 表示生成器生成器的JS散度

  • 梯度下降:生成器 .得到

    生成器

第二代:

  1. 给定生成器
  • 确定生成器 使得V(生成器,D) 最大。此时V(生成器,生成器)表示生成器生成器的JS散度

  • 梯度下降:生成器 .得到

    生成器

。。。

后面的依此类推

以上算法有一个问题: 如何确定生成器使得 V (D ,G**)**** 最大???**

也就是:给定 G,如何计算 生成器

回答:

生成器采样生成器

生成器采样生成器

因此我们可以将生成器从期望值计算改写为对样本计算(近似估计):

生成器

这很自然地让我们想到二分类问题中常使用的交叉熵loss

因此,我们不妨联想:

D是一个二分类器,参数是生成器

来自生成器的采样生成器作为正样本

来自生成器的采样生成器作为负样本

那么此时,我们就将问题转化成了一个二分类问题:

交叉熵loss大 -->生成器生成器 JS散度小

交叉熵loss小 -->生成器生成器 JS散度大

此时,D就是可以使用一个神经网络作为二分类器,那么确定D,也就是可以使用梯度下降来优化获得D的最终参数。

GAN的最终算法流程:

初始化参数生成器(for D)和生成器(for G)

对于训练的每一轮:

第一部分 学习优化判别器D:

  • 生成器采样生成器

  • 生成器 采样

    生成器

  • 通过生成器 生成器获得生成样本

    生成器

  • 梯度下降更新生成器来最大化 :

    生成器:

    生成器

注:以上第一部分可以重复多次:此过程本质上是在测量两分布之间的JS散度

第二部分 学习优化生成器G:

  • 再从生成器采样另一组生成器
  • 梯度下降更新生成器来最小化 : 生成器:生成器 .实际上生成器第一项与G无关,梯度下降只需最小化生成器即可。

注:以上过程仅一次

最后的话:

其实在GAN之前,就已经有Auto-Encoder,VAE这样的方法来使用神经网络做生成式任务了。

GAN的最大的创新就是在于非常精妙地引入了判别器,从样本的维度解决了衡量两个分布差异的问题。

这种生成器和判别器对抗学习的模式,也必将在各种生成式任务中发挥其巨大的威力。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分