学懂GAN的数学原理,让它不再神秘

知乎上有个讨论,说学数学的看不起搞深度学习的。曲直对错不论,他们看不起搞深度学习的原因很简单,因为从数学的角度看,深度学习仅仅是一个最优化问题而已。比如,被炒的很热的对抗式生成网络(GAN),从数学看,基本原理很容易就能说明白,剩下的仅仅是需要计算资源去优化参数,是个体力活。

本文的目的就是尽可能简单地从数学角度解释清楚GAN的数学原理,看清它的庐山真面目。

01

从生成模型说起

机器学习的模型可分为生成模型和判别模型。

简单说说二者的区别,以二分类问题来讲,已知一个样本的特征为x,我们要去判断它的类别y(取值为0,1)。也就是要计算p(ylx),假设我们已经有了N个样本。

计算p(ylx)的思路有两个,一个就是直接求,即y关于x的条件分布,逻辑回归就是这样干的。凡是按这种思路做的模型统一称作判别模型。

另一个思路是曲线救国,先求出x,y的联合分布p(x,y),然后,根据p(ylx)=p(x,y)/p(x)来计算p(ylx),朴素贝叶斯就是这样干的。凡是按这种思路做的模型统一称作生成模型。

那么,GAN属于什么呢?答案是生成模型,因为它也是在模拟数据的分布。

举个例子,我们有N张尺寸为50*50的小猫的照片,先不管这些猫多可爱,多漂亮,从数学的角度看,一张猫的图片可以理解为2500维空间中的一个点或者说是一个2500维的向量,N张图就是N个点或者说向量。如果我们想让神经网络自动生成一个小猫的图片,所要做的就是假设N张图片都是某个2500维空间中的随机分布的样本,这个分布抽样产生的点就是一张猫的图片。

这里有一个问题,需要再思考一下,我们假设的这个分布存在吗?答案是存在的,因为这是GAN的理论基础,没有这个假设,GAN就玩不下去了。具体的证明过于数学了,此刻,我们只要相信它存在就是了。

假设图片背后隐藏的分布是Pd(d就是data),我们的任务就是用神经网络生成一个分布Pg(g就是generate),只要Pg和Pd很接近,就可以用Pg生成一张小猫的图片了。

02

GAN解决的基本问题

根据上面的讨论,我们要解决两个问题:

一是如何用神经网络构造一个模拟分布Pg,另一个是如何衡量Pg和Pd是否相似,并根据衡量结果去优化Pg。这就是GAN解决的最根本的两个问题。

03

GAN是如何解决这两个问题的

第一个问题很容易解决,以上面的小猫问题为例,只要做一个神经网络,它的输入是来自某个特定分布的数,为便于说明,我们就假设这个特定分布是一维的,也就是它产生的数就是一个标量,如1,2.5之类的,经过多层的映射后,产生一个2500维的向量。可以想象,只要输入来自一个特定的分布,映射产生的2500维向量也会形成一个分布。这个分布的概率密度函数就是输入分布的概率密度函数在2500维空间的扩展。

我们来举个例子,为了说明问题,这里假设神经网络映射后也是一个一维的数,不再是上面例子中的2500维向量,但我们要清楚,其原理是一样的。

假设我们的输入分布是一个标准正态分布,其概率密度函数为

标准正态分布

我们的神经网络就相当于一个函数y=g(x),现在已知x的概率密度函数如上所示,那么y的概率密度函数会是什么样子呢?

没有什么是一个例子说明不了的,如果有,那就两个。

假设g就是一个等值映射,即g(x)=x,显然y与x的概率密度函数一样,也是标准正态分布。

如果g(x)=x+1,那么,y的概率密度函数就是均值为1,方差为1的正态分布。

可见,神经网络对某个特定分布x映射后的y确实是一个分布,其概率密度函数既与x的概率密度函数相关,又与神经网络的结构g函数相关。这里说的网络结构有两层含义,一个网络的内部构造,另一个就是网络的输出向量维数。我们虽然只举了输出为1维的情况,但在输出是多维时,y的分布会有一些新的特点。

比如,一个有趣的问题是,若原始的输入是一维的正态分布,其取值空间是整个一维实数空间,如果输出的是多维向量分布,那么,它的取值空间还会是整个多维空间吗?

这个问题让我联想到《三体》,太阳系遭受二向箔攻击后,变成了二维空间,逃离的人类,开始寻找更高级的宇宙文明,期望有一天,能够将二维化的地球还原成三维的世界。

第二个问题如何解决呢?

回到刚才小猫的问题,假设我们有一万个样本图片,也有了一个生成分布的神经网络G,它的输入是一个正态分布。输出是2500维的向量。

从数学上讲,我们的问题是,如何衡量Pd,Pg的相似性,以及如何使Pg接近Pd。

具体的方法不用我们费心想了,我们直接看现成的就可以。

即再定义一个NN,叫做D,D(x)产生的是0到1之间的一个值。

定义函数V(G, D) = Ex~Pd(log(D(x)) + Ex~Pg(log(1-D(x))

对于一个特定的G,通过调整D,可以得到maxV(G,D),它就能衡量Pd和Pg的difference,这个值越小, 二者差距越小。

为什么maxV(G,D)可以衡量两个分布的差异?

我们先直接观察V,把D看作一个判别器,V的第一部分表示D对来自真实分布的数据的评分的期望,第二部分表示D对来自G生成的数据的评分与1的差的期望。

最大化V,就是要使D对来自真实数据的评分尽可能高,对来自G生成的数据的评分尽可能低(即让1-D(x)尽可能高)。

至此,我们看到,V越大,表示D对来自真实分布和来自G的数据评分差异越大,真实的样本越接近1,G产生的样本越接近0。

通过调整D,得到的maxV,表示在我们能力范围内,我们找到的最强的D,它能把Pd和Pg产生的数据区分开的程度。自然,这个区分程度就表示了Pd和Pg的差异程度。因为可以想象,Pd和Pg越接近,同样的D,得到的V肯定越小。因为二者产生的数据越难区分开。

以上,是通过直观的分析得出的一些认识,我们还可以从数学上进行一些分析。

对V做一些变形,可以得到如下

V = Σ(Pd*log(D(x)) + Pg*log(1-D(x)))xmaxV时,我们只要看对于一个x,如何最大化这个值即可:Pd*log(D(x)) + Pg*log(1-D(x))。

这里,除了D是变化的,其他都是已经给定的,令a=Pd,D=D(x), b = Pg。

a,b都是一个确定的数值,因为x此时是确定的,上式进一步变成这样alogD + blog(1-D)。

对这个式子,求导,很容易得出最佳的D值是:

D^* = a/(a+b) 可见,D的值确实是0到1之间的值。

再将D^*带入最上面的V的定义中,经过一系列的计算推导(此处省略了推导过程,感兴趣的小伙伴可以自己推导一下),我们可以得出maxV实际表示的是Pd

和(Pd+Pg)/2的KL散度加上Pg和(Pd+Pg)/2的KL散度。

如果令g = (Pd+Pg)/2,则maxV = -2log2 + KL(Pd||g) + KL(Pg||g)

如果有小伙伴对KL散度不是很理解,推荐看看我的另一篇文章《机器学习面试之各种混乱的熵》,里面有一个很通俗易懂的解释。

这里有一个数学定义:JSD(Pg||Pd)=1/2*(KL(Pd||g) + KL(Pg||g))

根据定义,maxV就变成这样了:maxV = -2log2 + 2JSD(Pg||Pd)

JSD全称是Jessen-Sannon Divergence,它是一个对称化的KL散度。

从数学上可以证明,JSD最大值是log2,最小值是0,所以maxV最大值是0,最小值是-2log2。

至此,我们的第二个问题已经解决了一半,将Pd和Pg的差异量化成了一个-2log2到0之间的一个数值。

另一半问题就是如何针对求出的最大化V的D,更新调整G,使得maxV变小一点。

我们将maxV定义为L(G),即L(G)=maxV

可见,maxV实际上就是G的损失函数,可以用梯度下降更新神经网络G的各个参数得到G1,使得maxV下降。

有了G1后,我们再次重复上面的最大化V的过程,得到D1,然后再次运用梯度下降,得到G2,如此循环下去,可以期待,Pg将会越来越接近Pd。

声明:上图来自李宏毅深度学习课程截图,如侵删。

这是从理论上证明的,如果你感觉看得比较晕乎,没关系,我们下面就来看看实践中的做法。

04

实践中的做法

以上的推导都是从理论上进行的分析,在工程实践中,有个问题必须解决:

我们并不能真正知道Pd,我们只是有很多Pd产生的样本,自然也求不出logD(x)关于Pd的期望,对于Pg的期望也有类似困难。

那么,实践中是怎么做的呢?

首先,既然直接计算期望而不可得,我们只能退而求其次,从Pd中sample 出m个样本,再从Pg中sample出m个样本,最大化D(x)在这2m个样本的V值,如下图所示:

仔细观察上式,最大化V的过程,就是将Pd产生的样本作为正样本,Pg产生的样本作为负样本,训练一个分类器D的过程。

完整的算法如下所示:

声明:该图同样来自李宏毅深度学习课程,如侵删。

另外,在工程实践中,还有一个实际的调整,就是将V蚯蚓中的log(1-D(x))改为-log(D(x))

原因是:D的值在0到1之间,

在刚开始时,由于G生成的图像比较挫,D可以很容易分辨出来,也就是生成的值都远小于0.5,V蚯蚓关于G的参数θg的梯度等于 log(1-D(x))关于D的梯度再乘以D关于θg的梯度,但是此时,log(1-D(x))在0到0.5之间的梯度比较小,这就会导致θg的更新比较慢,但是换成-log(D(x))后,它在0到0.5之间的梯度是比较大的,可以快速的更新g的参数。这符合我们的直觉,就是一开始学习要快一点,后面要慢一点。

05

无总结,不进步

纵观整个GAN,本来我们要求Pg和Pd之间的相似度,由于不能直接求,转而借助一个D,maxV求出一个最佳的D后,maxV就是在衡量Pg和Pd的JS 散度,然后,最小化这个散度值,更新一次Pg,有了新的Pg后,进一步求出最佳的D,然后重复上面的步骤。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2018-02-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

【干货】机器算法学习感悟(下)

今天的内容是续接昨天的,请喜欢的亲们一如既往的支持! (…………续) 第二个是KNN。KNN将测试集的数据特征与训练集的数据进行特征比较,然后算法提取样本集中特...

2976
来自专栏UAI人工智能

连载 | 深度学习入门第五讲

1117
来自专栏IT派

深度学习的三大生成模型:VAE、GAN、GAN

导语:本章将为读者介绍基于深度学习的生成模型。前面几章主要介绍了机器学习中的判别式模型,这种模型的形式主要是根据原始图像推测图像具备的一些性质,例如根据数字图像...

4879
来自专栏PPV课数据科学社区

常见面试之机器学习算法思想简单梳理

前言:   找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据...

3174
来自专栏数据派THU

VAE、GAN、Info-GAN:全解深度学习三大生成模型

来源:1024深度学习 作者:冯超 本文长度为2600字,建议阅读6分钟 本章介绍基于深度学习思想的生成模型——VAE和GAN,以及GAN的变种模型。 在深度学...

3048
来自专栏决胜机器学习

循环神经网络(四) ——words2vec、负采样、golve

1835
来自专栏CSDN技术头条

卷积神经网络处理自然语言

当我们听到卷积神经网络(Convolutional Neural Network, CNNs)时,往往会联想到计算机视觉。CNNs在图像分类领域做出了巨大贡献,...

1866
来自专栏AI研习社

CNN到底认为哪个投影方向是重要的?——SVDNet for Pedestrian Retrieval

近年来,行人再识别问题(Person-reID)研究热度逐渐上升。与人脸识别相比,它在采集图像时不需要行人主动配合,在安防等领域具有极大的应用潜力。基于深度学习...

3468
来自专栏SIGAI学习与实践平台

机器学习中的最优化算法总结

对于几乎所有机器学习算法,无论是有监督学习、无监督学习,还是强化学习,最后一般都归结为求解最优化问题。因此,最优化方法在机器学习算法的推导与实现中占据中心地位。...

714
来自专栏企鹅号快讯

机器学习简介

标题: 机器学习定义 人工智能、机器学习、深度学习的关系 机器学习的学习类别 数据(特征)的种类 几个空间的概念 机器学习的三要素 深度学习的兴起引领了人工智能...

2159

扫描关注云+社区