一.GAN网络机理
首先先从一幅图入手,如图1所示:
图1. GAN作用机理
假设在训练开始时,真实样本分布、生成样本分布以及判别模型分别是图中的黑线、绿线和蓝线,其中噪声就是图中的z,目的就是为了生成绿线。
第二小图所示,固定生成样本,先让判断器判断准,以蓝线和黑线交点为起点,以右判断为真实,以左判断为假,感觉自己很聪明能够判断真假。
然后来到第三小图,生成器去和真实样本数据做一个拟合,从而误导判决器,但判决器还是能辨认出来,生成器骗不了它。
第四小图为,当生成器的数据概率分别和真实数据概率分布重合时,判决器从此就变得傻了,不能对其辨别真伪,判决器失败,生成器成功,以假乱真。
二.分析问题
图2为GAN流程图:
图2 GAN大体流程
我们有了上述思路和流程图,就可以来确定问题去实现它了~(明确几个问题去解决):
1. 目标函数该如何设定?
2. 如何生成图片?
3. G(判决器)和D(生成器)应该如何设置?
4. 如何进行训练?
1.GAN目标函数确定
判别模型的目标函数如下:
判别模型目标函数
1. 整个式子由两项构成。x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。
2. D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的。所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。
3. G的目的:G应该希望自己生成的图片越接近真实越好。
4. D的目的:D的能力越强,D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大(max_D)
5. trick:为了前期加快训练,生成器的训练可以把log(1-D(G(z)))换成-log(D(G(z)))
2.GAN图片生成 训练方法
以下为论文原文:
刚开始看是不是感觉不知如何下手,那么接下来换一种方式来看待它。
下图为形象化的GAN训练方案
形象化的训练方案
input1为真实数据;input2为生成数据
对于判决器而言,其标签认定,对于input1的输出正常应该为“1”,input2的输出正常应该为“0”
第一步,首先把左图的“T”(生成器)固定住,生成一批样本,然后和真实数据一块送至判决器判决,这步为训练的判决器,希望判决器能把它俩区分开,分别打上“1”和“0”标签
第二步,先把右图的“T”(判决器)固定住了,然后调节生成器,让生成的数据也为“1”,去把判决器混淆。这步为训练生成器。
注:我们所有的图片都是靠噪音来生成的
本文中展示的脚本都添加了注释,若难以理解,可参见keras文档
具体代码,参见github源码
3.GAN图片生成 生成器G
设置生成器G
以下是生成器G的脚本:
4.GAN图片生成 判别器D
参见github源码:https://github.com/jacobgi
设置判别器D
以下是判别器D的脚本:
5.GAN图片生成 辅助函数
把判别器D固定,使其能够调整生成器G。
6.GAN图片生成 训练
然后就可以开始进行训练了~~~
7.GAN图片生成 生成
这就形成了噪音经过一个G网络,生成了一个图像,这幅图像就成功骗过了判决器D。
三.总结
以上就是浅谈了GAN网络的原理,并且搭建了一个原始的GAN网络。希望和大家共同努力进步。
感兴趣的小伙伴~可以实现CGAN制定类的输出,DCGAN稳定训练网络,infoGAN实现等~~~
作者:hahazhen
链接:https://www.jianshu.com/p/51f969b7922f
共同学习,写下你的评论
评论加载中...
作者其他优质文章