1. GAN
从原始gan(生成对抗网络)到wgan,说是各种gan的变形百花齐放也不为过,关于gan的文章数不胜数,有严谨数学推导的文章也多如牛毛,所以随笔写下一个关于gan和变种中可以引起思考,能够为其他领域的研究提供一点点思路的拙见。文章没有太过详细的关于数学的推导,但还是默认看文章的人对gan较为熟悉,所以不再浪费精力在怎么让你明白这个火了三年的网络到底是怎么一回事上,直接开门见山。
1.1原始GAN训练困难
(1)目前最公认的一个考虑是,gan想对原始数据分布进行建模,但原始数据分布以及生成器产生的数据分布都为高维空间中的低维流形(类比于一个平面中的两条曲线,或者一个立方体中的两个平面),因此对于这种情况,原始gan最后损失函数所推导出的js散度很难衡量这两个分布的“距离”,进而在进行梯度下降训练时,没有“动力”去减少两个分布的差距。
(2)在训练模型时,采样不够多,导致判别器很容易将这个“二分类”问题给解出来,本质与第一点相同(无论从对损失函数的形式还是数学严谨推导,都可以证明kl散度计算等价于解决二分类问题)
2.GAN变种
gan神经网络的变种过于繁杂,简单介绍以下几种变种中有意义的事:fGAN WGAN CycleGAN cGAN VAEGAN InfoGAN
2.1 fGAN
优点:
(1)推导的F函数将原始GAN中的js散度推广到了更宽广的F散度,只需要F函数满足两个条件:凸函数,F(1)=0 数学上更加powerful
缺点:
(2)好像没什么实际意义,在实验上,与原始gan效果相差不大。。。
想到了以前看过的某篇文章,作者需要衡量一个决策树模型的复杂度,做类似L2正则化一样的事,论文实验是将决策树参数直接扔给一个新的神经网络,让它自己去学怎么衡量,而不是人为设计某些值。也许fGAN中的F函数也可以借鉴这个思想,直接交给神经网络自己训练出一个F函数,这个F函数也许会根据本身数据集特点,学到某些意想不到性质
2.2 WGAN
优点:
(1)WGAN的出现让GAN为人所知,其中针对高维中低维流形所定义出的Earth-Mover距离,更好衡量分布之间的差异,最后通过数学推导得到了三个改进:判别器最后一层去掉sigmoid 生成器和判别器的loss不取log 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c 。
本来想对WGAN多写一点东西,发现除了那个Earth—Mover距离之外,WGAN还有weight clipping和gradient penalty ,但写完实在违背了我的初衷—懒,也觉得其余两个考虑更多是为了做实验,然后是WGAN的文章实在太多了,写也写不到别人那么好,所以吧,也不浪费精力了。
2.3 CycleGAN
需要学习如何集合{X}映射到集合{Y},但是缺少{X}到{Y}映射的成对数据集,由此设计如此的网络构造:
(1)首先将{X}原始输入交给生成器,生成器输出相应的{Y}集合映射元素y,但可能出现如下情况:生成器无法学到原元素的特征,无论怎样的x输入进去,都得到同样y。因此需要再设计一个神经网络对y进行重构,确保生成器是根据x相关信息进行生成y。
(2)生成器生成的y与原{Y}中的元素交给判别器判别,直到无法判别为止,可以认为y此时属于{Y}
优点:
(1)解决了如何求解将一个未知概率分布的{X}转换到了另一个未知概率分布{Y}的问题 (二者都为只能进行采样而不知道概率分布的高维空间上的集合),引入了“循环一致性损失”。 CycleGAN将学习一个映射G,将{X}中的x映射到{Y}中的y,但是缺少成对数据,无法进行训练,由此引入另一个映射F:{Y}→{X},网络同时学习两个映射,并且满足F(G(x))≈x,并且G(F(y))≈y ,最后生成器即为所需要的映射G
2.4 cGAN
需要指定生成器生成数据特点,不再如同原始gan根据随机vector进行生成,由此需要对网络如下改进:
(1)输入需要将条件 c和随机向量z一起交给生成器生成x=G(c,z)
(2)与原始gan的判别器不同的是,cGAN的判别器不仅需要判别生成数据是否为真,还需判别c与x是否匹配
优点:
(1)原始gan以及其变种,解决的都是如何求原始概率分布,但cGAN某种意义上是去寻求“条件概率分布”,它加入监督信息,生成数据时不在盲目生成,更加有指向性。
2.5 VAEGAN
再介绍VAEGAN之前先介绍VAE,VAE由自编码器演变而来,关于自编码器,简单认为就是一种降维方式。
VAE在自编码器基础上引入噪声,目的是为了保持数据流形,即数据的平滑性,但是使用VAE生成图片,总是模模糊糊,问题在于VAE判别生成对象是否“真实”是从局部上测量,即从像素点上差距,难以保持全局上的“和谐”。而GAN中的判别器是通过神经网络提取后的特征对数据进行判别,更加具有全局性。
VAEGAN可以从两个方面理解:
(1)借助VAE提升GAN:原始GAN中输入生成器的vector为随机采样输入,而现在将自编码器编码得到的vector在服从高斯分布的情况下输入给生成器,编码器所得到的的编码很好的保留了原图像的特征,由此输入生成器到的图片会更加的合理与准确。
(2)借助GAN提升VAE:针对VAE在训练的时候损失函数只能用 MSE 之类的粗略误差衡量,这就导致生成的图片不能很好地保留原图像的清晰度,借助GAN的判别器对其进行提升,保证它更加“真实”。
2.6 InfoGAN
针对之前gan网络中,随机vector不能反应生成图像特征的特点,引入一个新的潜变量c,我们希望c的每一个维度都有其实际意义,比如第一维就代表了生成图像头发的颜色,第二维代表肤色,类似于特征提取的工作,让c与生成图像x有很强的联动性。
自我感觉很类似与之前的VAEGAN和cGAN理论的结合,但在实验中,让decoder与判别器参数共享,更好地让c成为能代表x特征的潜变量
3总结
简单想写写变种的一些想法,然而实际写的过程发现,才疏学浅。不写数学推导,发现真写不了太多东西,一个网络其贡献,特点也就一两句话就可以描述,只是给一个大致概念,想要细致研究某一个网络,还是需要细致看原始论文以及动手实践。万变不离其宗,现在gan的变种多达300多种,但是大多数都有上面几种网络的身影,针对各自场景和目的,只要懂得原始gan以及常见gan的意义和做法,相信以后新的变种gan也能很快入手。