定义
GAN(Generative Adversarial Networks ,生成式对抗网络)是一种深度学习模型。顾名思义,模型包含两部分:
- 生成模型(Generative Model,G)
- 判别模型(Discriminative Model,D)
在二者的互相博弈学习中产生预期的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。
主要思想
首先我们要明确,使用GAN的目的是为了生成我们需要的东西(图片、语音、文字等),那么我们首先来看一下生成器G。
G
有了神经网络的基础之后,我们不难理解,有一个神经网络G,你向其输入一个随机噪声(一维向量),G就会有一个对应的产出,依据我们的需求,分为不同的类型。
那这样为什么不够呢?换句话说,为什么还需要一个D?
因为我们没有一个评判G好坏的方法。假设用目标图片直接作为标签,然后求G的输出与标签之间的Loss,那么我们训练的G就只能得到对应标签的输出,这并不满足我们的需求,我们想要的是G能够产生一个类型的图片而不是某一个特定的图片(以下都使用图片生成作为例子,其他的情况类似),这时候就需要判别器D了。
D
那么D是如何工作的?
D是一个用来评判G产生的图片好坏的模型,所以D要有自己的标准,这个标准就是我们的“标签”,也就是真正的图片,而将G产生的图片叫做虚假的图片。
于是,D开始打分:
此过程的目的就是让D知道什么是真图,什么是假图,从而在看到G产生的假图后可以分辨出来。
拟人一下
G就是学生,D就是老师;
- 学生不知道猫是什么样子,于是将自己画的猫交给老师,老师依据自己的经验(什么样的猫是真的,什么样的猫是假的)给出结果,将作业退回;
- 老师又去看到了更多的猫,变得更加严格;
- 学生依据结果改进自己的作品,画的猫更加真实(例如这次给猫加了眼睛);
- 上交作业,老师拿到学生的作品,依旧觉得不可以,再退回去,跳到2,开始重复2、3、4(就是我们的训练过程);
于是若干循环后,老师再一次拿到了学生的作品,发现凭借自己的经验,无法判断学生的猫和真实的猫哪一个是真哪一个是假,这时候我们的训练目的就达到了,也就是训练出了我们理想的生成器G。