模拟上帝之手的对抗博弈——GAN背后的数学原理

简介

深度学习的潜在优势就在于可以利用大规模具有层级结构的模型来表示相关数据所服从的概率密度。从深度学习的浪潮掀起至今,深度学习的最大成功在于判别式模型。判别式模型通常是将高维度的可感知的输入信号映射到类别标签。训练判别式模型得益于反向传播算法、dropout和具有良好梯度定义的分段线性单元。然而,深度产生式模型相比之下逊色很多。这是由于极大似然的联合概率密度通常是难解的,逼近这样的概率密度函数非常困难,而且很难将分段线性单元的优势应用到产生式模型的问题。

基于以上的观察,作者提出了产生对抗网络。顾名思义,产生对抗网络包含两个网络:产生器和判别器。产生器负责伪造一些数据,要求这些数据尽可能真实(尽可能服从只有上帝知道的概率分布),而判别器负责判别给定数据是伪造的(来自产生器生成的数据),还是来自由上帝创造的真实分布。至此,我们不得不佩服作者如此的问题形式化。整个过程中就是在博弈。产生器尽可能伪造出真实的数据,而判别器尽可能提高自身的判别性能。

这样一种问题形式化实际上是一种通用框架,因为判别器和生成器可以是任何一种深度模型。为了简单起见,该篇文章只利用多层感知机,而且生成器所生成的样本是由随机噪声得到的。利用这种方法,整个模型的训练融入了之前无法利用的反向传播算法和dropout. 这个过程中不需要近似推测和马尔科夫链。

产生对抗网络

这部分将具体介绍产生对抗网络模型,并详细推导出GAN的优化目标。

简单起见,生成器和判别器都基于多层感知神经元。对于生成器,我们希望它是一个由噪声到所希望生成数据的一个映射;对于判别器,它以被考查的数据作为输入,输出其服从上帝所定义的概率分布的概率值。下图清晰地展示了这个过程。

 

假设我们有包含m个样本的训练集S={x(1),...,x(m)}. 此外,任给一种概率密度函数pz(z)(当然,在保证模型复杂度的前提下,相应的概率分布越简单越好),我们可以利用随机变量Z∼pz(z)采样得到m个噪声样本{z(1),...,z(m)}. 由此,我们可以得到似然函数

 

进一步,得到对数似然

由大数定律,当m→∞时,我们用经验损失来近似期望损失,得
回到我们的初衷:整个过程中就是在博弈。产生器尽可能伪造出真实的数据,而判别器尽可能提高自身的判别性能。注意到我们刚刚构造的似然函数是针对判别器D(⋅)的优化目标函数。因此,我们一方面希望对判别器的可学习参数优化,极大化对数似然函数,另一方面我们希望对判别器的可学习参数优化,极小化对数似然函数。将此形式化得到我们的优化目标:
相关理论结果

生成器G(⋅)实际上隐式定义了一个概率分布pg,将其称之为隐式是因为G是从噪声z∼pz到样本G(z)的映射。由此,我们自然会提出一个问题:通过这样的建模以及训练方式得到的pg能否最终达到上帝创造的那个分布pdata,或者说两者差距到底多少?

这个问题由下面的命题和定理回答。

首先,任意给定生成器G,我们考虑最优判别器D.

命题1. 对于给定G,最优判别器为

 

证明.

给定G,我们目标是最大化V(G,D)

其中,χ和Ω分别为x和z的积分域或者说是样本空间。

注意到第二项,利用映射关系x=G(z),我们可以得到

这一步并不显然。(详细推导见附录C:测度论中随机变量的换元)

所以,

由于G已经给定,上帝创造的分布也是确定的,因此pdata和pg都是非零定函数,我们的目标是找到一个函数D使得V(G,D)到达最大。因此,我们对D求变分(见附录A),令其为0,可以得到,极大值点

证毕。

有了这个定理,我们可以进一步将这个min max博弈重新形式化为最小化C(G),其中

下面,我们提出并证明定理1. 由此回答本节最开始提出的问题:通过这样的建模以及训练方式得到的pg能否最终达到上帝创造的那个分布pdata,或者说两者差距到底多少?

定理1. 对于C(G)的全局优化最小值可达,当且仅当pg=pdata,并且最小值为−log4.

证明.

 

等号成立的条件为

 

证毕。 
由此可见,生成器完美地浮现了上帝创造数据的过程!

下面我们正式给出GAN训练算法流程,如下图所示。

注意到,作者给出的算法和我们的优化目标并不一致。我们推导出的优化目标,是先对D优化并将其优化到底,然后再对G优化。之所以实际训练流程与其不一致,是因为实际中如果对D优化到底,这将会导致很高的计算代价,而且通常会导致过拟合。相反,该算法是先对D优化k步,然后再进行一步对G的优化。通过这种方法,只要G变化得足够慢,D总是在最优解的附近。自然地,我们会提出一个疑问,这样交叉地训练G和D和形式化得到的minmax博弈,两者得到的解差距有多少?这个问题由下面的命题回答。

我们不加证明地给出该算法的收敛性。

命题2. 假设G和D有足够的表达能力,并且假设算法1的每一步,给定G,D都可以达到最优,并且pg依照下面目标优化

那么,pg可以收敛到pdata.

我们通过下面的示意图,可以更加直观地理解整个训练的过程。

最下面的水平线代表噪声的域,x代表样本的域。可以看到G(z)将一个从均匀分布采集到的样本映射到了非均匀分布的支撑集上去了。绿色的曲线代表x=G(z)的概率密度函数pg;黑色曲线代表上帝创造的概率密度函数pdata;蓝色的曲线代表判别概率函数D。(a)接近收敛时,可以看到判别函数D是部分正确的;(b)此时进行算法的内循环优化,即对于当前状态的G,优化D,优化结果如(b)图的蓝线所示;(c)进行完内循环优化后,固定D,对G进行优化,可以看到D的梯度驱使G走向D的分界面;(d)最后,如果G和D都具有足够的表达能力,两者会达到一个平衡,即pg=pdata,此时判别器无法区分两者,即 
 

实验效果

下面我们来欣赏一下伪装上帝的效果吧!

 

每张图的最右侧一栏是在训练集中的与生成样本的最近邻样本。可见,模型在没有记忆训练集的情况下生成了多样化的类似风格的图片。不像其他生成模型的可视化那样,这些图片都是由模型分布直接生成的,而不是利用条件概率的方法。并且,这些图片不像利用马尔科夫链采样过程那样所生成的图像之间是不相关的。(a)(b)(c)(d)依次是MNIST, TFD, CIFAR-10(全连接模型), CIFAR-10(卷积判别器和反卷积生成器)

附录

A. K-L散度

在概率论和信息论中,K-L散度,也称之为信息增益,是衡量两个概率分布差异的一种“度量”。我们首先给出K-L散度的定义。分为离散形式和连续形式。

对于离散形式,给定两个离散型随机变量所对应的概率函数P和Q,两者的K-L散度定义为

对于连续形式,给定两个连续型随机变量所对应的概率密度p和q,两者的K-L散度定义为
定义很抽象,下面我们对其进行直观的解读。注意到之所以这种“度量”是加引号的,因为它并不符合数学上真正度量的公理之一,即对称性。也就是说DKL(p∥q)≠DKL(q∥p). 那么前后位置的差异代表什么实际含义呢?

前置位,如定义式中的P(或p)可以理解为数据的真实分布,而Q(或q)是模型对真实分布的一种近似。另一种理解是,DKL(P∥Q)表示从先验Q到后验P带来的信息增益。

K-L散度有如下几个重要性质:

(1) K-L散度是具有良好定义的,当且仅当,当对于某些x, q(x)=0, 一定有p(x)=0;

(2) 对于某些x,当p(x)=0,一定有

 
(3)DKL(p∥q)≥0 等号成立的条件是 p=q.

下面证明一下最后一条性质。

证毕。

B. 泛函变分

泛函变分实际上是函数微分的一种自然的推广。

对于给定泛函F[y]:y(x)↦K,其中K=R/C,我们可以仿照泰勒公式,定义泛函的展开形式,对于任意η(⋅),

C. 测度论中的随机变量换元

证明:

其中x=G(z).

我们首先定义测度空间(Ω,F,P),其中Ω为z的样本空间,F为σ-代数。进一步,易证G(⋅)是可测函数:(Ω,F)↦(χ,G),其中χ为x的样本空间,G为χ的σ-代数。因此,我们有

其中PG为x的分布。

证毕。

GAN背后的数学原理的更多相关文章

  1. 速算1/Sqrt(x)背后的数学原理

    概述 平方根倒数速算法,是用于快速计算1/Sqrt(x)的值的一种算法,在这里x需取符合IEEE 754标准格式的32位正浮点数.让我们先来看这段代码: float Q_rsqrt( float nu ...

  2. opencv——PCA(主要成分分析)数学原理推导

    引言: 最近一直在学习主成分分析(PCA),所以想把最近学的一点知识整理一下,如果有不对的还请大家帮忙指正,共同学习. 首先我们知道当数据维度太大时,我们通常需要进行降维处理,降维处理的方式有很多种, ...

  3. OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

    实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...

  4. word2vec 数学原理

    word2vec 是 Google 于 2013 年推出的一个用于获取词向量的开源工具包.我们在项目中多次使用到它,但囿于时间关系,一直没仔细探究其背后的原理. 网络上 <word2vec 中的 ...

  5. 浅议极大似然估计(MLE)背后的思想原理

    1. 概率思想与归纳思想 0x1:归纳推理思想 所谓归纳推理思想,即是由某类事物的部分对象具有某些特征,推出该类事物的全部对象都具有这些特征的推理.抽象地来说,由个别事实概括出一般结论的推理称为归纳推 ...

  6. hover 背后的数学和图形学

    前端开发中,hover是最常见的鼠标操作行为之一,用起来也很方便,CSS直接提供:hover伪类,js可以通过mouseover+mouseout事件模拟,甚至一些第三方库/框架直接提供了 hover ...

  7. RSA加密数学原理

    RSA加密数学原理 */--> *///--> *///--> UP | HOME RSA加密数学原理 Table of Contents 1 引言 2 RSA加密解密过程 2.1 ...

  8. PCA的数学原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维 数据的 ...

  9. PCA数学原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

随机推荐

  1. 物联网学习之路——物联网通信技术:NBIoT

    NBIoT是什么 NB-IoT,Narrow Band Internet of Things,窄带物联网,是一种专为万物互联打造的蜂窝网络连接技术.顾名思义,NB-IoT所占用的带宽很窄,只需约180 ...

  2. 完美解决linux系统sublime不能输入中文

    1.下载git项目:sublime-text-imfix,主要是要用到里面的两个文件   subl和libsublime-imfix.so git项目路径:https://github.com/lyf ...

  3. JS DATE对象详解

    1.建立时间对象:可获取年,月,日,星期,时,分,秒 var d = new Date(); console.log(d.getFullYear()+'年'+d.getMonth()+'月'+d.ge ...

  4. JDBC处理Transaction

    package com.ayang.jdbc; import java.sql.*; /** * transaction的构成,随便写一句insenrt,一执行executeUpdate(),它自动提 ...

  5. java反射机制_读取properties

    代码: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 反射特点: ...

  6. python-pymongo使用

    #-*- coding: utf-8 -*- #python2.7x from pymongo import MongoClient def get_db(): #建立连接 client = Mong ...

  7. multi-threads JavaEE 容器

    Thread -- Request What is recommended way for spawning threads from a servlet in Tomcat [duplicate] ...

  8. rails 中 create, new, build, save 的用法以及误区汇总 (转)

    自己很初级,初级的不能再初级,所以初次接触rails的时候,对于里面的create,new,build等方法不是很了解,用的很混乱,导致经常出现不必要的bug,很苦恼,决定,总结一下,结合网上已有资源 ...

  9. 基于ASP.Net Core学习Docker技术第一步:在CentOS7安装Docker平台

    Docker技术几年前就火了,伴随着今年来devops的流行,这项技术一直被技术社区追捧.提起Docker很容易被默认为是Linux平台下的技术,.NET的技术跟他似乎没有沾边,不过那是对非.NET ...

  10. CADisplayLink+弹簧动画实现果冻效果

    项目中在Tabbar中间的按钮要从底部弹出视图并有果冻效果,在CocoaChina中找了一篇博客用 UIBezierPath 实现果冻效果,github,自己就按着上面的demo修改了一下( 之前也是 ...