加载中…
个人资料
阿里云基础设施
阿里云基础设施 新浪机构认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:134,599
  • 关注人气:250
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

机器学习真的靠谱吗?

(2014-09-01 16:41:08)
标签:

阿里技术保障

算法

个性化推荐

机器学习

机器学习是一个很热的领域,大家都在谈论,都在尝试着用。到底什么是机器学习?机器学习真的靠谱吗?本文试图跟大家分享一下机器学习的一些理论基础,希望对一部分人有所帮助。

什么是机器学习?

我们人类学习,是从自然界的观察资料中获取知识和技能,机器学习也一样,只不过机器学习的"观察资料"就是data,获取的"知识和技能"通常表现为预测的准确率。广义上讲,你如果认为任何利用计算机从数据中获得知识的过程都叫做机器学习的话,也未尝不可,不过我不太认同。任何问题的解决基本都靠计算机,都是从数据出发,最后提出一套解决问题的方案,那所有的算法统统都是机器学习了? 我个人更加认同给机器学习一种相对狭义的定义方式。

 

机器学习必须具备三个要素:1)存在模式可以学习;2)不能很轻易地用数学式子描述出解决方案;3)有data

 

举个机器学习的最典型的例子,那就是象棋的人机博弈。试想,你如何让一个机器人学会下象棋?那必定不是靠定义一些规则(if-else)能够做到的,只有靠机器学习。那么,什么不是机器学习呢,也举一个例子, 比如我们推荐电影时,我们考虑很多维度的信息,包括是不是喜剧,是不是动作片,有没有大明星,等等,分别给用户和电影搞一个向量,然后看它们之间的match程度(比如cos值),这种方法就不是机器学习。当然,其实我们大可不必纠结到底一个算法是不是机器学习的方法,机器学习也不是说就比非机器学习算法好。

 

下面,我们将机器学习用一种数学语言来描述。不要被符号吓到,如果感兴趣,慢慢看,相信你会有收获。简单的说,机器学习是从训练样本(training data) D出发,经过某种学习算法A,最后总得到一个最终的函数 g。让我们可以把这个过程描述地更加具体些,学习最终是为了得到真实的目标函数 (target function) f : X -> Y(定义域X,值域Y), 但是实际中我们是不知道 f 到底是什么的。 为了求 f,我们作一个合理的假设,假设训练样本D就是目标函数 f 产生的 (这里不考虑噪音),这样我们才能理直气壮地用 D 来求 f。不过,我们还不知道函数 f 的具体形式,这时,我们可以再给 f 假设一种具体形式,就形成了一个假设集合H。比如,我们用logistic regression的时候, 就是假设 f 是一个S型曲线(sigmoid函数),H就是一个S型曲线族,其中参数的不同取值就对应着不同的函数。如果我们假设的正确的话,f就是其中的某一个函数,对应着某一个取值。这样,用训练数据D,通过学习算法A,如果运气足够好,就可以求得 f,但是实际中,我们并没有那么好的运气,往往最终求得的 g 只是 f 的一个近似而已。整个过程如下图所示:

 

机器学习真的靠谱吗?

到这里,不知你心中是否有了一些疑问: 我们假设D是 f 产生的,那么数据会不会有噪音?即使没有噪音,还有问题:我们所有的训练样本仅仅是 f 可以产生的数据中的一个取样,这个取样合理(充分随机)吗? 也许你会说,我们用全部数据,不抽样,但是不要忘了,你所谓的“全部”数据就是f 可以产生的无穷无尽数据的一个抽样而已。再退一步,即使抽样没有问题,别忘了目标函数 f 的具体形式是我们假设出来的,那我们假设的对吗? 即使我们运气非常好,假设对了 f 的形式,那么还有问题:我们能否保证有足够好的运气求得真正的 f 或者 f 的一个近似呢?

看了上面的讨论,我来问你,你觉得机器学习真的靠谱吗?

机器学习靠谱吗?

严格的说,机器学习并不靠谱,它在理论上真的不能绝对保证说最终一定能学到一个好的假设g。也许你会奇怪,大家都在用机器学习,而且很多还取得了不错的效果,怎么会不靠谱呢? 别急,虽然在理论上没有绝对的保证,但是从概率的角度讲,机器学习是可以一定程度上保证能够学到东西的,但是需要满足一些条件作为前提。也就是说,如果符合一定的条件,机器学习在实际的应用中还是比较靠谱的。

我们引入两个符号: Ein 和 Eout ,分别表示学习到的最终假设 g 与未知的目标函数 f 在训练样本内的误差 和 在训练样本之外的误差。有了这两个记号,我们可以将机器学习靠谱不靠谱这个问题等价于以下两个问题:
a) Ein 是不是足够小? ( 只要 Ein 足够小, 就可以保证我们学习出来的g是一个好的假设)
b) Ein 和 Eout 是不是足够接近? (只要两者足够接近,就可以保证 g 很好地 generalize 到训练样本之外的数据上)

对于第一个问题,是我们大家都知道努力去做的事情,如果我们的学习算法比较好,再加上一点点小小的运气,我们可以做到Ein很小。对于第二个问题,我们往往会忽视,而它却是机器学习靠谱与否的一个重要因素。

假设训练样本个数为N, 即 |D|=N, 则对于任意一个假设函数h ,根据Hoeffding不等式,有 如下公式成立:

机器学习真的靠谱吗?

由上式可以看出,对于一个固定的 h,当 N 比较大时, Ein 和 Eout 相差很大的的概率几乎接近于0,也就是说,二者足够接近的概率很大。

那么对于我们最终得到的g,不难求得

机器学习真的靠谱吗?

(PS:这里为什么g不是直接带入第一个式子中替换掉 h 呢?这里举一个例子,也许你就明白了,我们随机生成[0,10]内的10个的实数,随机取一个数,这个数比5小的概率是多少?0.5吧。那么,从10个数中取最小的数,这个数比5小的概率是多少呢?)

上式中M表示的是假设集合中函数的个数,当然,假设集合中函数的个数可能是无限多个,我们这里先假定M个。可以看出,如果M是一个固定的数,无论多大,只要训练样本数N足够大,右边概率就趋于0,也就是说,Ein 和 Eout 就可以足够接近。这样,机器学习就比较靠谱了。但是,如果M是无限大呢? 那这个式子右边是否能趋于0就无法判断了。

想要弄明白M无限大的情况,就要了解一点机器学习的理论基础——VC理论了。我这里也不想去介绍略显枯燥的VC理论,直接来结论。对于M无限大的情况,我们可以得到如下式子:

机器学习真的靠谱吗?

这里m(2N)叫做生长函数(growth function), 它在大多数情况下可以被一个N的多项式函数bound住(N是训练样本的大小),这样当N足够大的时候,不等式右边会趋于0 (多项式函数没有指数函数增长快)。“大多数情况”是说的确有例外,但是说清楚这个,就牵涉到VC理论的细节了。不过,“大多数情况”基本上可以覆盖我们实际应用中的情形。

到此为止,算是基本有了一个框架性的证明:从在概率上讲,机器学习还是比较靠谱的。

一点小小总结:

生长函数能不能被N的多项式bound住,取决于H够不够好,因此要有一个好的H;
正文中不等式的右边趋于0要求N足够大;
能不能得到一个好的假设函数 g 取决于学习算法A够不够好。
最后,再加上一点小小的运气,我们可以说,机器学习是可行的。

为什么说机器学习方法往往越简单越好?

机器学习的方法,很多人觉得特征提的越多,效果会越好,其实不然,这在理论上式可以解释的。根据我们上面最后一个不等式子,其中的m(2N)可以被一个N(训练样本数)的多项式bound住,多项式的阶数是VC demension,VC demension简单的可以理解为方法中特征(参数)的个数。特征越多,在相同样本N的情况下,式子右边的值越大,也就是说 Ein 和 Eout 相差很大的概率比较大,这样学习出来的结果就越不能保证了。因此,特征多有很大的风险,往往会导致Ein小,但是Eout大,就是所谓的overfitting。

PS:鉴于本人知识所限,文中也许有不妥之处,忘批评指正。

作者: 常征 1688事业部-搜索与推荐开发部  算法工程师
        @ 桐轩1987
http://weibo.com/u/2007640613

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有