第3章
线性代数基础




本章学习目标
 理解线性代数的相关概念; 
 掌握范数的有关知识; 
 掌握特征值和奇异值的运算; 
 理解主成分分析的方法和原理。
线性代数作为数学的一个分支,广泛应用于科学和工程中。深度学习会大量涉及线性代数相关的知识,掌握线性代数对理解和从事深度学习算法相关工作是非常必要的。如果大家已经掌握线性代数的有关知识,则可以直接跳过本章内容; 如果之前没有接触过线性代数,可以通过阅读和学习本章来了解和掌握本书所需的线性代数知识。
3.1标量、向量、矩阵和张量
学习线性代数首先需要了解以下几个重要的数学概念。
1. 标量(scalar)

一个标量便是一个单独的数,是计算的最小单元,一般采用斜体小写的英文字母表示。在介绍标量时通常会明确其所属的类型。例如,“s∈R”表示s属于实数标量。
2. 向量(vector)
向量是由多个标量构成的一维数组,这些数是有序排列的。通过次序中的索引可以确定每个单独的数,通常赋予向量粗体的小写变量名称,比如x。通过下标索引来获取每一个元素,向量x的第一个元素用x1表示,第二个元素用x2表示,以此类推,第n个元素用xn表示。当需要明确表示向量中的元素时一般会将元素排列成一个方括号包围的纵列,格式如下所示: 
x=x1
x2
︙

xn

3. 矩阵(matrix)
矩阵是由标量构成的二维数组,其中的每一个元素被两个索引所确定。本书采用粗斜体的大写拉丁字母来表示矩阵,比如A,如果实数矩阵A的行数为m,列数为n,便可以用A∈Rm×n来表示A矩阵。在表示矩阵中的元素时,通常使用其名称以小写不加粗的斜体形式,索引用逗号间隔。例如,a1,1表示矩阵左上角的元素,am,n表示矩阵中右下角的元素。表示垂直坐标i中的所有元素时,用“:”表示水平坐标。比如通过ai,: 表示A矩阵中垂直坐标i上的一横排元素,这也被称为A矩阵的第i行(row)。同样地,a: ,i表示A的第i列(column)。在需要明确表示矩阵中的元素时,可以将它们写在用方括号包围起来的数组中,具体形式如下所示: 

A=a1,1…a1,n

︙︙

am,1…am,n

如果现在有m个用户的数据,每条数据含有n个特征,那么这些用户数据实际上对应了一个m×n的矩阵; 一张图由16×16个像素点组成,那这个图就是一个16×16的矩阵。

4. 张量(tensor)
在某些情况下,需要用到高于二维坐标的数组。当一组数组中的元素分布在若干维坐标的规则网格中时被称为张量。本书使用黑斜体大写字母来表示张量,例如,用A来表示张量“A”。以二维空间下的三阶张量A为例,将张量A中的坐标为(i,j,k)的元素记作Ai,j,k。为了更好地理解张量,在此将如图3.1的一张RGB图片表示成一个三阶张量,张量的3个维度分别对应图片的高度、宽度和色彩数据。RGB图片的色彩数据可以拆分为3张红色、绿色和蓝色的灰度图片,通过张量的形式来表示,如表3.1所示。


图3.1RGB人像图




表3.1通过张量的形式表示RGB彩色图片



0
1
2
3
4
…
316
317
318
319
1
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
…
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
2
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
…
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
续表



0
1
2
3
4
…
316
317
318
319
3
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
…
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
4
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
…
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]

5
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
…
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
[1.0,

1.0,

1.0]
表3.1中的横轴表示图片的宽度值; 纵轴表示图片的高度值(仅截取其中一部分数据); 表格中每个方格代表一个像素点,[1.0,0,0]表示红色(Red,后面简称R),[0,1.0,0]表示绿色(Green,后面简称G),[0,0,1.0]表示蓝色(Blue,后面简称B)。以表3.1中第一行第一列为例,表中数据为[1.0,1.0,1.0],表示RGB 3种颜色在图片的该位置的取值情况为R=1.0,G=1.0,B=1.0。
张量在深度学习中非常重要,它是一个深度学习框架中的核心组件之一,后续的所有运算和优化算法几乎都是基于张量进行的。将各种各样的数据抽象成张量表示,然后再输入神经网络模型进行后续处理是一种非常必要且高效的策略。如果不采用将数据抽象成张量的方法,就需要根据各种不同类型的数据分别定义不同的组织形式,这样十分低效。通过将数据抽象成张量,还可以在数据处理完成后方便地将张量再转换回想要的格式。例如,Python的NumPy包中numpy.imread和numpy.imsave两个方法,分别用来将图片转换成张量对象(即代码中的Tensor对象),以及将张量再转换成图片保存起来。
矩阵的初等变换是矩阵的一种非常重要的运算,它在求解线性方程组、逆矩阵中都起到了非常重要的作用。对于任意一个矩阵A∈Rm×n,下面3种变换称为矩阵的初等行变换。
 对调任意两行中的元素,记作ri→rj; 
 以不为0的数k乘以矩阵某一行的所有元素,记作ri×k; 
 把某一行的所有元素的k倍加到另一行的对应的元素上去,记作ri×k+rj。
初等行变换和初等列变换同理,只需将上述3种变换中的行改成列即可。初等行变换和初等列变换统称为初等变换。
矩阵等价: 如果矩阵A经过有限次初等变换变成矩阵B,那么称矩阵A与矩阵B等价,记作A→B。
矩阵之间的等价关系具有下面的性质。
 自反性: A~A。
 对称性: 若A~B,则B~A。
 传递性: 若A~B,B~C,则A~C。

转置(Transpose)是矩阵的重要操作之一。矩阵的转置是以对角线为轴的镜像,这条从左上角到右下角的对角线被称为主对角线(Main Diagonal)。将矩阵A的转置表示为AT的表达式为(AT)i,j=Aj,i,矩阵转置如图3.2所示。


图3.2矩阵转置


向量可以看作是只有一列的矩阵,向量的转置可以看作是对只有一行元素的矩阵进行转置。可以将向量表示成行矩阵的转置,写在行中,然后使用转置将其变为标准的列向量,比如x=[x1,x2,x3]T。
标量可以看作是只有一个元素的矩阵。因此,标量的转置等于它本身,a=aT。任何两个形状一样的矩阵之间都可以相加。两个矩阵相加是指对应位置的元素相加,比如C=A+B,其中ci,j=ai,j+bi,j。

标量和矩阵相乘,或是和矩阵相加时,将其与矩阵的每个元素相乘或相加,比如D=a×B+c,其中di,j=a×bi,j+c。
在深度学习中,会用到一些非常规的符号。允许矩阵和向量相加,产生另一个矩阵: C=A+b,其中Ci,j=Ai,j+bj。换言之,向量b和矩阵A的每一行相加。使用这种速记方法时无须在加法操作前定义复制向量b到矩阵A的每一行。这种隐式地复制向量b到很多位置的方式,被称为广播(broadcasting),广播的相关内容可以回顾第2章中讲解的内容。
3.2线性相关与生成子空间
本章在前面介绍了向量的定义,由多个同维度的列向量构成的集合称为向量组,矩阵可以看成是由行向量或者列向量构成的向量组。本节将讲解向量组中的线性组合、线性相关、最大线性无关组以及矩阵的秩等概念。
3.2.1线性组合
假设存在向量组A: a1,a2,…,an(ai∈Rm),对于任意一组实数k1,k2,…,kn,有
k1a1+k2a2+…+knan
上述表达式为向量组A的线性组合,其中,k1,k2,…,kn被称为向量系数。如果存在一组不全为0实数k1,k2,…,kn,使得任意一个向量b满足下列等式: 
b=k1a1+k2a2+…+knan
则称向量b可以被向量组A线性表示。
向量空间是由若干向量构成的非空集合,也称为线性空间。对于任意实数集{k1,k2,…,kn},由k1a1+k2a2+…+knan构成的所有向量集合称为向量空间{k1a1+k2a2+…+knan,ki∈R}。
通过人为定义向量空间来容纳“向量”“向量加法”和“向量标量乘法”及三者的性质,让“向量空间”作为这三者的“家”。向量空间是满足“向量加法”和“向量标量乘法”法则的集合(向量集),假设给定一个域F,一个非空集合V叫做域F上的一个向量空间存在向量空间V满足以下几个性质: 
(1) 交换律: α+β=β+α对任意α,β∈V成立; 
(2) 结合律: (α+β)+γ=α+(β+γ)对任意的α,β,γ∈V成立; 
(3) 存在一个0∈V,即零向量,满足α+0=α对任意α∈V成立; 
(4) 对任意的α∈V,存在一个-α∈V,满足α+(-α)=0; 
(5) 对任意的α∈V,a,b∈F,有(a+b)α=aα+bα; 
(6) 对任意的α,β∈V,a∈F有a(α+β)=aα+aβ; 
(7) 对任意的a,b∈F,α∈V有a(bα)=(ab)(α); 
(8) 1α=α。


3.2.2线性相关
在线性代数中,向量空间的一组元素中,若没有向量可用有限个其他向量的线性组合来表示,则称为线性无关或线性独立(Linearly independent),反之称为线性相关(Linearly dependent)。
假设存在向量组A: a1,a2,…,an,若任意一组不全为0的实数k1,k2,…,kn使
k1a1+k2a2+…+knan=0
则称向量组A是线性相关的,否则称它为线性无关。其中,k1,k2,…,kn被称为向量系数。
若向量组A是线性无关的,则只有当λ1=λ2=…=λn=0时,下式成立: 
λ1a1+λ2a2+…+λnan=0

对于任意一个向量组,不是线性相关就是线性无关的。如果存在一组不全为0实数k1,k2,…,kn,使得任意一个向量b满足下列等式。
b=k1a1+k2a2+…+knan
则称向量b是向量组A的一个线性组合,这时也称向量b能由向量组A线性表示。

3.2.3向量组的秩
假设存在向量组A: a1,a2,…,an,如果能从中选出由r个子向量构成的子向量组A0: a1,a2,…,ar,r<n,且满足以下两个条件的子向量组A0: a1,a2,…,ar被称为向量组A的一个最大线性无关向量组,最大线性无关向量组包含的向量个数r称为向量组A的秩。
(1) 向量组A0: a1,a2,…,ar线性无关; 

(2) 向量组A的任意r+1个向量构成的子向量组都是线性相关的。
向量组与矩阵存在等价关系,可以把矩阵看成是由所有行向量构成行向量组,矩阵的行秩相当于向量组的秩,矩阵的列秩可以看成是列向量组的秩。
设矩阵A的行秩为R(A)r,列秩为R(A)c,则有R(A)r=R(A)c,因此,把矩阵A的行秩和列秩统称为矩阵A的秩。

3.2.4实例: 求解方程组
设,已知下列3个方程,对该方程组进行求解。
x+y=3
x-y=-2
y=1
将上述3个方程反映在二维直角坐标系中,如图3.3所示。


图3.33个函数的坐标图


由图3.3可以看出这3条直线没有共同交点,因此无法直接求出该方程组的解。此时,可以通过最小二乘逼近找出一个与3条直线距离最近的一个点。
首先,通过矩阵和向量的形式来表示上述方程组方程的表达式为Ax+b=y。

11
1-1
01x
y=3
-2
1

上述表达式的最小二乘逼近如下所示: 
110
1-1111
1-1
01x*
y*=110
1-113
-2
1

20
03x*
y*=1
6
根据二阶方程的性质对矩阵20
03求逆,结果为120
013,代入上式可得: 

x*
y*=120
0131
6=12
2

最终,求得矩阵的近似解为12
2,如图3.4所示。


图3.4矩阵的近似解


接下来,通过numpy.linalg.lstsq()函数在Python中实现最小二乘逼近的求解,实现代码如下所示: 



import numpy

A = numpy.array([[1, 1], [1, -1], [0, 1]])

B = numpy.array([3, -2, 1])

x = numpy.linalg.lstsq(A,B)

print(x)




运行结果如下: 



 (array([ 0.5,  2.0 ]), array([ 1.5]), 2, array([ 1.73205081,  1.41421356]))




在上述运行结果中,函数返回的4个值,从左往右分别对应以下内容: 
(1) 最小二乘逼近解。如果B为二维,则逼近的结果存在多个列,每一列对应一个逼近解。上述示例中,逼近解为0.5
2。
(2) 残差。即每一个B-Ax的长度的平方。在上述示例中,残差值为1.5。
(3) 矩阵A的秩。上述示例中,矩阵A的秩为2。
(4) 矩阵A的奇异值。上述示例中,矩阵A的奇异值为1.7320508
1.41421356。

3.2.5实例: 线性回归
假设平面直角坐标系中存在4个坐标点,坐标分别为(-1,0)、(0,1)、(1,2)、(2,1),求一条经过这4个点的直线方程,坐标点如图3.5所示。


图3.54个点的坐标


设直线的方程为y=mx+b。从图3.5可以很容易看出,这4个坐标点并不在一条直线上,因此不可能存在一条直线同时连接这4个点。此时,可以通过最小二乘的方法找到一条距离这4个点最近的直线,来求得近似解。具体方法如下所示。
首先,用方程组的形式分别表示图3.5中的4个点。
f(-1)=-m+b=0

f(0)=0+b=1

f(1)=m+b=2

f(2)=2m+b=1
通过矩阵和向量的形式来表示上述方程组: 
-11
01
11
21Am
bx=0
1
2
1b
上述表达式的最小二乘逼近如下所示。
-1012
1111-11
01
11
21m*
b*=-1012
11110
1
2
1
62
24m*
b*=4
4
接下来,对矩阵62
24求逆,结果为1204-2
-26,将结果代入上述表达式: 
m*
b*=1204-2
-264
4=1208
16=25
45
因此,所求直线方程为y=25x+45,具体如图3.6所示。


图3.6加入直线后的坐标图


图3.6中的直线便是经过4个点的直线的近似解。通过Python实现上述求解过程的代码如下所示: 



import numpy

A = numpy.matrix('-1 1;0 1;1 1;2 1')

B = numpy.array([0, 1, 2, 1])

x = numpy.linalg.lstsq(A, B)

print (x)




运行结果如下: 



(array([ 0.4,  0.8]), array([ 1.2]), 2, array([ 2.68999405,  1.66250775]))




上述运行结果中,numpy.linalg.lstsq返回的4个值从左往右分别对应以下内容: 
(1) 最小二乘逼近解。上述示例中,逼近解为0.4
0.8。
(2) 残差。上述示例中,残差值为1.2。
(3) 矩阵A的秩。上述示例中,矩阵A的秩为2。
(4) 矩阵A的奇异值。上述示例中,矩阵A的奇异值为2.68999405
1.66250775。

3.3范数
范数(Norm)是一种定义在赋范线性空间中的函数,在机器学习中为了防止过拟合或使解可逆而引入范数,用范数衡量向量或矩阵的大小。范数包括向量范数和矩阵范数,向量范数表示向量空间中向量的大小,矩阵范数表示矩阵引起变化的大小。
监督类学习问题其实就是在规则化参数同时最小化误差。最小化误差是为了让模型拟合训练数据,而规则化参数是为了防止模型过拟合训练数据。在参数较多时,模型复杂度会极剧上升,容易出现过拟合,即模型的训练误差小,测试误差大。因此,需要尽可能降低模型的复杂程度,并在此基础上降低训练误差,这样才能保证优化后的模型测试误差也小。可以通过规则函数来降低模型的复杂程度。
规则化项可以是模型参数向量的范数,如L0、L1、L2等。本节将分别对向量范数和矩阵范数进行讲解。

3.3.1向量范数
在泛函分析中,向量范数是衡量向量大小的一种度量方式。向量范数(包括Lp范数)是将向量映射到非负值的函数。在形式上,向量范数是一个定义域为任意线性空间的向量x,其对应一个实值函数‖x‖,它把一个向量v映射为一个非负实数值R,即满足‖x‖: v→R。
向量x的范数是衡量从原点到点x的距离。向量范数需要具备下列3个性质。
(1) 正定性: ‖x‖≥0,且当‖x‖=0时,必有x=0成立; 
(2) 正齐次性: ‖αx‖=|α|×‖x‖,α∈F; 
(3) 三角不等次性: ‖x‖+‖y‖≥‖x+y‖。
机器学习领域经常会涉及对范数的应用。范数在机器学习中模型最优化的正则化中具有重要意义,它可以限制损失函数中模型参数的复杂程度。其中最常用到的是Lp范数,p∈R,p≥1。Lp范数的定义如下。
‖x‖p=∑i|xi|p1p
‖x‖p满足范数的3个性质。为了方便理解不同范数之间的区别,接下来将分别给出二维空间向量中不同的p值对应的单位范数,即‖x‖p=1的图形表示。

1. 向量L1范数
L1范数被称为绝对值范数,其大小等于向量的每个元素绝对值之和。L1范数表达式如下所示: 
‖x‖1=∑i|xi|
其中,单位范数即满足‖x‖1=1的点{(x1,x2)},如图3.7所示。
由于L1范数的天然性质,对L1范数优化的解属于稀疏解,因此L1范数也被称为“稀疏规则算子”。通过L1范数可以实现特征的稀疏,去掉一些没有信息的特征,例如在对用户的网络购物取向做分类的时候,用户有100个特征,可能只有十几个特征是对分类有用的,大部分特征如口音、智商等可能都是没有直接关系的特征,利用L1范数就可以过滤掉这些“无用”特征。当机器学习问题中需要严格区分零和非零元素之间的差异时,通常会使用L1范数。
2. 向量L2范数
L2范数也被称为欧几里得范数(Euclidean norm),其大小表示从原点出发到向量x的确定点的欧几里得距离(简称欧氏距离)。L2范数十分频繁地出现在机器学习中,经常简化表示为‖x‖,省略下标2。L2范数为向量x各个元素平方和的开方,其表达式如下所示: 
‖x‖2=∑ix2i
L2范数如图3.8所示。



图3.7L1范数的图像




图3.8L2范数的图像



在衡量向量的值时可能会用到平方L2范数,通过点积计算向量的值。通常,平方L2范数比L2范数更加方便。例如,平方L2范数对向量x中每个元素的导数只取决于对应的元素,而L2范数中每个元素的导数与整个向量相关。平方L2范数虽然计算方便,但并不总是适用于任何场合,它在原点附近增长得十分缓慢,而某些机器学习应用中,需要严格区分元素值为零还是非零极小值。此时,更倾向于使用在各个位置斜率相同,且数学形式更简单的L1函数。
3. 当p的值为0时
有时需要统计向量中非零元素的个数来衡量向量的大小。有些书籍将其称为“L0范数”,但是这个术语在数学意义上并不成立,因为向量的非零元素数目并不是范数。对标量放缩n倍并不会改变该向量非零元素的数目。因此,通常将L1范数作为表示非零元素数目的替代函数。

4. 当p的值为∞时
另外一个经常在机器学习中出现的范数是L∞范数,也被称为max范数,如图3.9所示。当p的值趋于∞时,范数表示向量中具有最大幅度的元素的绝对值: 
‖x‖∞=maxi|xi|



图3.9L∞范数的图像



3.3.2矩阵范数
除了衡量向量的大小很多时候也需要衡量矩阵的大小,前面所讲到的有关向量范数的知识同样可以应用于矩阵。满足下列所有性质的任意函数f称为矩阵范数。
(1) 正定性: ‖A‖≥0,且当‖A‖=0时,必有A=0成立; 
(2) 正齐次性: A∈Rm×n,‖αA‖=|α|×‖A‖; 
(3) 三角不等次性: ‖A‖+‖B‖≥‖A+B‖; 
(4) 矩阵乘法的相容性: 对于任意两个矩阵A∈Rk×m和矩阵B∈Rn×k,若A可以与B相乘,则满足‖A‖×‖B‖≥‖A×B‖。
本书采用与向量范数相似的表达式‖A‖p来表示矩阵的p范数,矩阵通常采用的是诱导范数,诱导范数的定义如下: 

(1) 假设‖x‖m是向量x的范数,‖A‖n是矩阵A的范数对于任意满足‖x‖m×‖A‖n≥‖x×A‖m的向量x和矩阵A,有矩阵范数‖A‖n与向量范数‖x‖m相容。

(2) 假设‖x‖p是向量x的p范数,定义: ‖A‖p=maxx≠0‖x×A‖p‖x‖p=max‖x‖p=1‖x×A‖p,则‖A‖p是一个矩阵范数,并且称该矩阵范数是由向量范数‖x‖p所诱导的诱导范数。
由向量的p范数诱导可得矩阵p范数。

1. 矩阵L2范数
矩阵L2范数也被称为谱范数,写作‖A‖2,是由向量L2范数诱导的矩阵范数,其表达式如下所示: 
‖A‖2=maxj(λj(ATA))

其中λj(ATA)表示矩阵ATA的第j个特征值。
2. 矩阵L1范数
矩阵L1范数也被称为列和范数,写作‖A‖1,是由向量L1范数诱导的矩阵范数,其表达式如下所示: 
‖A‖1=maxj∑mi=1|αij|,j=1,2,…,m
当p的值趋于∞时,矩阵L∞范数也被称为行和范数,写作‖A‖∞,是由向量L1范数诱导的矩阵范数,其表达式如下所示: 
‖A‖∞=maxi∑nj=1|αij|,i=1,2,…,n

在深度学习中,最常见的做法是使用F范数(Frobenius norm,简称F范数),其表达式如下所示: 
‖A‖F=∑ijA2ij
其类似于向量L2范数。在后续章节中处理模型最优化问题时将很多问题转化为F范数的最优化问题。

3.4特殊的矩阵与向量
本节将对几种特殊的矩阵与向量进行讲解,通常任意矩阵都可以由以下几种特殊矩阵组合而成。
1. 对角矩阵(diagonal matrix)
对角矩阵除了主对角线上含有非零元素,其他位置都是0。假设存在矩阵D∈Ri×j,当且仅当对于所有的i≠j,Di,j=0时,矩阵D为对角矩阵。其实本章前面提到的单位矩阵就是对角矩阵。值得注意的是,对角矩阵不一定是方阵,只要i≠j的位置元素值为0即可。
主对角元素从左上角到右下角的次序常常记为一个列向量: 
λ=[λ1,λ2,…,λn]T=λ1
λ2
︙
λn
以上述列向量为主对角元素的方阵就可以记为diag(λ): 
diag(λ)=λ10…0
0λ2…0
000
00…λn

用diag(λ)表示一个对角元素由向量λ中元素给定的对角方阵。对角矩阵受到关注,部分原因是对角矩阵的乘法计算很高效。计算乘法diag(λ)x,只需要将x中的每个元素xi放大λi倍。换言之,diag(λ)x=λx,其中表示向量的点积运算。计算对角矩阵的逆矩阵也很高效。当且仅当对角元素都是非零值时,对角矩阵的逆矩阵存在,在这种情况下,diag(λ)-1=diag1λ1,1λ2,…,1λnT。
在大部分情况下,可以根据任意矩阵导出一些通用的机器学习算法,但通过将一些矩阵限制为对角矩阵,可以得到计算代价较低的(并且描述语言较少的)算法。长方形的矩阵也有可能是对角矩阵。长方形对角矩阵没有逆矩阵,但仍然可以很快地计算它们的乘法。
2. 对称矩阵(symmetric matrix)
对称矩阵是其转置与自己相等的矩阵: 
A=AT
当某些不依赖参数顺序的双参数函数生成元素时,对称矩阵经常会出现。例如,如果A是一个表示距离的矩阵,Ai,j表示点i到点j的距离,那么Ai,j=Aj,i,因为距离函数是对称的。
3. 单位向量(unit vector)
单位向量是具有单位范数(unit norm)的向量,即满足向量的欧氏范数值为1: 
‖x‖2=1
上式中向量x即为单位向量。
4. 正交向量(orthogonal vector)
假设现有向量v=[v1,v2,…,vn]T,x=[x1,x2,…,xn]T,正交向量满足: 
vTx=0

由于vTx=0,因此向量x和向量v互相正交(orthogonal)。如果两个向量都有非零范数,那么这两个向量之间的夹角是90°。如果这两个向量不仅互相正交,并且范数都为1,便可以称它们是标准正交(orthonormal)。

5. 正交矩阵(orthogonal matrix)
正交矩阵是指行向量是标准正交的,列向量是标准正交的方阵: 
ATA=AAT=I
由此可得A-1=AT。
正交矩阵的优点之一是求逆计算代价小。需要注意正交矩阵的定义,正交矩阵的行向量不仅是正交的,还是标准正交的。对于行向量或列向量互相正交但不是标准正交的矩阵没有对应的专有术语。

3.5特征值分解
“分而治之”的策略经常被用于机器学习的算法设计中,许多数学对象可以通过分解成多个子成分或者寻找相关特征,来更好地理解整体。例如,整数可以分解为质数。十进制整数12可以用十进制或二进制等不同方式表示,但素数分解是具有唯一性的,通过素数分解可以获得一些有用的信息。例如,12=2×2×3,通过这个表示可以知道12不能被5整除,或者12的倍数可以被2整除等信息。同理,可以通过将矩阵分解成多个子矩阵的方法来发现原矩阵中本来不明显的函数性质。本节将对特征值分解方法进行讲解。
特征值分解(EigenDecomposition)是使用最广的矩阵分解方法之一,是一种将矩阵分解成由其特征向量和特征值表示的矩阵之积的方法。
方阵A的特征向量是指与A相乘后相当于对该向量进行放缩的非0向量x: 
Ax=λx
标量λ被称为这个特征向量对应的特征值(Eigen value)。非0向量x称为方阵A对应于特征值λ的特征向量。
“特征”在模式识别和图像处理中是非常常见的一个词汇。要认识和描绘一件事物,首先要找出这个事物的特征。因此,要让计算机识别一个事物,首先就要让计算机学会理解或者抽象出事物的特征。不论某一类事物的个体如何变换,都存在于这类事物中的共有特点才能被作为“特征”。例如,计算机视觉中常用的SIFT特征点(ScaleInvariant Feature Transform)就是一种很经典的用于视觉跟踪的特征点,即使被跟踪的物体的尺度、角度发生了变化,这种特征点依然能够找到关联。
在机器学习中,特征向量选取是整个机器学习系统中非常重要的一步。线性代数中的“特征”是抽象的。矩阵乘法对应了一个变换,是把任意一个向量变成另一个方向或长度不同的新向量。在这个变换过程中,原向量会发生旋转、伸缩变化。如果矩阵对某一个向量或某些向量只发生伸缩(尺度)变化,而没有产生旋转变化(也就意味着张成的子空间没有发生改变),这样的向量就是特征向量。可以通过图3.10来理解特征向量的概念。


图3.10特征向量的概念


可以看出,图3.10中左图通过仿射变换,发生了形变,但是,图像的中心纵轴在变形后并未发生改变。对比上面左右两图中的浅色向量,可以看出其发生了方向的改变,但是深黑色向量的方向依然保持不变,因此深黑色向量可以看作该变换的一个特征向量。深黑色向量在从图3.10左图变换成右图时,既没有被拉伸也没有被压缩,其特征值为1。所有沿着垂直线的向量也都是特征向量,它们的特征值相等。这些沿着垂直线方向的向量构成了特征值为1的特征空间。
如果v是矩阵A的特征向量,那么任何放缩后的向量sv(s∈R,s≠0)也是矩阵A的特征向量。此外,sv和v有相同的特征值。基于特征向量的该特性,通常可以只考虑单位特征向量。假设矩阵A有n个线性无关的特征向量{x1,x2,…,xn},它们对应的特征值分别为{λ1,λ2,…,λn}。将n个线性无关的特征向量连接一个矩阵,使得每一列是一个特征向量V=[x1,x2,…,xn],用特征值构成一个新的向量λ=[λ1,λ2,…,λn]T,此时矩阵A的特征分解如下所示。

A=Vdiag(λ)V-1

值得注意的是,并不是所有矩阵都可以特征值分解,一个大小为Rn×n的矩阵A存在特征向量的充要条件是矩阵A含有n个线性无关的特征向量。

3.6奇异值分解
3.5节中探讨了如何将矩阵分解成特征向量和特征值,但特征值分解只适用于方阵,而现实中大部分矩阵都不是方阵,比如电影推荐网站有m个用户,每个用户有n种偏好,这样形成的一个m×n的矩阵,而m和n很可能不是方阵,此时可以通过奇异值分解(Singular Value Decomposition,SVD)来对矩阵进行分解。
奇异值分解适用于任意给定的m×n阶实数矩阵分解,它将矩阵分解为奇异向量(Singular Vector)和奇异值(Singular Value),通过奇异向量和奇异值来表述原矩阵的重要特征。除了适用于降维外,奇异值分解还能应用于很多机器学习的工程领域,如图像降噪、购物网站的推荐功能等。
在3.5节中,使用特征分解分析矩阵A时,得到特征向量构成的矩阵V和特征值构成的向量λ,现在通过如下形式重新表示矩阵A: 
A=Vdiag(λ)V-1
设A是一个m×n的矩阵,U是一个m×m的矩阵,D是一个m×n的矩阵,V是一个n×n矩阵,则矩阵A可以分解为如下形式: 
A=UDVT

这些矩阵每一个都拥有特殊的结构。矩阵U和V都是正交矩阵,矩阵D是对角矩阵。
矩阵U={u1,u2,…,um}是一个m阶方阵,其中ui的值是矩阵ATA的第i大的特征值对应的特征向量。ui也被称为矩阵A的左奇异向量(left singular vector)。
对角矩阵D对角线上的元素为(λ1,λ2,…,λk),其中λi是矩阵ATA的第i大的特征值的平方根,λi=λi(ATA)被称为矩阵A的奇异值。
矩阵V={v1,v2,…,vn}是一个n阶方阵,其中�瘙經i的值是矩阵的列向量,被称右奇异向量(Right Singular Vector)。
奇异值分解可以高效地表示数据。例如,假设想传输如图3.11所示的图像,每张图片实际上对应着一个矩阵,像素大小就是矩阵的大小,图中包含15×25个黑色或者白色像素。
可以看出,图3.11实际上是由如图3.12所示的3种类型的列所组成。



图3.1115×25像素阵列






图3.123种类型的列



通过由各元素为0或1的15×25矩阵来表示图3.11,其中,0表示黑色像素,1表示白色像素,矩阵如图3.13所示。



M=












































































111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
110000000000011
110000000000011
110000000000011
110001111100011
110001111100011
110001111100011
110001111100011
110001111100011
110001111100011
110001111100011
110001111100011
110001111100011
110000000000011
110000000000011
110000000000011
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111














































































图3.13图片的矩阵表示


奇异值往往对应着矩阵中隐含的重要信息,其包含信息的重要性与值的大小具有正相关性。每个矩阵都可以表示为一系列秩为1的“子矩阵”之和,通过奇异值来衡量这些“子矩阵”对应的权重。

如果对M进行奇异值分解,可以得到3个非零的奇异值(图3.13中只有3个线性独立的列,因此得到3个奇异值,矩阵的序为3)。假设得到的这3个非零奇异值为σ1、σ2、σ3。矩阵可以通过如下表达式进行近似表达: 
M≈u1σ1vT1+u2σ2vT2+u3σ3vT3

从图3.13中可以看到,该图可以近似由3个包含15个元素的行向量vi,3个包含25个元素的列向量ui,以及3个奇异值σi表达。因此,现在只需要123(3×15+3×25+3=123)个元素就可以表示这个矩阵,远远少于原始矩中的375个元素。
一般情况下,奇异值越大,所对应的信息越重要,这一点可以被应用于数据的降噪处理中。假如,在通过扫描仪将图3.11输入到计算机中可能会因为扫描机的原因在原图上产生一些缺陷,这种缺陷通常被称为“噪声”。这时可以通过奇异值对图像去噪。图3.14是一张扫描后包含噪声的图片。现假设那些较小的奇异值是由噪声引起的,接下来可以通过令这些较小的奇异值为0来达到去除图像噪声的目的。

假设通过奇异值分解得到了矩阵的以下奇异值,由大到小依次为: σ1=14.15,σ2=4.67,σ3=3.00,σ4=0.21,…,σ15=0.05。可以看到,在15个奇异值中,从第4个奇异值开始数值变得较小,这些较小的奇异值便可能是所要剔除的“噪声”。此时,令这些较小奇异值为0,仅保留前3个奇异值来构造新的矩阵,得到如图3.15所示的图像。



图3.14含有噪声的图像




图3.15去噪后的图像



与图3.14相比,图3.15的白格子中灰白相间的图案减少了,通过这种对较小的奇异值置0的方法可降低图像噪声。

3.7迹运算
在不使用求和符号的情况下,有的矩阵运算会难以描述,而通过矩阵乘法和迹运算符号,则可以清楚地进行表示。一个n阶方阵A的主对角线上各个元素的总和被称为矩阵A的迹,迹运算返回的是矩阵对角元素的和: 
Tr(A)=∑iAi,i
矩阵的迹有众多的性质,接下来将列出较为重要的几种。
(1) 迹运算提供了另一种描述矩阵F范数的方式: 
‖A‖F=Tr(AAT)
(2) 矩阵的迹运算满足多个等价关系。例如,迹运算在转置运算下是不变的: 
Tr(A)=Tr(AT)

多个矩阵相乘得到的方阵的迹,和将这些矩阵中最后一个挪到最前面之后相乘的迹是相同的(需要注意的是,在进行该操作时要保证挪动之后的矩阵乘积依然定义良好)。
Tr(ABC)=Tr(CAB)=Tr(BCA)
n个矩阵的有效迹的通用的表达式如下所示: 
Tr∏ni=1Fi=TrFn∏n-1i=1Fi

即使循环置换后矩阵乘积得到的矩阵形状发生改变,迹运算的结果仍然保持不变。例如,假设矩阵A∈Rm×n,矩阵B∈Rn×m,可以得到如下表达式。
Tr(AB)=Tr(BA)
尽管AB∈Rm×m和AB∈Rn×n。值得注意的是,标量在迹运算后仍然是它自身: a=Tr(a)。

3.8本 章 小 结
线性代数是应用数学的一个重要分支,其中的矩阵运算是很多机器学习算法,尤其是深度学习算法的基础,通过本章的学习希望大家可以掌握与深度学习相关的线性代数知识点,如果需要进一步全面了解线性代数的相关知识,建议参考相关的专业书籍。
3.9习题
1. 填空题
(1) 每个标量都是一个单独的数,是计算的最单元,一般采用斜体小写的英文字母表示。
(2) 当一组数组中的元素分布在若干维坐标的规则网格中时被称为。
(3) 对于任意一个向量组,不是线性就是线性的。
(4) 矩阵L∞范数也被称为范数,写作‖A‖∞,是由向量L1范数诱导的矩阵范数。
(5) 特征值分解是一种将矩阵分解成由其和表示的矩阵之积的方法。

2. 选择题
(1) 矩阵A=10
10
11,则AT为()。

A. 111
001B. 111
100
C. 11
00
01D. 100
111

(2) 若向量组A: a1,a2,…,an是线性无关的,则只有当向量系数满足()时,有λ1a1+λ2a2+…+λnan=0成立。
A. λ1×λ2×…×λn=0B. λ1=λ2=…=λn=0
C. λ1×λ2×…×λn=1D. λ1=λ2=…=λn=1

(3) 已知向量a=(1,k,1)T是矩阵A=211
121
112的逆矩阵A-1的特征向量,则常数k的值为()。
A. -2或1B. -2或-1C. -1或2D. 2或1

(4) 下列选项中,()不是矩阵范数的所必须具备的性质。
A. 正齐次性B. 正定性
C. 三角等次性D. 矩阵乘法相容性

(5) 在迹运算的转置运算中Tr(A)=()。
A. Tr(AAT)B. Tr(AT)
C. Tr(AAT)D. AAT


3. 思考题
(1) 简述L2范数可以防止模型过拟合训练数据的原因。
(2) 简述奇异值分解的含义并列举两种可以应用奇异值分解的领域。