
为什么不用 Discriminator 生成图片
其实 Discriminator 会从整体来考量图片好坏
假设我们遍历所有 x 然后输入到 Discriminator 中看 Discriminator 是否给高分来生成图片。但是 Discriminator 更擅长是批评他并不擅长生成。如果我们假设 Discriminator 可以生产图片,但是如何训练呢?因为我们手上只有真实图片,而没有反面例子。
图

所以从哪里找反面例子,如果我们只是给一些 noise(噪点)图片给机器告诉这是负面例子,那么机器可以轻易分辨。那么这是他判别能力就比较弱,这是我们需要给很好的反面例子。
如何训练 Discriminator 让他也能够做生成图片这件事,我们给 Discriminator 一些真实图片和一些假的图片,并告诉他那些是假的那些是真的。然后进行训练后,再用 Discriminator 做生成图片的工作。让他生成一些他觉得是好的图片。然后将这些生成图片和真实图再放入到 Discriminator 进行下一次迭代。
图

我们知道图片是位于高维空间的流形(manifold),今天为了演示我们通过二维空间来说明一下如何训练 Discriminator 来生成图,我们图片服从正态分布,绿色点表示每一张图片,红色线表示 Discriminator 的学习到函数,Discriminator 会给真实的点高分。
图

理想的情况是给出现真实图片的位置高分,而没有出现真实图片位置压低(也就是给个低分)。
图

蓝色点表示机器生产的点,而绿色点表示真实图片。

然后训练 Discriminator ,Discriminator 会给真实图片高分而给机器生产图片低分。其他区域 Discriminator 并不知道应该给高分和低分。

从上图可以看到 Discriminator 会根据给了高分地方进行生成图片,但是我们知道这个位置并不是真实图片位置,所以在下一轮迭代后,会调整到真实图片位置给高分,同时压低这个区域的曲线。


网友评论