[转] 周志华:关于机器学习的一点思考

Posted clemente

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转] 周志华:关于机器学习的一点思考相关的知识,希望对你有一定的参考价值。

各位同学,大家下午好,首先跟大家说抱歉,因为今天我讲的时间不会太长。今天来参加复旦大学智能信息处理重点实验室的学术委员会,感谢实验室的主任周水庚教授给我布置了一个任务,让我在走之前给大家做一个报告。今天主要跟大家分享一下我们关于机器学习的一些非常粗浅的一些看法。只是代表我们自己的认识,谈一下现在机器学习取得的成功背后可能有一些什么样的问题,以及未来可能我们在关注一些什么样的事情。

前段时间我们经常说大数据。实际上现在大家都知道,大数据本身不等于大的价值。数据好像就是一个资源,你要得到资源的价值,还需要做有效的数据分析。而今天我们主要靠机器学习来做这么一件事。

一个典型的机器学习过程,在座的很多同学都从我的书上看到过,就是我们拿到很多现实生活中的数据,把它组成表格的形式,每一行对应了一个对象或者事件,每一列对应了刻画这个对象的的某种重要的属性。还有一个我们要预测的东西,我们把它叫做「类别标记」。 通过学习的过程得到模型。今后,得到一个新的数据,我们把它提供给模型,这个模型就可以给我们结果。机器学习做的是从这个数据到模型中间的训练过程涉及到的学习算法。有一个说法,计算机科学是关于算法的学问。如果从这个意义上来说,机器学习就是关于学习算法的设计、分析和应用的一个学问。现实生活中各种各样的预测、分类、预报的任务,抽象地来看,在计算机里面,我们以数据驱动的方式去解决它,这背后就在做机器学习。

今天,可以说机器学习已经无处不在了。科学界很关注,政府也很重视,工业界也花了很多努力在做这件事。「人工智能」是今天特别热的一个词,这几年大家都在谈人工智能,前几年热的是大数据。那么人工智能为什么热?可能主要因为中间机器学习技术,特别是其中的深度学习技术,取得了很大的成功。所以不管是大数据也好,人工智能也好,背后的重要的支撑技术都是机器学习。所以这也是为什么机器学习今天这么的重要。

机器学习虽然这么成功,但是我们研究机器学习的人必须要去做一个反思:这个成功背后到底是什么?如果我们看一看现在所谓所有成功的智能应用,或者说所有成功的机器学习的应用背后,我们认为都有这么三件事情:

  • 第一,这件事情背后一定有一个有效的深度模型。
  • 第二,这个任务上我们存在很强的监督信息。
  • 第三,我们的任务环境比较稳定。

基本上现在我们所有成功的应用,这三者缺一不可。还一些其他的因素,但是这三点非常突出。 其中任何一点,如果在某个应用任务中还不存在或者不成熟,那么这个应用所取得的效果可能就和其他很多任务不太一样。所以我们今天就特别要来谈一谈这几件事。

第一,我们谈谈一谈深度模型

最近几年深度学习技术在很多方面都取得非常大的成功,特别是图像视频语音,自然语言处理,信息检索等等。如果我们今天要问深度学习是什么?他们其实很多人给我们的答案会是说「深度学习就是深度神经网络」。这么一个观念,可以说是今天做深度学习的绝大多数人都持有的一个观点——深度学习其实一定程度上说就是深度神经网络的一个同义词或者近义词。我们看一个例子,这个报纸是美国一个很著名的学会,工业与应用数学学会 CM,的旗舰的报纸,CM News。去年 6、7 月份有一个头板上的文章,里面一开始就说了这么一句话,说「深度学习是什么呢?它是机器学习中使用深度神经网络的这么一个字领域」。所以我们可以看到,要谈深度学习,必然要从深度神经网络谈起。

谈深度神经网络,我们先从神经网络谈起。神经网络并不是一个新生事物,在学术界我们已经研究了超过半个世纪了。以往在我们计算机科学界,或者在人工智能界,我们用的神经网络主要是中间有一个隐层或者有两个隐层的神经网络,我们把它叫做「浅层神经网络」。这样的神经网络中间每一个计算单元就是这里面画的一个圈,即所谓的一个「神经元」。这个东西从名字上听起来好像很悬,好像和生物神经产生了联系。 实际上本质上它是很简单的一个现象。在神经生理学里面,在上个世纪 40 年代,大家发现一个现象:一个细胞接收到来自其他细胞的电信息,如果电位的总和超过细胞本身的一个阈值,那么这个细胞就被激活了。这个现象抽象出来就是这么一个简单的公式:我们拿到的输入是 X,经过连接 W 乘起来放大,如果 Sigma 完之后之和大于某一个电位 Theta,那么我们就用一个函数去处理它。这就是所谓的 MP Model。

这个模型其实到今天为止仍然在使用。我们可以看到,所谓的神经网络,其实就是这样的简单数学函数通过迭代嵌套形成的这么一个数学系统。其背后虽然受到了生物神经机理有一点点启发,但是真正支撑它的还是数学、还是工程学,所以我们完全可以从数学上去分析这个系统它所做的事。今天我们所谓的深度神经网络,无外乎就是我们现在用了很多层。我给大家看几个数据:2012 年,深度神经网络第一次在 ImageNet 的比赛上获胜,引起了大家对深度神经网络的关注。当时的神经网络只用了八层。到 2016 年已经用了 1200 多层,到现在几千层的神经网络也经常能听说。大家可以看到,这是一个非常庞大的一个计算系统,里面有大量的东西是要算的:对每一个神经元来说,W 和 theta 都需要通过计算来确定。前段时间,无论是媒体上也好,还是学术界也好,很多人都有一个误解:「现在人工智能深度学习的成功,其实并不是模型和算法有多么大的变化,主要是计算能力提高了」。这个话有一定的道理。如果完全没有计算能力的提高,我们今天是做不到的。但另外一方面,计算能力提高,哪怕提高得再多,如果没有模型算法上的巨大进步,我们今天不会有这些东西。

这里面有一个误解,以为「我们拿几十年前的深度神经网络算法,放到现在的强力计算设备里面,就能得出现在的深度神经网络」。这个看法绝对是错误。事实上在 2006 年之前,我们根本都不知道怎么能够训练出五层以上的神经网络,我们能做的最成功的,只能做到五层,再往上就不知道该怎么做。哪怕有再强大的计算设备,我也做不出来。这是为什么呢?一般来说,神经网络的训练过程中,我们都是在依靠一个最简单的计算方式——求它的梯度,然后用梯度搜索的办法,用 BP 算法或者它的变体——来求解。但是当我们的层数很多之后,梯度在整个计算过程中就很容易消失、发散、不收敛。这时候怎么办?我们就用一些很巧妙的计算方法。2006 年 Geoffrey Hinton 提出了逐层训练的方法,是一个非常大的飞跃。

我们再看这几年深度神经网络领域的很重要的发展。比如从激活函数来说,虽然现在还用的是这个 Model,但以往我们通常是用 Sigmoid。而在深度神经网络年代,我们通常使用 relu 函数,或者把它左边斜一点,变成 P-ReLu 和它的变体等等。这个主要是让它梯度下降得不要太快,一定程度上缓解了梯度消失的作用。再比如,这几年非常流行的网络,像 Resnet 等等,其实都是在想一些办法在更深的层次里面梯度不要被消失了。可以看到,纵观整个深度神经网络发展的过程,有一个很基本的原理,就是我们是基于梯度计算的。我们一切做的都是在防止梯度在计算过程中过早的消失、弥散、不能收敛,而我们能做梯度计算的根本原因是这里面的 F——它本身有很好的数学性质,通常它是连续可微的。如果它并不是连续可微的,那么梯度就很难算出来,后面也很难去用 BP 这样的算法去训练。最近有一些研究,考虑用一些本身是不可微的函数,先把它放进去,通常再用另外一个连续可微的函数去逼近它,最后通过梯度搜索去求解——所以本质上还是需要有梯度计算这么一件事。

那么为什么我们现在要用很深的神经网络?这件事情其实在机器学习界一直没有得到一个统一的理解,或者说没有个一致的解释。大家一直在探讨这件事,到大概两三年以前,我们组给出了一个解释。这个解释当时有很多人认为还是蛮有道理的,所以我今天再把这个再给大家简单分享一下。我们解释这件事是从一个模型的复杂度的角度来解释为什么我们要用更深的神经网络。大家知道,从机器学习理论的角度,如果我们一个模型的复杂度比较大,那么通常会导致模型的容量 Capacity 会比较大,这个容量又和他的泛化能力是有关的。所以简单地可以理解为,如果一个模型复杂度比较大,那么他的学习能力相对会比较强。那么如果从增加学习能力这个角度来看,如果我们要增加神经网络这种模型的复杂度,可以看到明显有两种走法,一种把它变宽,一种把它变深。但是如果从增加复杂度的角度变深会更有效。因为当变宽的时候,只是增加了基函数的个数;当变深的时候,不光增加基函数个数,还增加了函数嵌套迭代的深度和层数。所以从泛函的表达上,后者是更有效的。

那么下面大家就会应该有这么一个问题:既然机器学习理论界早就知道这件事儿,变深了就能够更有效地增加模型的复杂度,也能增加模型的学习能力,那么为什么早不这样做?这里面根本的原因,如果我们把模型变深了,把它的学习能力变强了,这未必是一件好事。如果大家对机器学习有一点了解,你就会发现,其实机器学习整个斗争的一个对象就是过拟合,就是 Overfitting。如果没有过拟合这件事儿,那么机器学习整个学科都可以不用存在了——它就会很简单,做一个经验风险最小化就好。过拟合是一件什么事呢?我们拿到一个数据,要把它的一般规律学出来。但是有时候我可能只把数据中的特性学出来,把它错误地当成一般规律,那么以后再用这个模型就会犯错误,这就是过拟合。所以机器学习界设计了很多的机制,比如说支持向量机中的正则化,决策树中的剪枝,训练神经网络时要提前停止等等,这都是为了防范过拟合。但是从本质上来说,防范过拟合最有效的最简单的办法是使用更多的数据。我们想一想,给你 3000 个数据,把它中间的特性提出来,当成一般规律——这很容易过拟合和犯错误,但如果给你 3000 万甚至 3000 万万的数据,把它的特性学出来,这个特性很可能本身已经是一般规律了。

我们现在有了大量的数据,所以我们现在不用担心过拟合风险那么严重,所以我们可以用更复杂的模型。我们现在有强力计算设备,可以(将结果)算出来。更重要的是,我们还有很多算法上的技巧,能够防止梯度弥散等问题,所以我们现在能把它做出来。我们给出来这一整套解释,其实就是在说,第一,我们有了大的训练数据;第二,我们有了强力的计算设备,有 gpu,有 cpu 的 cluster 等等;第三,我们有了很多训练的技巧,这导致我们能够用复杂的模型。

而深度神经网络恰恰是高复杂度的模型中很好用的一种,因为它直接基于简单的梯度计算——这种计算非常容易利用新的计算设备,很容易并行化。但凡有新的计算设备出来,马上就可以用上它。比如我在《机器学习》书里面曾经写道,为什么在上个世纪 80 年代的时候神经网络出现了第二轮热潮?其实这和当时 80X86 系统出来,特别是内存条出来,关系非常大。因为神经网络这个模型非常容易用这些新的计算设备,因为我只要算一个梯度就好了。

这个解释当时听起来还是蛮有道理的,也启发我们能够做一些事儿。比如说我们可以从复杂度的角度去研究深度神经网络里面一些机制到底在做什么。比如我们组里面就做过一个工作,要去探讨 Dropout 在做什么——现在很多人在说 Drpout 就在做正则化,这个说法当然是对的,但这个说法和没有说一样,因为这一切的做法你都可以说是在做正则化,只不过说不清楚正则化到底在解决什么样的问题。如果我们从 Rademacher 复杂度的角度去分析,我们就会发现,在神经网络中,Dropout 能够以指数级去降低网络的 Rademacher 复杂度,但是浅层的时候只能做到多项式级别的降低。但是如果用传统的复杂度度量指标,比如说 VC 维,就做不出这样的结果。但是从另外一个角度看,这个解释有一个很大的问题——所以我们自己一直不太满意这件事儿。这个问题是什么呢?刚才我们说的这几个理由,其实完全对浅层神经网络也适用。事实上,当我们说复杂度很重要的时候,其实我们可以想一想,虽然浅层的神经网络提高复杂度,不是那么高效,但是他仍然也可以做到。比如说,哪怕只有一个隐含层的神经网络,如果不断地增加隐层神经元,增加到近似无限多,那么这个网络的复杂度也可以做到足够高。但是实际上在应用中,我们用浅层神经网络总是做不出那么好的结果来。我不知道在座各位同学有没有试着去调一调。用深度神经网有时候能做出来的结果,用一个隐层或者两个隐层却怎么调就是做不好。所以这个背后肯定是有一些原因的。但是如果从刚才的解释上来说,浅层网络也可以用大量的训练数据,也可以用强力计算设备,也可以用很多训练技巧——当我的隐层神经元无限多的时候,也需要技巧——一切深度网络用到的东西,浅层网络都可以用,但是为什么性能就做不好? 事实上我们在 89 年的时候就已经有过一个理论证明:只要有一个隐藏层,就可以任意精度,用只有一个隐层的神经网络就可以任意精度逼近定义在一个紧集上的任意复杂度的连续函数。也就是说对任何复杂的计算问题,其实它的解在浅层神网络里面已经有了。但是我们「怎么把它找到」,可能比深度神经网络里面要难的多。这个原因到底是什么?可能就不是刚才所谓的三个原因能解释的。所以我们要继续去考虑这件事。

要继续考虑这件事,我们问一个更深一点的问题:深度神经网络里面最重要的到底是什么?这个问题,现在机器学习有一个比较一致的答案,或者绝大多数人都同意。但刚才说 “为什么深”,这里给出的解释中,没有哪个解释是大家都同意的。但是现在关于深度神经网络里面最重要的事情,大家都同意,就是表示学习。以前我们用机器学习解决一个问题的时候,我们拿到一个现实的对象,比如说一个图像,我们需要用很多特征把它描述出来,比如颜色、纹理、形状等等。这些特征从哪来? 都是人设计的,这叫特征工程。然后机器学习主要关注的是特征抽取出来之后给我 XY,我怎么用去 XY 去建分类器。而现在有了深度学习之后,你左边把数据出给进去,右边我把结果拿出来,这就是所谓端到端的学习。其实端到端的学习本身并不重要,我今天不展开说,真正重要的是我们不再需要人来设计特征这个过程,这个特征就完全通过学习自动地选出来。所以 Feature Learning 以后,Representation Learning 就被大家认为这个确实是最重要的。其实端到端的学习不是那么重要。

有很多工业界的人会说端到端学习很好,因为 “好” 其实大家直观上很容易理解。我特征提取和分类这两件事情原来是分开做的,但当我端到端联合起来做的时候,它就是在做一个联合优化,那么这可能会好一点。但是从另一个角度来说,当你把这两块这种黑箱的方式端到端学习的时候,它里面到底在做什么?你不知道,可能这个再往左走,这个再往右走,最后你发现他在往左走,但实际上这中间已经有一部分在起副作用。所以端到端本身不一定说一定是好的。

再比如说大家看以前的机器学习技术,在特征选择的时候,有好几类技术,有一类技术,基于 wrapper 的技术,就是端到端的学习。但这一类技术不见得比别的特征选择技术好。所以真正核心的还是表示学习。如果我们再问一个问题,这个表示学习他这么重要的话,对他来说到底什么是最重要的?以前没有人问过这个问题,我们来问这个问题,同时我们自己试图去回答它。我们的回答就是:可能逐层加工这件事情很重要。这里引用的图是来自于现在很著名的《深度学习》这本书里面。但这本书里面用这个图的目的和我现在讲它的目的不太一样,他也没有直接去分析这件事。这个图是在说当你拿到图像的时候,比如说底层,你先看到的是像像素这样的东西。再往上走,你会看到像 Edge 这样的概念,在网上可能有一个轮廓,再往上是对象的部件,再往上有对象等等。但真正当我们训练一个深度神经网络,就是说它这个概念的分层不会这么清楚。没有这么明确。但是大体上自己往上有一个概念逐级抽象,逐级升高的过程,这个趋势是存在的。

这个文章是用这个东西来说这个趋势,但是我们现在想说逐层加工的能力,可能是深度学习最重要的一个问题。因为这件事情是不管浅层神经网络你多么复杂,用多大的数据,用多强力的设备都做不到一点。如果我们去想一想浅层神经网络和深层来比,到底有什么只有深层能做,浅层都不能做,好像也就是这件事,逐层加工。我们猜测说逐层加工这件事可能是深度学习里面表示学习背后最重要的一个因素。

但是如果这样猜测之后,大家就会问了,如果对于机器学习比较熟悉,你说机器学习以往也有很多这种逐层加工的模型,比如决策树,一层一层的往下走,就是逐层加工。但是为什么它的性能比不上深度神经网络?我们是这样回答的。第一决策树这个模型,他没有足够的复杂度。第二,他没有做任何的模型内部的特征变化。比如一开始我们在根节点拿到一个一百维度的属性,用一百个属性做,哪怕在最后一层,我其实还在用这一百个属性,中间没有任何的特征变化,还有它的复杂度也是不够的。因为决策树的深度它是有上限的,不是说你想多深就多深。比如说如果我们都在用离散属性,那么这个决策树的最深的深度不会超过数据集里面离散属性的个数,所以它是有上限的。就这两个问题。它不具备。那么如果大家再熟悉一些,你会说你要比如说 Boosting 也有初级加工的过程,比如 XG Boost 等都是这样。他为什么在很多问题上也没有深度神经网络做得好,我们的回答也是这样。第一他复杂度不够,比如说我们做 Boosting 的时候,通常说以训练一百轮为止,那就是到一百轮结束。基本上没有看到,谁说用过上千层的 Boosting,其实他也学不下去了。第二,更重要的可能它始终是在原始空间中做事,没有任何的特征的内部变化。

所以我们现在的观点就是说深度神经网络里面到底什么重要?可能这两件事一个逐层的加工,一个特征内部变化很重要。那么如果我们真的要实现这两件事,大家会想用一个什么模型?可能深度模型是你最自然的选择。而有了这个模型之后,我们会碰到很多问题,比如说很容易 over face,所以我们要用大的训练数据,所以它很难训练。我们要有很多训练的技巧,它计算起来很难贵,所以我们要有很强大的计算设备。那么特别是现在我们有很多任务,这个任务上本来已经有很多的训练数据了,我们怎么样把训练吃进去,这就使得我们必须要有一个高复杂度的模型。

如果复杂度不够,你更多的数据根本用不起来。比如说如果我们用一个线性的模型,那么你到底是有一千个样本还是 1000 万个样本,可能对他已经没太多区别。他已经学不进去了。如果我们要有更高的复杂度,很自然的可能,又会为使用深度模型加上一分。所以我们前面说的解释,其实是认为我们看到了这些东西,我们认为因为我们拥有它,所以我们希望用深度模型。但是现在看来,这恰恰是把因果关系搞反了。因为如果我们认为有了这些,我们就可以用深度模型,反过来,我们也可以说用了他们,我们都可以用到浅层模型上去啊,浅层模型为为什么做不好,其实可能是因为我们因为有 PPT 上面那些红色的因素,导致我们希望用深度模式,用深度模型的时候,学习的时候会有很多障碍,所以我们必须克服这些障碍。

所以我们看到了这么一个现象。那么如果从这个角度来解释的话,我们就会有这么一个猜想。这个猜想是说我们为什么要用深的神经网络才能做到浅的神经网络做不到的事儿。猜想有这三个因素,第一逐层加工。第二要有特征的内部变化。第三要有足够的模型复杂度。这个猜测,是对「模型为什么要做深」这个问题的一个回答。因为我们没有办法从理论上去证明它,所以我说只能是一个猜测。那么有了猜测有什么好处?可能可以指导我们做一些别的模型。

其实从这个解释大家都可以看到,我们只要做到这三件事,我们认为可能就能得到好处。但是这三件事是不是一定要通过神经网络来做,这可能不一定。所以我们就要谈一谈,我们为什么要考虑不从神经网络去做这件事。首先当然是神经网络模型本身有它的很多问题。很多同学可能已经用过深度神经网络的都会有感觉,有很多参数要去调,要花大量的时间在这件事情上,那么这个会带来很多其他的副作用。比如说如果只告诉你数据模型算法,但是我不告诉你参数怎么设,你就很难重复别人的结果。这个会带来一个非常大的问题。那么还有一个很重要的问题,就是模型一旦选定了,我们的模型复杂度就是确定的。这就有一个问题了,当我们没有解决一个问题之前,我们怎么知道这个问题用什么样的复杂度是合适的?所以通常来说,当我们用深度神经网络的时候,我们会先用一个高复杂度的东西,过于复杂了。所以我们可以看到最近几年的一些深度学习的研究里面,比如说 Resnet,通过增加一些 short cut,其实是在降低了模型的一个复杂。

再比如说这几年流行的模型压缩和权重二值化,这些做法其实都是在简化模型的复杂度。那么我们可以想到我有没有可能一开始我先用一个简单的模型,然后随着学习的过程,我发现你这个任务很难,数据很大,我的模型复杂度自适应地调整,这样不是更好吗?其实我们现在深度神经网络为什么要用那么强力的计算设备,很重要的一个原因,可能也是因为我们一开始都用过于复杂的模型,但是如果不用它,用太简单的网络,可能你又没法收敛了。但是能不能反过来从简单到复杂,很遗憾,神经网络不能这样做。因为这一点和我们用 bp 算法,它是有根本的冲突的。所以大家知道我们用 bp 算法,你要对一个对象求梯度,如果你的结构都不确定,那你对谁去求梯度?整个就没法算下去。所以这是神经网络所不能克服的一个毛病。但是神经网络模型不能这样做,不代表别的机器学习模型不能做。别的模型可能是能做到自适应复杂度的。其他还有一些问题我们就不往下说了。

有的同学可能不是研究机器学习的,你可能会说你看周老师你们说的这些我承认都是问题,但这都是学术上的问题。我做应用,你只要给我一个模型性能好就行了。至于你这个模型理论上学术上有什么缺陷,我不关心。那么即使从这个角度来看,我们也有必要要去探讨深度神经网络之外的东西,这是为什么呢?其实大家看一看,今天我们深度学习这么成功,到底在什么样的任务上成功?其实无外乎就是典型的数据,图像、视频、声音,他们都是典型的数值建模问题,都是连续值,都是数据建模。有的同学可能参加过像 Kaggle 这样的数据竞赛,你可以看这个竞赛里面很多各种各样的竞赛。到了今天为止,很多比赛的获胜者仍然不是深度神经网,还是像随机森林、xg boost 之类,为什么?是因为那些参加的人不知道深度神经网络很好吗?不是的,都用了。但是就比不过那些传统的技术,这是为什么?其实我们真的去总结一下,看一看有什么规律。大家其实可以看到真正深度神经网络还没有做的那么好的一些问题,通常都是涉及到符号数据,离散数据,混合建模问题,它不是那种纯数建模的问题,基本上纯数据建模问题,现在深度神经网络都能做到最好,或者说最好的之一。

事实上有那么多的问题,我们现在神经网络还做得不够好,我们当然有必要探讨别的模型。其实机器学习界早就知道我们有一个 no free launch 定理?没有任何一个模型能够包打天下。一定有一些任务,每一种模型是做不好的,可能要别的模式才行。所以我们就可以看今天的话,深度神经网络就是深度模型。那么如果从更技术地说,它是一种多层的可参数化的可微的非线性模块构建的模型,而这个模型可以用 bp 算法去训练。那么这里面的一个根本原因就是我们要用可微的构件,哪怕是用一开始用不可微的代价函数,你都要通过一些松弛变化,变成一个可微函数,然后再用 bp 算法求梯度去计算。

但是我们现实世界中不是所有规律都是可微的,比如符号建模,离散建模问题,没有办法把它变成可微。你用可微对它建模的话,可能已经不是最佳的路径了。但另一方面,其实机器学习为我们本身提供了这个机会。因为机器学习发展这么多年,它有很多的构件本身是不可微的,所以我们现在就有这么一个问题,说能不能基于不可微的构建去做深度学习?这个问题如果解决它一个方面是对我们刚才说的猜想「为什么做深很好」的一个验证,另一方面也可以回答一些问题,比如深度模型是不是必须用深度神经网络来做?第二对不可为构件,有没有办法做出深度模型?

这个时候你不能求梯度了,不能用 bp。算好了,还怎么做呢?好,第三,图像语音视频之外的任务,有没有可能通过做一些新型的深度模型,使得他们现在的应用性能变得更好。为了回答这个问题,我们组里面最近做了一个工作,就是做了一个基于树模型的一种深度模型,这个叫深度森林的模型。大家知道决策树模型它本质上是一个不可为的构件,所以它不能够用 bp 算法去训练它,我们必须要用别的方法。那么把这样的东西把它变深,里面需要很多的技巧。 因为当你用个两三层之后,它就很容易 Overfit。那么怎么样来减缓 Overfit 能够让这个模型能够不断地深入下去,那么这里面用到了很多从集成学习上里面受到的启发这个情况来说,而且它的模型复杂度是可以跟着数据自适应地变化,他可以自己去找。那么我们从测试来看,除了大规模的图像分类的任务上它还做不过神经网络,其他的很多任务上和神经网络深度使用已经比较接近了。这里面最重要的其实这是第一个非神经网络,而且不用 BP 算法,不去求梯度,不用梯度调整来求解的一个深度学习的模型。

所以这个是从它从理论上学术上的一个意义。我们也可以看看国际上的一些相关的讨论。比如说 keras 的作者,他曾经就说「现在的深度模型里面可微层是它的一个根本缺陷」。我们现在这个模型根本就不用可微层。然后这个 hinton 也说他「希望放弃 BP,从头开始」。我们现在做这个就不需要用 PP 的算法,我们把这个模型做出来,比他们说这些论断都要早了半年左右的时间。所以可能探讨这种基于不可微构建的非神经网络深度模型,可能倒是一个值得探讨的方向。大家知道深度神经网络其实现在已经经过了 40 多年的探索,剩下的可能都是往下的一些小的改进。那么如果深度神经网络之外的深度模型,可能这是一个全新的一个空间,可能有很多可以做的事。但是另外一方面有的做应用的同学可能说这个是学术上的意义,我不关心应用上到底能不能做些什么事儿呢?我们最近做了一个应用,是和我们国家一个很大的一个互联网公司,互联网金融公司合作做一件事,这个是互联网交易里面的非法套现。这个是 16 年双 11 的那一天,一天就有 1 亿多笔交易在上面做。 从好的方面来说是解决了一个技术问题,不好的方面是让大家担心说这个公司好像有很多损失。这件事损失很大。所以他们的公司的工程师很厉害,在他们自己的大规模学习系统里面做了实现。我们现在做深度森林模型,受制于现在的计算能力的问题,因为这个模型它和深度神经网络不一样,它不是直接基于矩阵计算的,所以它不能够用 gpu 加速。如果你在单机上基本上没有把这个模型大的可能性很快,你的内存就溢出,没法往下算。所以怎么样能把它做大呢,可能就两条路,一条就是用更新的硬件设备适合他们去支撑它。还有一条就是做分布式实现。这个公司就是做大规模分布式实现,这里面就有很多实现的技巧。他们工程师做了这件事,我们来看一看上线实测的结果。训练数据是用了 1 亿 3000 万,真实的数据测试的数据是用了 5000 万真实的交易,这个是世界上最大的非法套现的一个数据了。每一个交易是用了 5000 个特征,这个特征大家就能想到,因为他刻画的是用户,这个里面就有很多的非数值的、离散的、符号的东西。所以我们就在这样的任务上,可能是这一类模型特别会有用的地方。我们看这个结果确实是这样。看这个就是深度神经网络做出来的结果。第 DNN 的结果,这个公司自己有一个模型,其实比深度神经网络跑的还要好。而现在用的深度森林的分布式的版本,现在是达到最好的一个结果。所以这个确实就是给我们一个验证,在这样的一种任务上,涉及混合建模这种任务上,可能这样的非神经网络深度模型是有它的用武之地的。但是另一方面我也提醒大家不要期望太多,千万不要指望说这个模型拿到你的任务上去,你 run 一下就能做的多好多好,不是这么回事。这只是一个开始。因为大家知道你看深度神经网络发展到今天,从 1982 年卷积这个概念引进到神经网络里面,到 94 年的时候,BP 神经网络就已经有了。到今天经过 30 多年,多少万人在上面探索,才有今天的结果。卷积神经网络第一次发挥作用是在 1998 年,在美国把它用来做信封上的手写体字符识别取得成功,但是到今天取得这么多胜利,还是在几十年后之后的事情。所以这个模式才刚刚开始。如果大家从学术研究的角度,应该可探索的空间非常多,可能有些应用马上能用上,但是大多数应用我估计还要经过很长时间。

但另外一个方面,它还本质上有它另外一个意义。前段时间大家经常讨论,我们国家缺芯少魂这样的事件,就中兴事件引发的,但是我经常说缺芯少魂是我们在信息化时代出的问题。英特尔公司 1968 年成立,1968 年我们还正在文化大革命,所以是那时候积下的问题,现在我们开始进入智能化时代。智能化时代以后有没有这样的问题?我想这个问题也会有。你像今天大家做智能应用都要用英伟达的 gpu,很多公司直接架在 TensorFlow 上,把它智能应用。TensorFlow 现在是开源的,但是有一天也会被卡脖子的,比如说安卓系统以前也是开源,但是现在情况就已经不一样。所以怎么解决这件事,可能一方面我们从中国自己来说,一边可能在硬件上、系统上支持研发自己的信息系统硬件。但是另一方面,如果从我们做理论做算法的人,对这方面能不能有点贡献,我觉得也可以有很多贡献。因为实际上所有的不管 GPU 也好,还是 Tensorflow 也好,它都是以深度神经网络为解决方案的。如果我们能够给出一些非神经网络的替代方案,所谓的这种垄断自然就消失了,也就不会存在这样的问题。

这件事情其实也不是一个简单的一个构想。其实像英特尔他对这样的事情的感觉比我们可能还更明显。前段时间大家都知道,在上个月的时候,英特尔来南京大学,我们成立了一个英特尔南京大学人工智能联合研究中心,这个是英特尔在世界上成立的第三个人工智能方面的联合研究中心。第一个是在 CMU,第二个是原来 YanLecun 在纽约大学的时候,在纽约大学成立的。那么第三个就是这个中心。那么这个中心就是希望研究说英特尔的芯片架构怎么样来对这样一套非神经网络的深度模型可以加速,并且反过来这样非神经网络的模型,对 Intel 的芯片设计,在指令集优化上能给一些什么样的启发? 但总的我想说第一件事情,以前我们认为深度学习里面,黑屋子里面就是一个神经网络模型在里面。今天我们把这个门打开一点,我们知道里面可以还有别的东西。深度森林只是其中一种可能的探索,还完全可能有别的不可微的别的构件搭建出来的一些模块。

第二,我想简单地谈一谈监督信息

我们都知道做一个好的模型需要大量的数据,但事实上光有大量的数据是不够的,我们还要知道这个数据的期望的结果,这就是监督信息。

监督信息对我们今天机器学习的成功太重要。比如说深度学习就需要大量的样本。在 2012 年的时候,ImageNet 就用到了 1500 多万的样本,而今天其实要用的样本量更大。所以大家在想一些技术,比如像重用一些原来预训练模块等等。但是这样的一种程度只能是在你的新的应用和原来的应用是同种性质的任务上,这才行。比如说你的新任务还是图像,那么你从原来图像重训练的东西有用,但是我现在要做一个新的应用,说我现在从非法套现看,不做了,我另外做一个用户关系管理,你能不能重用用别的东西呢?做不到,还要重新设计数据。所以这件事情在今天还是个很大的问题。因为我们这个样本是需要标记的,所以大量的人力物力都花在这件事情。前段时间大家会问说人工智能出现之后会不会影响一些职业消失?我们还不知道,但是已经有新的职业出来了。这个应该数据标注业。这个比建筑工地上的民工师傅挣得多,就整天就在那标数据。不管这个好不好,反正存在就有它的合理性。这个就显示出我们对强监督信息是高度依赖的。谈到这件事,大家有时候经常会说另外一件事,因为谷歌前面一段时间做 AlphaGo 之后做 AlphaZero,他说他不需要人类的数据就能进行学习,这个给很多人一个幻想,认为现在我们机器学习那么是不是只要把这套技术用进来,我们就可以不用那么多标注的数据了。

我想说这个想法其实是一个幻觉,最早的 AlphaGo 了使用了 16 万元人类的棋谱,但是后来 AlphaGo zero 确实是没有用棋谱了,他就是用两个棋自己下。我这个棋自己几下,第 0 天什么知识都没有。到第三天已经够战胜当时打败李世石的 AlphaGo,到第 21 天已经打败了 AlphaGo master,到第 40 天就停止了,这个就已经达到了现在我们所见过的最强大的围棋的能力,再往下走没有意义了。这个事情会给大家一个错觉,因为他确实没有用任何的人类棋谱。但是没有用人类棋谱,是不是意味着这是一种无监督学习?这个绝对不是的。这只是一个示意图,是在说他自己对棋盘进行探索,自己不断探索棋盘,但实际上这并不是无监督,这是个非常强大的监督,甚至比数据监督还要强大。这是为什么呢?因为我们拿到了关于游戏本身的胜负规则,这个规则本身可以说是一个上帝判断,就是我们知道到底什么叫赢了,什么叫输了。这种上帝判断在现实应用是完全不存在的。比如说我们现在要修一个桥,我说希望修出一个能抗 20 级台风的桥,没有任何教科书告诉我们该怎么修,也没有任何数据说怎么修,那我现在假定虽然没有人教我,但是我修一个东西出来,就有个上帝告诉我,这个能抗过去,再修一个,他告诉我抗不过去,那么我不断摸索,能把桥修出来。

但是世界里哪儿来的这个上帝呢?没有上帝判断,所以我们不可能做这样的事情。而且更不用说下棋还可以做无成本的探索,我们现实世界也做不到。所以我们真正能做的是什么?可能根本的完全的无监督学习,这个永远只会是一个幻想。当然它有一定的炒作宣传的价值。但是从技术上来说,可能真正更现实的是弱监督学习。可能我希望不用那么强的监督信息,你现在要有 10 万个有标注的样本,才能做一个模型出来。那么没有 10 万个,我只有 1 万个,甚至我只有一千个,我能不能做出接近你原来的性能,这个可能是我们可以追求的目目标。完全的无监督,至少我是不信。弱监督有很多典型的情况,比如医学的图像诊断,我们要诊断乳腺照片里面有没有这样的钙化点。原来我们要做这样的诊断,我们可能要有上万张图像,10 万张图像才能做。但是现在假设我们拿到了 100 万幅图像,其中只有 1 万幅有标记,99 万幅没有标记。我们现在用他能不能做出来,相当于原来你用 10 万幅有标记做出来,我可能永远达不到 100 万幅都有标记的性能,但是我能不能达到 10 万幅有标记这个性能,这可能是可以努力的。 我们把这个叫监督信息的不完全。那么再进一步,可能医生只标出来了,这个里面有问题,但是没有标出来问题到底在哪?把它叫做监督信息不具体。再进一步,人在标的过程中可能有些标错,我们把它叫做监督信息不精确或者不准确。

其实所有这种问题在现实应用里面是广泛出现的。比如说我们要做这种自动的代码的缺陷检测,真正的程序员标出来代码,什么地方有缺陷是什么缺陷——这种代码很少。但是网上开源的代码想要有多少就有多少。 那么我们能不能用它来做更好的模型呢?等等,像这种任务很多。在这个方面,其实机器学习界已经有很多的探索,这个方面都是非常值得研究的。像监督信息不完全有半监督学习,主动学习等等,这个我就不展开说了。我写到一篇今年年初的一个短的一个 Survey 里面有一个比较多的介绍。但是真正想做的,其实这件事情离我们所期望的还差得远得很。如果说整个这一大朵云是我们可能碰到的监督信息的情况,中间是强监督,我们刚才所说的有研究的其实都是这些部分,而中间的这些部分,甚至现在学术研究都还看不到,学术研究的报道都还看不到,所以这个方面有很多值得探索的内容。 如果大家都认为监督信息会是机器学习的一个瓶颈,那么这方面可能都是很值得探索的一件事。

第三,我简单说一下任务环境

以前机器学习得到的成功绝大多数,我们用一个词来说都是封闭、静态环境下的任务。所谓的封闭静态环境是指它的重要因素大多是定的。比如说我们通常要讲假定预测用到的数据和训练的数据来自于独立同分布。我们其实就假定这个数据分布是恒定的,现实生活中其实这个数据分布不一定是恒定的,是可能变的,我们就要突破这个数据分布恒定的假设,一旦突破,你就会发现这里面碰到巨大的挑战。

因为当数据你都不能认为它是独立同分布的时候,你就不能够再用经典的概率统计技术去对这个问题刻画了,因为我们就不能假定这些这个出现是一个独立随机事件。那么你的概率的定义就已经发生变化。所以这里面有很巨大的理论的挑战在后面。那么我们还假定比如说原来是多少类,你未来预测只能做多少类,属性也必须是一样的。原来一百个,以后就做这一百个,你这一百个少了多了可能我都做不好,甚至我们会要求你的评价目标必须是一致的。我认为这个模型好就是好,不管谁来都好。但实际上这件事情在现实中通常也不存在。所以我们的现实任务通常是一个叫开放动态环境,现在越来越多的碰到这种应用。这种环境里面一切都会变。比如举个例子,这个是我们给破冰船,科学南北极科学考察,给他做导航,那么就有这样的问题。破冰船开出去,我们只能收集到往年出去海上冰分布的数据,但今年和往年显然就不一样,那这个数据都在变。以前从来没有见过的险情,它一定会出现,一定会存在的,也不能说所有险情以前都遇到过,那就类别会变。而且到了南北极地区之后,我们网络接入电磁干扰等等很多属性拿不到,你这时候性能是不是要大幅度下降?还有我们同时可能要兼顾很多目标,你不光是要走的快,还要破冰,要尽量破得少,还要我的科学实验还要及时完成等等,这个目标都是不一样的。如果你一个模型要解决所有这些问题,它都有问题。所以更关键的是不管什么变化出现,好的时候要好坏的时候也不能太坏,所以这时候鲁棒性就是它的关注。

大家如果对机器学习有一点了解的话,可能特别是 AlphaGo 把强化学习炒热了之后,可能有的同学会问,说机器学习里面强化学习不就是在强调跟环境交互,那么强化培训是不是本身它就能克服环境变化的问题了?

这也是一种误解。实际上强化学习做的是什么?他考虑的是状态可以在环境中变化,但是环境本身必须是不变的。比如说下棋,你的规则就是不变,不能说我训练的时候,你还是在 19x19,比赛的时候变成 21x21 了。AlphaGo 肯定下不赢。所以就是说它这个环境不能变,这就是一个很大的问题。这个方面其实特别的重要。前段时间大家看美国国防部刚刚开始一句话说 9 月 8 号宣布他们要做下一代的人工智能技术,我们有很多互联网和媒体做了翻译,其实这里面有一句话,就是说「希望开发能够进行学习,并适应不断变化环境的机器」。其实这个做的就是把开放动态环境下的机器学习技术用到军事应用上面去。它所谓的机器就是军事应用。前面说的这句话其实就是开放动态环境下的机器学习。这个方面其实机器学习界也有一些相关的探索,这里面只列了一些我们组里面做的一些工作,别的地方还有很多人做了一些工作,各种各样的这些变化,都有一些初步的研究。但是说有没有一个很成熟的技术,这些方面已经成熟得足够在工业界里面得到好的结果了,可以说还没有。更何况说如果这些变化同时出现的,我们去怎么去做,更困难。所以这个方面可能也是我们现在碰到的很大的挑战,对机器学习界来说,有很多值得研究的问题在里面。

那么对强化学习来说,我也提一点,前段时间有一个 open AI 的强化学习竞赛。OpenAI 是马斯克和硅谷的一些大佬一起联合起来做的一个组织,希望研究投资下一代的人工智能技术。他们今年 4 到 6 月组织到一个人工智能程序去打游戏的一个比赛。大家可能会说,你看最近人工智能程序打游戏这件事情很多,经常见到报道。这件事情和那些打游戏有什么区别呢?现在别的打游戏的程序比赛是这样设置的,我告诉你玩什么游戏,自己在家可以训练程序,这个程序可以把游戏全部打完。打完了之后,你到那儿去比赛,和别的对手或者和人去比赛,就是说整个游戏比赛的所有的内容,你事先都是知道的。而这个比赛不太一样的是,他事先在训练的时候给你 58 个关卡,测试的关卡和训练的完全不一样。所以他重点考查的就是环境适应能力。比如说我们现在哪怕打星际争霸这样的比赛,他其实说星际争霸大家都知道,这个游戏你在家就训练这个程序,整体玩一遍,你再去比。而他这个等于说前面有很多你能玩告诉你了,后面他不告诉你,比的时候就比那个没见过。所以这个就是要环境适应。我们组里面的年轻老师和于洋老师和合作者一起合作参加比赛,也打败了 200 多个队,得到比赛的冠军。这个其实就是对环境适应能力做了一个新的技术上的一个尝试。那么为什么可能值得说一下,这里面其实用到两个技术。第一个技术是我们很多年以前提出来一个叫二次学习技术,就我先做了一个模型,然后再学一遍,学到一个更简单的模型。

其实后来被 Hinton 等他们重新发明了一次,他就把这个叫做知识蒸馏技术,他这个名词取得比我们好听,所以这个名字很多人会知道,但是我们其实早十多年技术就已经有了。这次我们用了另外一个技术,这个是另外一个多样性激励。如果我们进入传统的强化学习技术,他走到这里得到很优的结果之后,它就会停在这不会再往下走。我们现在给他一个多样性激励之后,他走到这走好的时候,它会再尝试别的走法。多样性激励其实也是受基层学习里面 Diversity 的重要性,我们把它引进去。这件事情,后来 DeepMind 团队也做了一个类似的事,他们也取了一个更好的名字,他们叫做好奇心驱动的强化学习。确实起名字比我们水平高,我们还是太技术化了,说 Diversity 就是说你要多去探索别的东西,他把这个叫好奇心,确实更吸引眼球。但总的来说就是这方面的探索也已经开始已经有了。

最后做一个简单的小结,就是当前的机器学习我们觉得成功背后主要有这三件事儿,有效的深度模型、存在墙监督信息,环境比较稳定。而现在我们很多进一步要解决的问题,可能有的问题上没有很好的深度模型,有的问题上没有很强的监督信息,有的任务环境是变化的。所以从机器学习的研究来说,我们就要去解决这些问题。从应用的角度来说,如果你发现有这种情况的应用,那就说明现在其实我们成熟的好的性能还有距离,从机器学习研究的角度,我们觉得这几方面可能特别值得关注。

Q:张老师您好,19 世纪最后一天,所有物理学家在一起开会,开尔文说物理学的大厦已经落成,只有两朵乌云还飘在上空。最后发现一个是量子力学,一个是相对论,类比一下机器学习领域,可能大厦已经落成,那两朵乌云是什么?

A:机器学习的大厦还远远没有落成。如果要类比的话,我认为今天 21 世纪 10 到 20 年代的机器学习可以类比于上个世纪 10 到 20 年代的量子力学的发展。这个里面有大量的问题,我们甚至连尝试探索都还没有做,这里面很多的问题要做。所以远远没有到大厦,我们还只有一间瓦房而已。

Q:想问一下您觉得 BP 存在的最大的问题

A:这不应该说是 BP 的问题,应该说 BP 是个非常好的技术,因为理论上也很清楚,实际上也很有用。只能是说这一种求解模式可能对别的一些特定的任务不一定特别有用。因为 bp 它所要求的就是说你要,第一要是通过梯度下降来求解,那么一方面你要能够求梯度,那么要求能梯度就第一你的基本计算单元必须要可微的。第二要求梯度的对象必须是清楚的,否则我们通过链式推导来推 BP 算法的时候,对象都不知道。这就造成当我们考虑机器学习模型的时候,如果你的构件不可微,也不能用它;如果你希望模型是自适应变化的,也不能用它。但这不是 BP 的缺陷,而是说我们有一些别的需求,没有任何一个需求是一个算法能够全部满足的。

Q:强监督信息在表征中学习中起到的作用是什么?在 cnn 里边,他的随机初始化使得不同的 Filter 会收敛的不同的 representation 的结果。假如强监督信息对 Filter 的 Representation 有特殊性作用,它们收敛到的结果应该是相似的,但实际上不是这样的。那么他这个随机性他会收敛向不同的结果,那么更多或者更少,它会捕捉出更不一样的一些特征,那么强监督信息在这里扮演的是什么? 而这个得到的一个特征又是怎样的一个信息的一个?

A:有很多人就有误解,就是说我拿了很多的图片,然后好像我并没有告诉他一个明确的目标,说到底这次学的是苹果还是梨,但是最后他能学出一些特征来,而且甚至我训练的时候考虑的目标类,和我任务最重要解决的目标类还不太一样。比如说我现在做的是狮子老虎,我后面预测的时候,我做成要做狗,我可能可以拿预训练的,预抽取的特征拿过去也能有帮助,那这个时候它的监督信息到底有什么作用呢? 其实这个作用的本质上,如果你从学习理论的角度去理解的话,我们可以认为整个学习的过程就是在一个假设空间中搜索的一个过程。而当我们的任务复杂的时候,我们面临的过程、这个空间是巨大的。那么所谓的表示学习,实际上是在对原始的非常庞大的假设空间的一个变化,变化成一个结构更加明晰的一个新的假设空间,在假设空间中你找到结果的解更容易。而这个搜索的过程你可以想原来是个很大的一个东西。那么把它变小之后就有很多的选择。而在这个时候监督信息起到的就是对原来的假设空间的一个 Gap、约束、消减的一个作用。如果完全没有监督信息的作用,当你做的一切的学习过程就是完全漫无目的的,那就完全不可能保证说学出来的特征对后面的学习过程是有用的。这部分保证不了,那你就会越越学越坏。所以他一开始的交互信息是非常有帮助,这个是非常重要的。

Q:机器学习和人工智能现在非常的火。我们计算机系也有很多实验室,以前不是做人工智能,然后也在往这方面靠。 这种现象的话,我觉得肯定是有水分在的,不知道您是怎么理解的。

A:这个水分它有几个方面,第一个方面可能在媒体上,在投资界,这里有很多的水分,在企业上他们的炒作也有很多的水分,但是说这么多人学机器学习技术这个东西是不是一个水分,我倒不这样看。我现在倒是认为机器学习可能逐渐会变成计算机科学中间的核心课程。比如说我们所有的计算机系的学生都要去学数据结构,你觉得这个里面有没有水分呢?我想这个其实是一样的。就像别人说的,「计算机科学不是光关于计算机的」,所以它是更多的来说,其实我们更多的就像天文学,不是关于望远镜的。最早的时候天文学把望远镜做出来,当时大家都在研究怎么做望远镜,怎么磨镜片,怎么算焦距,到今天来说,更多的人是在用望远镜来探索。计算机科学一样的,早期我们就在做,怎么把机器跑起来,怎么样做大机器,怎么样做操作系统,等等。但是现在机器已经跑起来了,我们就要用机器去解决问题了,去探索了。让计算机最重要的探索是什么?我觉得关于数据的计算分析,所以这件事情可能最本源的一件事,不光计算机科学,我相信所有理工科的学生肯定以后都会把机器学作为它的一个核心课去学习。 所以这就是从这个角来说它不存在水分。

 

转自 https://haoyu.love/blog663.html/comment-page-1#comment-671

以上是关于[转] 周志华:关于机器学习的一点思考的主要内容,如果未能解决你的问题,请参考以下文章

周志华教授:关于深度学习的一点思考!

周志华教授:关于深度学习的一点思考!

周志华 《机器学习初步》 绪论

机器学习,周志华的西瓜书实在太赞了!!

机器学习,周志华的西瓜书实在太赞了!!

读书笔记Day4 | 周志华《机器学习》之回归分析