【论文笔记】Generative Adversarial Networks

论文链接:GenerativeAdversarial Networks

        该文提出一种新颖的对抗式生成模型架构,这种框架同时训练两个模型,一个是生成模型G,用来习得数据的真实分布,一个是判别模型D,用来判断一个样本是否是真实样本。G的训练过程就是尽可能地让D犯错误,该网络最后的目标就是让G通过输入的噪声重构出训练数据的分布,并且让D不论是面对真实数据还是假数据的判别概率等于50%。这个第一代生成对抗网络的生成器和判别器都是采用的多层感知机模型(multilayer perceptrons),可以通过反向传播算法训练。

网络结构

        对于生成器G,我们使用随机生成的噪音数据pz(z)作为先验输入到模型中(一般使用均匀分布,几乎所有的重要分布都可以从均匀分布uniform(0,1)中生成出来),G(z; θg)即拥有参数θg的生成器G将输入的噪声z转换到数据分布中去。D(x; θd)返回一个标量概率值,表示拥有参数θd的判别器D判断输入的x样本来自真实的训练数据分布的概率。我们要训练G来最大化,D(G(z)),即最小化log(1 − D(G(z))),训练D以最大化将来自真实数据和G生成的数据判别正确的概率,即最大化D(x)和1-D(G(z))。

对于G:min log(1 − D(G(z))),

对于D:max log(D(x))+ log(1-D(G(z)))

于是将两个式子结合一下就得到了论文总要优化的那个式子:


        在实际训练中,我们要使用迭代数值的方法来训练网络,但是完成内层循环中D的优化在计算上是不可行的并且容易过拟合,取而代之,我们对D和G进行交替训练,优化k次D然后优化一次G。 在训练初期,因为生成器G还没有学到数据分布,G产生的数据会很容易被D判错,此时log(1 − D(G(z)))会达到饱和,这样G会得不到足够的梯度值来训练。于是对于G我们将minimize log(1 − D(G(z)))改成maxmize log(D(G(z))),这样可以加快训练收敛速度。

蓝线:判别模型的分布D

黑虚线:真实数据分布Px

绿实线:生成模型分布G

下图展示了G把噪声z映射到x中,并通过不断训练,生成模型的分布越发拟合真实数据分布,判别模型变得不再能判别处Px和D生成的数据。

猜你喜欢

转载自blog.csdn.net/weixin_39837402/article/details/80007347