avatar

Catalog
GAN

GAN为什么是“生成器+判别器”

GAN全称是生成式对抗网络。包含一个生成器和一个判别器。

微信截图_20200302121110

下面我们以两个问题作为引导,分析生成器和判别器各自的优缺点,然后阐述将判别器和生成器结合在一起的好处,从而解释为什么GAN是“生成器+判别器”。

Question 1 :Can Generator learn by itself?

要训练Generator,我们可以采用有监督学习的方式,随机生成一些向量,并且为每个图片assign一个向量,之后便可以进行训练。

这样训练的效果是不好的,因为我们assign给每个图片的向量是随机的,这些向量其实本身并不能很好的表征图像。那么怎么使得向量可以表示图像的特征呢?这就可以用到Auto-Encoder。我们可以训练一个Auto-Encoder,然后把他的解码器部分拿出来,就是一个Generator。

微信截图_20200302120421

但是这样仍然有一个问题,就是对于不是从Auto-Encoder学到的code,Generator生成的效果并不好。

微信截图_20200302123311

解决这个问题,可以使用VAE(Variational Auto-Encoder),加噪声后进行训练。

微信截图_20200302123549

这样训练出来的生成器已经很好了,但是我们又有了新的问题:

微信截图_20200302123745

这样进行训练,机器会以有多少个pixel不同来计算loss,这和我们人的观点是不同的。如上图所示,对于图1和图2,只有一个pixel的不同,我们会认为这样的结果是不ok的,但机器会觉得ok,对于图3和图4,即时有6个pixel的不同,我们也觉得ok。


从上面的训练过程我们可以观察到生成器的优缺点:

优点:

  • Easy to generate even with deep model。

缺点:

  • Imitate the appearance
  • Hard to learn the correlation between components

Question 2 :Can Discriminator generate?

微信截图_20200302125342

  • 首先我们给定positive examples(with labels)和negative examples(with labels),然后利用这些数据训练一个判别器,positive examples 就给他高分,negative examples就给他低分。这是很好训练的,就是训练一个做分类的神经网络。

  • 之后,我们假设存在这样一个算法,他可以产生使得分类器产生分数最高得图像(比如说,穷举法,穷举所有得图像,丢到判别器中,如果产生得分数最高,就把图片选出来)。$ \widetilde{x}=arg maxD(x)$

  • 然后,我们把这个算法得到得图片标记为negative,再次去训练判别器。

  • 如此循环

可以看到判别器是可以做生成的,只是在training中要产生使得判别器分数最高的图像比较困难。

判别器还有一个性质:

微信截图_20200302131553


因此我们可以总结判别器的优缺点

优点:

  • considering the big picture

缺点:

  • Generation is hard

Generator+ Discriminator

从上面的分析我们可以看出,判别器是可以做生成的,但是在training中要设计一个可以产生使得判别器分数最高的图像的算法。惊喜的是,Generator可以充当这个算法

微信截图_20200302131839

Benefit of GAN

从判别器的角度来看,生成器充当了判别器做生成时的最难的算法部分。

从生成器的角度来看,判别器解决了生成器做生成时没有大局观的痛点。

微信截图_20200302133055

Theory behind GAN

微信截图_20200302155451

  • 现在我们有一个假的分布和一个真的分布,我们的目标是最小化两个分布之间的差异。我们可以用KL散度来衡量二者之间的差异,或者其他的散度。
  • 或者,我们可以用一个函数。理想中这个函数应该可以极大的区分样本之间的差异,才能被当作我们的衡量函数。判别器是这个函数的一部分,是一个需要训练的神经网络,只有判别器训练的足够好,使得这个函数足够好,才能更好的衡量这个差异。

在最原始的GAN中,这个函数是与JS散度相关的,后续还有其他的(如推土机距离)相关的判别器。

微信截图_20200302165232

解释为何JS散度相关:

img

微信截图_20200302170606

微信截图_20200302170614

微信截图_20200302170621

GAN的训练:

理论上,

微信截图_20200302173520

实际上,我们无法得到$E{x~P{data}}$ 和$E_{x~P_G}$ ,我们采用如下的方式:

微信截图_20200302173846

这样的话,就可以看作二分类器。

微信截图_20200302173504

所以整个算法流程如下:

微信截图_20200302170406

在训练判别器的时候,我们要repeat多次,使得整个判别器足够好。

而在训练生成器的时候,我们通常是训练一次就够了。

解释如下:

$V(G0,D_0^*)$ is the JS divergence between $P{data}(x)$ and $P_{G_0}(x)$

当我们训练一次生成器,就得到了$G_1$

微信截图_20200302172356

此时,要衡量的应该是 $P{data}(x)$ 和 $P{G_1}(x)$之间的 JS divergence ,但此时使用的损失函数依然是$V(G_0,D_0^*)$ ,所以在$G_0$和$G_1$差别不大的情况下可以多训练几次,一般只训练一次。

补充知识:

微信截图_20200302164321

微信截图_20200302155535

Author: realLiuSir
Link: http://yoursite.com/2020/03/01/GAN/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶