为什么需要生成式对抗网络?

向神经网络展示大量的人和车的图片,并告知其哪一张是车,哪一张是人,最终,这个神经网络就可以学会区分人和车。当新输入一张车或人的图片时,它会告诉你这是一个人还是一辆汽车。

如图1.1所示:基本上,这个神经网络所做的就是构建一个有意义的结构。如果让这个神经网络生成一张新的未曾出现过的人或车的照片,它无法做到,如图1.2所示。

图1:卷积神经网络

通常需要生成呈相同输入分布的新样本,为此需要一个生成模型。

生成式网络

图2:生成网络的输入数据

如果将这三种类型的数据(图2)输入到生成网络,该网络的学习模型将如图3所示。当试图通过这个训练好的生成式神经网络生成样本时,它将生成图4,因为图4的模型与以上所有三种输入分布模型的平均值相似。

但通过观察,可以清晰地判断出这个样本不属于任何一种已输入的数据分布类型。该如何解决这个问题呢?答案是随机性。也就是说,生成模型通过增加随机性来产生相似度极高的结果。

图3:学习模型;图4:生成式网络的输出结果

对抗性网络

假设要训练一个神经网络来正确识别0到9之间的数字,我们先要提供大量数字的图像。训练时,当网络预测正确时将会得到奖励,预测错误时则会给出反馈,这样网络就会相应地调整其权值,并且对所有数字的所有图像重复这个过程。

但作为人类的我们在历经这个过程时其实并非如此。如果你是一名教师,正在教一个孩子如何识别0-9。对于数字0,2,3,4,5,6,8,9,他有70%的把握回答出正确答案。但当他得到1和7这两个数字时,他心中只有50%的把握(他可能无法分辨)。因为对于他来讲,数字1和7看起来十分相似。

你注意到了这一点,于是开始重点关注1和7,这是你学生面临的主要问题。但如果你一直问同样的问题,他最终会失去动力并放弃,这种平衡在人类身上是很常见的,但神经网络不是这样,神经网络没有感觉。我们可以就这些错误对网络进行一次又一次的训练,直到出错率降到与分辨其他数字的出错率相同为止。

现实中,有些人可能会遇到这样的情况:老师不停问他们同样的问题,他们不断失败,甚至会觉得是老师想让他们失败。这实际上是一种反向行为。

那么如何在神经网络中重现类似的场景?实际上,我们可以建立一个真正的对抗性网络。如果有程序真正使神经网络尽可能多地犯错,产生上述那种反应,并且它发现了任何弱点,那么这道程序就会针对性地迫使学习者学会根除这种弱点。

生成式对抗网络

生成式对抗网络由两个模块组成:一个是生成模型,另一个是判别模型。在训练生成式对抗网络时,这两个网络实际上是互相博弈的关系,都在竞争唯一的参数——判别模型的错误率。生成模型调整其权重以求产生更高的误差,判别模型通过学习试图降低误差。

生成式对抗网络的训练过程

示例

有一个伪造者试图造一幅假画并且将其高价出售。与此同时,有一个检查员负责检查并判断这些画的真伪。

起初,伪造者只是在纸上随意画几条线,检查员此时无法确定真假。因为一开始判别模型和生成模型都还没有进行任何学习。

后来,造假画者学习了更多不同种类的画法,制作出一幅看起来像原画的画,检查员也学习精细的图案来区分赝品和原画。当检查伪造者新生成的画时,检查员就会识别出画是赝品然后拒绝它,这个过程会不断重复。

最终,出现了这样一种情况:伪造者制作出一张看起来很贴近原画的图片,而检查员无法确定其真伪。这在神经网络中表现为,生成模型生成一张看起来和原画一模一样的图,而判别模型的输出为0.5,表示其无法区分图片的真假。这时可以把判别模型从神经网络中移除,得到了一个经过充分训练的生成模型,可以生成看起来非常真实的画。

除此之外,如果将大量的汽车图像导入生成式对抗网络中,以生成一个新的汽车样本,那么有一点是确定的,那就是生成式对抗网络此时已了解什么是汽车。

图源:unsplash