易八达全球华人第一资讯门户网站-

  • 纽约
  • 旧金山
  • 芝加哥
  • 西雅图
  • 洛杉矶
  • 一周论文 | 互怼的艺术:从零直达 WGAN-GP

    2017-06-11 21:06:00 来源: 机器之心

    作者丨苏剑林

    学校丨中山大学硕士生

    研究方向丨NLP,神经网络

    个人主页丨http://kexue.fm


     1 

    前言



    GAN,全称 Generative Adversarial Nets,中文名是生成对抗式网络。对于 GAN 来说,最通俗的解释就是“造假者-鉴别者”的解释,如艺术画的伪造者和鉴别者。一开始伪造者和鉴别者的水平都不高,但是鉴别者还是比较容易鉴别出伪造者伪造出来的艺术画。但随着伪造者对伪造技术的学习后,其伪造的艺术画会让鉴别者识别错误;或者随着鉴别者对鉴别技术的学习后,能够很简单的鉴别出伪造者伪造的艺术画。这是一个双方不断学习技术,以达到最高的伪造和鉴别水平的过程。 然而,稍微深入了解的读者就会发现,跟现实中的造假者不同,造假者会与时俱进地使用新材料新技术来造假,而 GAN 最神奇而又让人困惑的地方是它能够将随机噪声映射为我们所希望的正样本,有噪声就有正样本,这不是无本生意吗,多划算。


    另一个情况是,自从 WGAN 提出以来,基本上 GAN 的主流研究都已经变成了 WGAN 上去了,但 WGAN 的形式事实上已经跟“伪造者-鉴别者”差得比较远了。而且 WGAN 虽然最后的形式并不复杂,但是推导过程却用到了诸多复杂的数学,使得我无心研读原始论文。这迫使我要找从一条简明直观的线索来理解 GAN。幸好,经过一段时间的思考,有点收获。 


    在正文之前,先声明:笔者所有的 GAN 的知识,仅仅从网上的科普文所读而来,我并没有直接读过任何关于 GAN 的论文,因此,文中的结果可能跟主流的结果有雷同,也可能有很大出入,而且本文的讲述方法并不符合 GAN 的历史发展进程。严谨治学者慎入。


    注:如无指明,本文所谈到的 GAN 都是广义的,即包括原始 GAN、WGAN 等等,对它们不作区分。文中出现的正样本、真实样本,都是指预先指定的一批样本,而生成样本则指的是随机噪声通过生成模型 G 变换所得的结果。



     2 

    一道面试题



    一道经典的面试题是:如果有一个伪随机数程序能够生成 [0,1] 之间的均匀随机数,那么如何由它来生成服从正态分布的伪随机数?比如怎么将 U[0,1] 映射成 N(0,1)?


    这道题不同的角度有不同的做法,工程上的做法有:同时运行 n 个这样的伪随机数程序,每步产生 n 个随机数,那么这 n 个数的和就近似服从正态分布了。不过,这里不关心工程做法,而关心理论上的做法。理论上的做法是:将 X∼U[0,1] 经过函数 Y=f(X) 映射之后,就有 Y∼N(0,1) 了。设 ρ(x) 是 U[0,1] 是概率密度函数,那么 [x,x+dx] 和 [y,y+dy] 这两个区间的概率应该相等,而根据概率密度定义,ρ(x) 不是概率,ρ(x)dx 才是概率,因此有



    那么:



    这里 Φ(y) 是标准正态分布的累积分布函数,所以:



    注意到累积分布函数是无法用初等函数显式表示出来的,更不用说它的逆函数了。说白了,Y=f(X) 的 f 的确是存在的,但很复杂。正态分布是常见的、相对简单的分布,但这个映射已经这么复杂了。如果换了任意分布,甚至概率密度函数都不能显式写出来,那么复杂度可想而知。



     3 

    神经大法好



    现在我们将问题一般化:如何找到映射 Y=f(X),把服从均匀分布 X 映射到指定的分布?在一般情形下,这个指定的分布是通过给出一批具体的分布样本 Z=(z1,z2,…,zN) 来描述的(比如,给出一批服从正态分布的随机数,而不是给出概率密度

    )。


    这个问题相当一般化,跟 GAN 所做的事情也是一样的。也就是说,GAN 也是希望把均匀的随机噪声映射成特定分布,这个特定分布由一组“正样本”描述。这样的理解就可以回答我们开头的一个小问题了:为什么 GAN 可以将噪声变换成正样本?事实上 GAN 并不是学习噪声到正样本的变换,而是学习均匀分布到指定分布的变换。假如学习成功了,那么输入一个随机噪声,那么就变换成指定分布的数据,而通常来说我们指定的分布是一个比较“窄”的分布(比如指定的正样本是某一类图片的集合,但事实上图片无穷无尽,某一类的图片是相当窄的),所以都会映射到我们眼中的“正样本”去。


    前面正态分布的例子已经表明,这个映射 f 通常都是很复杂的,因此没必要求它的解析解。这时候“神经大法”就登场了:熟悉神经网络的读者都知道,我们总可以用一个神经网络来拟合任意函数,因此,不妨用一个带有多个参数的神经网络 G(X,θ) 去拟合它?只要把参数 θ 训练好,就可以认为 Y=G(X,θ) 了。


    可是,问题又来了:拟合什么目标呢?我们怎么知道 Y=G(X,θ) 跟指定的分布是很接近的呢?



     4 

    KL 距离?JS 距离?



    让我们把问题再理清楚一下:我们现在有一批服从某个指定分布的数据 Z=(z1,z2,…,zN),我们希望找到一个神经网络 Y=G(X,θ),将均匀随机数 X 映射到这个指定分布中来。


    需要特别指出,我们是要比较两个分布的接近程度,而不是比较样本之间的差距。通常来说,我们会用 KL 距离来描述两个分布的差异:设 p1(x),p2(x) 是两个分布的概率密度(当然,还有其他距离可以选择,比如 Wasserstein 距离,但这不改变下面要讨论的内容的实质),那么:



    如果是离散概率,则将积分换成求和即可。KL 距离并非真正的度量距离,但是它能够描述两个分布之间的差异,当它是 0 时,表明两个分布一致。但因为它不是对称的。有时候将它对称化,得到 JS 距离:



    咦?怎么又回到概率密度了?不是说没给出概率密度吗?没办法,公式就是这样,只好估算一下咯。假设我们可以将实数域分若干个不相交的区间 I1,I2,…,IK,那么就可以估算一下给定分布 Z 的概率分布。



    其中 #(zj∈Ii) 表示如果 zj∈Ii,那么取值为 1,否则为 0,也就是说大家不要被公式唬住了,上式就是一个简单的计数函数,用频率估计概率罢了。


    接着我们生成 M 个均匀随机数 x1,x2,…,xM(这里不一定要 M=N,还是那句话,我们比较的是分布,不是样本本身,因此多一个少一个样本,对分布的估算也差不了多少。),根据 Y=G(X,θ) 计算对应的 y1,y2,…,yM,然后根据公式可以计算:



    现在有了 pz(Ii) 和 py(Ii),那么我们就可以算它们的差距了,比如可以选择 JS 距离:



    注意 yi 是由 G(X,θ) 生成的,所以 py(Ii) 是带有参数 θ 的,因此可以通过最小化 Loss 来得到参数 θ 的最优值,从而决定网络 Y=G(X,θ)。



     5 

    神经距离



    假如我们只研究单变量概率分布之间的变换,那上述过程完全够了。然而,很多真正有意义的事情都是多元的,比如在 MNIST 上做实验,想要将随机噪声变换成手写数字图像。要注意 MNIST 的图像是 28*28=784 像素的,假如每个像素都是随机的,那么这就是一个 784 元的概率分布。按照我们前面分区间来计算 KL 距离或者 JS 距离,哪怕每个像素只分两个区间,那么就有 2784≈10236 个区间,这是何其巨大的计算量!


    终于,有人怒了:“老子干嘛要用你那逗比的 JS 距离,老子自己用神经网络造一个距离!”于是他写出带参数 Θ 的神经网络:



    也就是说,直接将造出来的 yi 和真实的 zi 都放进去这个神经网络一算,自动出来距离,多方便。这个思想是里程碑式的,它连距离的定义都直接用神经网络学了,还有什么不可能学的呢?


    我们来看看,要是真有这么个 L 存在,它应该是怎么样的?首先,对于特定的任务来说,是给定的,因此它并非变量,我们可以把它当做模型本身的一部分,因此简写成:



    接着,别忘记我们是描述分布之间的距离而不是样本的距离,而分布本身跟各个 yi 出现的顺序是没有关系的,因此分布之间的距离跟各个 yi 出现的顺序是无关的,也就是说,尽管 L 是各个 yi 的函数,但它必须全对称的!这是个很强的约束,当然,尽管如此,我们的选择也有很多,比如:



    也就是说,我们先找一个有序的函数 D,然后对所有可能的序求平均,那么就得到无序的函数了。当然,这样的计算量是

    来源: 机器之心
    您需要登录后才可以发布评论 登录 | 会员注册
    最新评论

      免责声明

      (1) 本网站中的文章(包括转贴文章)的版权仅归原作者所有,若作者有版权声明的或文章从其它网站转载而附带有原所有站的版权声明者,其版权归属以附带声明为准;文章仅代表作者本人的观点,与本网站立场无关;

      (2) 任何单位或个人认为本站内容可能涉嫌侵犯其合法权益,应该及时向本站书面反馈,并提供身份证明、权属证明及详细情况证明,本站在收到上述文件后将会尽快移除相关内容。

      Web Analytics
      Real Time Analytics