生成式对抗网络(Generative Adversarial Nets)

来源:互联网 发布:mac book air视频剪辑 编辑:程序博客网 时间:2024/05/18 20:07

一、简介

2016年12月5日,在西班牙巴塞罗那举办的NIPS会议上,本文的作者也就是Ian Goodfellow,依旧以他的代表作-生成式对抗网络-为主题进行了演讲。该网络自2014年问世以来,一直受到机器学习领域的高度关注,说这是近几年最棒的想法也不为过。

论文提出了一种对抗式的估计模型生成方法,该方法不同于其他方法的地方在于训练生成模型G的同时,并训练一个判别模型D。D用来判别数据是来自真实采样还是由G模型生成,训练的过程可视为最大化D判别正确率的过程,而训练G的过程可视为最小化D判别正确率的过程。最终的优化目标是使得G生成的数据很难被D判别出来到底是真实的还是伪造的。

整个迭代的过程是一个极大极小的零和博弈,这也是为什么被称为对抗的原因。

二、对抗网络

直白地说,对抗网络同时训练了两个模型,一个为生成模型G,其本质通过对真实数据x的学习得到一个概率分布Pg,然后将输入的噪声数据z映射到x的空间,我们将其描述为G(z;θg),θg为该模型的参数;另一个模型为判别模型D(x;θd),该模型的作用是判别数据x是真实的还是生成模型G伪造的。于是,我们在训练过程中一方面力求最大化判别模型D的判别正确性logD(x),而另一方面又同时训练生成模型G尽量降低判别模型D的判别正确性log(1-D(g(z))),整个过程G和D就如同在玩一个极大极小的游戏V(G,D):

这里写图片描述

三、对抗过程

上述公式在实际训练过程中可描述为以下过程

for 训练循环次数 do    for 循环k次 do        - 固定生成模型G,输入噪声样本z并由G产生伪造数据G(z)        - 输入真实数据x        - 通过梯度上升更新判别模型

这里写图片描述

    end for    - 固定判别模型,同样输入噪声样本z并由G产生伪造数据G(z)    - 通过梯度下降更新生成模型

这里写图片描述

end for

基于梯度的学习可以使用任何标准梯度学习规则,在论文中使用momentum。

全局优化目标

当我们给定了一个生成模型G并固定他,那么判别模型D的训练准则为最大化(原文中的公式应该在红色方框处少了括号):

这里写图片描述

可以简单证明最优值为:

这里写图片描述

而我们的全局优化目标为Pg=Pdata,即模型的概率分布和真实的数据概率分布相等,于是

这里写图片描述

我们换一种最优化D的过程描述:

这里写图片描述

当已知Pg=Pdata,于是可得优化边界为C(G) = -log(4)。但是文章又引入了Kullback–Leibler divergence,得到:

这里写图片描述

根据Kullback–Leibler divergence转换成 Jensen–Shannon divergence的公式,其中M=1/2*(P+Q):

这里写图片描述

继而得到:

这里写图片描述

一开始我没看懂为什么突然引入熵的概念,然后查了一下资料才知道,这么做其实是为了解决一个问题,那就是:当我们的生成模型跟源数据拟合之后就没法再继续学习了( 求导永远为 0)。

于是,除了把两者对抗做成最小最大博弈,还可以把它写成非饱和(Non-Saturating)博弈,也就是说用 G 自己的伪装成功率来表示自己的目标函数,D和G并没有简单粗暴的相互绑定,就算在D完美了以后,G还可以继续被优化。

三、优势与存在的问题

优势

关于GAN的优势,我觉得借用原作者的话更为合适:

深度 | OpenAI Ian Goodfellow的Quora问答:高歌猛进的机器学习人生

根据实际的结果,它们看上去可以比其它模型产生了更好的样本(图像更锐利、清晰)。

生成对抗式网络框架能训练任何一种生成器网络(理论上-实践中,用 REINFORCE 来训练带有离散输出的生成网络非常困难)。大部分其他的框架需要该生成器网络有一些特定的函数形式,比如输出层是高斯的。重要的是所有其他的框架需要生成器网络遍布非零质量(non-zero mass)。生成对抗式网络能学习可以仅在与数据接近的细流形(thin manifold)上生成点。

不需要设计遵循任何种类的因式分解的模型,任何生成器网络和任何鉴别器都会有用。

无需利用马尔科夫链反复采样,无需在学习过程中进行推断(Inference),回避了近似计算棘手的概率的难题。

与PixelRNN相比,生成一个样本的运行时间更小。GAN 每次能产生一个样本,而 PixelRNN 需要一次产生一个像素来生成样本。

与VAE 相比,它没有变化的下限。如果鉴别器网络能完美适合,那么这个生成器网络会完美地恢复训练分布。换句话说,各种对抗式生成网络会渐进一致(asymptotically consistent),而 VAE 有一定偏置。

与 GSN 相比,它的样本可以一次生成,而不是通过反复应用马尔可夫链运算器。

与NICE 和 Real NVE 相比,在 latent code 的大小上没有限制。

GAN目前存在的主要问题

解决不收敛(non-convergence)的问题。

目前面临的基本问题是:所有的理论都认为 GAN 应该在纳什均衡(Nash equilibrium)上有卓越的表现,但梯度下降只有在凸函数的情况下才能保证实现纳什均衡。当博弈双方都由神经网络表示时,在没有实际达到均衡的情况下,让它们永远保持对自己策略的调整是可能的【OpenAI Ian Goodfellow的Quora】。
难以训练:崩溃问题(collapse problem)

GAN模型被定义为极小极大问题

没有损失函数,在训练过程中很难区分是否正在取得进展。GAN的学习过程可能发生崩溃问题(collapse problem),生成器开始退化,总是生成同样的样本点,无法继续学习。当生成模型崩溃时,判别模型也会对相似的样本点指向相似的方向,训练无法继续。

无需预先建模,模型过于自由不可控。

与其他生成式模型相比,GAN这种竞争的方式不再要求一个假设的数据分布,即不需要formulate p(x),而是使用一种分布直接进行采样sampling,从而真正达到理论上可以完全逼近真实数据,这也是GAN最大的优势。然而,这种不需要预先建模的方法缺点是太过自由了,对于较大的图片,较多的 pixel的情形,基于简单 GAN 的方式就不太可控了。在GAN[Goodfellow Ian, Pouget-Abadie J] 中,每次学习参数的更新过程,被设为D更新k回,G才更新1回,也是出于类似的考虑。

四、一点思考

论文中是通过判别模型与生成模型的互相对抗来增强生成模型,那是否可以反过来,通过生成模型生成各种干扰数据来增强判别模型,或者说是分类识别模型的泛化性呢?

0 0