第 2 章 机器学习的数学基础
在上一章中,我们对机器学习的目标和分类进行了简要介绍。作为一门以数据及其模型为研究对象的学科,优化模型、分析模型性能等都需要数学手段的帮助。和其他学科一样,数学可以帮我们更清晰地描述和理解机器学习算法,也可以从理论上证明算法的有效性,是机器学习中必不可少的一环。本章将会介绍机器学习中常用的数学工具,为后面的章节打下基础。但本书并不是一本数学书,对数学知识的介绍将以概念和结论为主,不会过多涉及中间的证明过程。因此,我们推荐读者将本书和相关的数学参考资料共同阅读。
2.1 向量
向量(vector),在数学中指具有大小和方向的量。与向量相对,只具有大小、不具有方向的量则称为标量(scalar)。简单来说,我们可以将向量理解为由个数构成的元组,其中称为向量的维数。向量通常有两种写法,如下所示的竖排写法称为列向量:
横排写法称为行向量。一个向量如果不加说明即默认为列向量,但实际中为了节省空间,我们通常将列向量写成的形式。其中上标表示转置(transpose),即将行和列翻转过来,行向量转置后就变成了列向量。例如,向量的转置为:
关于向量的含义,我们既可以将其看成维空间中的一个点,其中向量每一维的值代表坐标;也可以将其看成从原点指向该坐标点的有向线段,具有长度和方向。无论哪种理解,每一个维向量都与一个维空间中的点相对应,因此,全体维向量构成的空间与是等价的。在没有额外说明的情况下,对于向量,我们用来表示其第维的分量。此外,记所有分量全部为 0 的向量为零向量。
设向量,标量,向量的常见运算有:
- 向量相加:。
- 向量与标量相乘:。当或时,结果即为。
- 向量内积(inner product),也称向量点乘(dot product):,注意两个向量的内积结果是标量。从式中可以看出,向量内积满足交换律,即。
为了衡量向量的“长度”,我们定义范数(norm)函数。一个函数是范数,当且仅当其满足下面 3 个条件:
- 正定性:,当且仅当时,;
- 绝对齐次性:;
- 三角不等式:。
在各种各样的向量范数中,范数(又称范数)是一类相对常用的范数,其定义为:
其中,又以下面几种范数最为常见:
- 范数,又称欧几里得范数,其结果是向量对应的点到原点的欧氏距离,也称为向量的模长:由于其应用最广,我们有时会省略范数的下标,直接写为。
- 范数,又称绝对值范数,为向量各个分量的绝对值之和,其结果是向量所表示的点到原点的曼哈顿距离:
- 范数,又称无穷范数,由对范数的定义取极限得到,其结果是向量中绝对值最大的分量:
当时,按与上面相同的方式定义的函数并不满足范数的条件,具体原因我们留作习题。但是为了方便,我们常将下面的函数也称为“范数”:
- 范数,由对范数的定义取极限得到,其结果是向量中不为的元素的个数:
2.2 矩阵
向量是一些数在一维上构成的元组,如果把它朝二维扩展,我们就得到了矩阵(matrix)。与向量相比,矩阵由于有了更多的维数,具有更大的灵活性,还可以定义新的运算。下面,我们就来介绍矩阵的基本概念和本书中可能会用到的简单性质。
2.2.1 矩阵的基本概念
矩阵是由一些数构成的矩形元组。一个行列的矩阵通常称为的矩阵,写为:
对具体的元素不关心时,我们也将其记为或。默认情况下,我们用或者来表示矩阵中位于第行第列的元素,有时也反过来用表示元素为的行列矩阵。与向量相似,的实数矩阵构成的空间即与维的实数空间等价,一般记为。向量实际上是一种特殊的矩阵,列向量的列数为 1,行向量的行数为 1。同时,矩阵也可以看作由一组向量构成。设,那么。与向量相似,矩阵同样存在转置操作,表示将矩阵的行和列交换。一个矩阵转置后会得到矩阵。例如,矩阵
的转置为:
特别地,行数和列数均为的矩阵称为阶方阵。如果阶方阵只有左上到右下的对角线上的元素不为 0,则称该方阵为对角矩阵(diagonal matrix),记为。例如代表的矩阵为:
进一步,如果对角矩阵对角线上的元素全部为 1,则称该方阵为阶单位矩阵(identity matrix)或单位阵,用表示。阶数明确时,也可以省略下标的阶数,记为。例如,三阶单位阵为:
所有元素为零的矩阵称为零矩阵,记为。
2.2.2 矩阵运算
设矩阵,,。向量,标量。矩阵的常用运算有:
最终得到的是维的矩阵。这一运算方式可以理解为,的第行列的元素是由的第行和的第列做向量内积得到的。这也说明了为什么矩阵乘法要求第一个矩阵的列数(即行向量的长度)与第二个矩阵的行数(即列向量的长度)相同,因为只有维数相等的向量才能进行内积。例如:
其中,第 1 行第 1 列的 8 的计算过程为:
其余元素以此类推。
应当注意,由于矩阵乘法对行数和列数的要求,将交换成并不一定还符合乘法的定义。即使与的维数形如和,交换后仍然满足乘法定义,其交换前后相乘的结果也不一定相等,即。例如:
不过,虽然矩阵的乘法不满足交换律,但依然满足结合律,即。另外,对于转置操作,有。
由于向量也是一种特殊的矩阵,向量内积其实是矩阵乘法的一种特殊形式。但是,两个维的列向量并不满足矩阵乘法对维数的要求。为了将向量的内积与矩阵乘法统一,我们通常将其中一个向量转置成维的行向量,再按矩阵乘法的规则进行计算,即:
此外,内积也常用尖括号写为。该写法只是一种形式,其计算规则和上面是相同的。
矩阵可以与向量相乘,其计算方式与矩阵乘法相同。设,那么
得到的是维向量。例如:
类似于实数中的,任何矩阵与维度相符的单位阵相乘都等于自身,即。进一步,在实数中,相乘等于的两个数互为倒数。利用单位矩阵,我们也可以定义矩阵的“倒数”:逆矩阵(inverse)。对于阶方阵,如果存在阶方阵满足,则称是的逆矩阵,记为。逆矩阵之间的乘法是可交换的,即。例如:
转置操作与求逆操作之间的顺序可以交换,即。这一性质由定义即可证明,我们把它留作习题。
2.2.3 矩阵与线性方程组
矩阵的逆并不是一定存在的。例如,二阶矩阵
就不存在逆矩阵。显然,零矩阵也不存在逆矩阵。那么,什么情况下矩阵的逆存在呢?我们可以从多元一次方程组的角度来理解。设矩阵,向量。将方程按矩阵与向量的乘法展开,得到:
这是一个元一次方程组,且显然有解。如果该方程组只有这一个解,那么矩阵的逆存在;反之,如果方程组存在非零解,则矩阵的逆不存在。设是方程的一个非零解,满足,假设矩阵的逆存在,那么:
由此得到,与是非零解矛盾,故矩阵的逆不存在。
我们用上面举的二阶矩阵的例子来进一步说明这一现象,该矩阵对应的方程组为:
可以发现,如果将第一个方程乘上-1,就得到了第二个方程。因此,这两个方程事实上是一样的,方程组其实只包含一个方程。最终,方程组有两个未知数,但只有一个方程,就存在无穷多组解,从而矩阵的逆不存在。
如果方程组存在非零解,不妨设解向量中的前维不为零。否则,我们总可以重排矩阵和向量行的顺序来使不为零的维度变成前维。设矩阵的列向量为,那么非零解就对应着下面的关系:
也就是说,原方程组中至少有一个方程可以由其他方程线性组合得到。像这样,对于向量组,如果以为未知数的方程:
有非零解,就称向量组是线性相关的;反之,如果该方程只有零解,就称向量组是线性无关的。而对于线性相关的向量组,设其中存在个向量线性无关,而任取个向量都线性相关,则称该向量组的秩(rank)为,记为。线性无关的向量组的秩就等于其包含向量的个数。将这一概念应用到矩阵上,可以定义矩阵的秩为其列向量组成的向量组的秩。于是,我们可以用矩阵的秩来判断其是否可逆:方阵可逆的充分必要条件是。
直观上来说,矩阵的秩可以衡量矩阵包含的信息,也就是矩阵的复杂程度。例如在上面的线性方程组中,虽然它包含两个方程,但由其中一个方程可以推出另一个,说明它包含的信息与仅有一个方程没有什么区别。对于矩阵来说,矩阵的秩越低,其列向量之间的相关性就越强,说明其实际上包含的信息就越少。
2.2.4 矩阵范数
与向量类似,在矩阵上同样可以定义范数函数,其需要满足的条件也与向量范数相同:
正定性:,且当且仅当的所有元素都为。
绝对齐次性:。
三角不等式:。
在机器学习中,较为常用的矩阵范数是弗罗贝尼乌斯范数(Frobenius norm),简称范数,定义为矩阵每个元素的平方之和的平方根:
范数与向量的范数的定义较为类似,直观来说,可以用来衡量矩阵整体的“大小”,或者可以理解为将矩阵拉成向量后,向量对应的模长。
2.3 梯度
在机器学习中,我们经常会将问题抽象成数学模型,经过一系列推导后,将其转化为在一定约束条件下,求某个函数在空间上的最小值的问题,这样的问题就叫做优化问题。给定函数,最简单也是最自然的优化问题是寻找函数的最小值:
要求解这一优化问题,就必须分析该函数的性质,尤其是函数的变化趋势。试想,如果我们知道了函数在空间的每一个地方沿着任一方向是上升还是下降,就可以不断沿着函数值下降的方向走,直到向周围的所有方向函数值都上升为止。这时,我们就找到了函数的一个局部极小值。当然,这里描述的只是某种直观的感受,并不完全严谨,但也提示了函数的变化趋势在优化问题中的重要性。而梯度,就是描述函数变化速率和方向的工具。
我们假设读者有一定微积分的基础,下面给出梯度(gradient)的定义。对于向量的标量值函数,其在处的梯度为:
其中,表示对变量求梯度。在不引起混淆的情况下,下标可以省略。可以看出,也是一个维向量,与形状相同,其每一维均由对的对应维度求偏导数得到。我们知道,多元函数对其中一个变量的偏导数代表了函数在该变量方向上的变化速率和方向。如果将向量函数的变量看作是个独立的标量变量,那么也可以认为是有个变量的多元函数。并且在直角坐标系中,由于向量的每一维都对应一个坐标轴,对每个维度的偏导数,就指示了函数在这一坐标轴方向上的变化情况。最终由各个偏导数组合而成的向量,则代表函数在空间中完整的变化速率与方向。
值得注意的是,梯度向量所指的方向有非常特殊的性质。如图 2-1 所示,图中是函数在平面上的等值线图,在每条直线上函数的值都相等,且颜色越偏红的地方函数值越大,越偏蓝的地方函数值越小。按照上面的运算规则,可以算出函数在点处的梯度是。图中画出了以为起点的一些箭头,图例中标明了箭头的方向,其中蓝色实线箭头是梯度方向。这些箭头的长度都相等。可以看出,虽然沿所有箭头的方向函数值都在增大,但是蓝色的箭头跨过了最多的等值线,说明沿该方向函数值增大最快。
图 2-1 梯度与函数值变化或许有读者对图 3-1 有疑问,认为函数非线性的情况与图中展示的线性情况不同,函数值增大最快的方向应当是从起点指向最大值点的方向。然而,仿照一元函数的泰勒展开,我们也可以利用梯度对标量值函数在局部进行线性近似,即
在本书遇到的情境中,函数的性质通常都足够好,可以进行上面的线性近似。因此,当我们讨论函数在一个很小局部内的变化时,总是可以认为函数是线性的。这样,参照上面线性函数的例子,就可以从直观上推出:在某一点函数值上升最快的方向就是函数在该点梯度的方向。更严格的数学证明应当考虑函数在起点沿不同方向的方向导数,其中表示空间中的某个方向。该导数的含义是,自变量从沿方向变为时,函数值的变化为。利用方向导数可以证明,当函数值变化最大时,就是梯度方向。相关的推导并不困难,我们将二元函数的简单情况留作习题供读者思考。
图 2-2 展示了几个有代表性的二元函数在空间中部分点的梯度,分别是抛物面,马鞍面,以及。
图 2-2(a) 抛物面$f(x,y)=x^2+y^2$图 2-2(b) 马鞍面$f(x,y)=x^2-y^2$图 2-2(c) $f(x,y)=\sin(x)\sin(y)$图 2-2 几种二元函数的梯度示意
上文介绍的函数以向量为自变量,函数值是标量。除此之外,在机器学习中我们还会经常遇到自变量和函数值都是向量的函数,称为向量值函数。设是向量值函数,那么函数值的每一维都是一个元标量函数
向量值函数其实并不少见,半径为的圆的参数方程就可以看成自变量为、函数值为向量的函数。假如我们要描述空间中的风速,那么也需要一个从空间坐标到风速的向量值函数。而在机器学习中,我们最常见的是向量之间的线性变换,其中是矩阵。
向量值函数同样也可以对自变量求导数,但这时导数的结果就变成矩阵,称为雅可比矩阵(Jacobian matrix),通常用或者表示。设,其对自变量的梯度是一个维的矩阵
其中表示先求梯度再转置。虽然严格意义上来说,雅可比矩阵已经不是梯度,但由于其与梯度的含义和形式都高度相似,也可以将其看作是梯度的推广。因此简单起见,本书统一用梯度来称呼标量值函数与向量值函数的导数,并用符号表示求梯度或雅可比矩阵。
特别的,标量值函数的梯度是向量。类比于二阶导数,如果对梯度再求一次梯度,得到的矩阵就称为的黑塞矩阵(Hessian matrix):
我们直接给出向量求导的一些常用公式。读者可以发现,这些公式与一元标量函数的求导并无太大差别,只是需要注意向量和矩阵的转置来使维度相符。如无特殊标明,下面所有的求导都是对向量进行的。其中是标量,是向量,是矩阵。带有下角标的是的向量值函数。
与标量函数类似,函数在处取到极大值或者极小值的必要条件是在该点的梯度为零向量:
虽然仅有这一条件并不充分,比如上面展示过的,其在处的梯度为零,但该点显然并非局部极小值。然而,进一步讨论需要用到较为复杂的性质,且梯度为零在函数光滑时是必要条件。因此,我们暂且先对梯度与极值的关系有一个基本认识,在需要深入时再具体介绍分析的方法。
2.4 凸函数
在 3.3 节最后我们发现,梯度为零并不能说明函数取到极值点。那么,是否存在一类函数,由梯度为零就可以直接推出极值点呢?考虑最简单的开口向上的二次函数,显然函数在顶点处的梯度为零,同时该点也是函数的极小值点。进一步分析可以发现,在自变量由小变大的过程中,函数的导数(梯度)是单调增加的。所以,如果导数存在零点,在零点左边导数始终小于 0,函数值单调减小;在零点右边导数始终大于 0,函数值单调增加。这样,导数为零的点一定是函数的极小值点。
当函数的自变量由一元扩展到多元、导数扩展成梯度的时候,我们同样需要把上面的直觉扩展,找到在不同情况下都适用的描述方法。直观上来说,如果梯度为零就可以推出极小值点,函数的图像应当是没有“起伏”的,这种性质该如何描述呢?这里直接给出定义:考虑函数,对任意和,如果都有
就称是凸函数(convex function)。
图 2-3 是一个凸函数的示意图,我们通过这张图来简单说明凸函数定义式的几何含义。上式左边是和的加权平均,随着从 0 变化到 1,它的轨迹就是连接和两点的线段。上式右边则是和两个点先加权平均得到、再求函数值的结果。要让上式成立,就需要左边表示的线段始终在右边对应位置的函数值上方,和上面我们希望的函数图像没有“起伏”是一致的。否则,我们就可以在函数图像有“鼓包”的地方找到两个点,使它们的连线在函数下方了。
图 2-3 凸函数定义
的几何解释图/ 2-4 展示了常见的凸函数和,以及非凸函数和。非凸函数的图像上还画出了一条红色虚线,表示该函数违反凸函数定义的地方。读者可以自行验证这些函数确实满足或不满足凸函数的定义。
图 2-4 凸函数与非凸函数示例从这些例子中,我们需要说明几个与上面的“直觉”不完全相同的地方,也提醒读者注意严谨的数学表达是比直觉更可靠的工具。第一,凸函数不一定在所有点可导(可求梯度)。例如在处的梯度就不存在。但我们在机器学习中遇到的大多数函数,都可以通过合理规定不可导点的导数来尽量弥补这一缺陷,比如规定在的导数为。第二,凸函数不一定存在极值点,例如在定义域内是单调递增函数,不存在导数为零的地方。第三,存在全局唯一极小值点的不一定是凸函数,例如在区间上存在唯一极值点,且该点的导数为。甚至在极值点左边导数始终为负、在极值点右边导数始终为正,与我们在本节最开始的描述相同,但它仍然不是凸函数。
与凸函数相反,如果将定义式中的改为,即
就得到了 凹函数(concave function)。类比图 3-2 凸函数的几何解释,凹函数的图像应当是向上“鼓起”的,从而任意两点的连线都在图像的下方。因此,凸函数常常与最小化关联,凹函数常常与最大化关联。对比两者的定义式可以发现,如果是凸函数,那么一定是凹函数。相应来说,最小化凸函数与最大化凹函数是等价的。因此,我们只需要选取凸函数进行研究,就可以得到凹函数的所有性质。
凸函数在机器学习中非常常见,在 3.1 节中介绍的向量范数都是凸函数。由于凸函数的良好性质,它的优化问题通常有简单且理论上严格的解法。因此,在后续所有的模型中,我们都希望尽可能找到某种形式的凸函数作为优化问题的目标。
2.5 本章小结
本章主要介绍了本书所讲解的机器学习算法中常用的数学工具。我们希望尽可能将重点放在机器学习算法的讲解与实践上,所以并没有像数学教材那样过多地展示数学证明与定理。因此,本章的内容以概念和定义为主,力求将这些数学概念以直观的方式向读者展示。对这些概念的更多性质和原理感兴趣的读者,可以自行查阅相关数学资料。
习题
向量的范数为向量中非零元素的个数,严格满足向量范数的 3 个性质,是否正确? A. 错误 B. 正确
下列说法错误的是: A. 两个对角矩阵之间相乘一定可交换。 B. 矩阵与向量的乘法满足分配律,即对于维度合适的矩阵和向量,,有。 C. 矩阵对向量的点乘满足结合律,即对于维度合适的矩阵和向量,,有。 D. 假设处处可微且存在最大值,那么在最大值点的梯度一定为零。
当范数中的或取得到范数时,它并不满足范数的定义。依次验证范数的 3 条要求,它违反了哪一条要求?试举出一个违反该要求的例子。
证明矩阵的转置和逆满足。
设二元函数在上处处光滑且可微,证明在任意一点处,函数的梯度是函数值上升最快的方向。(提示:考虑函数在该点沿的方向导数的长度,何时该长度最大?)
利用向量范数的定义证明,所有的向量范数都是凸函数。
是否存在非凸非凹的函数?又凸又凹呢?试举例说明或证明其不存在。
试通过作图来展示,对不同的值,在 2 维画出坐标上画出范数等于 1 的向量对应的点构成的曲线。设平面上点的坐标为,该曲线的方程就是。通过这些图像来证明和理解一个趋势:越小,曲线越贴近坐标轴;越大,曲线越远离坐标轴,并且棱角越明显。