# 5.1 机器学习与人工智能 (Machine Learning & Artificial Intelligence)

机器学习 (Machine Learning, ML) 的本质是根据数据做出决定，机器学习算法让计算机可以从数据中学习，然后自行做出预测和决定。

能够根据数据做出一定决断并不意味着它拥有和人类一般的智能 (Artificial Intelligence, AI)。ML 和 AI 经常混用，但计算机科学家通常认为前者是实现后者的技术之一。

## 5.1.1 分类器 (classifier)

本节以判断飞蛾是”月蛾”还是”帝蛾”为例，进行概念的简单讲解。这类问题称为「分类」 (classification)，用于解决分类问题的算法称为「分类器」 (classifier)。

### 决策边界 (decision boundaries)

许多分类器会将照片和声音中的「训练数据」(training data) 简化为「特征」(features)，以便于更好地进行 “分类” 判断的取值。其具体步骤如下：

（1）人类昆虫学家记录飞蛾的特征值和种类，进行「标记数据」(labeled data)。

![标记数据](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2FjS6ySvCnUycbRUzMtp7a%2F0.png?alt=media)

（2）将数据可视化形成「决策空间」(decision space)，使用机器学习算法找出区分飞蛾的最佳方式，确定「决策边界」 (decision boundaries)。

![决策边界](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2FJFrArDqQ6GCOgOxGpqkP%2F1.png?alt=media)

（3）根据实际数据与决策边界的误差值，绘制「混淆矩阵」(confusion matrix)。

![混淆矩阵](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2FWzb5USj5hGlwHjtG3iwB%2F2.png?alt=media)

决策边界的确定无法 100% 涵盖正确判断，机器学习算法的目的在于「最大化正确分类 + 最小化错误分类」。在上述训练数据中，所确认的决策边界平均识别准确率在 84%。

### 决策树 (Decision Trees)

将不认识的飞蛾测量特征并绘制到决策空间中，这种数据称为「未标签数据」(unlabeled data)，可以利用决策边界预测判断飞蛾种类。

![未标签数据](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2F7qWynSmSh3kfRV4xOruQ%2F3.png?alt=media)

将把决策空间切成几个盒子的简单方法可以用「决策树」(Decision Trees) 来表示，使用 if 语句写出代码就是生成决策树的机器学习算法。

![决策树](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2FTdbHliU1oL94I8Van3gd%2F4.png?alt=media)

决策树只是机器学习中的一个简单示例，如今有数百种算法存在且不断出现新算法。一些算法甚至用多个 “决策树” 来预测，计算机科学家称为 “森林” (Forests)。

也有不用树的方法，比如 “支持向量机” (Support Vector Machines)，本质上是用任意线段来切分 “决策空间”，线段可以是多项式或其他数学函数。

![支持向量机](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2FxvoLXc5QDNI4TtMZOQPN%2F5.png?alt=media)

机器学习算法会负责找出最好的线，最准的决策边界。增加至 3 个特征，我们还可以继续用 3D 散点图绘制出决策空间。

![3D散点图](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2FN91n5epJ1Lx4iRgee4AD%2F6.png?alt=media)

但当引入多个特征，就无法依靠人力在一个上千维度的决策空间里，为超平面(Hyperplane)找出一个方程了，但聪明的机器学习算法可以做到。

## 5.1.2 人工神经网络 (artificial neural networks)

“决策树”和”支持向量机”这样的技术发源自统计学，统计学早在计算机出现前就在用数据做决定，有一大类机器学习算法用了统计学方法。但也有不用统计学的算法，其中最值得注意的是「人工神经网络」(artificial neural networks)。

人类的神经元细胞利用电信号和化学信号来处理和传输消息，它从其他细胞 得到一个或多个输入，然后处理信号并发出信号，从而形成巨大的互联网络来处理复杂的信息。

人工神经元通过类似的方式，接收多个输入后整合并发出一个信号。其不适用电信号或是化学信号，而是使用数据堆叠成多层，形成神经元网络，故有此名。

![人工神经网络](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2FqLrTKvKiMv3p5e0YiHUe%2F7.png?alt=media)

仍以飞蛾为例，输入数据的特征依旧选定为 “重量” 和 “翼展” 作为第一层「输入层」(input layer) ，在输入层和输出分类结果的「输出层」(output layer) 之间存在「隐藏层」(hidden layer)。

隐藏层负责把输入变成输出，实际上用于判断分类。首先将输入数据乘以权重，求和后再进行偏差值处理（加减固定值），接着再用激活函数 (activation function) / 传递函数 (transfer function) 对输出结果执行最后一次数学修改。

![隐藏层处理](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2F95fO7G3DYscXqy10mt93%2F8.png?alt=media)

权重和偏差值一开始是随机的，算法会通过 “标记数据” 来进行训练和测试，进而调整这些值来逐渐提高准确性。

隐藏层中存在多个神经元 (neuron)，每个神经元都会进行加权、求和、偏置、激活函数的计算过程，并向前进行传播，计算结果最高的就是分类结果。

最重要的是隐藏层可以有很多层，**深度学习 (deep learning )** 因存在多个隐藏层而得名。

![深度学习](https://275040345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FycDQGvckh16RY095vh62%2Fuploads%2FtgptdJLWGKXVZ3VCYlSa%2F9.png?alt=media)

训练更复杂的网络需要更多的计算量和数据，尽管神经网络 50 多年前就发明了，但直到处理器和 CPU 的发展才使得深层神经网络在最近成为可能。

几年前，Google 和 Facebook 展示了深度神经网络在照片中识别人脸的准确率和人一样高，这是一个巨大的里程碑。

## 5.1.3 强化学习 ( Reinforcement Learning)

只能做特定任务 “弱 AI”(Weak AI) 或”窄 AI” (Narrow AI)，比如利用深层神经网络来开车、翻译、诊断医疗状况等，只能做特定的一件事。

真正通用的、像人一样聪明的 AI，叫 “强 AI” (Strong AI)。目前强 AI 暂未出现，但许多人认为随着数字化知识的爆炸性增长可能会加速其的出现，毕竟 AI 吸收新讯息的速度比人类强得多。

比如 IBM 的 Watson(沃森) 吸收了 2 亿个网页的内容，在 2011 年的知识竞答中碾压了人类；2016 年 Google 推出的 AlphaGo（玩围棋的窄 AI）通过和自己的克隆版下无数次围棋来打败人类最好的围棋选手。

像 AlphaGo 这样通过不断试错来学习什么管用、什么不管用，从而自己发现成功的策略的方法很类似与人类的学习方式，这称为「强化学习」(Reinforcement Learning)。

对于很多垂直的问题，强化学习已被广​​泛使用。如果这类技术被广泛使用，可能会创造出类似于人类的 “强 AI” 能够像人类小孩一样学习，但学习速度超快。如果这发生了，对人类可能有相当大的影响。
