---
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: 200
range_count: 10
html_url: "https://workshop.closeclaw.top/api/ai/read/cf76bc49-7e9b-4f42-bee8-3050a9fb9feb?start=200&limit=10"
markdown_url: "https://workshop.closeclaw.top/api/ai/read/cf76bc49-7e9b-4f42-bee8-3050a9fb9feb.md?start=200&limit=10"
previous_url: "https://workshop.closeclaw.top/api/ai/read/cf76bc49-7e9b-4f42-bee8-3050a9fb9feb.md?start=190&limit=10"
next_url: "https://workshop.closeclaw.top/api/ai/read/cf76bc49-7e9b-4f42-bee8-3050a9fb9feb.md?start=210&limit=10"
---

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

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

## PDF_PHYSICAL_PAGE_INDEX=200 | PRINTED_PAGE=185

从图 6-5 中可以看出，不论机器学习的训练过程要经过哪些步骤，每个步骤的作用是什么，对训练结果而言，最终目的都是获得一个高度拟合真实世界的判别模型。这里首先要弄清楚训练的产物，即所谓的“判别模型”究竟是什么。

从形式上说，判别模型可以简单地理解为一个可被计算的、有明确输入和输出结果的方法或函数，这个函数可能有科学含义，也可能没有任何含义，可能用于决策，也可能用于预测。通过机器学习训练得出的模型，有可能是可解释的，人类可以从模型中得知一些之前并不知道，被计算机从数据中挖掘出来的新规律、新知识。这种模型不仅对计算机有意义，也扩展了人类知识的范围。当然，根据我们前面的讨论，学习、训练得到的模型更可能是一个人类无法解释的黑盒，这样的模型并不包含什么严谨的逻辑规律，只是单纯对真实世界的模拟，计算机只要照着这个模型去执行，就能够把输入给模型的自然界的信息，通过映射得出该信息所隐含的某些特征，这些特征决定了输入数据属于哪个分类，或者对应哪个指标。举个例子，如果把模型看作一个决策函数“f（x）”，它应该可以完成如图 6-6 所示的映射。

第 6 章 机器学习概览

185

## PDF_PHYSICAL_PAGE_INDEX=201 | PRINTED_PAGE=186

本节的标题是机器学习的一般过程，也许读者看到这个过程后，会误认为机器学习的步骤似乎是有迹可循、有律可依的，从数据清洗、特征提取，到模型选择，只要按部就班地跟着操作，就能得到一个能映射真实世界的模型。这完全是一种错觉，机器学习解决问题的过程是充满灵活性的，从如何把问题设计出来，把现实世界中的问题提炼成一个机器学习处理的问题开始，就需要处理者对问题本身有深刻的洞察才行。数据清洗、特征筛选、模型选择、模型优化、模型验证这些步骤，都伴随着好坏优劣的价值判断，这些判断不存在统一的标准和方法，均需要处理者深入具体问题，甚至需要不断尝试才能得出满意的结果。目前的机器学习理论距离实现自动化，不再需要人类去参与的算法，还是相当遥远的。

6.6.2 样本和样本空间

训练过程的第一步是确定建模的训练样本，本实战中建模的数据来源是邮件服务商已有的邮件服务器中的电子邮件，每一封参与训练的电子邮件都可以被视为一个训练“样本”（Instance）。样本是一种包含了若干关于某些事实或者对象的描述的数据结构，譬如，“邮件的发件人叫‘周志明’”是一个描述。再如，“这一封邮件是垃圾邮件”或者“这封电子邮件不是垃圾邮件”也是一个事实描述。不过，这样的描述已经是直接的结论了，不需要任何其他处理就能完成邮件分类，也根本不需要用机器学习来解决。对于需要用到机器学习来解决的问题，样本描述的事实通常都是间接的、隐晦的，很多情况下甚至无法用明确的语言描述出这些属性与最终结论有什么联系，这种描述某个隐含事实的信息，被称为样本的“属性”（Attribute）。每个样本应当由若干个属性所组成，样本的属性也经常被称作样本的“特征”（Feature），譬如一封电子邮件的特征可能是下面这样的：

186

第三部分 第三波高潮

## PDF_PHYSICAL_PAGE_INDEX=202 | PRINTED_PAGE=187

$$
\begin{array} { r l r l r l } & { \mathbb { H } | \mathfrak { s } / 4 \mathbin { \stackrel {  } { \partial } } \mathbin { \mathbb { R } } } & & { = } & & { 1 2 8 \mathrm { K B } } \\ & { \mathbin { \ddot { \mathfrak { R } } } | \dag \bigwedge \mathbin { \ddot { \mp } } \mathbin { \ddot { \mathfrak { R } } } } & & { = } & & { \frac { \underline { { \mathfrak { s } } } } { | \mathfrak { s } | } \mathbin { \ddot { \overline { { \mathfrak { s } } } } } \mathbin { \lrcorner } \sharp \mathrm { H } \mathrm { H } \dot { \mathcal { P } } } \\ & { \qquad \quad \cdots } & & { } \end{array}
$$

一般来说，参与训练的每个样本的特征应当具备一致性，这是指每个特征在不同样本中所表示的含义是一样的，但并不是要求每个样本都具有全部的特征，允许有特征缺失。一个特征又由特征的含义和值构成，通常，对于每个样本中相同含义的特征，它的值应该具有一样的数据结构和一致的度量单位，如果不是，则应该在数据预处理阶段将其转换成一样的数据结构。在机器学习训练过程中，由于训练样本终归要交付给计算机去运算，因此更倾向于使用计算机可以理解的特征值来参与模型训练，典型的如“3、2、128KB、高信用用户”这样的整型、浮点型和枚举型数值，如果不是这样的特征值，则在数据预处理阶段就要进行归一化处理，转变为无量纲表达式。

接下来我们要接触到一个稍微抽象的概念：样本空间。请读者尝试着想象以下场景：假设每个样本都由收件人数量、邮件长度、附件数量三个特征构成，把这三个特征按照各个特征的数值大小各放在一条坐标轴上。这样，每个样本都将在这三条坐标轴构成的三维空间中对应唯一的一个点，我们再使用一条指向这个点的线段来表示每个样本，譬如“（收件人数量 =3、附件数量 =2、邮件长度 =128KB）”这个样本，就将构成如图 6-7 所示的坐标。

第 6 章 机器学习概览

187

## PDF_PHYSICAL_PAGE_INDEX=203 | PRINTED_PAGE=188

如果用数学语言来表述，则这种指向空间中的某个点，带有方向和大小的量在线性代数中被称为“向量”（Vector），由向量组成的空间被称为“向量空间”（Vector Space，也叫“线性空间”）。在机器学习中，为了便于计算机处理，使用一系列向量来代表参与训练的每一个样本，在这个语境中，我们把这种由N个不同特征构成坐标轴的N维（有多少个特征就有多少维度）空间称为“样本空间”（Instance Space）或者“特征空间”（Feature Space）。相应地，每一个样本被称为该空间上的一个“特征向量”（Feature Vector）。

一旦把样本的表示形式从语言文字转化为数学中极为常见的向量之后，我们瞬间就拥有了大量的数学工具，如向量运算、矩阵等来处理这些样本了，数学是现实世界与计算机沟通的最好的桥梁。现在，上面实战中输入的训练数据已经从一封封存储在数据库中的电子邮件样本，经人工提取出三个关键特征（即“收件人数量”“邮件长度”“附件数量”这三个特征，这是笔者随便选的，真正如何进行特征选择是机器学习的关键内容之一，稍后将会详细介绍）后，转化成了一组由N个特征向量组成的集合：

$$
T = \{ ( x _ { 1 1 } , x _ { 1 2 } , x _ { 1 3 } ) , ( x _ { 2 1 } , x _ { 2 2 } , x _ { 2 3 } ) , ( x _ { 3 1 } , x _ { 3 2 } , x _ { 3 3 } ) , \cdots , ( x _ { n 1 } , x _ { n 2 } , x _ { n 3 } ) \}
$$

在数据收集阶段，根据不同的学习任务，可能仅仅收集样本本身就足够了，也可能除了收集样本外，还要给样本附带上一项“标记”（Label）信息，标记描述了这个样本所代表的隐含事实或者对象，也就是“结论”。在本实战中，样本是邮件的全部数据，对应的标记信息就是“此邮件是否垃圾邮件”这个事实的描述。当样本带有了标记信息之后，这两项信息的组合就被称为一个“样例”（Example）。

本实战的电子邮件分类系统是一个经典的分类任务。分类任务通常使用监督学习来完成，即在样例数据上完成模型训练的任务。为此，我们准备邮件样本时需要进一步给出标记信息，把样本变成样例。在训练集向量中，加入y 项来表示标记信息，参与训练的样例集合以如下形式来表示：

$$
\begin{array} { r l } { T } & { { } \{ ( x _ { 1 1 } , x _ { 1 2 } , x _ { 1 3 } , y _ { 1 } ) , ( x _ { 2 1 } , x _ { 2 2 } , x _ { 2 3 } , y _ { 2 } ) , ( x _ { 3 1 } , x _ { 3 2 } , x _ { 3 3 } , y _ { 3 } ) , \cdots , ( x _ { n 1 } , x _ { n 2 } , x _ { n 3 } , y _ { n } ) \} } \end{array}
$$

6.6.3 任务类型

数据收集所获得的是“样本”还是“样例”，很大程度上决定了机器学习能够完成哪些工作任务。如果仅仅以一组样本来构造训练集，那么这种机器学习模型通常会被用于“聚类”（Clustering）方面的任务。聚类是指机器通过训练集中获得的特征，自动把输入集合中的样本分为若干个分组（Cluster，中文为“簇”，此处读者将其理解为“分组”即可），使得每个分组中存放具有相同或相近特征的样本。举个生活中的例子，现在像淘宝、京东这样的购物网站，会根据每个用户的年龄、地域、消费行为等特征，刻画出用户消费的用户画像模型，划分出不同的用户群体，以便采取对应的广告和商品推荐策略，这就是一种聚类分析。聚类通常是为了发现数据的内在规律，将同类的数据放到一起，为进一步深入分析和处理奠定基础。人们通常将以样本数据作为训练集的机器学习过程称为“无监督学习”。

188

第三部分 第三波高潮

## PDF_PHYSICAL_PAGE_INDEX=204 | PRINTED_PAGE=189

而像邮件过滤系统的例子这样，以若干个样例来构成训练集，那机器学习任务就通常是“分类”（Classification）和“回归”（Regression）任务。一般来说，既然已经有标记信息了，通常就没有必要再专门去做聚类了，因为标记所带的信息可以作为聚类的直接依据。

“分类”和“回归”都是典型的机器学习任务类型，总体而言，分类和回归都是根据样例训练集中得出的历史经验来推断新输入模型的样本是否属于某一类，或者某种隐含特征的强度如何，使得机器可以代替人工，自动找出新输入数据的标记信息。分类和回归的主要差别是回归做的是定量分析，输出的是连续变量的预测，而分类做的是定性分析，输出的是离散变量的预测。以本实战为例，如果我们期望判别垃圾邮件这个任务的输出是一封邮件“是”或者“不是”垃圾邮件，那便是一个分类任务，而如果我们期望输出是一封邮件“属于垃圾邮件的概率”是多少，那就属于一个回归任务。分类任务的目的一般是寻找决策边界，用于决策支持；回归任务的目的大多是找到与事实相符的最优拟合，用于事实模拟。这类以样例数据作为训练集的机器学习过程被称为“监督学习”。

既然这里已经提到监督学习和无监督学习的概念了，笔者顺便也介绍一下机器学习中流行的另一个任务类型—“强化学习”，这是目前以行为主义学派思想作为指导的机器学习的任务类型。无论训练集是由样本还是样例构成的，监督学习和无监督学习都是从历史经验中学习，强化学习则不依赖于历史经验，而是一种基于环境对行为收益的评价来改进自身的模型。这里仍通过一个具体的例子来解释：强化学习的学习过程就好比是婴儿呀呀学语，婴儿出生时脑海中对人类语言是一无所知的，在语言学习过程中，婴儿最初发出的是完全随机的声音，譬如，婴儿肚子饿时，他发出的声音恰巧被大人注意到，并且猜测到了他发声的意图是表达“我饿了”这个信息，然后给予喂食的话，下次婴儿再感到饥饿时会继续发出类似的声音。这个学习过程需要的不是“历史数据”，而是一位“裁判”或者“老师”，用来给行为进行打分评价，并对正确的行为给予激励，对错误的行为给予惩罚。

第 6 章 机器学习概览

189

## PDF_PHYSICAL_PAGE_INDEX=205 | PRINTED_PAGE=190

许多著名的人工智能项目都是在强化学习的基础上实现的，如开发出AlphaGo Zero 围棋程序的 DeepMind 团队在与李世石对弈之后，就曾经宣布为了获得更好的效果，将放弃所有人类对弈图谱，抛弃全部历史数据和原本的监督学习方法，从零开始，完全以机器相互对弈的方式训练新版 AlphaGoZero。由于棋盘上每步落子是否正确，是可以从最终的结果得出的，所以新版AlphaGo Zero 的训练过程的本质是一个强化学习过程。此外，现在许多机器学习任务，从玩游戏到无人车驾驶的训练等也都是基于强化学习来完成的。

6.6.4 数据预处理

介绍完样本、样例和机器学习的主要任务类型之后，我们的邮件过滤系统就可以正式进入训练阶段了。这个阶段要做的第一件事是“对数据进行预处理”（Data Preparation），即统一数据度量标准和去除噪声，目的是保证数据正确，统一对数据的描述形式，并且数据描述中包含对结果有关键影响的特征，以便后续在建立模型、优化模型等步骤中得到高质量的信息输入。保证数据正确的部分被称为“数据清洗”（Data Cleaning），而保证数据描述恰当的部分被称为“特征选择”（Feature Selection）。

“数据清洗”这个名字本身就是一个很形象的比喻，在实践中，样本数据可能来源于数据库、传感器、摄像头等多种测量设备，人们可能以各种不同的方法去收集数据，如此导致的结果是样本本身或者某个特征值会包含一定的误差、缺失或者错误的数据，我们称这种现象为数据里含有“噪声”

190

第三部分 第三波高潮

## PDF_PHYSICAL_PAGE_INDEX=206 | PRINTED_PAGE=191

（Noise）；还有另一个问题是不同输入来源收集到的数据在数据结构、特征值的单位、表示精度等方面存在不一致的情况，此时我们就要对数据进行“规范化”（Normalization）处理，保证它们在结构上一致，去除数据的单位限制，将其转化为无量纲的纯数值，以便对不同单位或量级的指标进行比较和加权处理。

机器学习中的数据清洗与传统数据挖掘中的数据清洗并没有什么不同，根据需要，大致会进行以下操作，以解决原数据中不完整、含噪声、不一致的问题，只有高质量的数据才能带来高质量的预测和决策结果：

● 数据集成，将从多个数据源获得的数据结合起来，形成一致的结构，存放在一个一致的数据存储中。

● 基础清洗操作，典型的如对数据进行基本的去重过滤操作。

● 分层采样，对于样本数据较多、各样本之间差异较大的情况，通过不同的方法保证采样平衡，抽出具有代表性的调查样本，增大各类型样本间的共同性。

● 数据分配，将数据集按照一定比例分为训练集、验证集、测试集等几部分，后续我们讲测试验证的时候会介绍这些内容。

● 数据规范化，譬如将量纲表达式转化为纯量表达式（可简单理解成把数据“去掉单位”，譬如 10 厘米和 1 分米，归一化之后是一样的），然后缩放到同一数量级（典型的如 0 到 1 之间），提升指标之间的可比较性。

● 平滑化，缩小数据在统计下的噪声差异，一种典型的平滑化操作是分箱，实际上就是按照特征值把样本划分到不同的子区间，如果一个特征值处于某个子区间内，就把该特征值放到这个子区间所代表的“箱子”内。在处理数据时采用特定方法分别对各个箱子中的数据进行处理。

● 数据填补，典型的如 ID 值生成、使用统计算法替换缺失的观察值等。

……

关于上面这些数据清洗操作具体如何进行，囿于篇幅，就不详细展开了，读者可自行查阅数据挖掘方面的书籍。预处理过程中与机器学习关系更密切的步骤是“特征选择”。所谓特征选择，是指我们应该放弃对结果影响轻微的特征，挑选出对结果有决定性影响的关键特征，作为建模阶段的模型的输入。

第 6 章 机器学习概览

191

## PDF_PHYSICAL_PAGE_INDEX=207 | PRINTED_PAGE=192

为什么不能让样本的所有属性参与模型建造呢？如果实际情况与我们的实战案例一样理想化，只有三五个特征的话，那不做特征选择也是可行的。但是，现实中收集到的数据通常有几十个乃至更多的特征项，此时特征选择就是必不可少的。如果一个模型需要用到几十个特征作为参数，就意味着只有使用数十亿乃至更大规模的样本才有可能训练出理想的结果，这个比例听起来非常惊人，可只要按最简单的情况测算一下便可得出类似的结论：假如样本有 30个特征项，相当于样本空间中同时有 30 条坐标轴，即使每个特征项都是最简单的布尔类型（只有 true 和 false 两种取值），样本空间中不同的向量也有 2<sup>30</sup>种可能性，这已经超过 10 亿个取值了，我们需要多少训练数据才能在这样的样本空间中描绘出样本的分布特点呢？

从更一般的角度来看，模型的输入每增加一个特征，便给模型的决策函数引入了一个新的参数项，这会让决策函数所处的问题空间相应地提升一个维度，在训练集数据量相同的情况下，空间的维度越多，数据就越稀疏，空间的维度提升太快，可用数据就变得过于稀疏，而过于稀疏的数据会使其从大多数角度看都看不出相似性，因而平常使用的数据组织策略就变得极其低效，这个现象在机器学习中被称为“维度灾难”（Curse of Dimensionality）。

如果读者想象不出来维度升高导致数据变得稀疏的过程，不妨看看图 6-8，它反映了当样本空间从一维提升到三维，每种特征的训练数据均覆盖特征取值可能性的 50% 时，训练用的测试数据占整个样本空间的比重的变化情况。结论显而易见，比重会迅速下降，这就是维度灾难令训练数据变得稀疏的形象解释。

192

第三部分 第三波高潮

## PDF_PHYSICAL_PAGE_INDEX=208 | PRINTED_PAGE=193

为了获得在统计学上正确且稳定的结果，用来支撑这一结果的数据量通常要随着维度数的增加而呈指数级增长。单纯从算法角度而言，如果通过穷举的方式，增加特征带来的算法时间复杂度的增长也是指数级的。因此，特征选择一方面涉及可行性问题，我们通常没有足够多的训练数据支持那么多的特征；另一方面涉及执行效率的问题，哪怕我们有足够的数据，但是其中许多特征对结果的影响是微乎其微的，甚至是根本没有意义的，如果不对数据进行筛选，也会平白浪费许多训练时间，徒增模型计算的复杂度。

特征选择是“数据降维”（Dimension Reduction）的一种主要方法，另外一个主要的降维方法被称为“特征提取”（Feature Extraction），它与特征选择的区别是：特征提取是在原有特征的基础上创造出一些新的特征，如果创建了一个新的特征项，该特征的变化规律能够反映原来几个特征项的共同变化，那使用这个新特征项代替原来的几个特征项就实现了降维的目的；而特征选择只是在原有特征中选取最有用的特征，一般不会对特征值进行变换。

那应该以什么准则或方法去挑选“有用的特征”，即对结果有主要影响的关键特征呢？尽管科学不希望问题只能依靠人工来解决，但是自动降维算法依然无法取代人类经验甚至直觉在特征选择中的作用。如前文所言，机器学习目前仍无法脱离人类的先验知识、灵光一现的顿悟甚至运气因素，这也是“数据科学家”这类职业在近年来受重视的原因。通常来说，数据科学家至少会从两个大方向上考虑如何选择特征：

1）特征的离散度：如果一个特征不发散，譬如方差趋于 0，也就是各个样本在这个特征上基本没有差异，则这个特征对于样本的区分就没有什么意义。

2）特征与目标的相关性：与目标相关性高的特征，更能作为分类决策的依据，应当优先选择，这里的关键是如何判断出特征与目标的相关性。

从这两个维度出发，可以总结出几种常用的人工特征选择方法：

● 按照发散性或者相关性对各个特征进行评分，设定阈值来选择特征。这种方法在第 3 章介绍决策树的时候提过，信息熵、基尼不纯度都可以作为特征的选择依据。

● 通过试错来选择特征。具体做法是：每次选择若干特征，或者每次排除 若干特征，然后根据模型的性能进行评分，多次选择后留下能使模型性 能达到最优的特征。

第 6 章 机器学习概览

193

## PDF_PHYSICAL_PAGE_INDEX=209 | PRINTED_PAGE=194

● 通过本身具备对特征相关性进行评分的能力的模型和策略算法来选择特征。具体做法是：先嵌入某个小规模的机器学习算法和模型进行训练，例如随机森林和逻辑回归算法等都能对样本的特征权值进行打分，得到各个特征的权值系数，根据系数从大到小选择特征。

● 通过 $\mathrm { L } _ { 1 }$ 正则项来选择特征。 $\mathrm { L } _ { 1 }$ 正则方法本身具有稀疏解的特性，因此天然具备特征选择的能力，但应注意，没有被 $\mathrm { L } _ { 1 }$ 选择的特征不代表不重要，原因可能是两个具有高相关性的特征只需保留一个。这里没有数学基础的读者可能会疑惑 “ $\mathrm { L } _ { 1 }$ 正则项”是什么东西，稍后我们讲正则化的时候会重点提到它。

……

数据降维严格来说并不是机器学习中的问题，而是属于数学的范畴，在数学上已经有很多成熟的自动降维算法了，如“奇异值分解”（Singular ValueDecomposition，SVD）、“主成分分析”（Principal Component Analysis，PCA）等。这类算法能够把数据中相似性高的、信息含量少的特征给自动剔除掉，也能够实现数据降维，不过实际中要解决问题，往往必须考虑具体模型的目标和这个领域中的先验知识，这时候采用自动降维算法和人工筛选特征相互配合的方案才是比较合适的。

本次实战我们还会借助 $\mathrm { L } _ { 1 }$ 正则项来自动选择特征，对于抱着科普目的来阅读本书的读者来说，本节出现的一系列数学和数据科学的专业名词可能会带来一些阅读障碍。而且 $\mathrm { L } _ { 1 }$ 正则项的原理介绍要以模型与现实的拟合程度为基础，不经过建模阶段，没有讲清楚欠拟合、过拟合这些问题，就更会陷入用一系列普通读者不理解的专业名词去解释另外一个专业名词的困境之中。为了使实战顺利进行，不妨先假设我们已经知道了决定一封邮件是否属于垃圾邮件的最关键特征，即表 6-1 中的收件人数量、邮件长度等特征。本节先把建模这个阶段讲完，下一节再回过头来说说如何借助 $\mathrm { L } _ { 1 }$ 正则项挑选出这些特征。

194

第三部分 第三波高潮

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