如何应对应用机器学习的棘手问题。
应用机器学习很有挑战性。
您必须做出许多决定,而对于您的具体问题,没有已知的“正确答案”,例如
- 要使用什么问题框架?
- 要使用什么输入和输出数据?
- 要使用什么学习算法?
- 要使用什么算法配置?
这对于新手来说很有挑战性,他们期望您可以计算出或被告知使用什么数据或如何最好地配置算法。
在本文中,您将发现设计学习系统的棘手本质以及如何应对它。
阅读本文后,你将了解:
- 如何为自己和他人制定清晰的学习问题定义。
- 设计学习系统时必须考虑的 4 个决策点。
- 用于具体处理实际设计学习系统的棘手问题的 3 种策略。
让我们开始吧。
概述
本文分为 6 个部分,灵感来自 Tom Mitchell 1997 年的优秀著作《机器学习》的第一章;它们是:
- 定义良好的学习问题
- 选择训练数据
- 选择目标函数
- 选择目标函数的表示
- 选择学习算法
- 如何设计学习系统
定义良好的学习问题
在应用机器学习领域,我们可以将一个通用的学习任务定义为一个程序,该程序从特定任务的经验中学习,并针对特定的性能度量。
Tom Mitchell 在其 1997 年的著作《机器学习》中对此进行了清晰的阐述:
当一个计算机程序在特定任务 T 上,根据某个性能度量 P 的表现,随着经验 E 的增加而提高时,我们说这个程序从经验 E 中学习。
— 第 2 页,机器学习,1997 年。
我们将此作为我们可能对应用机器学习(如预测建模)感兴趣的学习任务的通用定义。Tom 列举了一些例子来使其更清晰,例如:
- 学习识别口语。
- 学习驾驶自动驾驶汽车。
- 学习对新的天文结构进行分类。
- 学习玩世界级的西洋双陆棋。
我们可以使用上述定义来定义我们自己的预测建模问题。一旦定义好,任务就变成了设计一个学习系统来解决它。
设计一个学习系统,即应用机器学习,涉及四个设计选择:
- 选择训练数据。
- 选择目标函数。
- 选择表示。
- 选择学习算法。
对于给定的问题,如果您拥有无限的资源,可能会有一套最佳选择,但我们没有无限的时间、计算资源以及对领域或学习系统的知识。
因此,尽管我们可以对学习问题进行定义良好的描述,但设计最优的学习系统却是棘手的。
我们所能做的最好的就是利用知识、技能和可用资源来完成设计选择。
让我们更详细地探讨这些设计选择。
选择训练数据
您必须选择您的学习系统将用作学习经验的数据。
这是过去观察的数据。
可用的训练经验的类型可能对学习者的成功或失败产生重大影响。
— 第 5 页,机器学习,1997 年。
它很少格式良好且可供使用;通常您必须收集(或认为可能需要)学习所需的数据。
这可能意味着:
- 抓取文档。
- 查询数据库。
- 处理文件。
- 整理分散的来源
- 整合实体。
您需要将所有数据收集起来并使其规范化,以便一个观察代表一个拥有可用结果的实体。
选择目标函数
接下来,您必须选择学习问题的框架。
机器学习实际上是学习一个从输入 (X) 到输出 (y) 的映射函数 (f) 的问题。
1 |
y = f(X) |
然后,该函数可以用于未来的新数据,以预测最可能的输出。
学习系统的目标是准备一个函数,该函数根据可用资源最佳地将输入映射到输出。实际存在的底层函数是未知的。如果我们知道这个函数的形式,我们就可以直接使用它,而无需机器学习来学习它。
更广泛地说,这是一个称为函数逼近的问题。结果将是一个近似值,这意味着它会存在误差。我们将尽力最小化此误差,但由于数据中的噪声,始终会存在一些误差。
...我们已将此案例中的学习任务简化为发现理想目标函数 V 的操作描述的问题。在一般情况下,完美地学习 V 的这种操作形式可能非常困难。事实上,我们通常期望学习算法只能获得目标函数的一些近似,因此学习目标函数的过程通常被称为函数逼近。
— 第 8 页,机器学习,1997 年。
此步骤是选择要用作函数输入的具体数据,例如输入特征或输入变量,以及要预测的具体内容,例如输出变量。
我通常称之为学习问题的框架。选择输入和输出本质上就选择了我们将要尝试逼近的目标函数的性质。
选择目标函数的表示
接下来,您必须选择您希望用于映射函数的表示。
可以将其视为您希望拥有的最终模型的类型,然后您可以使用它来进行预测。您必须选择此模型的形式,如果您愿意,也可以是数据结构。
既然我们已经指定了理想的目标函数 V,我们必须选择一种表示,学习程序将使用它来描述它将学习到的函数 Vprime。
— 第 8 页,机器学习,1997 年。
例如
- 也许您的项目需要一个决策树,以便于理解和向利益相关者解释。
- 也许您的利益相关者更喜欢线性模型,统计学家可以轻松解释。
- 也许您的利益相关者只关心模型性能,因此所有模型表示都可以选择。
表示的选择将对您可用于学习映射函数的学习算法的类型施加限制。
选择学习算法
最后,您必须选择将输入和输出数据作为输入并学习首选表示的模型的那种学习算法。
如果对函数表示的选择约束很少,就像通常情况一样,那么您可能可以评估一组不同的算法和表示。
如果函数表示的选择有严格的约束,例如加权和线性模型或决策树,那么算法的选择将仅限于那些可以处理特定表示的算法。
算法的选择可能会施加其自身的约束,例如特定的数据准备转换,如数据归一化。
如何设计学习系统
开发学习系统是困难的。
没有人可以告诉您沿途每个决定的最佳答案;对于您特定的学习问题,最佳答案是未知的。
Mitchell 通过描述设计一个下棋学习系统时所做的选择来帮助阐明这一点。

《机器学习》一书中关于设计一个下棋学习系统的选择的图示。
摘自“机器学习”,1997 年。
选择在一定程度上约束了设计过程。Mitchell 继续说道:
这些设计选择以多种方式约束了学习任务。我们将可以获得的知识类型限制为单一的线性评估函数。此外,我们将此评估函数仅限于依赖提供的六个特定棋盘特征。如果目标函数 V 确实可以通过这些特定特征的线性组合来表示,那么我们的程序就有很好的机会学会它。如果不是,那么我们最好的希望是它将学会一个好的近似值,因为程序永远无法学会任何它至少无法表示的东西。
— 第 13-14 页,机器学习,1997 年。
我喜欢这段话,因为它充分说明了这些约束对简化问题的重要性,以及做出限制或阻止系统充分学习问题的选择所带来的风险。
通常,您无法分析性地计算这些选择的答案,例如使用什么数据、使用什么算法或使用什么算法配置。
尽管如此,并非一切都失去了;以下是您可以在实践中使用的 3 种策略:
- 复制。查找文献或专家关于与您的问题相同或相似问题的学习系统,并复制该学习系统的设计。您很可能不是第一个解决此类问题的人。最坏的情况下,复制的设计也为您自己的设计提供了一个起点。
- 搜索。列出每个决策点的可用选项,并通过经验评估每个选项,以查看在您的特定数据上哪种效果最好。这可能是应用机器学习中最稳健、最常用的方法。
- 设计。在通过上述复制和搜索方法完成许多项目后,您将获得设计机器学习系统的直觉。
开发学习系统不是科学;它是工程。
开发新的机器学习算法并描述它们如何以及为何有效是一门科学,而开发学习系统时通常不需要这些。
开发学习系统就像开发软件一样。您必须结合 (1) 过去有效设计的副本,(2) 显示有希望结果的原型,以及 (3) 在开发新系统时的设计经验,才能获得最佳结果。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
- 第一章,机器学习,1997 年。
- Tom Mitchell 的主页
- 维基百科上的“定义良好的问题”
- 维基百科上的“棘手性”
- 如何定义你的机器学习问题
- 应用机器学习流程
总结
在本文中,您发现了应用机器学习中设计学习系统的棘手本质以及如何应对它。
具体来说,你学到了:
- 如何为自己和他人制定清晰的学习问题定义。
- 设计学习系统时必须考虑的 4 个决策点。
- 用于具体处理实际设计学习系统的棘手问题的 3 种策略。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
太棒的文章!
谢谢!
好文章!
谢谢。
能否提供一些您自己经验中的例子?不仅是最终的设计,还有您的思考过程以及您是如何得出最终设计的?
感谢您的建议。
我的许多长篇博文都是一个很好的起点。
顶级文章。谢谢。
不客气。
谢谢 Jason!
定量的教程(将项目封装在完整的代码中)加上反思性和定性的想法,以理解那些算法(例如这个)背后发生了什么,这是您这边的一个很好的结合,以实现“为我们每个人提供工具和必要的概念,以掌握人工智能范式并成为熟练的从业者”的使命。
谢谢。
这是一个非常友好的解释!
谢谢 Alex。