0
点赞
收藏
分享

微信扫一扫

深度学习之生成对抗网络(GAN)学习笔记

1.生成对抗网络的(GAN)的原理

GAN的思想:一种二人零和博弈思想(two-player game),博弈双方的利益之和是一个常数。
就像一个草原上,狼的数量越多,羊的数量就越少,反之,如果狼被猎杀的越多,没有天敌的羊也会极速增加。这两者形成此消彼长的形式,但整个草原上生态系统的总能量是一定的,这就是二者博弈,但是总的利益是一定的。

生成对抗网路(GAN)分为两个部分:生成网络G(Generator)和判别网络D(Disciminator)
(1)生成网络G:生成器,负责生成假数据
(2)辨别网络D:辨别器,负责输入的数据真假性
在这里插入图片描述
在最理想的状态下:
生成网络生成的是“以假乱真”的假样本G(z)
对抗网络难以判断G(z)生成的样本是否是真实的,因此D(G(z)) = 0.5。最终得到的生成模型G来生成假样本。

2.GAN的训练思路

GAN的训练要同时训练来个网络,训练的方法是:单独交替迭代训练即在训练生成网络的时候,固定住对抗网络,然后再去训练生成网络;在训练对抗网络的时候,固定住生成网络,然后再去训练对抗网络。这样做的目的是防止其中一个网络比另一个网络强大太多,因为如果某一个网络太强大,另一个会因能力太差而导致两个网络性能都弱化。这两者就像哲学中的矛盾一样,虽然看似是对立的,但是这两者共同作用的结果是导致事物向前发展的。
因此,两个网络并不是完全意义上的斗争,而是亦敌亦友的关系,他们不得不协同合作以达到共同的目标。在整个训练过程中,辨别器不得不教导生成器如何在生成数据上进行调整,自己同时也在学习如何做一个更好的老师。他们在对抗学习中不断变强,在理想状态下达到一个平衡----D(G(z)) = 0.5 (纳什平衡)

2.1辨别器的训练

理想状态下:给它输入一个训练集中的样本和生成器生成的样本,如果输入的是生成的假样本,辨别器就输出0,如果是真实的样本就输出1
step1:搭建用于训练辨别器的网络模型并编译模型。
step2:为真实的样本和生成器得到的假样本打上不同的标签,该标签用于辨别器区分该样本是真实的样本还是假样本。valid为全0的(Bach_Size,1)的矩阵;fake为全1的(Bach_Size,1)的矩阵。
step3:真实样本的输入辨别器,将其输出与fake对比得到损失值
step4:生成器生成的假样本输入辨别器,将其输出与vaild对比得到损失值,最后将两者相加得到辨别器的总损失值。通过不断的训练使其总损失降低。

2.2 生成器训练

理想状态下:生成器必须努力让辨别器认为它生成的假样本,即辨别器得到假样本后输入1。
训练生成器的时候,固定辨别器的参数,首先搭建用于训练生成器的网络模型并编译模型combined。在训练生成的网络G的时候,辨别网络D的参数不发生变化,即只是把loss一直回传,传到生成网络G后更新生成网络的参数即可。

为了训练生成器,辨别器需要告诉生成器如何调整从而使它生成的样本更接近真实的。
辨别器通过反向传播辨别器输出的梯度来调整生成的样本,告诉生成器如何每个特征应调整多少来使整个样本更接近真实。同时,进一步反向传播这些样本梯度成为组成生成器的权重。

2.3 目标函数

原论文中的目标函数:
min ⁡ G max ⁡ D V ( D , G ) = E x ∼ P d a t a ( x ) [ log ⁡ ( D ( x ) ) ] + E z ∼ P z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D,G) = E_{x \sim Pdata(x)}[\log(D(x))]+E_{z \sim P_z(z)}[\log(1-D(G(z)))] GminDmaxV(D,G)=ExPdata(x)[log(D(x))]+EzPz(z)[log(1D(G(z)))]
这个式子包含了两个网络的训练过程,即先优化辨别网络D,然后再来优化生成网络G。

论文中GAN网络训练的算法:
在这里插入图片描述

参考帖子:
1.https://blog.csdn.net/qq_40784418/article/details/105777608

2.https://blog.csdn.net/on2way/article/details/72773771?utm_source=app&app_version=5.0.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

3.https://blog.csdn.net/u014038273/article/details/78783419

举报

相关推荐

0 条评论