1 .引言
学习的目的是从过去的经验中吸取教训,以解决未来的问题。通常,这涉及搜索解决问题过去实例的算法。然后,该算法可以应用于该问题的未来实例。
过去和未来不一定指日历日期;相反,它们指的是学习者之前看到的内容以及学习者接下来将看到的内容。
因为学习本身就是一种算法,所以它可以被理解为一种元-算法:一种输出算法的算法(图9.1)。
学习通常由两个阶段组成:训练阶段,我们搜索一个在过去的问题实例(训练数据)上表现良好的算法;测试阶段,我们部署学习到的算法来解决问题的新实例。
2. 有样本学习
从样本中学习也称为监督学习。
想象一下,你发现了一本古老的数学课本,上面有看起来很神奇的证明,但有一个你不认识的符号,“⋆”。你可以看到它在方程式中到处使用,并记下它的行为示例:
你认为⋆代表什么?它在计算什么功能?你有吗?让我们测试一下你的答案:3⋆5的值是多少?(答案如下图所示。)这可能看起来不像,但你刚刚完成了学习!你通过看例子学到了⋆的作用。事实上,图9.2显示了您所做的工作:
事实证明,我们几乎可以从例子中学到任何东西。记住,我们正在学习一种算法,即从输入到输出的可计算映射。在这种情况下,示例的正式定义是{输入,输出}对。你给出的⋆示例由四对这样的配对组成:
这种学习,即观察示例输入输出行为并推断出解释这种行为的函数映射,称为监督学习。
这种学习的另一个名称是将模型与数据相匹配。
根据我们给出的例子,我们能够用一个简单的代数方程来模拟⋆的行为。让我们试试更复杂的东西。从图9.3中的三个例子中,你能找出运算符F的作用吗?
你可能会想到“它填补了缺失的像素”这样的东西。这完全正确,但它掩盖了很多细节。记住,我们想学习一种算法,一种完全明确的过程。F究竟如何填充缺失的像素?
这很难说出口。我们可能需要一个非常复杂的算法来指定答案,一个如此复杂的算法,以至于我们永远不可能用手写出来。这就是机器学习的意义所在。机器为我们编写算法,但只有当我们给它很多例子,而不仅仅是这三个例子时,它才能这样做。
有些东西是无法从例子中学习的,比如不可计算的函数。不可计算函数的一个例子是一个函数,它接受一个程序作为输入,如果程序最终将完成运行,则输出1,如果它将永远运行,则输入0。它是不可计算的,因为没有算法可以在有限的时间内解决这个问题。然而,有可能学习到一个很好的近似值。
3. 无样本学习
即使没有样本,我们仍然可以学习。我们可以尝试提出一种算法,优化输入输出映射的理想属性,而不是匹配输入输出示例。这类学习包括无监督学习和强化学习。
在无监督学习中,我们得到了输入数据的示例,但没有被告知目标输出。因此,学习者必须提出一个具有有用属性的输入数据的模型或表示,如某些目标函数所衡量的。例如,目标可能是将数据压缩为低维格式,仍然保留有关输入的所有信息。我们将在本书关于表征学习和生成建模中遇到这种学习。
在强化学习中,我们假设我们得到一个奖励函数,该函数明确地衡量学习函数输出的质量。确切地说,奖励函数是从输出到分数的映射:r:Y→ℝ。这个函数试图提出一个最大化奖励的函数。本书不会详细介绍强化学习,但这种学习正在成为计算机视觉的重要组成部分,特别是在机器人视觉的背景下。
乍一看,无监督学习和强化学习看起来很相似:两者都最大化了一个函数,该函数对输入-输出映射的理想属性进行评分。最大的区别在于,无监督学习可以访问训练数据,而强化学习通常不能;相反,强化学习者必须收集自己的训练数据。
4. 关键成分
学习算法由三个关键成分组成:
- 目标:对于学习者来说,成功或至少表现良好意味着什么?
- 假设空间:我们将搜索的从输入到输出的可能映射集是什么?
- 优化器:我们究竟如何在假设空间中搜索特定的映射,以最大化目标?
当这三种成分应用于大量数据,并在足够的硬件(称为计算)上运行时,可以做出惊人的事情。
本章我们将重点介绍学习算法,但数据和计算往往更重要。
学习器输出一个算法f: X→Y,它将输入x∈X映射到输出y∈Y。通常,f被称为学习函数。学习优化的目标通常是一个函数,对模型输出进行评分,L:Y→ℝ,或将模型输出与目标答案进行比较,L: Y×Y→ℝ。我们可以互换地称这个L为目标函数、损失函数或损失。损失总是指我们寻求最小化的目标,而目标函数可以用来描述我们寻求最小化和寻求最大化的目标。
4.1 参数化的重要性
假设空间可以用学习者考虑的所有可能函数的集合 F 来描述。例如,一个假设空间可能是
“从 R 2 ℝ^2 R2→ R ℝ R的所有映射”,另一个可能是“满足距离度量条件的所有函数 R × R → R ≥ 0 {ℝ ×ℝ →ℝ_{≥0}} R×R→R≥0”。然而,通常情况下,我们不仅会指定假设空间,还会指定如何对空间进行参数化。例如,我们可以说我们的参数化假设空间是 y = θ 1 x + θ 0 {y=θ_1x+θ_0} y=θ1x+θ0,其中 θ 0 {θ_0} θ0和 θ 1 {θ_1} θ1是参数。这个例子对应于从 R → R {ℝ→ℝ} R→R的仿射函数空间,但这不是参数化该空间的唯一方法。另一种选择是 y = θ 2 θ 1 x + θ 0 {y=θ_2θ_1x+θ_0} y=θ2θ1x+θ0,参数为θ0、θ1和θ2。
这两种选择参数化了完全相同的空间,也就是说,任何仿射函数都可以通过任一参数化来表示,而这两种参数化只能表示仿射函数。然而,这两个参数化并不等价,因为优化器和目标可能会对不同的参数化有不同的处理方式。因此,为了完全定义学习算法,指定假设空间的参数化方式非常重要。
过度参数化模型在现代计算机视觉中尤为重要,在这种模型中,你使用的参数超过了拟合数据所需的最小值;大多数神经网络(第12章)都被过度参数化了。
5. 经验风险最小化:从样本中学习公式化
最后一节中的三个要素可以使用经验风险最小化(ERM)框架进行公式化。该框架特别适用于监督学习,在该学习中,我们正在学习一个函数,该函数在给定许多训练示例的情况下从x预测y
,这样做是为了最小化我们在所有训练数据(即经验分布)上产生的平均误差(即风险)。ERM问题如下:
这里,F是假设空间,L是损失函数,是训练数据(例如{输入,输出}对),F是学习函数。
6. 学习作为概率推理
根据损失函数,ERM通常被解释为进行最大似然概率推理。在这种解释中,我们试图推断出为数据分配最高概率的假设 f f f。对于给定x预测y的模型,最大似然 f f f为:
项称为给定模型f和观测到的x值的y值的似然性,最大化这个量称为最大似然学习。
为了完全指定这个模型,我们必须定义这个条件分布的形式。一个常见的选择是,预测误差( y − f ( x ) y-f(x) y−f(x))是高斯分布的,这就形成了最小二乘法的目标。
在后面的章节中,我们将看到先验概率 p ( f ) p(f) p(f)也可用于推断最可能的假设。当先验与似然函数结合使用时,我们得到了最大后验学习(MAP学习),它在给定训练数据的情况下推断出最可能的假设:
7 案例研究
接下来的三个部分涵盖了特定学习问题的几个案例研究。示例1和3展示了机器学习中最常见的两种工作方式:回归和分类。示例2,Python程序,表明本章中的范式不仅限于简单的系统,也可以应用于非常通用和复杂的模型。
7.1 示例1:线性最小二乘回归
最简单的学习问题之一是线性最小二乘回归。在这种情况下,我们的目标是用一条线来模拟两个变量x和y之间的关系。
作为一个具体的例子,x代表外面的温度,y代表海滩上的人数。如前所述,我们在许多观察到的{室外温度、海滩人数}对上训练(即拟合)我们的模型,表示为。在测试时,该模型可用于预测新查询 x ′ x^′ x′的 y y y值,如图9.4所示。
我们的假设空间是线性函数,也就是说,x和我们对y的预测之间的关系具有形式 y ^ = f θ ( x ) = θ 1 x + θ 0 ŷ=fθ(x)=θ_1x+θ_0 y^=fθ(x)=θ1x+θ0。这个假设空间由两个标量参数化, θ 0 , θ 1 ∈ R θ_0,θ_1∈ℝ θ0,θ1∈R,即直线的截距和斜率。在本书中,我们将使用 θ θ θ来指代正在学习的任何参数。在这种情况下,我们有 θ = [ θ 0 , θ 1 ] θ=[θ_0, θ_1] θ=[θ0,θ1]. 学习包括找到这些参数的值,以最大化目标。
我们的目标是,预测应该是最小二乘意义上的近地面真实目标,也就是说, ( y ^ ( i ) − y ( i ) ) 2 (ŷ^{(i)}-y^{(i)})^2 (y^(i)−y(i))2对于所有的样本应该是最小的。我们将此目标称为L2损失:
将使用 J ( θ ) J(θ) J(θ)表示所有训练数据点上的总目标,作为参数的函数;我们将使用L表示每个数据点的损失。也就是说,
完整的公式如下:
可以选择任意数量的优化器来解决这个问题。第一个想法可能是“尝试使用 θ θ θ一堆随机值,并返回使目标最大化的值。”事实上,这种简单的方法是有效的,但它可能会相当慢,因为我们是在盲目地寻找好的解决方案。更好的办法是利用搜索问题中的结构。对于线性最小二乘问题,微积分工具为我们提供了清晰的数学结构,使求解优化问题变得容易,正如我们接下来所展示的那样。
从微积分中,我们知道,在函数 J ( θ ) J(θ) J(θ)相对于变量θ的任何最大值或最小值处,导数我们试图找到目标 J ( θ ) J(θ) J(θ)的最小值:
公式可以重写为:
其中
这里解释下为啥可以这么搞。因为在矩阵计算中,矩阵的平方就等于矩阵的转置乘以矩阵本身,而在平方下,减法的位置互换对结果没影响,因此可以达到重写公式的结果。
J是一个二次方程,它的导数为0时,是全局最小点。因此,我们可以通过找到导数为零的点来求解使J最小化的 θ ∗ θ* θ∗。求导如下:
将这个导数设置为零,求解θ*:
θ*定义了我们数据的最佳拟合线,这条线可用于预测x的未来观测值的y值
现在可以将整个线性最小二乘学习问题总结如下:
在这些图中,我们有时会仅用 L L L来描述目标,在这种情况下,意味着
7.2 示例2:程序实例
在另一端,我们有所谓的程序归纳,这是最广泛的学习算法类别之一。在这种情况下,我们的假设空间可能是所有Python程序。让我们对比一下线性最小二乘法和Python程序归纳法。图9.6显示了线性最小二乘法的样子。
图中显示了解决相同问题的Python程序归纳。在这种情况下,学习函数是一个将x映射到y的Python程序。学习包括搜索所有可能的Python程序的空间(在某个最大长度内)。显然,这是一个比仅仅找到两个标量困难得多的搜索问题。在第11章中,我们将看到使用过于强大的假设空间的一些陷阱,而使用更简单的假设空间就可以了。
7.3 示例3:分类和Softmax回归
计算机视觉中的一个常见问题是识别对象。这是一个分类问题。我们的输入是图像x,我们的目标输出是类标签y(图9.8)。
我们应该如何将这项任务表述为一个学习问题?第一个问题是,我们如何表示输入和输出?表示图像非常简单;正如我们在本书其他地方看到的,它们可以表示为表示红绿蓝颜色的数字数组: x ∈ R H × W × 3 x∈ℝ^{H×W×3} x∈RH×W×3,其中H是图像高度,W是图像宽度。
我们如何表示类标签?事实证明,一个方便的表示方法是让y是K维向量,对于K个可能的类,如果y表示类K,则 y k = 1 y_k=1 yk=1,否则 y k = 0 y_k=0 yk=0。这种表示称为独热编码,因为向量中只有一个元素处于开启状态(“热”)。
每个类都有一个唯一的热点代码。我们很快就会明白为什么这种表述是有意义的。热点代码是我们正在学习的函数的目标。我们的目标是学习一个函数 f θ f_θ fθ,该函数输出 ŷ与单热代码匹配的向量,从而正确地对输入图像进行分类。
一个代表K=5个不同类的独热编码示例:
接下来,我们需要选择一个损失函数。我们的第一个想法可能是,我们应该尽量减少错误分类。这相当于所谓的0-1损失:
其中𝟙是指标函数,当且仅当其参数为真时,其计算结果为1,否则为0。不幸的是,最小化这种损失是一个离散的优化问题,而且是NP-hard 的。相反,人们通常使用交叉熵损失,它是连续的和可微分的(使其更容易优化):
考虑这一点的方法是,k应该表示我们认为图像是k类图像的概率。在这种解释下,最小化交叉熵可以最大限度地提高我们模型预测下地面真实观测y的对数似然性。
为了使这种解释有效,我们要求ŷ表示概率质量函数(pmf)。在K个类上的pmf p被定义为具有[0,1]范围内元素的K维向量,其总和为1。换句话说,p是(K-1)-单纯形上的一个点,我们将其表示为 p ∈ K – 1 p∈K–1 p∈K–1。
(K-1)-单纯形,△K-1,是所有元素之和为1的K维向量的集合。K维一维热码存在于△K-1的顶点上。
为了确保我们学习到的函数 f θ f_θ fθ的输出具有这样的性质,即 f θ ∈ K – 1 f_θ∈^{K–1} fθ∈K–1,我们可以分为两个步骤:(1)首先应用函数 z θ : X → R K zθ:X→ℝ^K zθ:X→RK。(2) 然后将输出压缩到[0,1]范围内,并将其归一化为1。一种流行的挤压方式是通过softmax功能:
使用softmax是一种建模选择;我们可以使用任何函数来压缩一个有效的pmf,即一个非负向量,其总和为1。
z中的值称为logits,可以解释为每个类的非标准化对数概率。现在我们有了,
下图显示了在训练期间处理一张鱼的照片时变量的样子。
该预测将大约40%的概率放在真实类别上,“guitarfish”,因此我们与理想预测相差60%(由红色条表示;理想预测将使真实类别的概率达到100%)。我们的损失为-log 0.4。
这个学习问题也称为softmax回归,可以总结如下:
Softmax回归只是对分类问题建模的一种方法。对于如何将输入数据映射到类标签,我们本可以做出其他选择。
注意,我们只部分指定了假设空间,未指定优化器。这是因为softmax回归是指具有这种一般形式的整个学习方法家族。这就是我们根据前面描述的三个关键要素来概念化学习问题的原因之一:通常可以单独开发它们,然后混合搭配。
8 Learning to Learn
Learning ,也称为元学习,是学习的一种特殊情况,其中假设空间是学习算法。
回想一下,学习者根据问题的过去实例进行训练,以产生一种可以解决问题未来实例的算法。元学习的目标是处理我们将遇到的未来问题本身就是学习问题的情况,例如“找到这些数据点的最小二乘线拟合”。为此进行训练的一种方法是举例。假设我们得到以下{input,output}示例:
这些是执行最小二乘回归的示例;因此,学习者可以通过学习执行最小二乘回归来拟合这些例子。
请注意,最小二乘回归并不是适合这些例子的唯一解决方案,使用其他方法可能会得出一个同样适合的不同解决方案。
由于最小二乘回归本身就是一种学习算法,我们可以说学习者学会了学习。我们在本章开始时说学习是一种元算法:它是一种输出算法的算法。Metalearning是一种元算法,我们可以通过在学习器上添加另一个外循环来可视化它,如图9.10所示。
请注意,您可以递归地应用这个想法,构建元-元-元-…-元学习器。人类至少要完成这一过程的三个层次,如果不是更多的话:我们已经进化到在学校里被教导如何自己快速学习。
根据我们目前的定义,进化是一种学习算法。
9 总结
学习是一种非常通用和强大的解决问题的方法。它将数据转化为算法。在这个大数据时代,学习往往是首选方法。它是几乎所有现代计算机视觉系统的主要组成部分。