掀起人工智能热潮的重要技术
- 来源:中国信息化周报 smarty:if $article.tag?>
- 关键字: smarty:/if?>
- 发布时间:2018-06-20 11:06
热潮人工智能很热,最重要的技术之一就是深度学习技术。今天谈到深度学习的时候,其实已经可以看到各种各样的应用,包括图像、视频、声音、自然语言处理等。大多数人认为,深度学习就等于深度神经网络。
什么是深度学习
给大家看一个例子。有一个非常著名的学会是国际工业与应用数学学会,他们有一个报纸叫SIAM News。去年6月份的头版上有一篇文章,它里面的重点说的就是深度学习是什么?它(深度学习)是机器学习的一个子域(subfield),这里面要用深度神经网络。
要谈深度学习,首先要从神经网络开始。神经网络并不是一个新生事物,人们已经研究了超过半个世纪。但以往我们会用这样的神经网络,就是中间有一个隐层或者有两个隐层。在这样的神经网络里面,它的每一个单元是什么样的呢?是个非常简单的计算模型。
比如说一个计算模型,实际上半个多世纪以前我们就已经总结出来了。我们收到一些输入,这些输入通过一些连接放大,到了细胞之后,它的“加和”如果超过一个阈值,这个细胞就激活了。
今天说深度神经网络的时候指的是什么?其实简单来说就是用的神经网络有很多层,很深很深。大概多少?看一个数据,2012年深度学习刚刚受到大家的重视的时候,一个ImageNet竞赛的冠军用了8层,2015年152层,2016年1207多层,这是一个非常庞大的系统。
要把这个系统训练出来难度非常大,但有一个非常好的消息,真正的神经网络里的计算单元,它最重要的激活函数是连续的,是可微的。以前在神经网络里面经常用Sigmoid,它是连续可微的,现在在深度神经网络里,经常用tanh或者tanh的变体,它也是连续可微的。有了这么一个性质以后,会得到非常好的结果,这个结果就是可以很容易计算系统的梯度。因此就可以很容易用著名的BP算法(注:反向传播算法)来训练这系统。
通过这样的算法,神经网络已经取得了非常多的胜利,但实际上在学术界大家一直没有想清楚一件事情,就是为什么要用这么深的模式?可能今天有很多人会说深度学习已经取得了很多的成功,但一个很大的问题就是理论基础不清楚,理论上还说不清楚它到底怎么做?为什么会成功?这里面的关键是什么?其实根本不知道该从什么角度去看它。
深度学习成功的关键
机器学习模型的复杂度实际上和它的容量有关,而容量直接决定了它的学习能力,所以说学习能力和复杂度是有关的。如果能够增强一个学习模型的复杂度,它的学习能力就能够提升,那么怎样去提高复杂度呢?
对神经网络这样的模型来说有两条很明显的途径,一条是把模型变深,一条是把它变宽。但是如果从提升复杂度的角度来讲,变深会更有效。当变宽的时候,只不过增加了一些计算单元、增加了函数的个数,而在变深的时候不仅增加了个数,还增加了嵌入的层次,所以泛函的表达能力会更强。从这个角度来说,应该尝试变深。既然要变深,为什么现在才开始做呢?其实这就涉及到另外一个问题,我们在机器学习里面把学习能力变强了,这其实未必真的是一件好事。因为机器学习一直在斗争的一个问题,就是我们经常会碰到拟合。
给定一个数据集,我们希望把数据集里的东西学出来,但是有时候可能把这个数据本身的一些特性研究出来,而这个特性却不是一般的规律。当把研究出来的错误东西当成一般规律用的时候,就会犯巨大的错误,这种现象就是过拟合。为什么会把数据本身的特性研究出来?就是因为我们的模型研究能力太强了。
所以以往我们不太用太复杂的模型,为什么现在我们可以用这样的模型?其实有很多因素,第一个因素是现在有很大的数据,那么比如说我手上如果只有3000多数据,研究出来的特性就不太可能是一般规律。但是如果有3000万、甚至3000亿的数据,那么这些数据里的特性本来就是一般规律,所以使用大的数据本身就是缓解过拟合的关键条件。
第二个因素,今天有很多很强大的计算设备,所以才能够训练出这样的模型,同时通过领域里很多学者的努力,有了大量关于训练这样复杂模型的技巧和算法,所以这使得使用复杂模型成为可能。按照这个思路来说,其实有三件事:第一,今天有更大的数据;第二;有强力的计算设备;第三,有很多有效的训练技巧。
这导致我们可以用高复杂度的模型。而深度神经网络恰恰就是一种很便于实现的高复杂度的模型。所以这么一种理论,好像能告诉我们为什么现在能用深度神经网络。为什么它能成功?就是因为复杂度大。如果从复杂度解,就没有办法说为什么扁平的或者宽的网络做不到深度神经网络的性能?因为事实上把网络变宽,它的效率不是那么高,但是它同样也能起到增加复杂度的能力。实际上在1989年的时候就已经有一个理论证明,说神经网络有万有逼近能力:只要你用一个隐层,就可以以任意精度逼近任意复杂度的定义在一个紧集上的连续函数。这里面要引用一个说法,神经网络有万有逼近能力,可能是有的人会认为这是导致神经网络为什么这么强大的一个主要原因,其实这是一个误解。
在机器学习里用到的所有模型,它必须具有万有逼近能力。如果没有这个能力,根本不可用。其实只要有一个隐层,加无限度的神经元进去,它的能力也会变得很强,复杂度会变得很高。但是这样的模型无论在应用里面怎么试,都不如深度神经网络好。深度神经网络里最本质的东西到底是什么?今天我们的答案可能是要做表示学习的能力。以往我们用机器学习,首先拿到一个数据,比如这个数据对象是一个图像,我们就用很多特征把它描述出来,比如说颜色、纹理等等,这一些特征都是人类专家通过手工来设计的,表达出来之后再去进行学习。
而今天我们有了深度学习之后,不再需要手工设计特征,把数据从一端扔进去,模型从另外一端出来,中间所有的特征完全通过学习自己来解决,这是所谓的特征学习或者表示学习,这和以往的机器学习技术相比是一个很大的进步,不再需要完全依赖人类专家去设计特征了。
工业界认为这里面有一个很重要的概念叫做端到端学习。其实这一件事情要分两个方面来看:一个方面当把特征学习和分类器学习联合起来考虑,可以达到联合优化的作用,这是好的方面;但另一方面,这里面发生什么我们不清楚时,端到端的学习不一定真的好,因为可能第一部分往东,第二部分往西,合起来看往东走的更多一些,其实内部有一些东西已经抵消了。实际上机器学习里面早就有端到端学习,比如说做特征选择,但这类方法是不是比其他特征选择的方法要强?不一定,所以真正重要的还是特征学习或者表示学习。
表示学习的关键
表示学习的关键是逐层的处理。当拿到一个图像的时候,如果把神经网络看做很多层的时候,首先在最底层看到的是一些像素的东西,当一层一层往上的时候,慢慢的有边缘,再往上有轮廓等等,在真正的神经网络模型里不一定有这么清晰的分层,但总体上是在往上不断做对象的抽象。
而这个特点,我们现在认为是深度学习真正成功的关键因素之一,因为扁平神经网络能做很多深层神经网络所做的事,但是有一点它做不到:当它是扁平的时候,就没有进行一个深度加工,所以深度的逐层抽象可能很关键。
以前有很多逐层处理的东西,比如说决策树,它就是逐层处理,这是非常典型的模型。这个已经有五六十年的历史了,但它为什么做不到深度神经网络这么好呢?
首先它的复杂度不够,因为决策树的深度,如果只考虑离散特征,其最深的深度不会超过特征的个数,所以它的模型复杂度有上限;第二整个决策树的学习过程中,它内部没有进行特征变化,始终是在一个特征空间里面进行,这可能也是一个问题。
大家如果对高级一点的机器学习模型有所了解,可能会问,现在很多Boosting模型也是一层一层往下走,为什么它没有取得深度学习的成功?首先复杂度还不够。其次,它始终在原始空间里面做事情,所有的这些学习器都是在原始特征空间,中间没有进行任何的特征变换。
佚名