1深度学习中的数学问题
王立威
我今天要讲的内容是深度学习中的数学问题。*近几年,深度学习是一个非常火热的话题,全世界都很关注。深度学习虽然看上去是一个和应用相关的话题,在很多应用里面大家看到了深度学习带来的很多影响,但是在过去一两年的时间里,学术界*关注的其实是深度学习的理论问题。我们希望对它从理论上理解。这里面出现了非常多的数学问题,从我的角度来看,应该是一些新的数学问题,需要我们努力去解决。
在整个国际学术界,现在也有越来越多的数学家开始在深度学习这个方向去深入探索,比如去年年底来中国访问的著名数学家、Fields奖得主C&lricVillani就是其中之一。Villani现在相当大的关注是在机器学习、深度学习的方面。有很多从事机器学习理论研究的人应用Villani的传输(transportation)理论做了很多的研究。其实在今天的机器学习界和数学界,这种大家融为一体做研究的交互在国际上非常普遍,所以我也希望今天借此机会和大家有一个深入的交流,也可以在我们国内,在数学所和计算机领域之间能够建立一个很好的沟通的桥梁,今后我们大家可以一起有合作、有沟通,希望合作出一些在世界上有重大影响力的成果。
首先我简单地介绍一下机器学习的发展历史。机器学习被认为是今天人工智能的一个核心方法。人工智能的历史其实已经很久了,从20世纪50年代引入人工智能的概念以来,人工智能的发展经历了几波浪潮。机器学习是从20世纪80年代发展起来的一套新技术,它的核心观点是:从数据端、经验端去学习,而不是人给机器制定规则。机器要从数据和经验中有新的发现,获取新的信息。在2012年,机器学习有一个非常重大的突破,就是深度学习。其实深度学习这个概念早在1998年就被提出来了,但是由于当时的一些限制,比如说计算机的计算能力、数据量,以及算法的设计,深度学习长时间没有发挥很好的效果。但是在2012年,由加拿大多伦多大学的Hinton教授带领的团队采用深度学习的方法,在一个非常著名的应用领域——计算机视觉领域,取得了很大的突破。从此,大家认识到了这个方法的重要性,深度学习取得了巨大的进步,产生了深远的影响。
下面我举几个例子,这是我自己认为,从应用的角度来讲,*有可能改变我们的社会和生活,或者说影响力很大的应用实例。其中大家*耳熟能详的是AlphaGo。另外还有无人驾驶,以及深度学习对医疗领域的改变。我比较看好在医疗和无人驾驶方面,机器学习的技术会给这个行业带来重大的颠覆性的变革。
除了深度学习以外,还有另一个非常重要的技术叫做深度强化学习。深度强化学习是两个技术的结合,一个技术叫做强化学习,深度代表深度学习。大家耳熟能详的AlphaGo,就是用深度学习和强化学习技术来实现的。在AlphaGo出现之前,围棋领域的专业人士认为至少在十年之内不可能有计算机能够打败人类,但是AlphaGo颠覆了他们的想法。之后我还会谈一谈除了刚才讲的和社会生活非常相关的一些领域的应用,深度学习对科学,特别是对数学可能会产生什么样的影响,这也是我个人特别感兴趣的一个方面。
下面我用比较正式的数学语言把机器学习,特别是监督学习的框架描述一下。这个框架如图1.1所示。
监督学习的数学描述非常简单。它是这样一个过程:第一步,我们要收集一些数据,比如说我拿到了一些图片,然后想对这些图片进行分类。*简单的一个例子是阿拉伯数字0—9,我们想做的事情是:拿到含有阿拉伯数字的图片,识别图片里的数据究竟是不是属于0—9这十个类别中的某一类?这叫做分类问题。对这样的问题,x代表图片,y代表它所属的0—9这十个类别中的一个。我们会先收集一些数据,比如说我们收集了一万张手写的阿拉伯数字的图片,对于每张图片我们会给出一个它所属的类别的标签。我们把这些数据叫做训练数据。有了训练数据之后,我们把它输送给一个我们设计的学习算法。这个算法是机器学习的核心,是由人来设计的。把数据输入这个算法之后,运行这个算法去学习一个模型。所谓模型就是一个函数,或者说一个映射,它从样本空间X映射到标签空间F。在刚才的例子里,X是我们看到的所有的图片,Y是由0—9这十个类别组成的集合。我们的目的就是设计一个算法去学习一个模型,当你的算法的输入是已有的这些数据的时候,这个算法会得出一个映射。我们得出映射的目的是什么?我们的目的是在未来,当你有新的图片、新的数据的时候,可以对新的数据进行分类,对它的类别做预测。我们的目的是在新数据上预测这个函数的值。我们把它叫做分类。整个学习的流程是非常简单的。
那么怎么去学习这个模型呢?我们可以用一种更加简略的数学语言来描述。我想估计一个函数,但是我拥有的只是一些这个函数的输入和输出的对。我们的目的是希望对这个函数在其他所有可能的输入上都能有准确的输出的预测。这是一个更简单的描述。当我们的目的是预测新的数据的时候,我们一定要有关于新数据和已有的训练数据的关系的一些假设。下面是一个理论假设框架。
这个理论假设框架认为,无论是之前收集的训练数据还是未来可能遇到的新的数据,它们的分布都是V。
这里的特殊性就在于,我们只知道所有的数据都是从V这个分布里面抽取出来的,但是我们并不知道这个分布是什么。到这里为止,我们已经把监督学习问题描述完了,它的问题就是:所有的数据,不管是算法学习之源的训练数据还是未来应用的测试数据,都是从一个分布中抽取出来的,而这个分布是未知的。我们要做的就是学习一个函数,利用已有的数据的信息,使得它能够应用到未来的数据上,这是针对问题来说的。
那么如何解决这个问题?既然我们所拥有的信息只是之前收集的训练数据,那一个很简单的想法就是,我希望学到的函数/在训练数据上能够有比较好的拟合,这是很显然的一个想法。一个经常使用的方法叫做经验风险极小化(empirical risk minimization):
如果w是/的参数,那我们会用一个损失函数来衡量模型的表现。我们希望这个损失函数在现有的训练数据上达到比较小的值,这是一种非常自然的想法。当然如果只是这么做,那么这是很简单的问题,没有什么新的内容。机器学习的特殊性就在于,做*小化不是*终目的,*终目的是在未来的、你还没有遇到的新的数据上做预测。所以只有训练数据有一个很小的损失是远远不够的,一定要在新的数据上也得到非常好的结果。因此我们提出了期望风险(population risk)的概念:
也就是对损失取期望。当(x,y)从未知的分布里抽取时,我们希望I的期望值尽可能小,这才是*终衡量学习结果好与坏的真正标准。在一些现有的数据上的优化和*终希望期望风险小,这两者之间是有差距的。这是机器学习的一个非常本质的问题。
机器学习其实并不是一个新兴的学科。我认为它是一个至少有几百年甚至上千年历史的学科。我给大家举两个例子,第一个是初中物理学里面都会讲的例子,叫做胡克定律(Hookelaw)(图1.2)。
胡克定律是什么?在1678年,胡克研究了弹簧的拉力和伸长幅度这两个变量之间的函数关系。他做了很多实验,每次用一个力拉弹簧,结果如图1.2所示。其中横轴表示拉力的大小,纵轴表示弹簧伸长长度。他做了几百次实验,得到了几百个数据。可以把横轴看成X,纵轴看成y。大家都知道胡克定律是说拉力和伸长长度是一个线性关系,这就是一个典型的机器学习问题:收集了一些数据,希望去学习数据之间的关系。但是胡克定律绝不仅是为了拟合已经在实验中观测到的数据,你希望得到的是一个普适的定律,当你未来再做这种实验时,你希望这个定律仍然和你的数据拟合得很好。物理学几百年来其实一直在做机器学习的问题,同我今天谈的机器学习没有任何的区别。只不过对物理学家而言,机器就是他们自己,是人。而今天我们的机器是计算机。再比如,开普勒三定律完全是由开普勒本人从大量的天文观测数据中学到的。
我们再来看看深度学习。深度学习现在是一个非常火热的词。深度学习描述起来也是极其简单。刚才我们看到,在学习的过程当中有一个非常关键的步骤:我们希望去学习一个函数,这个函数一定是从某一个空间里面去学的,而不是对于这个函数不加任何限制,允许这个函数可以从所有的函数中去取。刚才举的胡克定律的例子里,发现胡克定律可以分成两步:第一步是胡克从数据中推断出拉力和伸长长度是一个线性关系;第二步是确定了线性关系之后,去求线性函数的系数。第一步实际上是在确定这个函数是从什么空间里去选取。刚才说的线性就是说,我确定了从一个线性函数空间里去选取函数。第二步从空间里去找。为什么从线性空间里去找?物理学家没有一个很严格的理论,没有一个系统的方法,去告诉大家,当看到这样数据的时候,为什么要选线性关系。为什么不能选多项式呢?比如说如果我已经做了100次实验,有100个数据,我选99次多项式,完全可以没有误差地拟合实验数据。为什么不选99次多项式,而是选择线性关系?开普勒的例子也一样,开普勒得到的三定律对于观测到的数据来说都处于近似的关系。为什么不选择一个能够完全拟合自己观测到的数据的模型?这里面有机器学习非常本质的问题。
回到深度学习。刚才我们说要从函数空间中进行学习,深度学习实际上是给了函数空间对一个很好的模型。在讲深度学习之前,首先我们讲讲深度神经网络,深度学习是以深度神经网络作为它的模型。什么是神经网络?我们首先看一看神经网络的基本单元:神经元是什么样的。
图1.3是一个神经元的数学表示。神经元的输入是W到这些输入被到加权,这些是神经元的自有参数,是学习过程中要学出来的参数。W和X进行作用之后,要经过一个非线性的处理,这个非线性的函数如果用公式来写就是这样:
ReLU(x)=max(0,x),
这个函数叫做ReLU,这是一个非常简单的函数。如果自变量大于零,那么这个函数的值是它自身;如果自变量小于零,那么这个函数的值就是0。这就是神经网络的一个基本单元一神经元对于输入向量的函数作用。把大量这样的神经元组合到一起,就成了深度神经网络。
这就是一个很小的网络,*左边是神经网络的输入,后面的每个圆圈都是一个神经元。这样的网络分内部结构,我们把第一层叫做输入层,第二层叫做第一个隐含层,第三层叫做第二个隐含层,*后一层叫做输出层。每一个神经元对前面一行的神经元的输出的作用都如同之前讲的一样。如果用一个很简明的方式来写,比如X表示输入,W是所有这些神经元权重的矩阵形式,那么整个神经网络的函数可以写成一个很简单的形式(图1.4)。
这个形式有一个特点:同我们经常看到的函数有一点不太一样,它是大量函数的复合。过去在机器学习或者其他的一些领域,大家分析的函数通常是用一些基函数(basis function),把一个函数表示为基函数的线性组合。而神经网络的基本操作是函数的复合。如果网络有100层,那就是这种简单函数的复合进行100次。这种函数复合和之前我们常见的一些函数是极其不一样的。这个也是今天深度学习很多本质问题里面*需要“啃”的“硬骨头”:这种多级的复合函数,它的一些本质的性质到底是什么?我们用什么样的数学工具来研究它?这是未来非常重要的一个研究问题。
展开