1.4 机器学习的类型
现在,通过比较特征向量,你已经掌握了将数据用于实际算法的必要工具。机器学习通常分为三个方面:监督学习、无监督学习和强化学习。一个新兴的领域是元学习(meta-learning),有时被称为AutoML。下面几节将讨论所有四种类型。
1.4.1 监督学习
顾名思义,监督者是指在指挥系统中处于更高级别的人。当我们有疑问时,监督者会指示我们该做什么。同样,监督学习就是从监督者(比如老师)给出的例子中学习。
一个监督机器学习系统需要用带标签的数据来开发模型。例如,给定许多人的照片以及记录他们的相应种族,我们可以训练一个模型来对任意一张照片中从未见过的人的种族进行分类。简单地说,模型是一个函数,它通过使用之前给出的示例(称为训练数据集)作为参考,为数据分配标签。
通过使用数学符号讨论模型较为方便。设x为数据样例,如特征向量。与x相对应的标签为f(x),通常被称为x的ground truth。通常我们使用y=f(x),这样写起来更快。在通过照片对一个人的种族进行分类的例子中,x可以是各种相关特征的100维向量,而y是代表各种族的几个值之一。因为y是离散的,只有几个值,所以这个模型被称为分类器。如果y可以产生许多值,并且这些值具有自然的顺序,这个模型就被称为回归器。
我们用g(x)表示模型对x的预测。有时,你可以调整模型来显著地改变其性能。模型具有可由人或自动调整的参数。我们用向量来表示参数。把它们放在一起,g(x|)更完整地表示了模型,读作“给定x的g”。
注意 模型也可以有超参数(hyperparameter),它们是模型的额外特殊属性。超参数中的术语hyper乍一看可能有点奇怪。更好的名称是“元参数”,因为参数类似于模型的元数据。
一个模型g(x|)的预测成功取决于它与ground truth数值y的吻合程度。我们需要一种方法来测量这两个向量之间的距离。例如,L2范数可以用来测量两个向量的距离。ground truth值与预测值之间的距离称为代价(cost)。
监督学习的本质是找到使模型的代价最小的参数。从数学上讲,我们在寻找一个θ*,它能使所有数据点x∈X的代价最小。一种形式化这个优化问题的方法是:
这里
显然,通过暴力计算x的每个可能组合(也称为参数空间)最终将找到最优解,但它的运行时间是不可接受的。机器学习的一个主要研究领域是编写高效搜索参数空间的算法。一些早期的算法包括梯度下降、模拟退火和遗传算法。TensorFlow会自动处理这些算法的底层实现细节,所以我就不详细讲了。
在以某种方式学习得到了参数之后,你可以最终评估模型,以确定系统从数据中学到的模式效果如何。经验法则是,不要使用与训练模型时相同的数据去评估模型,因为你已经知道模型对于训练数据是有效的。你需要判断该模型是否适用于不在训练集内的数据,以确保你的模型是通用的,不会对用于训练它的数据产生偏差。将大部分数据用于训练,其余的用于验证。例如,如果你有100个带标签的样本,随机选择其中的70个来训练一个模型,并保留另外30个用于验证,创建一个70-30的分割。
为什么要做数据分割
如果你觉得70-30的分割有点奇怪,可以这样想:假设你的物理老师给你一次练习测验,并告诉你真正的考试题目也是一样的,你可以在不理解的情况下死记硬背答案,并获得一个高分。同样,如果在训练集上测试模型,那么对你自己没有任何帮助。你有错误的风险,因为模型可能只是记住了结果。这其中的智能何在呢?
与使用70-30分割不同,机器学习从业者通常将数据集划分为60-20-20。训练消耗数据集的60%,测试使用20%,剩下的20%用于验证,这会在第2章中解释。
1.4.2 无监督学习
无监督学习是对没有标签的数据进行建模。事实上,我们可以从原始数据中得出任何结论,这感觉很神奇。有了足够的数据,就有可能找到模式和结构。机器学习从业者直接从数据中学习的两个最强大的工具是聚类和降维。
聚类是类似于将数据分开摆放为独立的几堆的过程。在某种意义上,聚类就像在不知道任何对应标签的情况下对数据进行分类。例如,当你在三个书架上整理书时,你可能会把相似的流派放在一起,或者你可能会按作者的姓氏来分类。你可能会有一个关于斯蒂芬·金的部分,另一个用于教科书,还有第三个用于其他任何东西。你并不关心所有的书都是以相同的特征分开的,只关心每本书都有一些独特的东西,允许你将其组织到几个大致相等的、容易识别的组中。k-means是最流行的聚类算法之一,它是强大的E-M算法的一个具体实例。
数据降维是关于操作数据的,从而以一个更简单的视角来看待它。例如,通过去除冗余的特征,我们可以在低维空间解释相同的数据,并看看哪些特征是重要的。这种简化还有助于数据可视化或预处理,以提高性能。最早的算法之一是主成分分析(PCA),最新的算法是自编码器,将在第7章中介绍。
1.4.3 强化学习
监督学习和无监督学习似乎意味着老师要么存在,要么没有。但是在机器学习的另一个深入研究的分支中,环境充当了老师的角色,它提供提示而不是明确的答案。学习系统收到的是对其行为的反馈,并非它正在朝着正确的方向前进的明确承诺,比如解决迷宫或完成明确的目标。
探索与利用:强化学习的核心
想象一下,你正在玩一款你从未见过的电子游戏。你点击控制器上的按钮,发现一种特定的按钮点击组合可以逐渐增加你的分数。棒极了!现在你不断利用这一发现,希望打破高分。然而,在你的内心深处,你想知道你是否错过了一个更好的按钮点击组合。你是应该利用当前的最佳策略,还是冒险探索新的选择?
在监督学习中训练数据是被“老师”打上标签的,与监督学习不同的是,强化学习通过观察环境如何对动作做出反应来收集信息进行训练。强化学习是一种机器学习,它与环境相互作用,以学习哪种动作组合会产生最有利的结果。因为我们已经通过使用“环境”和“动作”这两个词将算法拟人化了,学者们通常将系统称为一个自主的智能体(Agent)。因此,这种机器学习会自然地出现在机器人领域。
为了理解环境中的智能体,我们引入两个新的概念:状态和动作。把世界冻结在某一特定时间的信息称为状态。智能体可以执行许多动作来改变当前状态。为了驱动智能体执行动作,每个状态都会产生相应的奖励。智能体最终会发现每个状态的期望总回报,称为状态的值。
和其他机器学习系统一样,性能随着数据的增多而提高。在这种情况下,数据就是历史经验。在强化学习中,我们不知道一系列动作的最终代价或回报,直到这一系列动作被执行。这些情况使得传统的监督学习无效,因为我们不知道在历史的动作序列中哪一个动作是导致低状态值的罪魁祸首。智能体唯一确定的信息是它已经执行的一系列动作的奖励,而这些动作是不完整的。智能体的目标是找到一系列能使奖励最大化的动作。如果你对这个主题更感兴趣,你可以看看下面这本书:
Grokking Deep Reinforcement Learning,Miguel Morales(Manning,2020;https://www.manning.com/books/grokking-deep-reinforcement-learning)。
1.4.4 元学习
最近,一个被称为元学习的新的机器学习领域出现了。这个想法很简单。数据科学家和ML专家花费了大量的时间执行ML的步骤,如图1.7所示。如果这些步骤——定义和表示问题、选择模型、测试模型和评估模型——能够自动进行,那会怎么样?与其局限于探索一个或一小撮模型,为什么不让程序自己尝试所有的模型呢?
许多事情里要将不同领域专家的角色分开(如图1.7所示的医生),数据科学家(人工数据建模和潜在的提取特征很重要,如图像RGB像素)和ML工程师(负责调优、测试和部署模型),如图1.10a所示。正如本章前面所讲的,这些角色在三个基本领域相互作用:数据清洗和准备,这时领域专家和数据科学家都可以提供帮助;特征和模型选择,这主要是数据科学家的工作,ML工程师可以帮上一点忙;然后是训练、测试、评估模型,这主要是ML工程师的工作,数据科学家也能有一些帮助。我们增加了一个新的工作:把我们的模型拿出来并部署它,这是现实世界中的事情,它本身也会带来一些挑战。这个场景是你读本书第2版的原因之一,在第2章中,我将讨论部署和使用TensorFlow。
如果不让数据科学家和ML工程师选择模型,训练、评估和优化它们,而是让系统自动搜索可能的模型空间,并尝试所有模型,那么情况会怎样?这种方法克服了将你的整个ML经验限制在少数几种可能的解决方案上的局限性,你可能会选择第一个性能合适的解决方案。但是,如果系统能够找出哪些模型是最好的,并且能自动调优这些模型,那么情况会怎样?这正是图1.10b中所示——元学习的过程,或者AutoML。
图1.10 传统的ML及其到元学习的演化,其中系统自己进行模型选择、训练、调优和评估,从众多候选模型中挑选出最佳的模型
数据科学家,你们被cancel了
今天的cancel文化很好地体现了元学习的概念,元学习源于数据科学本身——创建和验证多个类型的ML流水线的过程,包括数据清洗、模型构建和测试——都可以自动化。美国国防部高级研究计划局(DARPA)的一个相关项目“数据驱动发现模型”(D3M)的目标是消灭数据科学家,取而代之的是自动化的活动。然而,尽管DARPA项目的结果和元学习领域到目前为止是有前途的,但我们还没有完全准备好取代数据科学家。别担心,你是安全的!
练习1.5
你会使用监督学习、无监督学习、强化学习或元学习来解决以下问题吗?(a)找到最好的ML算法,利用棒球数据预测一个球员是否会进入名人堂。(b)在没有其他信息的情况下,将各种水果整理成三个篮子。(c)根据传感器数据预测天气。(d)通过多次反复尝试学会下棋。
答案
(a)元学习;(b)无监督学习;(c)监督学习;(d)强化学习。