GAN对抗神经⽹络(原理解析)
GAN对抗神经⽹络(原理解析)
⼀、总结
⼀句话总结:
> (⼀)、GAN的主要灵感来源于博弈论中零和博弈的思想,应⽤到深度学习神经⽹络上来说,就是
> (⼆)、**通过⽣成⽹络G(Generator)和判别⽹络D(Discriminator)不断博弈,进⽽使G学习到数据的分布**,
> (三)、如果⽤到图⽚⽣成上,则训练完成后,G可以从⼀段随机数中⽣成逼真的图像。
1、对抗神经⽹络中的⽣成器和鉴别器分别作⽤是什么?
> G是⼀个⽣成式的⽹络,它接收⼀个随机的噪声z(随机数),通过这个噪声⽣成图像
> D是⼀个判别⽹络,判别⼀张图⽚是不是“真实的”。它的输⼊参数是x,x代表⼀张图⽚,输出D(x)代表x为真实图⽚的概率,如果为1,就代表100%是真实的图⽚
2、GAN对抗神经⽹络的特点是什么?
> ⼀、相⽐较传统的模型,他存在两个不同的⽹络,⽽不是单⼀的⽹络,并且训练⽅式采⽤的是对抗训练⽅式
> ⼆、GAN中G的梯度更新信息来⾃判别器D,⽽不是来⾃数据样本
3、GAN对抗神经⽹络模式崩溃(model collapse)原因:⼀般出现在GAN训练不稳定的时候,具体表现为⽣成出来的结果⾮常差,但是即使加长训练时间后也⽆法得到很好的改善?
> ⼀)、GAN采⽤的是对抗训练的⽅式,G的梯度更新来⾃D,所以G⽣成的好不好,得看D怎么说。
> ⼆)、具体就是G⽣成⼀个样本,交给D去评判,D会输出⽣成的假样本是真样本的概率(0-1),相当于告诉G⽣成的样本有多⼤的真实性,G就会根据这个反馈**不断改善⾃⼰,提⾼D输出的概率值**。
> 三)、但是如果某⼀次G⽣成的样本可能并不是很真实,但是D给出了正确的评价,或者是G⽣成的结果中⼀些特征得到了D的认可,这时候G就会认为我输出的正确的,
> 四)、那么接下来我就这样输出肯定D还会给出⽐较⾼的评价,实际上G⽣成的并不怎么样,但是他们两个就这样⾃我欺骗下去了,导致最终⽣成结果缺失⼀些信息,特征不全。
4、为什么GAN中的优化器不常⽤SGD?
> I)、SGD容易震荡,容易使GAN训练不稳定,
> II)、GAN的⽬的是在⾼维⾮凸的参数空间中到纳什均衡点,GAN的纳什均衡点是⼀个鞍点,但是SGD只会到局部极⼩值,因为SGD解决的是⼀个寻最⼩值的问题,GAN是⼀个博弈问题。
5、为什么GAN不适合处理⽂本数据?
> ①)、⽂本数据相⽐较图⽚数据来说是离散的,因为对于⽂本来说,通常需要将⼀个词映射为⼀个⾼维的向量,最终预测的输出是⼀个one-hot向量
> ②)、另外就是GAN的损失函数是JS散度,JS散度不适合衡量不想交分布之间的距离。
> ③)、WGAN虽然使⽤wassertein距离代替了JS散度,但是在⽣成⽂本上能⼒还是有限,GAN在⽣成⽂本上的应⽤有seq-GAN,和强化学习结合的产物
6、训练GAN的⼀些技巧?
> (I)、输⼊规范化到(-1,1)之间,最后⼀层的激活函数使⽤tanh(BEGAN除外)
> (II)、使⽤wassertein GAN的损失函数,
> (III)、避免使⽤RELU和pooling层,减少稀疏梯度的可能性,可以使⽤leakrelu激活函数
> (IV)、优化器尽量选择ADAM,学习率不要设置太⼤,初始1e-4可以参考,另外可以随着训练进⾏不断缩⼩学习率,
输⼊规范化到(-1,1)之间,最后⼀层的激活函数使⽤tanh(BEGAN除外)
神经网络中正则化是为了干什么使⽤wassertein GAN的损失函数,
如果有标签数据的话,尽量使⽤标签,也有⼈提出使⽤反转标签效果很好,另外使⽤标签平滑,单边标签平滑或者双边标签平滑
使⽤mini-batch norm,如果不⽤batch norm 可以使⽤instance norm 或者weight norm
避免使⽤RELU和pooling层,减少稀疏梯度的可能性,可以使⽤leakrelu激活函数
优化器尽量选择ADAM,学习率不要设置太⼤,初始1e-4可以参考,另外可以随着训练进⾏不断缩⼩学习率,
给D的⽹络层增加⾼斯噪声,相当于是⼀种正则
7、GAN的⼴泛应⽤?
> *、GAN本⾝是⼀种⽣成式模型,所以在数据⽣成上⽤的是最普遍的,最常见的是图⽚⽣成,常⽤的有DCGAN WGAN,BEGAN,个⼈感觉在BEGAN的效果最好⽽且最简单。
> *、GAN本⾝也是⼀种⽆监督学习的典范,因此它在⽆监督学习,半监督学习领域都有⼴泛的应⽤
> *、不仅在⽣成领域,GAN在分类领域也占有⼀席之地,简单来说,就是替换判别器为⼀个分类器,做多分类任务,⽽⽣成器仍然做⽣成任务,辅助分类器训练。
> *、⽬前⽐较有意思的应⽤就是GAN⽤在**图像风格迁移,图像降噪修复,图像超分辨率了,都有⽐较好的结果**。
⼆、GAN对抗神经⽹络(原理解析)
转⾃或参考:深度学习----GAN(⽣成对抗神经⽹络)原理解析
blog.csdn/Sakura55/article/details/81512600
⼀、原理部分
⾸先附上⼀张流程图
1.1、 GAN的原理:
GAN的主要灵感来源于博弈论中零和博弈的思想,应⽤到深度学习神经⽹络上来说,就是**通过⽣成⽹络G(Generator)和判别⽹络D(Discriminator)不断博弈,进⽽使G学习到数据的分布**,如果⽤到图⽚⽣成上,则训练完成后,G可以从⼀段随机数中⽣成逼真的图像。G, D的主要功能是:
G是⼀个⽣成式的⽹络,它接收⼀个随机的噪声z(随机数),通过这个噪声⽣成图像
D是⼀个判别⽹络,判别⼀张图⽚是不是“真实的”。它的输⼊参数是x,x代表⼀张图⽚,输出D(x)代表x为真实图⽚的概率,如果为1,就代
表100%是真实的图⽚,⽽输出为0,就代表不可能是真实的图⽚
训练过程中,⽣成⽹络G的⽬标就是尽量⽣成真实的图⽚去欺骗判别⽹络D。⽽D的⽬标就是尽量辨别出G⽣成的假图像和真实的图像。这
样,G和D构成了⼀个动态的“博弈过程”,最终的平衡点即纳什均衡点.
1.2、架构
通过优化⽬标,使得我们可以调节概率⽣成模型的参数
θ
,从⽽使得⽣成的概率分布和真实数据分布尽量接近。
那么怎么去定义⼀个恰当的优化⽬标或⼀个损失?传统的⽣成模型,⼀般都采⽤数据的似然性来作为优化的⽬标,但GAN创新性地使⽤了另外⼀种优化⽬标。⾸先,它引⼊了⼀个判别模型(常⽤的有⽀持向量机和多层神经⽹络)。其次,它的优化过程就是在寻⽣成模型和判别模型之间的⼀个纳什均衡。
GAN所建⽴的⼀个学习框架,实际上就是⽣成模型和判别模型之间的⼀个模仿游戏。**⽣成模型的⽬的,就是要尽量去模仿、建模和学习真实数据的分布规律;⽽判别模型则是要判别⾃⼰所得到的⼀个输⼊数据,究竟是来⾃于真实的数据分布还是来⾃于⼀个⽣成模型。**通过这两个内部模型之间不断的竞争,从⽽提⾼两个模型的⽣成能⼒和判别能⼒。
~  当⼀个判别模型的能⼒已经⾮常强的时候,如果⽣成模型所⽣成的数据,还是能够使它产⽣混淆,⽆法正确判断的话,那我们就认为这个⽣成模型实际上已经学到了真实数据的分布。
1.3、 GAN 的特点及优缺点:
特点
相⽐较传统的模型,他存在两个不同的⽹络,⽽不是单⼀的⽹络,并且训练⽅式采⽤的是对抗训练⽅式
GAN中G的梯度更新信息来⾃判别器D,⽽不是来⾃数据样本
优点
(以下部分摘⾃ian goodfellow 在Quora的问答)
GAN是⼀种⽣成式模型,相⽐较其他⽣成模型(玻尔兹曼机和GSNs)只⽤到了反向传播,⽽不需要复杂的马尔科夫链相⽐其他所有模型, GAN可以产⽣更加清晰,真实的样本
GAN采⽤的是⼀种⽆监督的学习⽅式训练,可以被⼴泛⽤在⽆监督学习和半监督学习领域
相⽐于变分⾃编码器, GANs没有引⼊任何决定性偏置( deterministic bias),变分⽅法引⼊决定性偏置,因为他们优化对数似然的下界,⽽不是似然度本⾝,这看起来导致了VAEs⽣成的实例⽐GANs更模糊
相⽐VAE, GANs没有变分下界,如果鉴别器训练良好,那么⽣成器可以完美的学习到训练样本的分布.换句话说,GANs是渐进⼀致的,但是VAE是有偏差的
GAN应⽤到⼀些场景上,⽐如图⽚风格迁移,超分辨率,图像补全,去噪,避免了损失函数设计的困难,不管三七⼆⼗⼀,只要有⼀个的基准,直接上判别器,剩下的就交给对抗训练了。
缺点
训练GAN需要达到纳什均衡,有时候可以⽤梯度下降法做到,有时候做不到.我们还没有到很好的达到纳什均衡的⽅法,所以训练GAN相⽐VAE或者PixelRNN是不稳定的,但我认为在实践中它还是⽐训练玻尔兹曼机稳定的多
GAN不适合处理离散形式的数据,⽐如⽂本
GAN存在训练不稳定、梯度消失、模式崩溃的问题(⽬前已解决)
附:模式崩溃(model collapse)原因
⼀般出现在GAN训练不稳定的时候,具体表现为⽣成出来的结果⾮常差,但是即使加长训练时间后也⽆法得到很好的改善。
具体原因可以解释如下:
GAN采⽤的是对抗训练的⽅式,G的梯度更新来⾃D,所以G⽣成的好不好,得看D怎么说。具体就是G⽣成⼀个样本,交给D去评判,D会输出⽣成的假样本是真样本的概率(0-1),相当于告诉G⽣成的样本有多⼤的真实性,G就会根据这个反馈**不断改善⾃⼰,提⾼D输出的概率值**。但是如果某⼀次G⽣
成的样本可能并不是很真实,但是D给出了正确的评价,或者是G⽣成的结果中⼀些特征得到了D的认可,这时候G就会认为我输出的正确的,那么接下来我就这样输出肯定D还会给出⽐较⾼的评价,实际上G⽣成的并不怎么样,但是他们两个就这样⾃我欺骗下去了,导致最终⽣成结果缺失⼀些信息,特征不全。
局部极⼩值点

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。