编者按:12月18日,KDD China技术峰会在深圳举行,雷锋网根据周志华教授当天会上所做报告《关于机器学习研究的讨论》,摘取其中亮点内容整理成本文,由亚萌、亚峰、宗仁联合编辑。此前,在今年10月21日CNCC 2016大会上,周志华教授也曾做了一次精彩演讲,感兴趣的读者可以点击链接《CNCC 2016 | 周志华 57 张 PPT 揭开机器学习本质》。
周志华, 南京大学教授,校学术委员会委员,计算机软件新技术国家重点实验室常务副主任。AAAI Fellow, IEEE Fellow, IAPR Fellow,中国计算机学会会士,新晋ACM Fellow、AAAS Fellow。美国东部时间2016年12月8日, ACM 正式公布了今年Fellow 名单,南京大学周志华教授当选,成为全部53名新Fellow中唯一的中国本土学者。周志华教授是长江学者特聘教授、国家杰出青年科学基金获得者。主要从事人工智能、机器学习、数据挖掘等领域的研究。著有《Ensemble Methods: Foundations and Algorithms》、《机器学习》。在本领域顶级期刊会议发表论文百余篇,被引用2万余次。获发明专利14项,多种技术在企业应用中取得成效。任《Frontiers in Computer Science》执行主编及多种国内外学术期刊副主编、编委;亚洲机器学习大会创始人,国际人工智能联合大会(IJCAI)顾问委员会成员,IEEE 数据挖掘大会(ICDM)等数十次国内外学术会议主席;IEEE 计算智能学会数据挖掘技术委员会主席等。曾获国家自然科学二等奖、两次教育部自然科学一等奖、亚太数据挖掘卓越贡献奖等。
如今,机器学习已经无处不在。我们现实生活中碰到的分类、预测、预报等各种各样的问题,如果是利用计算机以数据驱动的方式去解决,那这个背后其实是在做机器学习。
但是我们要注意,机器学习虽然能力很强,但它并不是一个万能的东西。至少有两件事,我们经常都要提醒自己,机器学习可能是做不了的。
第一种情况,如果我们的拿到的数据特征信息不够充分,那么机器学习可能就帮不上忙。这件事大家可能都很容易理解,当我们解决一个问题,你需要三个变量,但实际上你手上只有一个,还有两个信息根本没收集到,那这肯定是做不了的。
第二种情况,就是这个数据样本的信息非常不充分,那么这种情况也基本上解决不了问题。比如大家经常在说,我们现在地震预报为什么做得不好。其实地震预报抽象出来看,也可以通过机器学习来解决,只不过我们的数据实在太少了。因为在你事先做了地质勘探,最后这个地方又发生了地震,这样的情况是非常非常罕见的。所以没有数据,机器学习也就帮不上太多忙。
在工业界,有很多的工程师经常会提这样的一个问题,就是我们现在机器学习里面有很多算法,但是哪一类方法最好呢?如果你对机器学习有比较多的了解,那么就会知道一个很重要的定理,叫做“没有免费的午餐”。
这个定理告诉我们,如果算法A在某个问题上比算法B更好一些,那么一定在另外某个问题上,两个算法的优劣是反过来的,即算法B更好。这样的理论对任何一个算法甚至包括随机猜测,都是成立的。就是说我们拿任何一个算法和随机猜测比的话,你都一定能找到在某个问题上,这个算法还不如随机猜测。所以我们在针对一个具体的任务时,要使用什么算法或技术,一定要具体问题具体分析。
而机器学习里面我们说到的“问题”呢,可能跟大家一般理解的“问题”的意义不太一样。大家一般认为,比如说“推荐”可能就是一个“问题”,但是在机器学习里面,其实我们不是这样看的。一个“问题”,一定是说输入描述的属性确定了,这个数据的分布是怎么样,这时候才定义出来一个“问题”。所以哪怕都是推荐,文本推荐、电影推荐甚至不同公司用自己手上数据做的电影推荐,这其实从机器学习的角度来看可能都是不一样的“问题”。
这时候就有另外一件事,有时候就会有公司的工程师说,你看我现在掌握了机器学习十大算法、二十大算法,我把它们都用得很熟,那么来一个问题之后,我把这些算法全部试一遍,然后找到最好的算法就行了。如果发现试一遍,这些都不Work,那就认为机器学习是骗人的。
但是如果大家有了刚才那样的理解之后,其实就知道,这样看待机器学习是不行的。因为我们在现实生活中碰到的问题,可能是无限多的情况,而如果你只是套用这些有限多种的方法,那一定有些东西是解决不了的。我们用机器学习解决问题更多的时候像一个裁缝,一定要量体裁衣,针对某个问题专门设计有效的方法,这样才能得到一个更好的结果。所以,按需设计、度身定制,是在做机器学习应用的时候特别重要的一点。有这样能力的人不多,这可能也是很多大企业要把机器学习专家挖过去的一个原因。
机器学习本身,是一个有着深厚理论基础的学科。最主要的是计算学习理论,其中最基本的理论模型,叫做“概率近似正确模型”。虽然这个模型很简单,但非常重要。
机器学习做的是什么事情呢?
我们拿到一些数据x,然后建立一个模型f,就是f(x)。
我们希望这个模型f特别准确,也就是f(x)和真实结果y非常接近,那么怎么算接近呢?我们希望f(x)和y的区别很小,小于一个很小的值epsilon。
我们不能保证每次预测都完美,只能希望以大概率得到好结果,所谓大概率就是比1-\delta更大的概率,这里\delta是个很小的值。
所以可以看出,机器学习做的事情,是你给我数据之后,希望能够以很高的概率给出一个好模型。在这个意义上我们做的很多事情是可以有理论保证的。比如说我们可以估算,需要多大规模的数据样本,才能对某个问题做到什么样的程度。如果你对这个问题的要求非常高,但是要达到这个效果所需要的样本规模大到无法满足,那这个问题就是不可学习的。所以在“概率近似正确”的意义下,要做出一个什么样的模型,把问题能解决得多好,我们是可以从理论上去探讨它的,并且是可以有理论的保证。但这件事情,在今天可能会发生一些变化,我待会在后面谈一谈。
那么深度学习,如果从技术上来看是一个什么东西呢?其实它就是一个神经网络。以往我们有很多神经网络的研究,那么我这边画了非常简单的一个3层网络,这个里面的一个圆圈就是我们所谓的一个神经元。如果从生物机理来说的话,一个神经元收到很多其它神经元发来的电位信号,信号经过放大到达它这里,如果这个累积信号比它自己的电位高了,那这个神经元就被激活了。这个现象其实在1943年的时候,就有芝加哥大学的两位学者创立了M-P 模型,把它形式化出来。你看,一个神经元接受到很多x,经过w加权输入到它,如果这个加权的和大于θ,它就激活产生y,其实这个写出来是很简单的一条公式。
我们可以看到其实神经网络本质上,是一个简单函数通过多层嵌套叠加形成的一个数学模型,背后其实是数学和工程在做支撑。而神经生理学起的作用,可以说是给了一点点启发,但是远远不像现在很多人说的神经网络研究受到神经生理学的“指导”,或者是“模拟脑”。再比如说我们在深度学习里面仍然用的非常多的一个算法,BP(反向传播)算法,这个是1986年被重新发明出来的,这个算法完全是从数学上推导出来的,它和神经生理学基本没有联系。
今天我们再看使用最多的深度学习模型之一:卷积神经网络,它也是这样很多层。只不过在这个里边,除了原来的这些基本操作之后,还引入了一些操作,比如说这个信号处理里面的卷积,卷积其实是起到了一定的时间、空间的平移不变性。还有这个采样,把一个区域的值用一个值代替,这是数据挖掘里对噪声进行平滑的基本技术,也是缩减计算量的基本技术。所以这些都是常见的操作,融合进去了。
但是特别要注意的是,其实CNN这个东西新不新呢?并不新。它第一次被完整地发表出来,是在1995年,然后这个东西成功地被用于手写体字符识别,是在1998年。那为什么今天才会热起来呢?这有一些原因,我们下面要继续探讨它。在探讨它之前,我要说一点,就是现在有很多媒体,常说深度学习是“模拟人脑”,其实这个说法不太对。我们可以说最早的神经网络受到一点点启发,但完全不能说是“模拟人脑”之类的。那么深度学习的层数很深了,是不是就模拟了呢?我在此引用一下Yann LeCun的说法,大家都知道LeCun是国际上深度学习领域非常著名的3位学者之一,他对“深度学习造成人工智能威胁”的说法不赞成。他尤其这样说:
对深度神经网络,“我最不喜欢的描述是‘它像大脑一样工作’。我不喜欢人们这样说的原因是,虽然深度学习从生命的生物机理中获得灵感,但它与大脑的实际工作原理差别非常非常巨大。将它与大脑进行类比给它赋予了一些神奇的光环,这种描述是很危险的,这将导致天花乱坠的宣传,大家在要求一些不切实际的事情。”
其实确实是这样,如果我们把深度学习就当做一个数学模型去理解,可能还可以相对多明白一些,因为神经机理本身就说不清楚。
那么深度学习技术发展发表的那么早,为什么今天才特别热呢?有几个问题很重要。
第一个问题,我们今天用到的深度学习模型到底有多深?
比如2015年,微软亚洲研究院参加ImageNet比赛,获得冠军的网络用到152层,到今天的话有很多网络已经上千层了。这个上千层的网络里涉及到的参数的数目是几十亿甚至上百亿个,是非常大型的一个模型。
第二个问题,为什么要做到这么深呢?
其实在机器学习理论里面,我们很早就知道,如果你能够提升一个模型的复杂度,那么可以提升其学习能力。比如说对神经网络这样的模型,我们怎么样提升它的复杂度呢?很明显的就有两个办法,一个办法,是把网络加宽,另外一个办法,是把它加深。但是如果从提升复杂度的角度来说,加深会更有用。因为你加宽的话其实是增加了基函数的个数,加深的话,不光增加了函数个数,还增加了函数嵌套的层数。所以从泛函表达上,它的能力是会更好。所以“加深”对增强模型的复杂度和学习能力更有用。
第三个问题,那既然你们早就知道“加深”能够增强学习能力,为什么早一点不去做?
这个很重要的一点就是,机器的学习能力增强并不见得一定是好事。因为大家知道,机器学习所做的,是你给我一些数据,我从这些数据里面希望把一般的规律学出来,用来处理今后的新数据。但是有时候,我可能会把所给数据的自身特性学出来,错误地当成一般规律,这时候就会犯错。那这种情况在机器学习里面叫做“过拟合”,所以我们一直是在和“过拟合”作斗争。那过拟合是怎么发生的呢?以往理论告诉你,主要因为你的模型过于复杂。这就好比说我们在解决一个问题的时候,你把这个问题想得过度复杂化了,你反倒会犯错误,这就是“过拟合”。
所以以往大家都不希望用太复杂的模型,机器学习界设计了很多技术来缓解过拟合,例如决策树剪枝、神经网络提早停止,SVM正则化等等,但实际上最简单有效的是什么?就是使用更多的数据。因为你想,你给我1000个数据,我可能学出来的是特性,不是一般规律,但是从1000万个数据里面学出来的,很可能就是一般规律了。
所以,为什么这么复杂的模型在今天特别有用呢?
第一个原因,是我们有了大量的训练数据。没有大数据的话,这个东西是不会有那么多用处的。
第二个原因,这么大的模型,我们一定要有很强的计算设备才能算出来,今天我们恰恰也有了。
不管是GPU,还是CPU集群,还包括今天有这么多人去研究机器学习的平台,做机器学习技术的底层支撑。如果我们只做简单模型的话,可能这些计算设备和技巧上的努力就不是那么重要。
第三个原因,就是这里面要使用大量的“窍门”(Trick)。
大家如果用过深度学习网络的,你就会知道,第一个人说我在某模型上加了一层性能更好,可能第二个人会告诉你,在我的任务上把这层网络减掉才更好。很多都是这样。更关键的是,什么时候有效、什么地方无效,不知道。所以正统机器学习界来看这些东西不能称为“方法”,因为道理不清楚,只能称为“窍门”。
深度学习里面有大量的Trick,所以今天来看就有点像老中医在治病一样,虽然能治病,但是什么东西是有用的,什么是没有用的,什么是起副作用的,都不太清楚,笼统地混到一起,有些浑水摸鱼的味道。这里面理论研究远远没有跟上,因为应用尝试比较容易。现在有很多深度学习架构,让大家很方便,新手学习个十天半个月就可以上手调试不同的模型做应用了,性能有提高就很快发表文章。但是理论研究的门槛很高,先要训练四五年可能才能开始做事情。这就造成很多应用方面的尝试,报道说这样好、那样好,但是能做理论的人很少,来不及去研究,而且因为很少有共性的东西。不同的人哪怕用的都是CNN,其实模型完全不同,做理论的也不知道从哪里去下手才不是浪费时间。这些问题要解决,需要有更多的人沉下心来研究基础问题,基础问题弄明白了,反过来可以更大地促进应用。
PS:长按二维码加入KDD China 会员