GAN原理总结

来源:互联网 发布:hr淘宝秒杀 编辑:程序博客网 时间:2024/06/05 15:20

趁着期末补报告的机会,顺便发个
基本上是两篇经典文献Generative Adversarial Networks与Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks的部分翻译

基础GAN:原理
GAN(Generative Adversarial Nets,生成对抗网络)由J.GoodFellow在2014年的文章中正式提出,在其后大热,在两三年内被提出多种实用的改进方法,且仍在快速发展.在图像创作,超分辨率重建等方面已经得到了有效应用.
GAN是一种无监督学习的网络,这决定了其
假设我们有两个网络,G(Generator)和D(Discriminator),其中G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z).D是一个判别网络,判别一张图片是不是“真实的”.它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片.
在GoodFellow的文章中提出了一种清晰的解释模型:

Figure 1一种GAN的一维解释模型
上图中蓝线破折代表判别网络D的分布,黑色点线代表样本的分布p_x,绿色实现代表生成网络G所生成数据的分布p_g (G)(与p_data相区分).最底层水平线代表z的选取范围,上层代表x的.其间的箭头代表映射x=G(z),箭头的密集程度与p_g分布有关
图a对应情形中, p_g与p_data很相似,D作为判别器表现良好.
图b中,D被训练地更能区别样本与生成的数据,并收敛于理论最优值:
D^* (x)=(p_data (x))/(p_data (x)+p_g (x))
图c表示,在G更新后,利用D的导数改变G(z),使得生成的图像更不易被区分出,在图上表现为绿线与黑线趋同.
图d表示训练完成的情形,此时p_g=p_data,分类器无法区分出样本与生成数据,D(x)=1/2
在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D.而D的目标就是尽量把G生成的图片和真实的图片分别开来.这样,G和D构成了一个动态的”博弈过程”,以数学式表示如下:
min┬G⁡〖max┬D⁡〖V(D,G)〗=E_(x~p_data (x)) [logD(x)]+〗 E_(z~p(z)) [log⁡(1-D(G(z)))]
这里,目标函数中log函数的作用是提高早期G与D能力相差过大时的学习效果
对应的梯度学习算法:

Figure 2批量随机梯度下降法在GAN训练中的应用

DCGAN

Figure 3生成网络G结构示意(conv层为fractional-strided convolutions层)

DCGAN(Deep Convolutional GAN,深度卷积对抗网络)是GAN的一个改进版本.它将GAN无监督学习的优点(无需cost function)与CNN结合起来,而GAN也因与卷积神经网络结合提升了针对图像的处理能力.它可以视为在一般CNN上的改进.
与普通的CNN相比,DCGAN有如下特点:
将pooling层用convolution层取代.其中在D上用strided convolutions替代,在G上用fractional-strided convolutions层取代
这使得模型可以学习降采样过程,虽然牺牲一些稳定性
在G与D上均使用Batch Normalization,即将输入都归一化为0均值方差为1
这稳定了学习结果,有助于梯度传递
对所有层都采用此方法会导致模型不稳定,不对G的输出层与D的输入层采用此方法可以避免这一状况
移除全连接层:出于收敛速度的考虑
在G上除输出层均使用ReLU,输出层用tanh,在D上所有层使用LeakyReLU
对于G有界的激活函数可以使模型更快饱和,从而覆盖待学习分布的色彩空间
对于D,尤其是用于超分辨重建时可以取得更好的效果
模型细节:
除将输入图像归一化至[-1 1]外无额外初始化处理
全部采用小批量随机梯度下降法(SGD)训练,最小批量为128
所有权重初始化值随机生成,并满足均值为0,标准差为0.02的正态分布
LeakyReLU的leak斜率被设定为0.2
训练中采用Adam动量法来加速
学习率设定为0.0002,0.001过快
动量项β设为0.9过快,取0.5

原创粉丝点击