1.2 什么是机器学习
机器学习算法相当于一个搜索过程,它从一组可能的函数中找出能够最好地解释数据集中不同特征之间的关系的那一个函数。为了直观理解从数据中提取或学习函数的过程,我们看一看下面这组输入某个未知函数(function)的样本值,以及这个函数相应的输出值。给定这些样本,我们应该选择哪一种算术运算(加法、减法、乘法或除法)才能最好地解释这个未知函数所定义的输入和输出之间的映射呢?
function(输入) = 输出
function(5, 5) = 25
function(2, 6) = 12
function(4, 4) = 16
function(2, 2) = 04
绝大部分人会同意乘法运算是最好的选择,因为它和我们观察到的输入与输出之间的关系(或映射)最为吻合:
5×5 = 25
2×6 = 12
4×4 = 16
2×2 = 04
在上面这个例子中选择最优函数很直观,无须计算机帮助就可以完成。然而,随着未知函数输入值个数的增多(可能会达到成百上千个)以及可选函数的增多,要从中选择最优函数就会变得越来越困难。此时,我们就需要使用机器学习方法来寻找能够与数据集中的模式相匹配的最优函数。
机器学习包含两个阶段:训练和推断。在训练阶段,机器学习算法对数据集进行处理,并为数据中的模式选择最匹配的函数。提取出来的函数将会以特定的形式编码在计算机程序中(比如if-then-else规则或特定方程的参数)。这种编码后的函数被称为模型,而对数据进行分析以提取函数的过程常被称为模型训练。本质上,模型就是编码成计算机程序的函数。但是,在机器学习中,函数和模型这两个概念联系非常紧密,人们常常会忽略它们之间的差异,而是互换使用这两个概念。
在深度学习中,函数与模型之间的关系表现为:训练过程中从数据集中提取的函数被表示成神经网络模型,而神经网络模型将函数编码为计算机程序。在训练神经网络的标准过程中,首先将神经网络中的参数进行随机初始化(后文我们会解释神经网络的参数,这里读者可以将它们简单地理解为能够控制神经网络如何工作的一组值)。从与数据集中样本的输入输出之间的关系的匹配情况而言,这样随机初始化的网络是非常不精确的。训练过程将会对数据集中的样本逐一进行处理:给定一个样本,将其输入网络,然后根据网络输出值与该样本在数据集中对应的目标输出值之间的差异对网络参数进行更新,以使网络能够更好地与数据集相匹配。一旦机器学习算法为需要解决的问题找到了足够精确的函数(也就是网络输出值能够与数据集中的目标输出值匹配),就可以结束训练过程,并输出最终得到的模型。此时,机器学习的学习过程也相应地停止。
训练过程结束后,模型也就固定了。接下来就可以进入机器学习的第二阶段—推断。在推断过程中,将模型应用到新样本上,而对于这些新样本,我们并不知道它们的正确输出值应该是多少,因此使用模型估计出它们的输出值。机器学习领域中的绝大部分研究都聚焦于如何训练精确的模型(也就是从数据中提取出精确的函数)。这是因为将训练好的机器学习模型部署到实际应用中,对大规模新样本进行推断,所需要的技巧和方法与典型的数据科学家所掌握的技巧和方法并不相同。工业界对大规模部署人工智能系统所需的特殊技巧的认识越来越多,人们对DevOps领域日益增长的兴趣便反映了这一点。DevOps是描述软件开发人员和运维技术人员(运维技术人员的职责是将开发好的系统部署到实际应用中,并确保这些系统的稳定性和可扩展性)之间的合作的术语。表示机器学习系统运维的MLOps和表示人工智能系统运维的AIOps也常被用来反映部署训练好的模型时面临的挑战。关于模型部署的问题已超出本书的内容范围,本书将着重介绍深度学习是什么、能用来做什么、是如何演化的,以及如何训练精确的深度学习模型。
还有一个相关问题是:为什么从数据中提取的函数是有用的?这是因为从数据中提取的函数可被用于新的数据,将这些新数据输入提取的函数得到的输出值可为针对新数据的正确决策提供参考(也就是从数据中提取的函数可以用于推断)。回想一下函数的定义,简单地说,函数就是一个从输入到输出的确定性映射。这样简单的定义会给人们带来一些错觉,使人们看不到函数之间的复杂变化。以下是一些不同函数的例子。
- 垃圾邮件过滤器以邮件作为输入,输出值反映了输入邮件是否是垃圾邮件。
- 人脸识别模型的输入是一幅图像,输出是将图像中的人脸与其他部分区分开来的输入图像像素标注结果[1]。
- 基因预测模型接收基因组DNA序列数据作为输入,输出序列中编码了基因信息的部分。
- 语音识别模型的输入是语音音频信号,输出是该语音信号对应的文本内容。
- 机器翻译以一种语言中的一句话为输入,输出它在另一种语言中对应的语句。
近年来之所以机器学习变得如此重要是因为很多领域中的很多问题的解都可以用函数来表示。
[1] 此处的人脸识别模型并不是通常意义上用于身份认证的人脸识别模型,而是人脸图像分割模型。—译者注