干货丨关于机器学习那些你不知道的“民间智慧”

干货丨关于机器学习那些你不知道的“民间智慧”

机器学习算法可以通过从例子中推广来弄清楚如何执行重要的任务。

本文总结了机器学习研究人员和从业人员学到的8个关键经验教训,包括要避免的陷阱,重点问题并回答了一些常见的问题。在本文中分享了这些经验教训,因为在考虑机器学习问题时,它们非常有用。

1 - 学习=表示+评估+优化

所有的机器学习算法通常由3个组件组成:

表示法:分类器必须用计算机可以处理的一些正式语言表示。相反地,为学习者选择一个表达式就等于选择它可能学习的一组分类器。这个集合被称为学习者的假设空间。如果一个分类器不在假设空间,就不能被学习到。一个相关的问题是如何表示输入,即使用哪些功能。

评估:需要一个评估函数来区分好的分类器和坏的分类器。该算法在内部使用的评估函数可能与我们希望分类器优化、简化优化以及下一节讨论的问题不同。

优化:最后,我们需要一种方法来在语言中的分类器中搜索得分最高的分类器。优化技术的选择对于学习者的效率是关键的,并且如果评估函数具有多个最优值,则有助于确定所产生的分类器。新学习者开始使用现成的优化器(后来被定制设计的优化器替代)是很常见的。  

干货丨关于机器学习那些你不知道的“民间智慧”

2 - 泛化很重要

机器学习的基本目标是在训练集范例之外进行泛化。这是因为,无论我们有多少数据,我们都不太可能在测试时再次看到这些确切的例子。做好训练集很容易。机器学习初学者最常犯的错误就是对训练数据进行测试,并有成功的幻觉。

如果选择的分类器在新的数据上进行测试,通常不会比随机猜测更好。所以,如果你雇人去建立分类器,一定要保留一些数据给你自己,并测试他们给你的分类器。相反,如果你被雇佣来建立一个分类器,要把一些数据从一开始就放在一边,只用它来测试你选择的分类器,然后在整个数据上学习最终的分类器。

干货丨关于机器学习那些你不知道的“民间智慧”

3 - 数据是不够的

泛化是目标同时还有另外一个重要的后果:不管你拥有多少数据,那都是不够的。

这似乎是一个令人沮丧的消息。那么我们怎么能学到东西?幸运的是,我们想要在现实世界中学习的功能并不是从所有数学上可能的功能集合中统一得出的!事实上,举一个非常普遍的假设,比如平滑性,类似的例子,有限的依赖性或者有限的复杂性,往往足以做得很好,这也是机器学习如此成功的很大一部分原因。就像演绎一样,归纳(学习者所做的)就是知识杠杆:将少量的输入知识转化为大量的输出知识。感应是一个比演绎强大得多的杠杆,需要更少的输入知识来产生有用的结果,但是它仍然需要超过零的输入知识来工作。而且,就像任何一个杠杆一样,我们投入得越多,我们就越能走出去。

干货丨关于机器学习那些你不知道的“民间智慧”

回想起来,学习知识的需求不应该令人惊讶。机器学习不是魔术,它不能从无到有。它所做的是从更少获得更多。像所有的工程一样,编程有很多工作:我们必须从头开始构建所有的东西。学习更像是农业,让大自然完成大部分的工作。农民将种子与营养物质结合起来种植作物。学习者将知识与数据结合起来,开展项目。

4 - 有许多面临过度拟合

如果我们拥有的知识和数据不足以完全确定正确的分类器呢?那么我们就冒着对分类器(或其中的一部分)产生幻觉的风险,这些分类器并不是基于现实,而只是简单地编码数据中的随机物。这个问题被称为过度拟合,是机器学习的怪圈。当你的学习者输出的分类器在训练数据上是100%准确的,但在测试数据上只有50%准确的时候,实际上它可以输出一个75%准确度的分类器,那么,这时候它就可能显得有些过度了。

机器学习中的每个人都知道过度拟合,但它有很多形式,并不是很明显。理解过度拟合的一种方法是将泛化误差分解为偏差和方差。偏见是学习者不断学习同样错误的东西的倾向,不管真实的信号如何,方差是倾向于学习随机事物。线性学习者有很高的偏见,因为当两个类之间的边界不是一个超平面时,学习者无法诱导它。决策树却不存在这个问题,因为它们可以表示任何布尔函数,但是另一方面它们可能遭受高度的方差:由相同现象产生的不同训练集上学习的决策树通常是非常不同的,事实上它们应该是相同的。

干货丨关于机器学习那些你不知道的“民间智慧”

交叉验证可以帮助对抗过度拟合,例如通过使用交叉验证来选择决策树的最佳尺寸来学习。但这不是万能的,因为如果我们用它来做太多的参数选择,它本身就会开始过度适应。

除了交叉验证之外,还有很多方法可以解决过度拟合的问题。最流行的是给评价函数增加一个正则化术语。例如,这可以惩罚更多结构的分类器,从而有利于较小的分类器,只需较少的装配空间。另一种方法是在添加新的结构之前,进行像卡方这样的统计显著性检验,以确定类别的分布是否真的不同于这种结构。当数据非常稀少时,这些技术特别有用。尽管如此,你应该对某种技术“解决”过度拟合问题的说法持怀疑态度。通过落入相反的偏差(偏差),很容易避免过度拟合(方差)。同时避免这两种情况都需要学习一个完美的分类器。

5 - 直觉在高维度失败

过度拟合之后,机器学习中最大的问题就是维度的问题。这个表达式是由Bellman在1961年提出的,指的是当输入是高维时,许多在低维度上工作正常的算法变得棘手。但是在机器学习中,它指的是更多。随着示例的维数(特征数量)的增长,泛化正确变得越来越难,因为固定大小的训练集覆盖了输入空间的一小部分。

干货丨关于机器学习那些你不知道的“民间智慧”

高维的一般问题是,我们来自三维世界的直觉通常不适用于高维空间。在高维度中,多元高斯分布的大部分质量并不接*均值,而是在其周围越来越远的“壳”中;而高维度橙色的大部分是在皮肤中,而不是纸浆。如果恒定数量的例子在高维超立方体中均匀分布,那么超越某个维度,大多数例子更接近于超立方体的一个面,而不是最近邻。如果我们通过将它写入超立方体来近似超球面,那么在高维度下,超立方体的几乎所有体积都在超球面之外。这对于机器学习来说是个坏消息,一种类型的形状常常被另一种形状所逼近。

建立二维或三维分类器很容易,我们可以通过视觉检查找出不同类别的例子之间的合理边界。但是在高维度上很难理解正在发生的事情。这反过来又使设计一个好的分类器变得困难。天真地说,人们可能会认为收集更多的功能从来不会受到伤害,因为在最坏的情况下,他们不会提供有关类的新信息。但事实上,维度的诅咒可能超过了他们的利益。

6 - 理论上的保证不是他们所看到的那样

机器学习论文充满了理论上的保证。最常见的类型是确保良好泛化所需的示例数量的界限。你应该怎样做到这些保证?首先,它们是可能的。归纳传统上与演绎相对照:在推论中你可以保证结论是正确的;在归纳中,所有**都是关闭的。或者这是许多世纪的传统智慧。近几十年来的一个主要发展是认识到,事实上,我们可以对归纳的结果有所保证,特别是如果我们愿意为概率保证提供解决的话。

我们必须小心这是什么意思。例如,如果你的学习者返回了一个与某个特定训练集一致的假设,那么这个假设就没有这么说。现在说的是,给定一个足够大的训练集,很有可能你的学习者要么返回一个推广的假设,要么找不到一致的假设。约束也没有说如何选择一个好的假设空间。它只告诉我们,如果假设空间包含真实的分类器,那么学习者输出一个不好的分类器的概率随着训练集的大小而减少。如果我们缩小假设空间,边界就会改善,但是包含真实分类器的机会也会缩小。

干货丨关于机器学习那些你不知道的“民间智慧”

另一种常见的理论保证类型是渐近的:给定无限的数据,保证学习者输出正确的分类器。这是令人放心的,但是由于其渐近的保证,选择一个学习者而不是另一个学习者会是一件轻率的事情。在实践中,我们很少处于渐近状态(也被称为“asymptopia”)。而且,由于上面讨论的偏差 - 方差权衡,如果学习者A比给定无限数据的学习者B好,则B往往比给定的有限数据好。

理论保证在机器学习中的主要作用不是作为实际决策的标准,而是作为算法设计的理解和推动力量的来源。在这方面,他们相当有用。事实上,理论与实践的密切相互作用是机器学习多年来取得如此巨大进步的主要原因之一。但要注意:学习是一个复杂的现象,只是因为学习者有一个理论上的正当理由,而且在实际工作中并不意味着前者是后者的原因。

7 - 更多数据能击败更聪明的算法

在大多数计算机科学中,这两种主要的有限资源是时间和记忆。在机器学习中,还有第三个:训练数据。哪一个瓶颈已经从十年变为十年了,在八十年代,这往往是数据,在今天往往是时间。大量的数据是可用的,但没有足够的时间来处理它,所以它没有被使用。这导致了一个矛盾:即使原则上有更多的数据意味着可以学习更复杂的分类器,但实际上更简单的分类器被使用,因为复杂的分类器需要很长的时间学习。部分答案是想出快速学习复杂分类器的方法,而且在这方面的确有了显显著的进展。

使用更聪明的算法的部分原因是有一个比你所期望的更小的回报,第一个近似,他们是一样的,当你认为表述与规则集和神经网络不同时,这是令人惊讶的。但事实上,命题规则很容易被编码为神经网络,其他表征之间也存在类似的关系。所有学习者本质上都是通过将附近的例子分组到同一个类来工作的,关键的区别在于“附近”的含义。在非均匀分布的数据下,学习者可以产生广泛不同的边界,同时在重要的区域(即具有大量训练示例的那些区域)中也做出相同的预测,大多数文本示例可能会出现)。这也有助于解释为什么强大的学习可能是不稳定的,但仍然准确。

通常,首先尝试最简单的学习者(例如,逻辑回归之前的朴素贝叶斯,支持向量机之前的k-最近邻居)是值得的。更复杂的学习者是诱人的,但他们通常也更难使用,因为他们有更多的旋钮,你需要转向获得好的结果,因为他们的内部是更不透明的)。

干货丨关于机器学习那些你不知道的“民间智慧”

学习者可以分为两大类:表示具有固定大小的线性分类器,以及可以随数据一起增长的表达式,如决策树。固定大小的学习者只能利用这么多的数据。原则上可变大小的学习者可以在给定足够数据的情况下学习任何函数,但实际上由于算法或计算成本的限制,他们可能不会。而且,由于维度的诅咒,不存在大量的数据可能就足够了。由于这些原因,聪明的算法,那些充分利用数据和计算资源的算法,如果你愿意付出努力的话,往往会得到回报。设计学习者和学习分类器之间没有尖锐的边界,相反,任何给定的知识都可以在学习者中编码或从数据中学习。所以机器学习项目往往会成为学习者设计的重要组成部分,当然,从业者需要具备一定的专业知识。

8 - 学习许多模型,不局限于一个

在机器学习的早期,每个人都有自己喜欢的学习者,并有一些先验的理由相信它的优越性。大部分努力尝试了很多变化,并选择最好的一个。然后系统的经验比较表明,最好的学习者因应用而异,包含许多不同学习者的系统开始出现。现在努力尝试许多学习者的变化,仍然选择最好的一个。随后研究人员注意到,如果不是选择找到的最佳变体,我们结合了许多变体,结果会更好 - 通常要好得多 - 而且对用户来说没有额外的工作量。

干货丨关于机器学习那些你不知道的“民间智慧”

现在创建这样的模型集是标准的。在最简单的技术中,称为bagging,我们通过重采样简单地生成训练集的随机变化,分别学习一个分类器,并通过投票结果结合。这是有效的,因为它大大降低了方差,而只是在提高的过程中稍微增加偏差,训练样例有权重,而且这些都是不同的,所以每个新的分类器都集中在前面那些往往会出错的例子上。在堆叠中,单个分类器的输出成为了“高级”学习者的输入,这个学习者能计算出如何最好地组合它们。

结论

像任何学科一样,机器学习有许多难以实现的“民间智慧”,但对成功至关重要。多明戈斯教授的论文总结了一些你需要知道的最重要的内容。

干货丨关于机器学习那些你不知道的“民间智慧”