- 细说机器学习:从理论到实践
- 凌峰编著
- 5899字
- 2024-12-27 23:13:42
2.3 线性代数基础
高等数学也是线性代数和概率论的基础,本节将讲解机器学习中线性代数的常用知识,下一节将讲解机器学习中常用的概率论知识。公式矩阵中出现的横线和竖线表示省略号。
2.3.1 基本概念和符号
线性代数提供了一种紧凑地表示和操作线性方程组的方法。例如,以下方程组:
4x1-5x2=-13 -2x1+3x2=9
这是两个方程和两个变量,正如从高中代数中所知的,可以找到x1和x2的唯一解(除非方程以某种方式退化,例如第二个方程只是第一个方程的倍数,但在上面的情况下,实际上只有一个唯一解)。在矩阵表示法中,可以更紧凑地表达:
Ax=b
其中,
使用以下符号:
,表示A为由实数组成具有m行和n列的矩阵。
,表示具有n个元素的向量。通常,向量x将表示列向量,即具有n行和1列的矩阵。如果想要明确地表示行向量,即具有1行和n列的矩阵,通常写为xT(这里xT是x的转置)。
xi表示向量x的第i个元素,则:

使用符号aij(或Aij、Ai,j等)来表示第i行和第j列中的A的元素:

用aj或者A:,j表示矩阵A的第j列:

用或者
,表示矩阵A的第i行:

在许多情况下,将矩阵视为列向量或行向量的集合非常重要且方便。通常,在向量而不是标量上操作在数学上(和概念上)更清晰。只要明确定义了符号,用于矩阵的列或行的表示方式并没有通用约定。
2.3.2 矩阵乘法
两个矩阵相乘,其中且
,则:
。其中,
。
注意 为了使矩阵乘积存在,A中的列数必须等于B中的行数。
有很多方法可以查看矩阵乘法,下面将从一些特殊情况开始介绍。
1.向量-向量乘法
给定两个向量,xTy通常称为向量内积或者点积,结果是一个实数。

注意 xTy=yTx始终成立。
给定向量,
(它的维度是否相同都没关系),
叫作向量外积,当(xyT)ij=xiyj的时候,它是一个矩阵。

举一个外积如何使用的例子:让1∈Rn表示一个n维向量,其元素都等于1,此外,考虑矩阵A∈Rm×n,其列全部等于某个向量x∈Rm。使用外积可以紧凑地表示矩阵A:

2.矩阵-向量乘法
给定矩阵,向量
,它们的积是一个向量y=Ax∈Rm。矩阵向量乘法有如下几种情况:
如果按行写A,那么可以表示Ax为:

也就是说,第i个y是A的第i行和x的内积,即:。
同样,可以把A写成列的方式,即:

也就是说,y是A的列的线性组合,其中线性组合的系数由x的元素给出。
到目前为止,一直是在右侧乘以列向量,但也可以在左侧乘以行向量。即yT=xTA表示,
,
。和以前一样,可以用两种可行的方式表达yT,这取决于是否根据行或列表达A。
第一种情况,把A用列表示:

这表明yT的第i个元素等于x和A的第i列的内积。
最后,根据行表示A,得到了向量-矩阵乘积的最终表示:

所以看到yT是A的行的线性组合,其中线性组合的系数由x的元素给出。
3.矩阵-矩阵乘法
有了这些知识,现在来看4种不同的(形式不同,但结果是相同的)矩阵-矩阵乘法:也就是本节开头所定义的C=AB的乘法。
(1)将矩阵-矩阵乘法视为一组向量-向量乘积。从定义中可以得出:最明显的观点是C的(i,j)元素等于A的第i行和B的第j列的内积。公式如下:

这里的,
,
,
,这里的
,
,
,
,所以它们可以计算内积。通常用行表示A,而用列表示B。
(2)用列表示A,用行表示B,这时AB是求外积的和。公式如下:

也就是说,AB等于所有A的第i列和B的第i行的外积的和。因此,在这种情况下,,
,外积
的维度是m×p,与C的维度一致。
(3)将矩阵-矩阵乘法视为一组矩阵向量积。如果把B用列表示,可以将C的列视为A和B的列的矩阵向量积。公式如下:

这里C的第i列由矩阵向量乘积给出,右边的向量为ci=Abi。
(4)用行表示A,C的行作为A和C行之间的矩阵向量积。公式如下:

这里第i行的C由左边的向量的矩阵向量乘积给出:。
这些方法的直接优势在于它们允许用户在向量的级别/单位而不是标量上进行操作。为了完全理解线性代数而不会迷失在复杂的索引操作中,关键是要用尽可能多的概念进行操作。
除此之外,了解一些更高级别的矩阵乘法的基本属性是很有必要的:
(1)矩阵乘法结合律:(AB)C=A(BC)。
(2)矩阵乘法分配律:A(B+C)=AB+AC。
矩阵乘法通常不是可交换的,也就是说,通常AB≠BA。例如,假设,
,如果m和q不相等,则矩阵乘积BA甚至不存在。
如果不熟悉这些属性,可查阅相关资料花点时间验证它们。例如,为了检验矩阵乘法的相关性,假设,
,
。注意
,所以
。类似地,
,所以
。因此,所得矩阵的维度一致。
为了表明矩阵乘法是相关的,足以检查(AB)C的第(i,j)个元素是否等于A(BC)的第(i,j)个元素,可以使用矩阵乘法的定义直接验证这一点:

2.3.3 矩阵运算和性质
这里将介绍矩阵和向量的几种运算和属性。
1.单位矩阵和对角矩阵
对于单位矩阵,,它是一个方阵,对角线的元素是1,其余元素都是0:

对于所有,有:
AI=A=IA
注意 在某种意义上,单位矩阵的表示法是不明确的,因为它没有指定I的维数。通常,I的维数是从上下文推断出来的,以便使矩阵乘法成为可能。例如,在上面的等式中,AI=A中的I是n×n矩阵,而A=IA中的I是m×m矩阵。
对角矩阵是一种这样的矩阵:对角线之外的元素全为0。对角阵通常表示为:D=diag(d1,d2,…,dn),其中:

显然,单位矩阵I=diag(1,1,…,1)。
2.转置
矩阵的转置是指翻转矩阵的行和列。给定一个矩阵,它的转置为n×m的矩阵
,其中的元素为:
(AT)ij=Aji
事实上,在描述行向量时已经使用了转置,因为列向量的转置自然是行向量。转置的以下属性很容易验证:
(1)(AT)T=A。
(2)(AB)T=BTAT。
(3)(A+B)T=AT+BT。
3.对称矩阵
如果A=AT,则矩阵是对称矩阵。如果A=-AT,则它是反对称的。很容易证明,对于任何矩阵
,矩阵A+AT是对称的,矩阵A-AT是反对称的。由此得出,任何方矩阵
可以表示为对称矩阵和反对称矩阵的和,所以:

上面的公式右边的第一个矩阵是对称矩阵,而第二个矩阵是反对称矩阵。事实证明,对称矩阵在实践中用得很多,它们有很多很好的属性。
通常将大小为n的所有对称矩阵的集合表示为,因此
意味着A是对称的n×n矩阵。
4.矩阵的迹
方矩阵的迹表示为tr(A)(或者只是tr A),是矩阵中对角元素的总和,表示为:

迹具有以下属性:
(1)若矩阵,则:tr A=tr AT。
(2)若矩阵,则:tr(A+B)=tr A+tr B。
(3)若矩阵,
,则:tr(tA)=t tr A。
(4)若矩阵A、B、AB为方阵,则:tr AB=tr BA。
(5)若矩阵A、B、C、ABC为方阵,则:tr ABC=tr BCA=tr CAB。同理,更多矩阵的积也具有这个性质。
作为如何证明这些属性的示例,将考虑上面给出的第四个属性。假设,
(因此
是方阵)。观察到
也是一个方阵,因此对它们进行迹的运算是有意义的。要证明tr AB=tr BA,请注意:

这里,、
和tr BA使用迹运算符和矩阵乘法的定义,重点在第4个等式,使用标量乘法的可交换性来反转每个乘积中的项的顺序,以及标量加法的可交换性和相关性,以便重新排列求和的顺序。
5.范数
向量的范数||x||是非正式度量的向量的“长度”。例如,有常用的欧几里得或范数:

注意 。
更正式地,范数是满足4个属性的函数:
(1)对于所有,f(x)≥0(非负)。
(2)当且仅当x=0时,f(x)=0(明确性)。
(3)对于所有,
,f(tx)=|t|f(x)(正齐次性)。
(4)对于所有,f(x+y)≤f(x)+f(y)(三角不等式)。
其他范数的例子是范数:

和范数:

事实上,到目前为止所提出的3个范数都是范数族的例子,它们由实数p≥1参数化,并定义为:

也可以为矩阵定义范数,例如弗罗贝尼乌斯(Frobenius)范数:

另外,还有许多其他范数,这里不再给出。
6.特征值和特征向量
给定一个方阵,认为在以下条件下,
是A的特征值,
是相应的特征向量:
Ax=λx,x≠0
直观地说,这个定义意味着将A乘以向量x会得到一个新的向量,该向量指向与x相同的方向,但按系数λ缩放。
值得注意的是,对于任何特征向量和标量
,A(cx)=cAx=cλx=λ(cx),cx也是一个特征向量。因此,当讨论与λ相关的特征向量时,通常假设特征向量被标准化为长度为1(这仍然会造成一些歧义,因为x和-x都是特征向量,但必须接受这一点)。
可以重写上面的等式来说明(λ,x)是A的特征值和特征向量的组合:
(λI-A)x=0,x≠0
但是(λI-A)x=0只有当(λI-A)有一个非空零空间,同时(λI-A)是奇异的,x才具有非零解,即:
|(λI-A)|=0
现在,可以使用行列式先前的定义将表达式|(λI-A)|扩展为λ中的(非常大的)多项式,其中,λ的度为n。它通常被称为矩阵A的特征多项式。
然后找到这个特征多项式的n个(可能是复数)根,并用λ1,…,λn表示。这些都是矩阵A的特征值,但注意它们可能不明显。
为了找到特征值λi对应的特征向量,只需解线性方程(λI-A)x=0,因为(λI-A)是奇异的,所以保证有一个非零解(但也可能有多个或无穷多个解)。
注意 这不是实际用于数值计算特征值和特征向量的方法(记住行列式的完全展开式有n!项),这是一个数学上的争议。
以下是特征值和特征向量的属性(所有假设在具有特征值λ1,…,λn的前提下):
A的迹等于其特征值之和:

A的行列式等于其特征值的乘积:

A的秩等于A的非零特征值的个数。
假设A非奇异,其特征值为λ,特征向量为x。那么1/λ是具有相关特征向量x的A-1的特征值,即A-1x=(1/λ)x(要证明这一点,取特征向量方程Ax=λx,两边都左乘A-1)。
对角阵的特征值d=diag(d1,…,dn),实际上就是对角元素d1,…,dn。
7.对称矩阵的特征值和特征向量
通常情况下,一般的方阵的特征值和特征向量的结构可以很细微地表示出来。值得庆幸的是,在机器学习的大多数场景下,处理对称实矩阵就足够了,其处理的对称实矩阵的特征值和特征向量具有显著的特性。
此处,假设A是实对称矩阵,具有以下属性:
(1)A的所有特征值都是实数,用λ1,…,λn表示。
(2)存在一组特征向量u1,…,un,对于所有i,ui是具有特征值λi和b的特征向量。u1,…,un是单位向量并且彼此正交。
设U是包含ui作为列的正交矩阵:

设∧=diag(λ1,…,λn)是包含λ1,…,λn作为对角线上的元素的对角矩阵。可以验证:

考虑到正交矩阵U满足TUU=I,利用上面的方程,得到:
A=AUUT=U∧UT
这种A的新的表示形式为U∧UT,通常称为矩阵A的对角化。术语对角化是这样来的:通过这种表示,通常可以有效地将对称矩阵A视为对角矩阵,这更容易理解。
2.3.4 矩阵微积分
机器学习中将广泛用到矩阵微积分的知识,本节将介绍矩阵微积分的一些基本定义。
1.梯度
假设是将维度为m×n的矩阵
作为输入并返回实数值的函数,然后f的梯度(相对于
)是偏导数矩阵,定义如下:

即,对于m×n矩阵:

请注意,▽Af(A)的维度始终与A的维度相同。特殊情况下,如果A只是向量,则

重要的是,只有当函数是实值时,即函数返回标量值,才定义函数的梯度。例如,相对于x,不能取Ax的梯度,因为这个量是向量值。它直接从偏导数的等价性质得出:
▽x(f(x)+g(x))=▽xf(x)+▽xg(x)。
对于,▽x(tf(x))=t▽xf(x)。
原则上,梯度是偏导数对多变量函数的自然延伸。然而,在实践中,由于符号的原因,使用梯度有时是很困难的。例如,假设是一个固定系数矩阵,
是一个固定系数向量。设
为f(z)=zTz定义的函数,因此▽zf(z)=2z。但现在考虑表达式:
▽f(Ax)
该表达式的解释至少有两种可能:在第一种解释中,回想起▽zf(z)=2z。在这里,将▽f(Ax)解释为评估点Ax处的梯度,因此:

在第二种解释中,将数量f(Ax)视为输入变量x的函数。更正式地说,设g(x)=f(Ax)。在这个解释中:

在这里,可以看到这两种解释确实不同。一种解释产生m维向量作为结果,而另一种解释产生n维向量作为结果。
这里,关键是要明确需要区分的变量。在第一种解释下,将函数f与其参数z进行微分,然后替换参数Ax0。在第二种解释下,将复合函数g(x)=f(Ax)直接与x进行微分。
将第一种解释表示为▽zf(Ax),第二种解释表示为▽xf(Ax)。
2.黑塞矩阵
假设是一个函数,它接收
中的向量并返回实数。那么关于x的黑塞(Hessian Matrix)矩阵(又译作海森矩阵),写作:
,或者简单地说,H是n×n矩阵的偏导数:

换句话说,,其:

注意:黑塞矩阵通常是对称矩阵:

与梯度相似,只有当f(x)为实值时才定义黑塞矩阵。
很自然地认为梯度与向量函数的一阶导数相似,而黑塞矩阵与向量函数的二阶导数相似(使用的符号也暗示了这种关系)。这种直觉通常是正确的,但需要记住以下几个注意事项。
首先,对于一个变量的实值函数,它的基本定义:二阶导数是一阶导数的导数,即:

然而,对于向量的函数,函数的梯度是一个向量,不能取向量的梯度,即:

上述表达式没有实际意义。因此,黑塞矩阵不是梯度的梯度。然而,下面这种情况却几乎是正确的:如果看一下梯度(▽xf(x))i=∂f(x)/∂xi的第i个元素,并取关于x的梯度得到:

这是黑塞矩阵第i行(列),所以:

可以说,由于,因此这实际上是取▽xf(x)的每个元素的梯度,而不是整个向量的梯度。
注意,虽然可以对矩阵取梯度,但本书只考虑对向量
取黑塞矩阵。这会方便很多(事实上,所做的任何计算都不要求找到关于矩阵的黑森方程),因为关于矩阵的黑塞方程必须对矩阵所有元素求偏导数
,将其表示为矩阵相当麻烦。
3.二次函数和线性函数的梯度和黑塞矩阵
现在尝试确定几个简单函数的梯度和黑塞矩阵。
对于,设f(x)=bTx的某些已知向量
,则:

所以:

由此可以很容易地看出▽xbTx=b。这应该与单变量微积分中的类似情况进行比较,其中∂/(∂x)ax=a。
现在考虑的二次函数f(x)=xTAx。记住这一点:

为了取偏导数,将分别考虑包括xk和因子的项:

最后一个等式,是因为A是对称的(可以安全地假设,因为它以二次形式出现)。注意,▽xf(x)的第k个元素是A和x的第k行的内积。因此,▽xxTAx=2Ax。同样,应该提醒单变量微积分中的类似事实,即∂/(∂x)ax2=2ax。
最后,让我们来看二次函数f(x)=xTAx的黑塞矩阵(显然,线性函数bTx的黑塞矩阵为零)。在这种情况下:

因此,应该很清楚,这应该是完全可以理解的(同样类似于∂2/(∂x2)ax2=2a的单变量事实)。
简要概括起来:
▽xbTx=b。
▽xxTAx=2Ax(如果A是对称矩阵)。
(如果A是对称矩阵)。
4.最小二乘法
下面由前面得到的方程来推导最小二乘方程。假设得到矩阵(为了简单起见,假设A是满秩的)和向量
,从而使
。
在这种情况下,将无法找到向量,由于Ax=b,因此想要找到一个向量x,使得Ax尽可能接近b,用欧几里得范数的平方
来衡量。
使用公式可以得到:

根据x的梯度及梯度的性质:

将最后一个表达式设置为零,然后解出x,得到正规方程:

5.行列式的梯度
现在考虑一种情况,找到一个函数相对于矩阵的梯度,也就是说,对于,要找到▽A|A|。对行列式:

其中,矩阵是A删除i行和j列的矩阵。
所以:

由此可知,该式可以直接从伴随矩阵的性质得出:
▽A|A|=(adj(A))T=|A|A-T
现在来考虑函数,f(A)=log|A|。注意,必须将f的域限制为正定矩阵,因为这确保了|A|>0,因此|A|的对数是实数。在这种情况下,可以使用链式法则(即单变量演算中的普通链式法则)来验证:

由此可以明显看出:

可以在最后一个表达式中删除转置,因为A是对称的。注意与单值情况的相似性,其中∂/(∂x)log x=1/x。
6.特征值优化
最后,使用矩阵特征值/特征向量分析方式可以求解优化问题。考虑以下等式约束优化问题:

对于对称矩阵,求解等式约束优化问题的标准方法是采用拉格朗日形式,一种包含等式约束的目标函数,在这种情况下,拉格朗日函数可由以下公式给出:

其中,λ被称为与等式约束关联的拉格朗日乘子。可以确定,要使x*成为问题的最佳点,拉格朗日的梯度必须在x*处为零(这不是唯一的条件,但它是必需的)。也就是说:

请注意,这只是线性方程Ax=λx。这表明假设xTx=1,可能最大化(或最小化)xTAx的唯一点是A的特征向量。