---
schema_version: "library-reader-v1"
source_type: "original_book"
title: "智慧的疆界 从图灵机到人工智能"
author: null
edition: null
publisher: null
year: null
isbn: "9787111778004"
library_document_id: "cf76bc49-7e9b-4f42-bee8-3050a9fb9feb"
source_sha256: "a6e4d0c30c2781e62277891f79f33c2f62c58ae8db77453807229919f720b432"
pdf_physical_page_count: 456
pdf_physical_page_index_base: 0
range_start: 220
range_count: 10
html_url: "https://workshop.closeclaw.top/api/ai/read/cf76bc49-7e9b-4f42-bee8-3050a9fb9feb?start=220&limit=10"
markdown_url: "https://workshop.closeclaw.top/api/ai/read/cf76bc49-7e9b-4f42-bee8-3050a9fb9feb.md?start=220&limit=10"
previous_url: "https://workshop.closeclaw.top/api/ai/read/cf76bc49-7e9b-4f42-bee8-3050a9fb9feb.md?start=210&limit=10"
next_url: "https://workshop.closeclaw.top/api/ai/read/cf76bc49-7e9b-4f42-bee8-3050a9fb9feb.md?start=230&limit=10"
---

# 智慧的疆界 从图灵机到人工智能

> 页码规则：PDF_PHYSICAL_PAGE_INDEX 是从 0 开始的权威文件物理页索引；PRINTED_PAGE 是页面中识别出的印刷页码，可能为空，二者不得混用。

## PDF_PHYSICAL_PAGE_INDEX=220 | PRINTED_PAGE=205

线性支持向量机是一种划分样本空间的方法，而这句话所说的“划分样本空间的方法”，在这个机器学习案例中可表述得更为具体：我们找到了一种关于垃圾邮件的判别方法，一旦输入了邮件的“邮件长度”和“收件人数量”两项信息，该方法就能无歧义地确定代表判定结果的点所在的位置和类型，换言之，得到这封邮件的分类结果。这种方法就是我们通过机器学习得到的一个能解决问题的模型。

一个能解决实际问题的机器学习模型的输出应该符合该学习过程中训练集里的已知样例，满足这个条件的模型应该有无穷多个。在机器学习的定义中介绍过，模型是机器学习过程的输出结果，通常由一组可被计算的条件概率分布或决策函数构成。所有可能被选择的函数，就被称为该模型的“假设空间”（Hypothesis Space）。选择模型便是采取一种适当的学习策略（如支持向量机），在大量数据的支持下，从假设空间中筛选出一个最恰当的模型。

至于如何确定最恰当模型的标准、用何种方法来得到这个最恰当的模型，就回到各个学习策略对应的损失函数、损失函数的意义以及如何解决和优化损失函数等问题上。本节提到的“在空间中插一根‘棍子’然后扩大其宽度直至触碰到两侧的支持向量”，只是一种形象化的思路介绍，如何使其在数学中可计算、在计算机上可执行，还是必须转化为找到一个优化算法，使得分界线距离两侧支持向量的边距最大这个问题，用数学语言来表述就是支持向量机的Hinge 损失函数的几何意义，一旦优化得到了 Hinge 损失函数的数值解，便得到了“最恰当的模型”。

6.6.7 泛化、误差及拟合

至此，我们似乎已经找到了一个可以区分是否垃圾邮件的模型，但是该模型只是排除了许多实际必须考虑的情况之后的理想状态的模型。接下来，笔者要把邮件过滤系统从教学案例向现实稍微推进一步：前面的例子仅使用“邮件长度”和“收件人数量”两个特征就把垃圾邮件和非垃圾邮件从训练集的所有邮件中划分出来了，实际上这是笔者精心安排的训练数据，现实中的邮件分类问题肯定不可能如此简单，否则大家就不会今时今日还不断受到垃圾邮件的骚扰了。

第 6 章 机器学习概览

205

## PDF_PHYSICAL_PAGE_INDEX=221 | PRINTED_PAGE=206

一种常见的现实情况是大多数样本都与模型判定结果的分布一致，但是有少数样本“特立独行”，不遵循模型的分布规律。如图 6-19a 所示，两个空间中各有一个点“跑”到了对方一侧的空间中，这样我们就没有办法用简单的、线性的分类器把所有样本都完美划分开了。

如果要将所有数据都划分清楚，如图 6-19b 所示是一种可能的划分方式。现在请读者思考一个问题：图 6-19a 采用简单的线性划分方式，但在训练集中有 2 个错误的样本，相比之下，图 6-19b 的图形更复杂，采用非线性的划分方式，但是在训练集中可以达到 100% 的正确率。那么，左右两边哪种模型的性能更好？

仅对训练集里的数据来说，毫无疑问右边模型的性能好，因为这个语境中的性能就是指正确率，都达到 100% 了肯定是最好的。但是，现实中我们通常应该选择左边的模型，它的性能更好的可能性更大。度量机器学习性能的最主要指标就是在测试集或新输入数据上得出的模型输出值与实际值的差距，这里必须特别强调，度量的对象应该是“测试集或新输入数据”而不是“训练集”。模型对训练集拟合得再好，但对新样本适应效果不佳，那也是毫无意义的。

我们将“泛化能力”（Generalization Ability，就是机器学习算法对新样本的适应能力）作为衡量机器学习模型性能的关键指标，性能良好的模型，不仅输出与实际差距更小，而且对满足相同分布规律的、训练集以外的数据也有良好的适应能力。

有了“泛化”的概念之后，我们再回来更精确地定义前文提到的“模型输出值与实际值的差距”中的“差距”和“对新样本的适应能力”中的“适应能力”这两个名词，这是稍后解决“如何判断某个模型是否合适”问题的关键。

206

第三部分 第三波高潮

## PDF_PHYSICAL_PAGE_INDEX=222 | PRINTED_PAGE=207

我们之前所说的“差距多少”或者“适应能力高低”，是指模型输出值与实际值之间的“误差”（Error）的大小，“误差”是一个在统计学中被精确定义的概念，它在机器学习这个语境中更加强调对训练集外而不是训练集中数据的泛化能力，实际是“期望泛化误差”的简称。误差通常有三个来源，即偏差、方差和噪声，先不去管这三个名词各是什么意思，我们知道误差就是这三者的总和即可。误差可以使用以下公式来表达：

$$
{ \frac { \varkappa } { \varkappa } } { \frac { \varkappa } { \Xi } } \left( \mathrm { E r r o r } \right) = \left. { \frac { \varkappa } { \varkappa \Psi } } { \frac { \varkappa } { \Xi z } } \left( \mathrm { B i a s } \right) + \mathcal { \breve { H } } { \frac { \varkappa } { \Xi z } } \left( \mathrm { V a r i a n c e } \right) + { \frac { \mathfrak { H } } { \sqrt { \pi } } } { \frac { \varkappa } { \bar { \jmath } ^ { \sharp } } } \left( \mathrm { N o i s e } \right) \right.
$$

这个公式可以用通俗的语言来解读：误差的存在，就意味着模型输出值与实际值不相同，原因可能是模型无法表示实际数据的复杂度而造成“偏差”（Bias）过大，也可能是模型对训练它所用的有限的数据过度敏感而造成“方差”（Variance）过大，还可能是训练集中存在部分样例数据的标记值与真实结果有差别（即训练数据自身的错误），产生的“噪声”（Noise）过多。要降低误差，获得更好的性能，就要降低这三个误差的来源因素。

一般而言，噪声不可避免，如何找出并消除噪声数据在实际应用中很重要。误差体现了该学习问题本身的实现难度，而噪声是学习问题本身和样本数据来源受限造成的，无法人为控制。在给定了训练集的数据之后，我们只能从偏差和方差的角度来尽可能地减少误差。因此，在这个实战中，我们始终把噪声因素排除出去，假设样本数据完全符合真实结果的分布规律，而仅仅关注偏差和方差对误差的影响，接下来将分别解释偏差和方差的含义。

偏差是指根据训练集数据拟合出来的模型输出结果与样本真实标记的差距，通俗地说，偏差反映了模型在训练集上拟合得好不好，它的本质就是描述模型本身在训练集上的拟合能力。模型越复杂，引入的参数越多，偏差越小。单就偏差而言，图 6-19 右边的非线性划分的模型的偏差肯定比左边线性划分的模型的偏差要小。但是为什么我们还认为左边模型性能更好的概率较大呢？因为我们还必须要考虑方差这个因素。

方差是指给出同样数量但内容发生了变动后的样本数据所导致的模型性能变化。方差的本质是描述数据扰动对模型输出结果所造成的影响。如果我们想获得较小的方差，那就应该简化模型，缩减模型参数，降低模型的复杂度，这样才能够控制因样本数据变化而带来的扰动幅度，越精密复杂的模型，对输入数据的抗扰动能力就越差。

第 6 章 机器学习概览

207

## PDF_PHYSICAL_PAGE_INDEX=223 | PRINTED_PAGE=208

这里举个直观的例子来帮助大家理解，用射击比赛来类比偏差和方差对结果的影响。假设射击运动员在 10 环靶中只打到了 7 环，产生的 3 环的差距就是期望目标与实际目标的差距，也就是误差，这个误差产生的原因可能是他瞄准的时候没瞄好，本来就是朝着 7 环去打的，也可能是他瞄准的确实是 10 环靶心，但是手不够稳定，打到了 7 环上。这里“瞄不准，手很稳”的情况就相当于偏差大、方差小所构成的误差，而“瞄得准，手不稳”的情况就相当于偏差小、方差大所构成的误差。在这个例子中，偏差和方差对结果的影响，可以通过图 6-20 直观地看出来。

由偏差和方差的含义，我们可以感觉到它们本身是有潜在冲突的。给定一个学习任务，假设我们能够通过不同的训练程度来控制模型的复杂程度，在模型过于简单时，它的拟合能力不够强，训练数据的变化不足以使模型结果产生显著变化，无法通过样本的特征变化得到正确的学习结果，此时偏差主导了期望泛化误差，机器学习中将这种情况称为“欠拟合”（Underfitting），在某些资

208

第三部分 第三波高潮

## PDF_PHYSICAL_PAGE_INDEX=224 | PRINTED_PAGE=209

料中也称为“高偏差”（High Bias）。

随着训练程度慢慢加深，模型变得越来越复杂，参数也越来越多，它对训练集的拟合能力逐渐加强，训练数据发生扰动时就渐渐能被模型学习到了，这时方差在期望泛化误差中的占比逐渐加大，偏差的占比逐渐变小。

当训练程度刚好充足时，模型的拟合能力就处于在训练集数据支撑下可达到的最佳状态了，如果这时再进一步训练，继续把模型复杂化，那方差就会继续增大，逐步主导期望泛化误差，训练数据发生轻微扰动也会导致模型的输出结果发生显著的变化，这样，那些属于训练数据自身的并非所有数据共有的特性也都被模型学到，这时就会发生“过拟合”（Overfitting）现象，在某些资料中也称为“高方差”（High Variance）。由此可见，选择最优模型复杂度的一个最基本原则就是偏差和方差之和最小，即要同时避免发生因训练过少导致模型复杂度过低而欠拟合和因训练过度导致模型复杂度太高而过拟合的情况，此原则中的最优模型复杂度可以通过图 6-21 来体现。

理解了误差、偏差和方差的定义，我们就可以使用期望泛化误差来理解为什么本节开头会说“一般情况下，左边简单模型的性能会更好”了，从有限的训练样本（本实战中训练集只有 110 封邮件）来看，虽然非线性模型在训练集上做到了零偏差，但这种规模的训练集是无法支撑像图 6-19 右边那种复杂的非线性模型的。图 6-21 中最优模型复杂度与误差的关系也可以解释这个判断，图 6-19 右边复杂的非线性模型在实际情况中很可能处于图 6-21 中最右侧的位置，而左边的线性模型更可能处于图 6-21 的中间部分，更可能接近于最优的模型复杂度，而图 6-19 右边的复杂模型很可能已经发生过拟合现象了。

第 6 章 机器学习概览

209

## PDF_PHYSICAL_PAGE_INDEX=225 | PRINTED_PAGE=210

在机器学习里，欠拟合是相对容易处理的，通过增加样本、增加训练次数一般就可以解决，但是对过拟合的控制就相对困难了。这里采用的偏差和方差之间的关系去解释拟合程度只是一种直观的理解方式，在机器学习中有专门的“可近似正确学习理论”（Probably Approximate Correct Learnability）、“贝叶斯先验解释”（Bayes Prior Probability）等方式来解释或者理解模型拟合程度对最终效果的影响，尽管思路方法不一样，但是结果往往殊途同归，笔者这里就不再一一展开了。

6.6.8 正则化

偏差和方差的含义告诉我们，模型复杂度是高还是低，哪个性能更好并不能一概而论，这是一个需要权衡的问题。我们在选择模型复杂度时，常采用“奥卡姆剃刀法则”（Occam’s Razor，拉丁文为“lex parsimoniae”，含义为“简约法则”）<sup>○一</sup>作为指导决策的行之有效的经验法则。通俗地说，这个法则在机器学习领域中的含义是：“如果有两个模型可以产生相同性能的预测结果，那选择较简单的那个会更好。”

“奥卡姆剃刀法则”可以作为一条指导性的经验原则使用，但是有没有更具体的可以一步一步量化来确定模型复杂度的方法呢？答案是有。为了讲解如何找到合适的模型复杂度，笔者重新调整了电子邮件训练集的统计特征，令其更趋近于现实情况，现实中是不可能简单地采用线性分类器就把垃圾邮件和非垃圾邮件完美地区分开的。

调整后的数据分布如图 6-22 所示。笔者还额外给出了三种不同复杂度的可供选择的模型，再请读者思考一下：在这样的数据分布下，采用哪一种模型最合理呢？

210

第三部分 第三波高潮

○一 奥卡姆剃刀法则”由 14 世纪逻辑学家、圣方济各会修士奥卡姆的威廉（William ofOccam，约 1285—1349）提出。这个法则的思想为“如无必要，勿增实体”，即“简单即有效”。

## PDF_PHYSICAL_PAGE_INDEX=226 | PRINTED_PAGE=211

非垃圾邮件垃圾邮件

图 6-22 中列举了线性、规则圆形、不规则曲线三种模型，为了方便定量地讨论这个问题，笔者把上面三个模型对应的函数表达式也列出来，如下所示：

$$
{ \begin{array} { r l } & { 1 ) ~ f ( x ) = w _ { 0 } + w _ { 1 } x _ { 1 } + w _ { 2 } x _ { 2 } } \\ & { 2 ~ ) ~ f ( x ) = w _ { 0 } + w _ { 1 } x _ { 1 } + w _ { 2 } x _ { 2 } + w _ { 3 } x _ { 1 } ^ { 2 } + w _ { 4 } x _ { 2 } ^ { 2 } } \\ & { 3 ~ ) ~ f ( x ) = w _ { 0 } + w _ { 1 } x _ { 1 } + w _ { 2 } x _ { 2 } + w _ { 3 } x _ { 1 } ^ { 2 } + w _ { 4 } x _ { 2 } ^ { 2 } + w _ { 5 } x _ { 1 } x _ { 2 } + w _ { 6 } x _ { 1 } ^ { 2 } x _ { 2 } + w _ { 7 } x _ { 1 } x _ { 2 } ^ { 2 } + w _ { 8 } x _ { 1 } x _ { 2 } } \\ & { w _ { 8 } x _ { 1 } ^ { 3 } + w _ { 9 } x _ { 2 } ^ { 3 } + \cdots } \end{array} }
$$

部分读者可能又会有疑问：第 1、2 个表达式尚可以说是中学解析几何中直线和圆的标准方程形式，但对于第 3 个表达式，函数可能用到的数学工具很多，诸如 $\boldsymbol { \mathrm { e } } ^ { x }$ 、log x、ln x、1/x 这些都是很常见的，为什么这样一个复杂的曲线模型的函数必须是简单多项式的形式呢？这个问题的答案既复杂又简单，如果读者已经不记得高数课本中讲过的泰勒多项式展开的话，那就直接记住这个结论好了：所有光滑的函数图像都可以使用泰勒公式以任意精度去逼近、模拟，展开成泰勒多项式的形式。所以，不论现实中决策函数是由 $\boldsymbol { \mathrm { e } } ^ { x }$ 、log x、ln x、1/x、sin x 还是由其他任何形式的可导复杂项构成的，都可以使用简单多项式形式，以任意要求的精度模拟出来。

第 6 章 机器学习概览

211

## PDF_PHYSICAL_PAGE_INDEX=227 | PRINTED_PAGE=212

对以上三种不同的模型的函数表达式，f(x) 表示模型的输出结果， $x _ { 1 }$ 、x<sub>2</sub>表示向模型输入的特征参数，也就是实战中的“邮件长度”和“收件人数量”两个特征。模型训练过程中要求解的内容是找出 $w _ { 0 } ,$ $w _ { 1 }$ , $w _ { 2 } ,$ …这些多项式的系数，它们才是模型中的未知项，也是我们在机器学习过程中要获得的信息。

之前我们已经反复提及“模型复杂度”这个名词，但一直缺少一个严谨精确的定义，所谓“简单”“复杂”都只是定性的描述，我们能由经验得知，上面几个模型中，肯定是规则圆形的模型要比直线的模型复杂，不规则曲线的模型又要比规则圆形的模型复杂，但是究竟“复杂”了多少呢？这个定量的问题以前没有办法解释清楚。现在有了统一用多项式表示的模型决策函数后，就可以借助这种形式来定量比较模型的“复杂程度”了。在把模型进行泰勒多项式展开之后，它的复杂程度由两个因素决定：

● 模型多项式系数数量的多少，系数越少，相应地多项式项数就越少，意味着模型函数图像的曲线形状越简单。

● 模型多项式系数数值的大小，系数数值越小，意味着该多项式项对结果的影响越轻微，模型函数图像的曲线越平滑。

要选择适当的系数数量和数值大小，实质上等同于权衡模型复杂度，也就是在欠拟合和过拟合之间、偏差与方差之间进行权衡。只有恰当地做好权衡，才能令模型既能正确地识别样本，又不至于过度复杂，学习到属于训练集本身的特征。“控制模型复杂度”可以视为机器学习中除了“让模型的输出结果与实际结果差异最小”之外的第二重要的目标。这样，可以对机器学习的目标进行一点小调整，兼顾第二目标，不再仅仅关注损失函数本身的最小化，还要对模型中系数的数量和数值大小投入一定的关注度。接下来，我们将按照这个修正后的目标去训练模型。

212

第三部分 第三波高潮

## PDF_PHYSICAL_PAGE_INDEX=228 | PRINTED_PAGE=213

根据 6.6.5 节中对损失函数的介绍，机器学习的目标就是找到损失函数达到最小值时的参数值，机器学习所谓的“模型训练过程”，就是求其损失函数最小化参数解的过程。数学中对这种最小化求解运算专门定义了一个符号“ argmin<sup>○一</sup>”，表示“使得函数达到最小值时的变量取值”。我们现在引入这个符号，用数学和文字语言互相映照，来推导出监督学习的目标通式：

● 首先，我们选一组样例数据作为训练集，如果集合中样本的个数以 i 来表示的话，那么这个训练集中有 $\left\{ \left( x _ { i } , y _ { i } \right) \right\}$ 个样例。

● 然后，统计损失函数 Loss(y, f(x)) 在所有样本上的损失总和的最小值，即追求 $\sum _ { i } \mathrm { L o s s } ( y _ { i } , f ( x _ { i } ) )$ 最小化。

● 对于训练集中的每一个样例而言，x 和 y 分别是特征和标记，这些 x、y在训练阶段是已知的信息，未知的是函数的系数向量 w（因为多项式有多个系数，所以是系数向量），为了表示决策函数中的未知参数 w 会对结果产生的影响，我们可以将f(x<sub>i</sub>) 改写为 $f ( x _ { i } , \ w )$ 的形式，这样就明确了机器学习训练过程中，所求解的是损失函数达到最小值时系数向量 w的值。

最后，用数学语言来综合上面的文字描述，监督学习的目标可以表述成最小化损失函数，求解系数向量 w 的过程：

$$
\pmb { w } ^ { * } = \mathrm { \ a r g m i n } \sum _ { i } \mathrm { L o s s } ( y _ { i } , f ( x _ { i } , \pmb { w } ) )
$$

到这步已经体现了机器学习的主要目标，但如果仅以此损失函数最小化作为全部目标的话，当它达到最小值时，其结果几乎无可避免地一定会陷入过拟合的“泥潭”之中。因为如果只是把最优的模型衡量标准定义为在训练集上损失函数总和最小的话，那得到的肯定是一个精密复杂但极为脆弱的模型，这个能完全适应所有样本数据的模型在训练集的表现上肯定会优于一个鲁棒性强的简单模型，显然这样的模型并非我们想要的结果。

第 6 章 机器学习概览

213

○一 arg 是变元的意思，即自变量 argument 的英文缩写。argmin 即“求函数达到最小值时的变量值”。

## PDF_PHYSICAL_PAGE_INDEX=229 | PRINTED_PAGE=214

为此，在追求损失函数最小化之外，我们的最终目标还要再添加另外一个用于避免过拟合的第二目标，这个第二目标一般是以被称为“正则化项”（Regularizer）或者“罚函项函数”（Penalty Term Function，一般用“ Ω(w)”表示该函数，下文简称罚函数）的额外算子形式来体现的。这个算子的具体函数表达式稍后再谈，现在只把它看作一个抽象的函数符号。将它与损失函数联合相加，训练目标就不仅仅是损失函数最小化，而是追求与罚函数的总和最小，这才构成机器学习建模的完整目标。我们把形成的新函数称为训练模型的“目标函数”（Objective Function），如下所示：

$$
\boldsymbol { w } ^ { * } \operatorname * { a r g m i n } _ { \boldsymbol { w } } \sum _ { i } \operatorname { L o s s } ( \gamma _ { i } , f ( x _ { i } , \boldsymbol { w } ) ) + \mathcal { Q } ( \boldsymbol { w } )
$$

上面这个通式就是所有监督学习算法的通用形式，对于不同的学习算法来说，其差别只是选择的损失函数 Loss(x)、罚函数 Ω(w) 不同。

接下来我们要进一步厘清罚函数 Ω(w) 的表达式形式。“正则化项”或者“罚函数”这样的名词听起来挺抽象的，但只要从它们的作用去理解其含义就不困难了：罚函数存在的意义是为了避免目标函数变得过于复杂，进而导致模型陷入过拟合。前文提到，一个模型是复杂还是简单，取决于其表达式系数的数量和数值大小。由此可知，罚函数的目的是限制系数的数量和数值大小，通俗地讲，罚函数就是一个“参数数量越多、参数值越大，输出结果就越大的函数”。那如何把参数数量和数值大小与函数的计算结果联系起来呢？这就要先解决向量大小度量的问题，请读者先看看以下两个参数向量 $w _ { 1 }$ 、w<sub>2</sub> 到底谁大谁小：

$$
\pmb { w } _ { 1 } = ( 1 , - 4 , 3 , 1 0 , - 9 , 1 1 , 0 )
$$

$$
w _ { 2 } = ( 2 , 3 , - 5 , 7 , - 1 1 , 1 3 )
$$

不容易比较出结果吧？要解决这个问题，数学上已经有了成熟又严谨的办法可以参考。在机器学习领域，也使用了数学里“范数”（Norm）的概念来解决如何度量系数向量大小的问题，这直接关系到采用何种实现方式实现罚函数。

“范数”是一种具有“长度”概念的函数，广泛应用于线性代数、泛函分析等领域，它的作用是度量某个向量空间或矩阵中每个向量的长度或大小。范数必须满足非负性、齐次性和三角不等式，这方面的数学知识读者可以不去深究，只需要把它当作一种用于衡量向量大小的工具，知道我们要用它来度量参数向量即可。

214

第三部分 第三波高潮

下一段：[继续读取](https://workshop.closeclaw.top/api/ai/read/cf76bc49-7e9b-4f42-bee8-3050a9fb9feb.md?start=230&limit=10)
