2.1 线性代数

线性代数是数学的一门分支学科,研究的是线性空间中的函数问题。顾名思义,“线性”是指要研究的代数之间的关系是简单的一次关系,研究过程中没有复杂的数学运算(如平方和开方);“代数”是指用符号代替数字,方便研究。

对于数学关系f(x+y)=f(x)+f(y),线性代数不关心其中xy的具体含义是什么,其研究的是拥有这种线性映射关系的函数f所具备的性质。

函数是指输入一个数,在经过某些计算后输出另一个数。随着研究的问题越来越复杂,有时需要输入多个数,然后经过运算输出多个数。从这个角度来说,线性代数解决的就是多输入或多输出的函数问题。

2.1.1 名词解释

在线性代数中,单个数称为标量,用中括号括起来的多个输入的数或多个输出的数(多个标量)称为向量和矩阵。标量、向量和矩阵是算法工程中经常用到的线性代数核心概念。下面从数学角度给出标量、向量和矩阵的概念,以便加深读者对线性代数基本概念的理解。

• 标量:表示一个简单的数,如29、31等。

• 向量:表示一组有序的标量,能够写成一行或一列的形式。

• 矩阵:表示一组有序的向量(一个或多个),可以用二维数组的形式表示。

下面来看一个例子。假设某家包子铺周一能卖出50个肉包,这里的“50”就是一个标量;如果这家包子铺某周每天卖出的包子数量依次是[50, 51, 52, 53, 52, 48, 45],则“[50, 51, 52, 53, 52, 48, 45]”是一个向量;加上这周每天卖出的豆沙包、咸菜包的数量,组成如下数据形式,就是一个矩阵。

2.1.2 向量和矩阵

标量的概念比较简单,因此我们重点讲解向量和矩阵。向量和矩阵在算法工程中经常用到。例如,一条样本的所有特征值构成一个向量,一批样本的所有特征值构成一个矩阵。几乎所有的算法公式都可以写成向量或矩阵的形式,机器学习中的算法模型通常所说的批(batch)训练,其底层的计算逻辑就是利用向量和矩阵的运算。由此可见,掌握向量和矩阵的相关知识,对于算法“内力”的修炼至关重要。既然涉及运算,自然会有相应的运算法则,那么向量和矩阵的运算法则是怎么样的呢?

向量可以分为行向量和列向量,二者在本质上并无区别,只在进行运算时有差别。下面通过生活中的具体例子,逐一介绍与向量有关的运算法则。

某公司有n名员工,月工资用向量[a1, a2, …, an-1, an]表示,其中ai表示第i个员工的月工资数额。

情形一:公司业绩不错,公司老板决定给每位员工涨薪20%,可以用向量与标量之间的乘法来计算涨薪后的工资,如表2-1所示,其中k为原工资倍数,即1.2。

表2-1 员工涨薪情况(一)

具体计算方法用数学符号表示如下,得到的结果仍然是向量。向量与标量之间的除法类似,可以理解为向量与标量的倒数相乘。

情形二:公司业绩不错,根据员工完成业绩的不同,老板决定对不同的员工给出相应的工资涨幅。以绝对值涨幅为例(也可以是不同的比例涨幅),给第i位员工每月增加bi元工资,可以用行(列)向量与行(列)向量之间的加法来计算涨薪后的工资,如表2-2所示。

表2-2 员工涨薪情况(二)

具体计算方法用数学符号表示如下,计算结果仍然是向量。

向量与向量之间的减法与加法类似,计算结果仍然是向量。

情形三:老板在按照不同的涨幅比例给员工涨薪之后,想知道工资开支的总预算是多少,可以用行向量与列向量之间的乘法来计算。具体计算方法如下。

由此可知,行向量与列向量相乘的结果是一个标量。

根据行向量与列向量相乘的例子可知,使运算成立的一个隐含条件是,行向量的列数必须与列向量的行数相等,如例子中的向量长度均为n,这有助于理解后面的矩阵运算(向量是一种特殊的矩阵)。列向量的列数与行向量的行数都等于1。一个列向量与一个行向量相乘,即可得到一个矩阵,具体计算方法如下。

在机器学习中,向量通常用于表示特定维度空间中不同维度的特征值,因此又称为特征向量。例如,一个二维特征向量[1, 2]表示两个特征,第一个特征维度的值为1,第二个特征维度的值为2。既然是空间,那就存在距离的概念,即同一个特征空间中不同特征向量之间存在着某种关系,如相似的特征表现。假设有另一个二维特征向量[2, 4],其在两个特征维度上的值分别为2和4,可以发现,这个二维特征向量和前面的二维特征向量,在各个维度上的特征值大小恰好相差一倍,这说明二者的特征表现相似,只是程度不同。当然,在实际算法工程中,特征向量之间的关系会有更复杂的度量方式,如相似度、相关系数等。

矩阵运算和向量运算的运算法则类似。标量与矩阵的加法、减法、乘法,只需将标量与向量的每一个值分别相加、相减、相乘,得到的结果仍是矩阵。以标量与矩阵的乘法为例,计算方法如下。

矩阵与向量之间只有乘法。如果矩阵与行向量相乘,那么行向量的列数必须与矩阵的行数相等,并且行向量必须位于乘号的左边,计算方法如下。

如果矩阵与列向量相乘,那么列向量的行数必须与矩阵的列数相等,并且列向量必须位于乘号的右边,计算方法如下。

矩阵与矩阵相乘,乘号左边矩阵的列数必须与乘号右边矩阵的行数相等,计算方法如下。

假设ABC表示矩阵。

矩阵之间的加法满足交换律,计算公式如下。

矩阵之间的乘法满足结合律,计算公式如下。

在线性代数中,关于向量和矩阵的知识点还有很多,包括单位矩阵、对角矩阵、对称矩阵等,这些知识点在PCA降维、协同过滤和矩阵分解等算法中都有所运用,下文只对这些概念进行简单介绍,感兴趣的读者可以自行深入拓展学习。

单位矩阵是一个方阵,这个方阵从左上角到右下角的对角线(称为主对角线)上的元素均为1,其他元素均为0,示例如下。

对角矩阵也是一个方阵,这个方阵除主对角线上的元素外,其他元素均为0,主对角线上的元素可以不为1,示例如下。由此可知,单位矩阵属于对角矩阵。

对称矩阵也是一个方阵,这个方阵只需满足以主对角线为对称轴,两边对称位置的元素相等,示例如下。由此可知,单位矩阵和对角矩阵都属于对称矩阵。