通俗易懂!生成对抗网络GAN入门

1 生成对抗网络初识

  • 让我们先用一个小例子来认识一下生成对抗网络。首先我们来认识一下生成对抗网络的双方一一生成器与判别器,在训练过程中两者的配合非常重要。我们可以把生成器想象成一个名画赝品制作者,他的成长过程是从一个零基础 的“小白” 慢慢成长为一个“仿制品制作专家” 。而判别器则担任的是一个古董鉴别侦探的角色,一开始他仅仅是一个普通等级的鉴别师,在与赝品制作者的博弈中逐渐成长为一个技术超群的鉴别专家(见下图 )。

在这里插入图片描述

  • 生成对抗网络的博弈现在就开始了 。让我们来看一下最初的情况是怎样的 :制作者还是一个什么都不懂的“小白”,也不懂得真实的名画到底应该是什么样子的,所以 完全凭借自 己的心意随意制作产品。
    面对如此简单可分辨的仿制品,虽然此时初级鉴别者自身功力还不深,但是他却还是能够一眼就能分辨孰真孰假。在分辨完成的同时,鉴别者会将自己的判断结果写成报告:比如做工不精细、颜色不协调等。第一次对抗就这么完成了,似乎离我们期待的目标还非常远,但是没关系,这才刚刚开始。
  • 现在进入第二阶段,仿造者通过一些渠道 ,拿到了鉴别者的判断报告, 他认真研读了里面的每一条信息,根据这些信息重新制作膺品,虽然他依然不知道真实名画到底是什么样子,但他希望能够通过这份报告的信息来“骗过”鉴别者。 这一次创作的赝品比起之前的来说确实要成熟不少。到了鉴别者这边,当他再次拿到膺品和真品时,要重新判断作品的真假,这一次他也发现了膺品制造者的能力有所提升了,为了区分真假作品,他需要花时间去寻找一些更深入的区别点。当然,在一番努力过后,鉴别师顺利完成了任务,同时他也如第一次一样,将他区分真假的理由写成报告(之后依然会流出到赝品制造者手里)。第二次对抗到这里也完成了。
  • 当然对抗远远没有结束,如同上述的故事一直持续了很多很多次…·
  • 在经历了N次的互相博弈以后,两者在整个训练过程中都变得非常强,其中的造假者一方几乎能制作出以假乱真的作品,而鉴别者一方也早已是“火眼金睛” 的鉴别专家了。
  • 最后一次博弈是这样的:膺品制作者已经完全摸透了鉴别师的心理,虽然他还是没有见过真的古董是什么样子,但是对古董应该具备什么样的特性已经拿捏得死死的,对于鉴别师可能的分辨过程也全都了然于心。对于如此以假乱真的赝品,虽然鉴别者拥有“火眼金睛”,但已然是无能为力了,他可以做的只能是凭运气猜测是真是假,而无法用确定的理由进行判断。
  • 这也就是生成对抗网络最终的目的,而我们所需要的就是培养出这个能够以假乱真的生成器。

2 生成对抗网络算法

生成对抗网络(Generative Adversarial Networks,GAN)是通过对抗训练的方式来使得生成网络产生的样本服从真实数据分布(如图片,语音等)。在生成对抗网络中,有两个网络进行对抗训练。一个是判别网络,目标是尽量准确地判断一个样本是来自于真实数据还是生成网络产生的;另一个是生成网络,目标是尽量生成判别网络无法区分来源的样本。这两个目标相反的网络不断地进行交替训练。当最后收敛时,如果判别网络再也无法判断出一个样本的来源,那么也就等价于生成网络可以生成符合真实数据分布的样本。生成对抗网络的流程如下图所示。
在这里插入图片描述

2.1 判别网络

判别网络(Discriminator Network) D ( x , ϕ ) D(x,\phi) 的目标是区分出一个样本x是来自于真实分布 p r ( x ) p_r(x) 还是来自于生成网络生成的分布 p θ ( x ) p_{\theta(x)} ,因此判别网络实际上是一个两类分类器,用标签y=1来表示样本来自真实分布,y=0表示样本来自生成网络。 D ( x , ϕ ) D(x,\phi) 判别网络的输出为输入x属于真实数据分布的概率,即
在这里插入图片描述

则样本来自生成网络的概率为:
在这里插入图片描述

给定一个样本(x,y),y={1,0}表示其自于真实分布 p r ( x ) p_r(x) 还是生成分布 p θ ( x ) p_{\theta(x)} ,判别网络的目标函数为最小化交叉熵,即最大化对数似然。
在这里插入图片描述

其中 θ \theta ϕ \phi 分布是生成网络和判别网络的参数。
判别网络的任务总结:学习把真实的分布判定为True(1),增强自己的判别能力;努力把生成网络生成的分布判定为False(0)。

2.2 生成网路

生成网络(Generator Network)的目标刚好和判别网络相反,即让判别网 络将自己生成的样本判别为真实样本。
在这里插入图片描述

上面的这两个目标函数是等价的。但是在实际训练时,一般使用前者,因为其 梯度性质更好。我们知道,函数log(x),x ∈(0,1)在x接近1时的梯度要比接近 0时的梯度小很多,接近“饱和”区间。这样,当判别网络D以很高的概率认为 生成网络G产生的样本是“假”样本,即这时目标函数关于θ的梯度反而很小,从而不利于优化。
生成网络的任务总结:输入z(随机数),不断改变自己,努力生成与真实分布相似的分布,让判别网络以为是True,即判定为1。

2.3 训练

和单目标的优化任务相比,生成对抗网络的两个网络的优化目标刚好相反。因此生成对抗网络的训练比较难,往往不太稳定。一般情况下,需要平衡两个网络的能力。对于判别网络来说,一开始的判别能力不能太强,否则难以提升生成网络的能力。然后也不能太弱,否则针对它训练的生成网络也不会太好。在训练时需要使用一些技巧,使得在每次迭代中,判别网络比生成网络的能力强 一些,但又不能强太多。 生成对抗网络的训练流程如算法13.1所示。每次迭代时,判别网络更新K 次而生成网络更新一次,即首先要保证判别网络足够强才能开始训练生成网络。在实践中K 是一个超参数,其取值一般取决于具体任务。

在这里插入图片描述

参考:
邱锡鹏:《神经网络与深度学习》
史丹青:《生成对抗网络入门指南》

猜你喜欢

转载自blog.csdn.net/weixin_44378835/article/details/108083965