视频教程的链接:http://campus.swarma.org/gpac=8
一、什么是GAN
框架简述
GAN全称是Generative Adversarial Nets,中文叫做“生成对抗网络”。
在GAN中有2个网络,一个网络用于生成数据,叫做“生成器”。另一个网络用于判别生成数据是否接近于真实,叫做“判别器”。 下图展示了最简单的GAN的结构以及工作原理。
模型中最左侧的随机向量是为了让生成器产生不同的输出,而增加的扰动项。这些扰动决定了生成器可以生成不同的仿真作品。之后我们会看到这些向量产生的输出会有一些插值和加减法等方面的特性。
这个图示是最简单的GAN框架,在实际应用中还可以把“生成器的输入-输出”作为判别器的输入,这样就可以做到生成符合某些条件的任务内容。例如根据文字内容生成符合描述的图片。
价值函数 Value Function
GAN的训练是价值函数最大化和最小化的交替游戏:
其中Pdata是真实数据,Pz是生成数据。
当我们训练判别器D时,我们希望真实数据的判别值越大越好。同时我们希望对生成数据的判别值越小越好,所以也是越大越好。训练中使用梯度上升,使价值函数的值越来越高。
同理,当我们要训练生成器G时,就希望价值函数的值越小越好,即使用梯度下降来训练生成器的参数。
理论推导 Theoretical reults
理论推到基于3个假设:
- 训练时间是无限的
- (生成器和判别器)模型的能力是无限的
- 直接更新生成器的分布
基于以上假设GAN可以得出以下结论:
即不论初始值如何,GAN最终都必然会达到均衡。
(fish:个人觉得这个理论推导可以不看,因为假设条件太扯了~~~要有能力无限的黑箱模型共产主义早都实现了 还用什么GAN~~~)
GAN相对其他生成模型的优势
GAN可以生成非常清晰的图片,而传统的生成模型生成的图片通常比较模糊。
二、DCGAN (使用深度卷积的GAN)
顾名思义,DCGAN就是采用深度卷积的生成对抗网络。英文全称是deep convolutional generative adversarial networks。
DCGAN是第一个把Batch normalization引入到GAN的网络架构,并且使用了Adam等方法,增强了网络的稳定性。
上图是CDGAN生成器的网络结构。
上图是CDGAN论文中提到的“插值”。最左侧一列是由最上面一副随机扰动图片逐渐生成的图片(最下面是最终结果)。最右侧是另一个随机扰动。中间的列是两边的随机扰动向量的中间值(插值),可以看到在生成器的结果随着随机向量的渐变,生成结果也像是在连续的产生变化。说明生成器生成内容是光滑的。
上图是CDGAN论文中的向量加减法,生成器可以把输入向量作为生成目标的某些特征值。例如:戴眼镜的男人 – 男人 + 女人 = 戴眼镜的女人
图片最下面一行是图片本身直接叠加产生的效果,可以看到简单叠加并不能取得很好的效果。说明生成器对特征运算起到了决定性的作用。
三、WGAN(使用W距离的GAN)
WGAN的优点
- 进一步提升了训练的稳定性。不需要精心设置G和D一轮一轮的更新。不需要精心设置复杂的网络结构。(原始GAN的价值函数的梯度很可能是0,就没法得到更新。WGAN提出了新的价值函数解决这个问题。)
- 几乎解决了mode collapse问题。mode collapse是说生成器生成的内容过于雷同,缺少变化。
- 提供了具有意义的价值函数,可以判断判别器和生成器是否已经收敛。(原始GAN中如果D的效果不好,我们不知道是G生成的好,还是D判别的不好)
- 提供了理论公式(不过很难理解)。
- 在判别器输入中加入噪声,使优化分布成为可能。
- 随着真实分布和生成分布的距离越来越小,对噪声进行退火,使噪声越来越小直至消除噪声。
Wasserstein Distance(论文提出了新的距离定义)
把真实数据和生成数据的分布的最小距离的期望叫做Wasserstein距离。
如果右上图中AB是真实数据,CD是生成数据,则他们的W距离=θ 。
WGAN采用“W距离”作为训练的价值函数。
(fish:这里比较汗颜,这个公式其实还不是太懂,先复制过来给大家看看。如果有理解的欢迎留言解说解说。谢谢)
当移除BN后DCGAN无法正常工作,而WGAN仍然可以生成很好的图片。所以WGAN可以使用更简单的网络结构。
上图展示了WGAN变了DCGAN中的mode collapse问题。避免经常生成雷同的图片。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:《生成对抗网络GAN的原理与应用专题》笔记 - Python技术站