人工智能入行实战:从校园到职场
上QQ阅读APP看书,第一时间看更新

2.1 机器学习

2.1.1 机器学习的基本原理

我们先来回顾一下人类自己的学习过程。举个例子,当我们听到有人跟我们说“苹果”这个词时,我们一般会想到那个红红的、圆圆的水果,酸酸甜甜很好吃,也就是说会有一个具体的事物出现在我们脑中,我们是通过具体事物来认识各式各样的概念。但这个事物并不是孤立的,它会和其他很多事物产生关联。例如当我们听到“苹果”这个词,我们可能还会想到它是水果中的一种,同时香蕉、橘子、樱桃、草莓也都是水果。假如想在超市买苹果,那么当我看到橘子时,就知道苹果应该会在附近,因为它和橘子是同一类事物,都是水果。这就是了解事物之间的关联能够帮我们解决问题。另外,我们还可能会想到苹果派,一种馅料是苹果的点心,此时一种点心和一种水果之间就产生了关联。实际上,人脑中有一个非常复杂的知识图谱,其中的每一个节点都是一个概念,而这个概念相应地又能够映射成某一种事物。不同事物之间存在纷繁复杂的关系,人类就是靠拓展自己的知识图谱来学习世界的。

那么机器又是怎么学习的呢?对机器来说,它不可能像人类那样去具象化某种事物,机器所能做的就是把所有的概念都转换成数字,把这些概念之间的关系转变成运算,以此来体现这个世界上的万事万物。当我们说数字的时候,可能本能地想到的是标量(Scalar),如1、2、3这样的自然数,以及2.7、5.2这样的小数。但机器学习中最常用来表示事物的是向量(Vector),有行向量和列向量两种写法。此外,还有矩阵(Matrix),它是多行多列的。标量、向量和矩阵的格式如图2-1所示。

图2-1 标量、向量和矩阵的格式

机器学习就是把现实事物转换成向量或矩阵,然后再对它们进行运算,得出结果,用这个结果来指导我们解决问题。

虽然现在机器学习和深度学习是两个并列的学科分支,但实际上它们具有共同的三要素,分别是数据、模型和算法。

使用算法对数据进行运算,通过运算结果得到模型,然后运用这个模型来预测新的结果——这就是机器学习模型的用处,也是我们应用机器学习要达到的目的。整个流程包括训练、测试和预测三个过程。下面通过一个具体的示例来介绍这三个要素及它们间的协作关系。

图2-2所示为某公司的员工信息表,表中每一行对应一位员工,2~6列对应员工的属性,最后一列对应员工的薪资,这就是一份数据,其中每一位员工就是一个样本。从这份数据我们可以看出,它一共有11个样本,每个样本有5个特征,以及1个标签——薪资。

图2-2 员工数据

接下来我们用一个模型来表示这些样本的特征和标签之间的关系。

对于上面的11个样本来说,虽然它们有5个特征,但其中4个特征是完全一样的,即职位、技能、国籍和城市,因此通过这4个特征并不能区分这些样本。这些样本唯一不同的是“经验”这个特征,为简单起见,把该有效特征提取出来。假设X代表经验,Y代表薪资,若要寻找XY之间的关系,可以把XY对应的点在二维坐标系中表示出来,如图2-3所示。

图2-3 目标函数

可以看到这些点好像在一条直线上,那么不妨假设Y=A+BX。这个假设确定了XY的关系模型的形式,即线性方程,于是就得到了模型函数——F(X)=A+BX。有了模型后,通过样本数据就可以求解出模型中的参数A和B的值了。

一旦求出A和B,如果得到一个新的X,就可以通过这个模型函数来进行预测。例如,公司来了一个经验值为15的员工,就可以把X=15代入模型函数,得到Y,即新员工对应的薪资,这就是预测的过程。

我们现在有了模型和数据,接下来用算法对数据进行运算,从而求取模型函数。

首先看看我们想要的结果是什么样的。如图2-3所示,我们有11个数据点,并且期望就算模型函数这条直线不通过其中任何一个数据点,但是它应该和所有数据点都离得尽量近,而不是只通过其中的一个或两个数据点,然后离其他的数据点都很远。可以用一个目标函数来表达这个期望,如下所示,其中m为样本个数。

目标函数J(a,b)是关于ab的函数,它将X代入模型得到预测值F(X),然后对预测值F(X)和实际值Y的差值求平方,再把所有样本的差值平方相加后除以样本数,最终得到预测值与实际值的差值平方的平均值,即预测值与实际值之间的损失(Loss)函数。既然希望目标函数J(a,b)尽量小,那么假设有一条直线能够正好通过所有数据点,使得目标函数为零。

一般情况下,目标函数不太可能为零,所以需要尽量求取目标函数的最小值。求取目标函数最小值的过程,就是优化算法。机器学习中最常用的优化算法是梯度下降算法,下面通过一个示例进行介绍。

假设有一个一元函数,由于其自变量是一维的,则该函数可以画在二维空间中,如图2-4所示,其中橙色的曲线代表该函数。我们可以从曲线上的任意一个点开始,如从右侧的黑点开始沿该函数一直往下走,直到没法再往下为止,这时我们就认为找到了该函数的最小值,即图2-4中的红点。

图2-4 一元函数的梯度下降算法示意

从数学的角度来说,沿着函数一直往下走就是在初始点位置对该函数做切线(一个函数在某一点上的切线就是对它所在的那一点求导),然后沿着切线下降的方向往下走,这样就可以逐渐走到该函数的最低点。

但我们要计算的J(a,b)是二元的,因此需要画在三维空间中,如图2-5所示。直观来看,二元函数的损失函数图像就像一个碗,如果开始时我们把一个球放在“碗壁”上的任意一个位置,它会沿着“碗壁”一点一点往下降,直到“碗底”,这里就是损失函数的最小值。

接下来用数学方法求二元损失函数的最小值。先给ab随机设置一个初始值a0b0,让它们沿着初始值下降,每一次前进一小步,同时通过求导得到前进的方向。

图2-5 二元函数的梯度下降算法示意

根据这个例子,再来回顾一下本节开头介绍的机器学习的三要素——数据、模型和算法。数据是员工信息表中的经验、薪资,模型是线性方程Y=A+BX,算法是梯度下降算法。利用梯度下降算法来运算这些数据从而获得模型参数的过程称作训练。当得到Y=A+BX之后,对新的X求解Y的过程称作预测。假设通过数据训练得到了一个评估薪资的模型,就可以把它交给HR,当公司有新员工入职时,HR直接输入经验值等数据然后运行模型就可以轻松得到适合该员工的薪资。

三要素中最核心的是模型,因为无论算法还是数据,其目的都是获得模型。读者在学习机器学习时,建议以模型为驱动,从模型函数入手,推导其目标函数,然后学习模型函数的求解过程,通过该求解过程来学习算法,最后辅以数据处理、特征提取等知识进行更深的了解。