编者按:本文转自 AI科技大本营(公众号ID:rgznai100),36氪经授权转载。
AI科技大本营按:4 月 15 日举办的京东人工智能创新峰会上,刚刚上任京东人工智能南京分院学术总顾问的周志华教授做了《关于深度学习一点思考》的公开分享。
近年来,深度神经网络在语音、图像领域取得突出进展,以至于很多人将深度学习与深度神经网络等同视之。但周志华表示,总结 Kaggle 竞赛中的获奖结果可以发现,神经网络获胜的往往就是在图像、视频、声音这几类典型任务上,而在其它涉及到混合建模、离散建模、符号建模的任务上,相比其他模型就会差一些。
为什么会产生这样的结果?周志华从深度神经网络的深层含义说起,条分缕析地总结出神经网络取得成功的三大原因:
有逐层的处理
有特征的内部变化
有足够的模型复杂度
并得出结论:如果满足这三大条件,则并不一定只能用深度神经网络。
由于神经网络存在的一些缺陷,很多时候人们不得不考虑其他的模型。周志华介绍了他所领导的团队提出的 gcforest 方法,称该方法有良好的跨任务表现、自适应的模型复杂度等优势。
而对于 gcforest 研究的重要意义,正如周志华在分享中表示的那样,深度学习是一个黑屋子,以前大家都知道它里面有深度神经网络,现在我们把这个屋子打开了一扇门,把 gcforest 放进来,我想以后可能还有更多的东西,这是这个工作从学术科学发展上更重要的价值所在。
周志华教授是美国计算机学会 (ACM)、美国科学促进会 (AAAS)、国际人工智能学会 (AAAI) 、国际电气电子工程师学会 (IEEE) 、国际模式识别学会 (IAPR)、国际工程技术 (IET/IEE) 等学会的会士,实现了 AI 领域会士大满贯,也是唯一一位在中国大陆取得全部学位的 AAAI 会士,对于机器学习中的集成学习、多标记学习与半监督学习有着卓越的贡献。他还一手参与创建了南京大学人工智能学院并担任院长。
下面是演讲全文,AI科技大本营整理:
各位可能最近都听说我们南京大学成立了人工智能学院,这是中国 C9 高校的第一个人工智能学科。今天就跟大家谈一谈我们自己对于深度学习的一点点非常粗浅的看法,仅供大家批评讨论。
▌什么是深度学习?
我们都知道现在人工智能很热,掀起这股的热潮最重要的技术之一就是深度学习技术。今天当我们谈到深度学习的时候,其实已经可以看到在各种各样的应用,包括图像、视频、声音、自然语言处理等等。如果我们问一个问题,什么是深度学习?大多数人基本会认为,深度学习差不多就等于深度神经网络。
我给大家看一个例子。有一个非常著名的学会是国际工业与应用数学学会,他们有一个报纸叫 SIAM News。去年 6 月份的头版上有一篇文章,它里面的重点说的就是深度学习是什么?它(深度学习)是机器学习的一个子域(subfield),这里面要用深度神经网络。
所以基本上如果我们要谈深度学习的话,首先要从神经网络开始。神经网络并不是一个新生事物,人们已经研究了超过半个世纪。但以往的话我们会用这样的神经网络,就是中间有一个隐层或者有两个隐层。在这样的神经网络里面,它的每一个单元是一个什么样的东西呢?是个非常简单的计算模型。
比如说这么一个计算模型,实际上半个多世纪以前我们就已经总结出来了。我们收到一些输入,这些输入通过一些连接放大,到了细胞之后,它的“加和”如果超过一个阈值,这个细胞就激活了。实际上说穿了就是这么一个非常简单的公式,所谓的神经网络就是很多这样的公式通过嵌套迭代得到的一个数学系统。
今天我们说深度神经网络的时候指的是什么?其实简单来说就是用的神经网络有很多层,很深很深。大概多少?看一个数据,2012 年深度学习刚刚受到大家的重视的时候,一个 ImageNet 竞赛的冠军用了 8 层,2015 年 152 层,2016 年 1207 多层,这是一个非常庞大的系统。
要把这个系统训练出来难度非常大,但有一个非常好的消息,真正的神经网络里面的计算单元,它最重要的激活函数是连续的,是可微的。以前在神经网络里面我们经常用 Sigmoid,它是连续可微的,现在在深度神经网络里,我们经常用 tanh 或者 tanh 的变体,它也是连续可微的。有了这么一个性质以后,我们会得到一个非常好的结果,这个结果就是现在我们可以很容易计算系统的梯度。因此就可以很容易用著名的 BP 算法(注:反向传播算法)来训练这系统。
今天通过这样的算法,神经网络已经取得了非常多的胜利,但实际上在学术界大家一直没有想清楚一件事情,就是我们为什么要用这么深的模式?可能今天有很多人会说深度学习已经取得了很多的成功,但它一个很大的问题就是理论基础不清楚,我们理论上还说不清楚它到底怎么做?为什么会成功?这里面的关键是什么?其实我们根本不知道该从什么角度去看它。因为如果我们要做理论分析的话,首先应该有一点直觉,你到底因为什么有用,在这条路上往前走才能有关键的结果。
关于深度神经网络为什么能深,其实这件事情到今天为止学术界都没有统一的看法。在这里面给大家讲一个我们前一段时间给出的论述,这个论述其实是从主要模型的复杂度的角度来讨论的。
▌深度学习成功的关键是什么?
我们知道一个机器学习模型的复杂度实际上和它的容量有关,而这个容量直接决定了它的学习能力,所以说学习能力和复杂度是有关的。其实我们老早就知道,如果我们能够增强一个学习模型的复杂度,它的学习能力就能够提升,那么怎样去提高复杂度呢?
对神经网络这样的模型来说有两条很明显的途径,一条是我们把模型变深,一条是我们把它变宽,但是如果从提升复杂度的角度,变深会更有效。当你变宽的时候你只不过增加了一些计算单元、增加了函数的个数,而在变深的时候不仅增加了个数,其实还增加了嵌入的层次,所以泛函的表达能力会更强。所以从这个角度来说,我们应该尝试变深。
大家可能就会问了,既然要变深,你们不早就知道这件事了吗?为什么现在才开始做呢?其实这就涉及到另外一个问题,我们在机器学习里面把学习能力变强了,这其实未必真的是一件好事。因为我们机器学习一直在斗争的一个问题,就是我们经常会碰到过拟合。
给定一个数据集,我们希望把数据集里的东西学出来,但是有时候可能把这个数据本身的一些特性学出来了,而这个特性却不是一般的规律。当把学出来的错误东西当成一般规律来用的时候,就会犯巨大的错误,这种现象就是过拟合。为什么会把数据本身的特性学出来?就是因为我们的模型学习能力太强了。
所以以往我们不太用太复杂的模型,为什么现在我们可以用这样的模型?其实有很多因素,第一个因素是现在我们有很大的数据,那么比如说我手上如果只有 3000 多数据,学出来的特性就不太可能是一般规律。但是如果有三千万、甚至三千万万的数据,那么这些数据里的特性本来就是一般规律,所以使用大的数据本身就是缓解过拟合的关键条件。
第二个因素,今天有很多很强大的计算设备,所以才能够训练出这样的模型,同时通过领域里很多学者的努力,我们有了大量关于训练这样复杂模型的技巧和算法,所以这使得我们使用复杂模型成为可能。
按照这个思路来说,其实有三件事:第一,我们今天有更大的数据;第二;有强力的计算设备;第三,有很多有效的训练技巧。
这导致我们可以用高复杂度的模型。而深度神经网络恰恰就是一种很便于实现的高复杂度的模型。所以这么一套理论解释,如果我们说它是一个解释的话,它好像是能告诉我们为什么我们现在能用深度神经网络。为什么它能成功?就是因为复杂度大。
在一年多之前,我们把这个解释说出来的时候,其实国内外很多同行也很赞同这么一个解释,因为大家觉得这听起来蛮有道理的,其实我一直对这个不是特别满意,这是为什么?其实有一个潜在的问题我们一直没有回答。如果从复杂度解释的话,我们就没有办法说为什么扁平的或者宽的网络做不到深度神经网络的性能?因为事实上我们把网络变宽,虽然它的效率不是那么高,但是它同样也能起到增加复杂度的能力。
实际上我们在 1989 年的时候就已经有一个理论证明,说神经网络有万有逼近能力:只要你用一个隐层,就可以以任意精度逼近任意复杂度的定义在一个紧集上的连续函数。
其实不一定要非常深。这里面我要引用一个说法,神经网络有万有逼近能力,可能是有的人会认为这是导致神经网络为什么这么强大的一个主要原因,其实这是一个误解。
我们在机器学习里面用到的所有模型,它必须具有万有逼近能力。如果没有这个能力,根本不可用。所以最简单的,哪怕傅立叶变换,它就已经有这个能力,所以这个能力不是神经网络所特有的。那我们在这儿要强调的一件事情是什么?其实我只要有一个隐层,我加无限度的神经元进去,它的能力也会变得很强,复杂度会变得很高。但是这样的模型无论在应用里面怎么试,我们发现都不如深度神经网络好。所以从复杂的角度可能很难解决这个问题,我们需要一点更深入的思考。
所以我们要问这么一个问题:深度神经网络里面最本质的东西到底是什么?今天我们的答案可能是要做表示学习的能力。以往我们用机器学习,首先拿到一个数据,比如这个数据对象是一个图像,我们就用很多特征把它描述出来,比如说颜色、纹理等等,这一些特征都是我们人类专家通过手工来设计的,表达出来之后我们再去进行学习。
而今天我们有了深度学习之后,现在不再需要手工设计特征,把数据从一端扔进去,模型从另外一端出来,中间所有的特征完全通过学习自己来解决,这是所谓的特征学习或者表示学习,这和以往的机器学习技术相比是一个很大的进步,我们不再需要完全依赖人类专家去设计特征了。
有时候我们的工业界朋友会说,这里面有一个很重要的叫做端到端学习,大家认为这个非常重要。其实这一件事情要分两个方面来看:一个方面当我们把特征学习和分类器学习联合起来考虑,可以达到联合优化的作用,这是好的方面;但另一方面,如果这里面发生什么我们不清楚,这时候端到端的学习不一定真的好,因为可能第一部分往东,第二部分往西,合起来看往东走的更多一些,其实内部有一些东西已经抵消了。
实际上机器学习里面早就有端到端学习,比如说做特征选择,但这类方法是不是比其它特征选择的方法要强?不一定,所以这不是最重要的,真正重要的还是特征学习或者表示学习。
我们再问下一个问题,表示学习最关键的又是什么?对这件事情我们现在有这么一个答案,就是逐层的处理。现在我们就引用非常流行的《深度学习》一书里的一张图,当我们拿到一个图像的时候,如果我们把神经网络看作很多层的时候,首先在最底层我们看到是一些像素的东西,当我们一层一层往上的时候,慢慢的有边缘,再往上有轮廓等等,在真正的神经网络模型里不一定有这么清晰的分层,但总体上确实是在往上不断做对象的抽象。
而这个特点,我们现在认为这好像是深度学习真正成功的关键因素之一,因为扁平神经网络能做很多深层神经网络所做的事,但是有一点它做不到:当它是扁平的时候,就没有进行一个深度加工,所以深度的逐层抽象可能很关键。那如果我们再看一看,大家可能就会问,其实逐层处理这件事,在机器学习里也不是一个新东西。
以前有很多逐层处理的东西,比如说决策树,它就是逐层处理,这是非常典型的模型。这个已经有五六十年的历史了,但它为什么做不到深度神经网络这么好呢?首先它的复杂度不够,因为决策树的深度,如果我们只考虑离散特征,其最深的深度不会超过特征的个数,所以它的模型复杂度有上限;第二整个决策树的学习过程中,它内部没有进行特征变化,始终是在一个特征空间里面进行,这可能也是一个问题。
大家如果对高级一点的机器学习模型有所了解,你可能会问,现在很多 Boosting 模型也是一层一层往下走,为什么它没有取得深度学习的成功?我想问题其实差不多,首先复杂度还不够,第二,更关键的一点,它始终在原始空间里面做事情,所有的这些学习器都是在原始特征空间,中间没有进行任何的特征变换。
深度神经网络到底为什么成功?里面的关键原因是什么?我想首先我们需要两件事,第一是逐层地处理,第二我们要有一个内部的特征变换。而当我们考虑到这两件事情的时候,我们就会发现,其实深度模型是一个非常自然的选择。有了这样的模型,我们很容易可以做上面两件事。但是当我们选择用这么一个深度模型的时候,我们就会有很多问题,它容易 overfit,所以我们要用大数据,它很难训练,我们要有很多训练的 trick,这个系统的计算开销非常大,所以我们要有非常强有力的计算设备,比如 GPU 等等。
实际上所有这些东西是因为我们选择了深度模型之后产生的一个结果,他们不是我们用深度学习的原因。所以这和以往我们的思考不太一样,以往我们认为有了这些东西,导致我们用深度模型,现在我们觉得这个因果关系恰恰是反过来的——因为我们要用它,所以我们才会考虑上面的这些东西。
而另外还有一点我们要注意,当我们要有很大的训练数据的时候,这就要求我们必须要有很复杂的模型。假设我们有一个线性模型的话,给你 2000 万要的还是 2 亿的样本,其实对它不是太大区别,它已经学不进去。而我们有了充分的复杂度,其实我们看到恰恰它又给我们使用深度模型加了一分。
由于这几个原因,我们才觉得可能这是深度学习里面最关键的事情。所以这是我们现在的一个认识:第一我们要有逐层的处理;第二我们要有特征的内部变化;第三,我们要有足够的模型复杂度。
这三件事情是我们现在认为深度神经网络为什么能够成功的关键原因,或者说这是一个猜测。如果满足这几个条件,我其实可以马上想到,不一定真的要用神经网络,神经网络是选择的几个方案之一,我只要同时做到这三件事,别的模型也可以,并不一定只能用深度神经网络。
▌深度神经网络的缺陷
我们就要想一想,我们有没有必要考虑神经网络之外的模型?其实是有的。因为大家都知道神经网络有很多缺陷。
第一,凡是用过深度神经网络的人都知道,你要花大量的精力来调它的参数,因为这是一个巨大的系统。这里面会带来很多问题,首先当我们调参数的时候,这个经验其实是很难共享的。有的朋友可能说,我在第一个图像数据集之上调数据的经验,当我用第二个图像数据集的时候,这个经验肯定可以重用的。但是我们有没有想过,比如说我们在图像方面做了一个很大的神经网络,这时候如果要去做语音,其实在图像上面调参数的经验,在语音问题上可能基本上不太有借鉴作用,所以当我们跨任务的时候,经验可能就很难有成效。
而且还带来第二个问题,我们今天都非常关注结果的可重复性,不管是科学研究、技术发展,都希望这结果可重复,而在整个机器学习领域里面,深度学习的可重复性是最弱的。我们经常会碰到这样的情况,有一组研究人员发文章报告了一个结果,而这结果其他的研究人员很难重复。因为哪怕你用同样的数据、同样的方法,只要超参数的设计不一样,你的结果就不一样。
我们在用深度神经网络的时候,模型的复杂度必须事先指定,因为在训练模型之前,神经网络是什么样就必须定了,然后才能用 BP 算法等等去训练它。其实这就会带来很大的问题,因为在没有解决这个任务之前,我们怎么知道这个复杂度应该有多大呢?所以实际上大家做的通常都是设更大的复杂度。
如果在座各位关注过去三四年里深度神经网络、深度学习领域的进展,你可以看到很多最前沿的工作在做什么事呢?其实都是在有效地缩减网络的复杂度。比如说 ResNet 网络,还有最近大家经常用的模型压缩等,其实我们想一想不都是把复杂度变小,实际上是先用了一个过大的复杂度,然后再降下来
那么我们有没有可能在一开始就让这个模型的复杂度随着数据而变化?这一点对神经网络可能很困难,但是对别的模型是有可能的。还有很多别的问题,比如说理论分析很困难,需要非常大的数据,黑箱模型等等。
从另外一个方面,各位朋友可能说,你做学术研究可能要考虑这些事,我是做应用的,你只要给我解决问题就好了。就算从这角度来讲,我们研究神经网络之外的东西也是很必要的。虽然神经网络这么流行,这么成功,但是其实我们可以看到,在很多的任务上性能最好的,不见得完全是深度神经网络,比如说大家经常关心的 Kaggle 竞赛,它上面是各种各样的真实问题,比如说有机票、订旅馆,商品推荐等等。
如果我们看上面的获胜者,今天很多还不是神经网络,很多是像随机森林等这样的模型。如果我们真的仔细去关注,真的神经网络获胜的往往就是在图像、视频、声音这几类典型任务上,而在其它涉及到混合建模、离散建模、符号建模的任务上,其实神经网络的性能比其它模型还要差一些。
所以如果我们从一个学术的角度重新总结下这件事,我们就可以看到,今天我们谈到的深度模型基本上都是深度神经网络。如果用术语来说的话,它是多层可参数化的可微分的非线性模块所组成的模型,而这个模型可以用 BP 算法来训练。
那么这里面有两个问题:第一,我们现实世界遇到的各种各样的问题的性质,并不是绝对都是可微的,或者能够用可微的模型做最佳建模;第二,过去几十年里面,我们的机器学习界做了很多很多模型出来,这些都可以作为我们构建一个系统的基石,而中间有相当一部分模块是不可微的。
那么这些能不能用来构建深度模型?能不能通过构建深度模型之后得到更好的性能呢?能不能通过把它们变深之后,使得今天深度模型还打不过随机森林这一些模型的任务,能够得到更好的结果呢?
所以我们现在有一个很大的挑战,这不光是学术上也是技术上的挑战,就是我们能不能用不可微的模块来构建深度模型。
其实这个问题一旦得到回答,我们同时就可以得到好多其他问题的回答。比如说深度模型是不是就是深度神经网络?我们能不能用不可微的模型把它做深,这个时候我们不能用 BP 算法来训练,同时我们能不能让深度模型在更多的任务上获胜。这个问题其实我们提出来之后在国际上也有一些学者提出了一些相似看法。比如大家都知道深度学习非常著名的领军人物 Geoffrey Hinton 教授,他也提出来希望深度学习以后能不能摆脱 BP 算法来做,他提出这个想法比我们要更晚一些。所以我想这一些问题是站在很前沿的角度上做的探索。
那我们自己就受到这样的一个启发,我们要考虑这三件事,就是刚才跟大家分析得到的三个结论:第一要做逐层处理,第二是特征的内部变换,第三我们希望得到一个充分的模型复杂度。
▌深度森林
我自己领导的研究组最近在这一方面做了一些工作,我们最近提出了一个 深度森林的方法。
在这个方法里面我今天不跟大家讲技术细节,它是一个基于树模型的方法,主要是借用集成学习的很多想法。其次在很多不同的任务上,它的模型得到的结果和深度神经网络是高度相似的,除了一些大规模的图像等等。在其他的任务上,特别是跨任务表现非常好,我们可以用同样一套参数,用在不同的任务中得到不错的性能,就不需要逐任务的慢慢调参数。
还有一个很重要的特性,它有自适应的模型复杂度,可以根据数据的大小自动来判定该模型长到什么程度。它的中间有很多好的性质,有很多朋友可能也会下载我们的开源代码拿去试,到时候我们会有更大规模分布式的版本等等,要做大的任务必须要有更大规模的实现,就不再是单机版能做的事。
但另一方面,我们要看到这实际上是在发展学科思路上一个全新的思路探索,所以今天虽然它已经能够解决一部分问题了,但是我们应该可以看到它再往下发展,前景可能是今天我们还不太能够完全预见到的,所以我这边简单回顾一下卷积神经网络,这么一个非常流行的技术,它其实也是经过了很长期的发展。
最早信号处理里面关于卷积的出现,其实是有一个多世纪了,但是现在深度神经网络的历史是从 1962 年两位诺贝尔奖得主关于生物视觉皮层的研究开始。但是不管怎么样第一次在神经网络里引入卷积是 1982 年,在此之后他们做了很多的工作,1989 年引入 BP 算法,那时算法就已经成型了,到了 1995 年第一次对 CNN 有了一个完整的描述,在 1998 年对美国支票的识别取得了很大的成功,在 2006 年提出了通过无监督逐层训练深层模型,到了 2009 年这个技术被引到 CNN 里,我们可以做深度的 CNN,2012 年深度的 CNN 被用在 ImageNet 比赛中,直接掀起了一波深度学习的浪潮。
回顾这段历史,从卷积神经网络开始出现,到这个算法真正在工业界取得巨大成效,中间经过了 30 年的发展,我经常说我们其实没有什么真正的颠覆性技术,所有的技术都是一步步发展。今天我们有新的探索,新的探索能够解决一些问题,但我们应该往长远看,在经过很多年,很多人的进一步努力后,今天的探索应该是为未来技术打下一个更加重要的基础。
我们做的这一工作,我想它实际上是深度森林这一大类模型的开始,技术细节就不展开了,但是它全面的用到了集成学习里,据我所知多样性增强方面,所有的技术都用进去,所以如果大家感兴趣,这是我自己写的一本书。
我所做的工作的最重要的意义是什么呢?以前我们说深度学习是一个黑屋子,这个黑屋子里面有什么东西呢?大家都知道它有深度神经网络,现在我们把这个屋子打开了一扇门,把深度森林放进来,我想以后可能还有更多的东西。所以这是这个工作从学术科学发展上的意义上,有一个更重要的价值。
▌AI时代最重要的是人才
最后我想用两分钟的时间谈一谈,南京大学人工智能学院马上跟京东开展全面的、深入的在科学研究和人才培养方面的合作。
关于人工智能产业的发展,我们要问一个问题,我们到底需要什么?大家说需要设备吗?其实做人工智能的研究不需要特殊机密的设备,你只要花钱,这些设备都买得到,GPU 这些都不是什么高端的禁运的商品。第二是不是缺数据?也不是,现在我们的数据收集存储、传输、处理的能力大幅度的提升,到处都是数据,真正缺的是什么?
其实人工智能时代最缺的就是人才。因为对这个行业来说,你有多好的人,才有多好的人工智能。所以我们现在可以看到,其实全球都在争抢人工智能人才,不光是中国,美国也是这样。所以我们成立人工智能学院,其实就有这样的考虑。
信息化之后人类社会必然进入智能化,可以说这是一个不可逆转、不可改变的一个趋势。因为我们基于数据信息为人提供智能辅助,让人做事更容易,这是我们所有人的愿望。蒸汽机的革命是把我们从体力劳动里面解放出来,人工智能革命应该是把我们人类从一些反复性强的简单智力劳动中解放出来,而且人工智能这一个学科和其他短期的投资风口和短期热点不太一样,它经过 60 多年的发展,已经有了一个庞大的、真正的知识体系。
可能我们投资风口里面有一些词,今年还很热,明年就已经不见了,这些词如果我们追究一下,它里面科学含义到底是什么?可能没几个人说的清楚,而人工智能和这些东西完全不一样,是经过 60 多年发展出来的一个学科。
高水平的人工智能人才奇缺,这是一个世界性的问题,我们很多企业都是重金挖人,但实际上挖人不能带来增量,所以我们要从源头做起,为国家、社会、产业的发展培养高水平的人工智能人才。