生成式对抗网络
(GAN,Generative Adversarial Networks)是一种深度学习模型,模型通过生成模型
(Generative Model)和判别模型
(Discriminative Model)的互相博弈学习产生相当好的输出。
判别模型 :
输入变量,根据某种模型预测
,例如,给定一张图,判断其中动物是猫是狗;
生成模型 :
给定某种隐含信息,随机产生
观测数据,例如,给定一系列猫的图片,产生一张不在原数据集中的新的猫咪图片。
对于判别模型,损失函数
是容易定义的,因为输出的目标相对简单;但对于生成模型,损失函数的定义就不是那么容易,因为其往往是难以数学公理化定义的范式。所以不妨把生成模型的回馈部分,交给判别模型处理。
GAN的基本思想 :
这里以生成图片为例进行说明。假设我们有两个网络,G(Generator)
和D(Discriminator)
:
1.G是一个生成网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)
;
2.D是一个判别网络,判别一张图片是不是"真实的",它的输入参数是x,x代表一张图片,输出D(x)
代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片;
3.在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的"博弈过程"
;
4.最后博弈的结果是什么?在最理想的状态下,G可以生成足以"以假乱真"的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5
;
5.这样我们的目的就达成了 : 得到了一个生成式的模型G
,它可以用来生成图片。
GAN的应用 :
1.图像生成;
2.数据增强 : 对于小数据集,生成一些数据,但新生成的数据如何label呢?
一般有三种做法,一是添加新类,二是分到可信度最高的一类,三是等可能性分类。