GAN网络从入门教程(一)之GAN网络介绍
稍微的开一个新坑,同样也是入门教程(因此教程的内容不会是从入门到精通,而是从入门到入土)。主要是为了完成数据挖掘的课程设计,然后就把挖掘榔头挖到了GAN网络这里来了。当然,我也是新手上路,如有任何问题,欢迎在评论区留言。
GAN网络概要
GAN网络全称generative adversarial network,翻译为生成式对抗网络,是一种机器学习方法。由Ian J. Goodfello
等人于2014年在Generative Adversarial Nets 论文中提出。其中在GAN网络中,有两个模型——生成模型( generative model G),判别模型(discriminative model D)。
我们以生成图片为例子,本教程的最终的目标是实现使用GAN网络生成动漫头像。
G就是一个生成图片的网络,它接受一个随机的噪声\(z\),然后通过这个噪声生成图片,生成的数据记做\(G(z)\)。
D是一个判别网络,判别一张图片是不是“真实的”(是否是捏造的)。它的输入参数是\(x\),\(x\)代表一张图片,输出\(D(x)\)代表\(x\)为真实图片的概率,如果为1,就代表绝逼是真实的图片,而输出为0,就代表不可能是真实的图片。
在训练的过程中,生成网络G的目标就是生成假的图片去骗过判别网络D,而判别网络D的目标就是能够分辨出某一张图片是不是由\(G\)生成的。这就变成了一个博弈的过程。同时G和D的能力也在训练的过程中逐渐提高。在最理想的情况下, 则就是\(D(G(z)) = 0.5\)。
看到一个比较形象的说法:一个生成器(“艺术家”)学习创造看起来真实的图像,而判别器(“艺术评论家”)学习区分真假图像。训练过程中,生成器在生成逼真图像方面逐渐变强,而判别器在辨别这些图像的能力上逐渐变强。当判别器不再能够区分真实图片和伪造图片时,训练过程达到平衡。
因此,在训练的过程中,我们会对判别器和生成器进行学习。
判别器的学习
首先我们初始化生成器 G,然后输入一组随机向量(Randomly sample a vactor),生成器会根据输入的向量产生一些图片,我们把这些图片标注成 0(假图片)。同时把已有训练集中真实的图片标注成 1(真图片)。两者同时丢进判别器 D 中,以此来训练判别器 D。使得当输入是真图片的时候,判别器给高分(分数接近于1),而输入假图片的时候,判别器给低分(接近于 0 )。
了解深度学习的同学应该就知道了,我们有标记为1的真实图片和标注为0的假的图片,这个时候,我们就可以很轻易的对\(D\)进行训练(有了\(x\)和\(y\))。
生成器的学习
针对于\(D\)我们有标记为1和0的数据,因此我们可以对其进行训练。那么对于生成器,有\(x\)(也就是随机噪声\(z\)),那么\(y\)在哪里呢?
对于生成器,我们的目的是使得其能够生成真实的图片,换句话说,我们是希望生成的图片能够骗过\(D\)。那么如何通过判别器来产生所谓的\(y\)??我们可以这样做:
我们通过随机向量(噪声数据)经由生成网络产生一组假图片,我们将这些假图片都标记为 1(也就是说,人为的把假的图片当作真实的),然后将这些假图片输入到判别器中,判别器在对这些图片进行判别的时候,会发现这些图片是假的图片,然后给出低分,这样就产生了误差(因为标记的为1,但是判别器给了低分)。
因此,在训练生成器的时候,这个网络是串接的。而在训练生成器的时候,一个很重要的操作就是保持判别器网络的参数不发生改变,只是把误差一直方向传播,传到生成网络那块后更新生成网络的参数,这样就完成了生成网络的训练了。
在完成生成器的训练之后,我们又可以产生新的假的图片去对判别器进行训练。我们把这个过程称作为单独交替训练。同时要定义一个迭代次数,交替迭代到一定次数后停止即可。
总结
GAN网络的入门介绍就到这里,下一篇博客将会对GAN网络的原理进行介绍。数据挖掘杀我!!!