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

电子说

1.3w人已加入

描述

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

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

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

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

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

对于生成器G:

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

    GaN

  2. 先验分布 GaN, GaN和G共同决定的分布GaN

对于判别器D:

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

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

GaN

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

关于V:

GaN

给定G, GaN衡量的就是分布GaNGaN的差异。

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

详细解释 V(G,D) :

对于GaN:

固定G ,最优GaN 最大化:

GaN

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

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

GaN

解得

GaN

即:

GaN

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

GaN

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

GaN

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

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

GaN

此时,最优的G:

GaN

也就是使得GaN最小的G

GaN

GaN时,表示两个分布完全相同。

对于GaN ,令 GaN

我们该如何优化从而获得GaN呢???

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

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

GaN

具体算法参考:

第一代:

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

  • 梯度下降:GaN .得到

    GaN

第二代:

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

  • 梯度下降:GaN .得到

    GaN

。。。

后面的依此类推

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

也就是:给定 G,如何计算 GaN

回答:

GaN采样GaN

GaN采样GaN

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

GaN

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

因此,我们不妨联想:

D是一个二分类器,参数是GaN

来自GaN的采样GaN作为正样本

来自GaN的采样GaN作为负样本

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

交叉熵loss大 -->GaNGaN JS散度小

交叉熵loss小 -->GaNGaN JS散度大

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

GAN的最终算法流程:

初始化参数GaN(for D)和GaN(for G)

对于训练的每一轮:

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

  • GaN采样GaN

  • GaN 采样

    GaN

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

    GaN

  • 梯度下降更新GaN来最大化 :

    GaN:

    GaN

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

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

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

注:以上过程仅一次

最后的话:

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

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

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

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

全部0条评论

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

×
20
完善资料,
赚取积分