【学习笔记】读“机器学习那些事”笔记

来源:互联网 发布:淘宝商品排名靠前 编辑:程序博客网 时间:2024/05/12 20:46
英文原文题目是“A Few Useful Things to Know About Machine Learning”,中文由刘致远翻译成“机器学习那些事”。文章比较长,我时间比较琐碎,不能一次看完。看到哪里,记到哪里。
 
 
“学习=表示+评价+优化”
怎么理解这几个词?
“表示”指的是待解决的问题的表示,抽象来说就是机器学习问题的参数空间。机器学习问题就转换成在这个参数空间中寻找一族特定函数的过程。“评价”并不是指最终的评价,例如:分类器的错误率等。而是指机器学习问题的准则函数,即,根据什么条件来寻找这个函数。“优化”,我想就是指学习算法。
 
“泛化(generalization)很重要”
机器学习的基本目标是对训练样本进行泛化的能力。如果只是要求能够对训练样本分类正确,那么直接记住每个结果就行了,这样的学习是没有意义的。初学者容易犯的错误就是,用训练集来评测学习算法的质量;或者用测试集来调整算法参数。
将泛化作为目标来进行机器学习的一个麻烦在于:目标函数是定义在训练集上的函数(用训练集中的样本计算出来的函数值),而实际应该优化的是定义在测试集上的函数。有时候,会带来麻烦:在训练集上得到的全局优化结果,实际使用中还不如简单的贪心算法得到的结果。
 
“仅有数据还不够”
这一节强调的是数据系数问题,因为假设空间会远远大于训练集中的样本。举了个例子:用100w个训练样例来对有100个bool变量的布尔函数进行学习。2^100远大于10^6(即100w),则有 2^100 - 10^6 种情况,分类器无论如何也无法正确分类。这又印证了上文中的“泛化很重要”。那么为什么现在机器学习还取得了巨大成功呢?作者解释道,通常学习器学习的函数并不是均匀地来自于函数空间中的所有函数。人们对函数空间的一些先验知识帮了大忙,如:相似的样例有相似的类别等等。所以,真正要利用机器学习来解决实际问题,必不可少的就是人的先验知识。“仅有数据还不够”,可以理解为,我们要数据+先验知识。
这里的先验知识,指的是对函数空间的假设,说白了,就是对分类器的选择——有些问题适合这样的分类器,而有些适合那样的。
 
“过拟合有多张面孔”
按照文中的定义,过拟合是在缺乏先验知识的情况下,分类器将数据随机表现加以解读,造成了分类器过拟合。
个人理解上面的话,每个训练样本是假设空间中特定分布产生的,分类器就是要学习、区分这个分布;然而,当训练样本数目比较少的时候,相比训练样本比较丰富的时候,单个训练样本的取值就显得比较“随机”(就是上句话提到的“数据的随机表现”),如果此时对概率分布做过多的假设,就相当于把上面的“随机性”变成了“确定性”,从而学习出来的分类器或者分布,只能够解释已经观测到的样本,而对那些符合目标分布、但是未观测到的样本给出错误的分类或者预测。——这就是对“分类器将数据随机表现加以解读,造成了分类器过拟合”这句话的解读。
文中把“泛化误差”分解为偏置和方差,并用扔飞镖的例子来解释,挺有意思的。
过拟合是与欠拟合相对应的。当没有先验知识的情况下,分类器很难避免过拟合或者欠拟合。
由于过拟合,一个强学习分类器不见得比一个弱分类器效果好。
多重检验问题与过拟合密切相关。

“直觉不适用于高维空间”
这一段主要讲“维数灾难”的事情。简单地说,在低维空间表现很好的分类器,在高维空间中,或者变得计算不可行(计算复杂度指数增长——个人补充啊,不一定正确)、或者效果很差。主要是由于以下几个原因:
1. 随着维度的增加,参数空间呈指数级递增,而样本数量不变,或者只能够呈线性函数递增,远远不够训练出可靠地高维模型。
2. 即便是样本数量足够多了,1的问题不存在了;当只有少数维度对分类器有贡献的时候,增加一些无关维度,这些维度的噪声会淹没少数维度的贡献,效果反而不如低维度分类器。
3. 即便是2的问题也不存在了;当维度逐渐升高的时候,高维空间中的点会自然而然地变得距离越来越近。举个例子,对于训练样本x,当空间是1维的时候,有两个点xt作为最近邻样本与x的距离相等;当维度逐渐升高,有2d(d是维度)的最近邻点与x的距离相等。当维度升高到一定程度,训练样本中的大多数点(或者说有相当数量的点)都是x的最近邻,这时候通过相似度的机器学习算法,在计算x的最近邻的时候,只是从这2d个点中随机地选择一个而已。其实训练样本之间的距离都差不多。
从前读博的时候,对维数灾难问题的理解停留在“问题1”的阶段,近一段时间的学习,了解了“问题2”和“问题3”。
以上论述就否定了我们的一个直觉:只要不断的增加特征(维度),就可以是分类器的精度越来越高,因为加入的特征,最不济也就是和分类结果无关,也不会产生反作用;而万一有关,就赚到了。
但是在很多情况下,上述直觉的确是事实,这是为什么?
文章中解释,这个是具体的问题空间造成的,因为问题空间并不是特别高维的,也不是均匀分布在整个参数空间的,他只是空间中一个特殊的区域(我个人理解的,不一定对)。这个特点称为“非均匀性祝福”(b l e s s i n g  o f  n o n u n i f o r m i t y)。

“理论保证与看上去的不一样”
这一节涉及到机器学习边界理论,通常结论是这样说的:只要样本的数量超过c,则学习到真实模型(或者说训练出足够泛化性的分类器)的概率一定大于p。
对此,作者的主要观点是,在实践中,可以不必考虑这些狗屁理论,正因为这些理论都是正确的,所以他们给出的各种“边界”都非常宽泛,在实际中没用。他们的作用是在理论上、再设计算法的时候,给人以提示。
有些推论还是不错的:当假设的问题空间越大,空间中包含真实模型的概率也越大,但是,学习的难度也越大,需要的样本也越多;当空间给定的时候,并且确定真实模型在这个空间内,样本数量越多,学习到真实模型的概率就越大。

"特征工程是关键"
上文“维数灾难”和“理论问题”两部分都太抽象,只能在思想上隐隐地指导我们,实际中用处不大。这一节很实在,强调的是:在实践中构建机器学习模块,通常学习器的构建是耗时最少的,因为学习器大多是通用的(而且也有各种工具包),而特征选择往往需要人对问题的理解(先验知识),而且需要不断地尝试、迭代,直到分类器在实际问题上的结果达到最优(或者是满足实际需求)。虽然有一些特征选择方法,如:信息增益等,但是不能完全代替人的作用;而且,即便是完全不相关的特征,在经过变换或者与其他特征组合之后,也可能对分类器的结果产生正面影响。

"更多的数据胜过更聪明的算法"
中心意思就一句话:有大量数据的笨算法胜过有少量数据的聪明算法。其实聪明算法的聪明之处往往在于如何更有效地利用数据、挖掘数据中的信息。
在机器学习中,有限的资源指cpu、内存、和数据。在早期,数据是瓶颈;现在,有些领域cpu是瓶颈。一种解决方法是用更简单的办法“近似”的学习复杂分类器。终极而言,人力才是机器学习的瓶颈——人是否有足够的先验知识、是否有足够的时间将这些先验知识加入到复杂分类器中去。
在实践中,从简单的分类器开始尝试,总是有益处的;复杂的分类器更加诱人,不过往往意味着更不可控。

“要学习很多模型,而不仅是一个”
讲的是模型融合的重要性,很多时候,一堆模型融合成的新模型,比每一个单独的模型效果更好,而且是显著地好。模型融合的基本方法:bagging、boosting、stacking等,将训练样本正交地划分为M个集合,分别训练M个不同的分类器,再根据一定的规则做融合(通常是某个分类器对样本误分之后,由其他分类器来尝试。。。形成效果互补)。

“简单并不意味着准确”
讨论奥卡姆剃刀原理的。在机器学习中,很多人认为模型中参数越少,模型的繁华能力越强;反之亦然。实际上,有很多这样的反例。作者认为更加准确的说法可能是“对问题空间做的假设越简单,泛华效果会越好”。

“可表示并不意味着可学习”
这一节对实践似乎没啥大用。

“相关并不意味着因果”
这一节更玄乎。

“结论”
这篇文章中主要介绍机器学习的“民间知识”,是对传统教材的一种有益补充。

 
原创粉丝点击