龙听期货论坛's Archiver

龙听 发表于 2018-1-29 11:28

论文笔记:机器学习中的一些注意事项

[p=38, 2, left]本文参考 Communications of the ACM 2012 年第 10 期的 "A Few Useful Things to Know About Machine Learning",对其中的一些要点进行阐述。[/p]1. 泛化的重要性[p=38, 2, left]机器学习的基本目标是对训练集中的样例进行泛化,这是因为不管我们有多少训练数据,在测试阶段这些数据都不太可能会重复出现,而且测试时往往会出现训练数据中未出现过的新数据(比如,在词典中有 100000 个词,则一篇文章将有 2 的 100000 次方种可能)。即使在训练数据上分类器表现的很好,但在新数据上测试时,可能还不如随机猜测的准确,这就需要在训练数据之前留出一部分数据来测试分类器的性能,并且分类器可能会使用这部分测试数据来调节参数(机器学习算法的效果往往源自这些参数的精细调节)。[/p][p=38, 2, left]但是保留一部分数据用于测试会减少训练样本的数量,这个问题可以通过 交叉验证 来解决。比如把数据分为 10 份,把其中一份作为测试数据,其余的作为训练数据,将多次的测试结果取平均值,用来评价不同分类器或不同参数下的模型性能。[/p]2. 仅有数据是不够的[p=38, 2, left]假设特征有 100 维,每维取值为 0 和 1,训练样本有 100 万个,那么将有 2 的 100 次方减 10 的六次方个样本的类别是未知的,该如何确定这些未知样本的类别呢?这就 需要分类器包含一些数据之外的知识或假设 ,才能对未知的样本进行泛化。在实际中,一些泛泛的假设(比如平滑,相似的样本有相似的类别,有限的依赖,有限的复杂度等)通常可以起到很大作用,这也是机器学习能够如此成功的重要原因。就像演绎一样,归纳(这正是分类器所做的)可以起到知识杠杆的作用:将少量的输入知识转化为大量的输出知识。[/p]3. 过拟合的多种表现形式[p=38, 2, left]机器学习领域的每个人都了解过拟合,但过拟合会以多种并不明显的形式出现。一种理解过拟合的方式是将泛化误差分解为偏置 (bias) 和方差 (variance): 偏置 度量了学习器倾向于一直学习相同错误的程度; 方差则度量了学习器倾向于忽略真实信号、学习随机事物的程度。[/p][p=38, 2, left]线性学习器具有较高的偏置,因为当两个类别的交界不是超平面时,这个学习器就无法进行归纳。决策树就不会有这个问题,因为它可以表示任意的布尔函数,但在另一方面,决策树会面临高方差的问题:在不同训练数据上学习的决策树往往差异巨大,而实际上它们应当是相同的。因此,可得出一个与直觉相反的结论:一个学习能力更强的学习器并不一定比学习能力弱的效果更好。[/p][p=38, 2, left]交叉验证可以帮助避免过拟合,例如通过交叉验证来选择决策树的最佳大小,但这不能彻底解决问题,因为假如我们利用交叉验证做太多的参数选择,它本身就会开始过拟合。[/p][p=38, 2, left]除了交叉验证以外, 还有很多方法可以避免过拟合,其中最常用是对评价函数增加一个正则项,这样可以惩罚那些包含更多结构的分类器,偏向结构简单的分类器,从而降低过拟合的可能性。另一个方案是:在决定是否增加新的结构时进行诸如卡方测试等统计显著性检验,从而决定类别分布是否会因为增加这个结构而不同。当数据非常缺乏时,这些技术非常有用。[/p][p=38, 2, left]对过拟合的一个常见误解是认为它是由噪音造成的,比如某些训练样本的类别标注是错误的。这确实会加剧过拟合,因为分类器会调整分类面让那些样本保持在分类器认为正确的一侧。但是即使没有噪音依然会发生严重的过拟合。例如,假如我们学习一个布尔类型分类器,它是训练数据中所有标为 true 的样本的析取 (disjunction)。这个分类器对所有的训练样例都分类正确,但对测试样例中的每个正例都分类错误,不管训练数据是否有噪音。[/p]3. 高维空间中直觉往往失效[p=38, 2, left]维度灾难是机器学习中的另一个重要问题,这个概念是贝尔曼(Bellman)在 1961 年首先提出的,它描述了以下事实:许多算法在低维空间表现很好,但输入为高维时,算法往往失效。[/p][p=38, 2, left]在机器学习领域,这有更多的意义,随着样本维度的增加,正确泛化的难度会以指数级增加,这是因为样本数量固定时,覆盖的输入空间比例指数级减少。比如对于 100 维的布尔空间(样本取值只有 0 和 1),即使包含 1 万亿(10 的 12 次方)样本的数据集,也只能覆盖输入空间 (2 的 100 次方,约为 10 的 30 次方) 的 10 的负 18 次方左右。这就体现出机器学习「归纳」的必要性,也是它的难点所在。[/p][p=38, 2, left]严格的讲,机器学习算法(显式或隐式)所依赖的基于相似度的推理在高维空间中会失效。比如:一个采用汉明距离为相似度度量的最近邻分类器,假设样例的分类类别是 x1∧x2。如果没有其它特征,这是一个很容易的问题。如果增加 98 个不相关的特征 x3,…,x100 时,来自这些特征的噪音会淹没 x1 和 x2 产生的信号,导致所找到的最近邻样本相当于做出随机预测。[/p][p=38, 2, left]更糟糕的是,即使所有的 100 个特征都是相关的,最近邻方法依然会有问题。这是因为在高维空间所有的样例都变得很相似,比如:假设所有样本分布在规则的网格上,现在考虑一个测试样本 x,如果网格是 d 维的,会有个 2d 个最近邻样例与 x 的距离相等。因此,随着维数的增加,x 会拥有越来越多的最近邻样本,导致最终最近邻的选择等价于随机的,从而使得类别的选择也变成随机的。[/p][p=38, 2, left]在三维世界的直觉在高维空间通常失效。在高维空间,多元高斯分布的大部分质量并不分布在均值附近,而是在逐渐远离均值的一层「壳」上,类似一个橘子的大部分质量不在瓤上,而是在皮上。如果数量一定的样本均匀分布在一个(维数不断增加的)高维的超立方体中,那么超出某个维数后,大部分样本与超立方体的某一面的距离要小于与它们最近邻样本的距离。如果在超立方体中内接一个超球面,那么几乎所有的质量都会分布在超球面之外。这对机器学习是一个坏消息,因为机器学习常常用一种类型的形状来近似另一种类型的形状。[/p][p=38, 2, left]在二维或三维空间构建分类器很简单,因为仅通过肉眼就可以发现不同类别样本的分界线,甚至可以说,如果人们拥有在高维空间中的观察能力,那么机器学习就没有存在的必要了。正是因为很难理解在高维空间中发生什么,所以很难设计出一个好的分类器。也许人们会天真地认为:收集更多的特征永远不会有什么坏处,因为最坏的情况也不过是这些新增的特征没有提供关于类别的新信息而已。但实际上,这样做的好处可能要远小于维度灾难带来的问题。[/p][p=38, 2, left]幸运的是,有一个现象可以在一定程度上抵消维度灾难,那就是所谓的「非均匀性的祈福」(blessing of nonuniformity)。大多数情况下,样本在空间中并非均匀分布,而是集中在一个低维流形上或其附近。比如:在识别手写数字时,即使数字图片的每个像素都单独作为一个特征,近邻方法依然表现良好,这是因为数字图片的空间要远小于整个可能的空间。学习器可以隐式地充分利用这个有效的低维空间,也可以显式地进行降维。[/p]4. 特征工程是关键[p=38, 2, left]在考虑所有情况之后,有的机器学习项目成功了,而有的却失败了,这是什么原因呢?最重要的因素就是所利用的特征。如果有很多与类别非常相关的独立特征,那么学习起来会非常容易;如果特征与类别的关系非常复杂,那么就不一定能够学到它了。通常原始数据不能直接拿来学习,需要从中构建特征,这也是机器学习项目的一个主要工作,也是最有趣的部分,在这里,直觉、创造性和技术一样都很重要。[/p][p=38, 2, left]初学者常常对机器学习项目中真正用于机器学习的时间非常少而感到吃惊,假如考虑到对数据的收集、整合、清理和预处理是多么费时,以及构建特征需经历多少试验和错误,就会理解这个过程了。此外,机器学习无法做到一次性构建数据集合和运行学习器,它是一个反复迭代的过程,包括运行学习器、分析结果、修改数据或学习器等。其中,学习往往是最快完成的部分,这是因为对它已经非常精通了。相比起来, 特征工程更加困难,主要由于它是与具体领域相关的 ,而学习器则很大程度上是通用的。不过,两者并没有明确界限,这也是效果最好的学习器往往是那些能够融入领域知识的学习器的原因之一。[/p][p=38, 2, left]当然,机器学习的一个最终目标是将特征工程的过程越来越自动化。目前常采用的是:先自动产生大量的候选特征,然后采用计算出它们与分类类别的信息增益等方法,选取最好的特征。但需要注意的是,单独看特征也许与分类无关,但把特征组合起来也许就与分类有关系了。比如,如果分类类别是取个输入 k 个特征的异或,那么每个特征单独看起来都与分类没有关。但是,采用包含大量特征的学习器寻找有用的特征组合非常耗时,也容易导致过拟合。因此,还是无法避免特征工程的工作。[/p]5. 更多的数据优于更复杂的算法[p=38, 2, left]假设已经尽可能构建出最好的特征集合,但分类器的效果还是不够好该怎么办呢?有两个主要选择:设计更好的学习算法,或者采集更多数据(包括更多的样本和未造成维度灾难的特征)。机器学习研究者更关注前者,但从实用角度看,最快捷的方法是收集更多数据。经验表明:有大量数据的粗糙算法优于数据量较少的「聪明」算法(毕竟机器学习就是研究如何让数据发挥作用的)。[/p][p=38, 2, left]然而,这会带来可扩展性的问题。在大多数计算机科学问题中,两个重要资源是有限的:时间和内存。而在机器学习中,还要考虑到训练数据也是有限的,哪一个会成为瓶颈是随着时间而变化的。在 20 世纪 80 年代,数据是瓶颈,而现在,变成了时间是瓶颈。我们有海量数据,但没有足够的时间处理,只能抛弃它们。这就造成:理论上来看,更多数据意味着可以学习更复杂的分类器,但在实践中,由于复杂分类器需要更多的学习时间,我们只能选用更简单的分类器。一个解决方案是:对复杂分类器提出快速学习算法,在这个方向上已经有了一些不错的进展(例如 Hulten 和 Domingos 的工作)。[/p][p=38, 2, left]采用更复杂的算法得到的回报比预期要少,部分原因是因为机器学习的工作机制基本上是相同的。这个说法也许令人吃惊,特别是当想到诸如规则集与神经网络之间巨大差异的时候。但实际上,命题规则的确可以轻易地表示成神经网络,其它表示之间也有类似的关系。本质上看,所有的学习器都是将相近的样本归类到同一个类别中,关键的不同之处在于「相近」的意义。[/p][p=38, 2, left]先采用简单的学习器总是有好处的,比如:在逻辑斯蒂回归之前先试试朴素贝叶斯,在支持向量机之前先试试近邻法。复杂的分类器固然有其优点,但它们通常比较难驾驭,因为需要调节更多的参数才能得到好的结果,以及它们的内部机制更不透明。[/p][p=38, 2, left]学习器可以分为两大类:一类的表示是大小不变的,比如线性分类器;另一类的表示会随着数据而增长,比如决策树。当数据量达到一定数量后,大小不变的学习器就不能再从中获益,而如果有足够的数据,大小可变的学习器理论上可以学习任何函数,但实际上却无法做到。这主要是受到算法(例如贪心法搜索会陷入局部最优)和计算复杂度的限制。而且,由于维度灾难,再多的数据也不会够用。正是由于这些原因,那些充分利用已有数据和计算资源的算法总能取得成功。在设计学习器和学习分类器之间并没有明显的界限,因为任何知识要么可以被编码进学习器,要么可以从数据中学到。所以,机器学习项目通常会有学习器设计这一重要部分,我们应当在这方面积累一些专门的知识。[/p][p=38, 2, left]由上可知,最大的瓶颈既不是数据,也不是 CPU 速度,而是人力。在研究论文中,一般都会在准确率和复杂度方面比较学习器,但更重要的是节省的人力和得到的知识,虽然这些更难衡量,这也使得那些能产生可理解的输出的学习器(比如规则集合)更为受到青睐。在机器学习领域取得成果最多的,是那些建立了机器学习的基本条件,能方便的在多个学习器、数据来源和学习问题上有效地开展实验,并实现机器学习专家与领域专家密切合作的组织。[/p]6. 学习更多的模型,而不只是一个[p=38, 2, left]在机器学习早期,每个研究者都有自己最喜欢的学习器,并由于一些先入为主的原因相信它的优越性,愿意花费很多精力去尝试它的各种改进,并从中选择最好的那个。后来,系统的实验表明:不同应用上的最佳学习器并不相同。后来研究者注意到,如果不是只选最好的那个,而是将多个学习器结合,结果通常会好得多,并且这不需要花费太多精力。[/p][p=38, 2, left]现在建立模型集成已经实现标准化。最简单的集成技术是 bagging(装袋) 方法,该方法通过重采样随机产生若干个不同的训练集,在每个训练集上训练一个分类器,然后用投票方式合并结果。该方法比较有效,是因为它在轻微增加偏置的同时,极大地降低了方差;在 boosting(提升)方法中,每个训练样本都有权重,权重会不断变化,每次训练新分类器的时候都倾向于前面的分类器分错的样本上;在 stacking(堆叠)方法中,每个单独分类器的输出作为更高层分类器的输入,更高层分类器可以判断如何更好地合并这些来自低层的输出。[/p][p=38, 2, left]现在的趋势是越来越大型的集成。在 Netflix 大奖赛中,来自世界各地的团队力争建立最好的视频推荐系统,在竞赛过程中,团队们开始发现与其他团队合并学习器会取得更好的结果,因此团队开始合并,并且越来越大。竞赛的第一名和第二名团队都合并了超过 100 个学习器,将这两者集成后又进一步提升了效果。毫无疑问,未来我们会看到更大的集成学习器。[/p][p=38, 2, left]模型集成不应与贝叶斯模型平均(BMA)混淆,后者是学习的一种理论最优化方法。在贝叶斯模型平均方法中,对新样本的预测是对假设空间中所有分类器的预测取平均得到的,每个分类器会根据它解释训练数据的能力和先验信任分配不同的权重。虽然模型集成与贝叶斯模型平均看起来很相似,但它们非常不同:集成方法改变了假设空间(比如从单独的决策树变成了决策树的线性组合),而且可以采用多种多样的形式;贝叶斯模型平均方法只是根据某个准则对原始空间的假设赋予不同的权重。贝叶斯模型平均方法的权重与 bagging 或者 boosting 等集成方法产生的权重非常不同。后者很平均,而前者波动很大,甚至出现某个权重最大的分类器占据统治地位的情况,导致贝叶斯模型平均方法实际上等同于直接选择这个权重最大的分类器。模型集成已经成为机器学习工具的重要组成部分,而贝叶斯模型平均方法则少有人问津。[/p]7. 简单不意味着准确[p=38, 2, left]著名的 Occam 剃刀原理称:entities should not be multiplied beyond necessity。在机器学习中,经常用来表示:对于两个训练误差相同的分类器,简单的那个分类器可能具有更低的测试误差。这个说法的证明经常在文献中经常在文献中出现,但实际上有很多反例,而且「没有免费的午餐」定理也暗示了这个说法并不正确。[/p][p=38, 2, left]之前我们讲到的集成模型就是一个很好的反例,它的泛化误差会随着新增的分类器而改进,甚至会比训练误差更小。另一个反例是支持向量机,它实际上可以有无限个参数而不至于过拟合。与之相反,函数可以将轴上任意数量、任意分类的数据点划分开,即使它只有一个参数。因此,会有个与直觉相反的结论: 模型参数的数量和过拟合之间并无直接联系 。[/p][p=38, 2, left]问题的复杂性还来自这么一个因素:几乎没有学习器能搜索整个假设空间。一个在较大的假设空间搜索较少假设的学习器,比一个在较小空间中搜索较多假设的学习器更不容易过拟合。正如 Pearl 提出的:假设空间的大小仅对那些影响训练误差和测试误差的关键因素有初步的指导意义。[/p][p=38, 2, left]Domingos 调研了机器学习中 Occam 剃刀原理问题的主要论证和论据,得到的结论是:应当首先选择简单的假设,这是因为简单本身就是一个优点,而不是因为与准确率有什么联系。这也许正是 Occam 最初想表达的意思。[/p]8. 可表示不一定可学习[p=38, 2, left]一个函数可以被表示,并不意味着它是可被学习的,比如,标准的决策树学习器不能学习出比训练样本更多的叶子节点。在连续空间中,即使用一个固定的基元族表示很简单的函数,也常常由无限多项组成。更进一步,如果评价函数经常在假设空间中有许多局部最优点,学习器可能根本无法找到那个真正的函数,即使这个函数是可表示的。在有限数据、时间和内存的情况下,标准学习器只能学到所有可能函数中很有限的子集,这个子集会随着表示方法的不同而不同。因此,关键问题不是「能否被表示?」这个问题的答案通常无关紧要,而是「能否被学习?」这值得我们尝试不同的学习器(或者它们的组合)来寻找答案。[/p][p=38, 2, left]对某些函数来讲, 一些表示方法会更精简,从而只需更少的数据来学习。很多学习器的工作机制是将简单的基函数进行线性组合,比如,支持向量机就形成了集中在支持向量上的核的组合。如果用这种组合方法来表示 n 个比特的奇偶性,将需要 2n 个基函数。但如果采用多层表示,即在输入和输出之间存在多步,奇偶性就可以用一个线性规模的分类器表示。研究这种深层表示的学习方法是机器学习的主要研究前沿之一。[/p]9. 相关不意味着因果[p=38, 2, left]相关不意味着因果,这一点经常被提起,好像已经不值得再过多说明了。但是,即使我们讨论的这些学习器只能学习到相关性,它们的结果也经常被作为因果关系来看待。这样错了么?如果是错的,为什么还这样做呢?[/p][p=38, 2, left]更多时候,人们学习预测模型是为了作为行动的指导。如果我们发现超市里的啤酒和尿布经常被一起购买,那将啤酒放在尿布旁边将会提高销售量。但如果不真的做实验,是很难发现这一点的。机器学习通常应用在观测数据,在观测数据中预测变量并不在学习器的控制之下,这与实验数据相反,后者的预测变量在控制范围内。一些学习算法其实有潜力做到从观测数据发现因果信息,但它们的可用性比较差。而另一方面,相关性是潜在的因果关系的一个标志,可以作为进一步研究的指南(例如试图理解因果链可能是什么样的)。[/p][p=38, 2, left]很多研究者相信因果仅是为了方便而虚构的,比如,在物理定律中并没有因果的概念。因果是否真的存在是一个深奥的哲学问题,目前并没有一个确定的答案。但对于机器学习有两个实用的要点:首先,无论我们是否称它们为「因果关系」,我们都希望能预测我们行动的效果,而不仅仅是观测变量之间的相关性;其次,如果能够获取到实验数据,就尽可能这么做。[/p]结论[p=38, 2, left]像任何一门学科那样,机器学习拥有的很多「民间知识」并不是那么容易就能了解到,但这些知识对于成功运用机器学习非常重要。这篇文章总结了其中最主要的几条知识,当然这只是对机器学习的常规学习内容的补充。网站:[url]http://www.cs.washin-gton.edu/homes/pedrod[/url] 拥有完整的机器学习在线课程,其中融合了正式和非正式的知识。另外,[url]http://www.videolectures.net[/url] 也有着大量宝贵的机器学习报告,还有,Weka 是一款不错的机器学习开源工具包。祝大家学习愉快。[/p]

页: [1]