第二章 线性代数
线性代数是理解深度学习所必须掌握的基础数学学科之一
-
线性代数主要是面向连续数学,而非离散数学。很多计算机科学家很少接触它。
-
线性代数的几个数学概念
-
标量(scalar):一个标量就是一个单独的数,它不同于线性代数中研究的其他大部分对象(通常是多个数的数组)。我们用斜体表示标量。标量通常被赋予小写的变量名称。
-
向量(vector):一个向量是一列数。这些数是有序排列的。通过次序中的索引,我们可以确定每个单独的数。通常我们赋予向量粗体的小写变量名称。
- 向量中的元素可以通过带脚标的斜体表示。向量x的第一个元素是x1
- 符号-表示集合的补集中的索引。比如x−1表示x中除x1外的所有元素
-
矩阵(matrix):矩阵是一个二维数组,其中的每一个元素由两个索引(而非一个)所确定。我们通常会赋予矩阵粗体的大写变量名称,比如A。
- 在表示矩阵中的元素时,通常以不加粗的斜体形式使用其名称,索引用逗号间隔。比如, 表示A左上的元素, 表示A右下的元素。
- 通过用“:”表示水平坐标,以“i”表示垂直坐标i中的所有元素。比如,A{i,:}表示A中垂直坐标i上的一横排元素。这也被称为A的第i行(row)。同样地,A:,i表示A的第i列(column)。
- 当需要明确表示矩阵中的元素时,我们将它们写在用方括号括起来的数组中。
- 表示函数f作用在A上输出的矩阵的第i行第j列元素。此时不必将矩阵的变量名称小写化。
- 矩阵的形状一样,我们可以把两个矩阵相加。两个矩阵相加是指对应位置的元素相
加,比如C=A﹢B,其中 。 - 标量和矩阵相乘,或是和矩阵相加时,我们只需将其与矩阵的每个元素相乘或相加,比
如D=a·B﹢c,其中 ,a和c为标量,D和B为矩阵。 - 矩阵和向量相加,产生另一个矩阵:C=A﹢b,其中 ,表示向量b和矩阵A的每一行相加。
-
张量(tensor):在某些情况下,我们会讨论坐标超过两维的数组。一般一个数组中的元素分布在若干维坐标的规则网格中,我们称之为张量。
- 张量中坐标为(i,j,k)的元素记作 。
-
转置(transpose),矩阵的转置是以对角线为轴的镜像,这条从左上角到右下角的对角线被称为主对角线(main diagonal)。
- 矩阵A的转置表示为AT。
- 向量可以看作只有一列的矩阵。向量的转置可以看作只有一行的矩阵。
- 标量可以看作只有一个元素的矩阵。因此,标量的转置等于它本身。a=aT
-
矩阵乘法(乘积) (matrix product)。两个矩阵A和B的矩阵乘积是第三个矩阵C。
扫描二维码关注公众号,回复: 9477198 查看本文章- 矩阵A的列数必须和矩阵B的行数相等。如果矩阵A的形状是m×n,矩阵B的形状是n×p,那么矩阵C的形状是m×p。
- 矩阵乘法C=AB,定义是
- 2个矩阵乘法不是指2个矩阵中对应元素的乘积。2个矩阵中对应元素的乘积称为元素对应乘积(element-wise product)或者Hadamard乘积(Hadamard product),记为
- 两个相同维数的向量x和y的点积(dot product)可看作矩阵乘积,XTY。因此,可
以把矩阵乘积C=AB中计算C{i,j}的步骤看作A的第i行和B的第j列之间的点积。 - 矩阵乘法运算性质
- 分配律,A(B+C)=AB+AC
- 结合律,A(BC)=(AB)C
- 交换律
- 不同于标量乘积,矩阵乘积并不满足交换律(AB=BA的情况并非总是满足)
- 两个向量的点积满足交换律 。xTy=yTx
- 矩阵乘积的转置, (AB)T=BTAT
- 由此得证, xTy = (xTy)T = yTx。理由,标量转置是自身。
-
-
线性方程组 Ax = b,其中
- ,A属于一个已知矩阵
- ,b属于一个已知向量
- ,x是一个我们要求解的未知向量。向量x的每一个元素xi都是未知的。
- 矩阵A的每一行和b中对应的元素构成一个约束。
- 即, , …
- 最终
- 或者更加明确的表示为
- 最终
单位矩阵和逆矩阵
-
单位矩阵(identity matrix),任意向量和单位矩阵相乘,都不会改变。我们将保持n维向量不变的单位矩阵记作In。
- , , Inx = x
- 单位矩阵的结构很简单:所有沿主对角线的元素都是1,而其他位置的所有元素都是0
- 例,I3,
-
矩阵逆(matrix inversion) , 矩阵A的矩阵逆记作A−1, 矩阵A满足如下条件A−1A=In
-
由此,可以得到线性方程组的以下推导过程
Ax = b
A−1Ax = A−1b
Inx = A−1b
x = A−1b -
显然要求解未知向量x,这取决于我们能否找到一个逆矩阵A−1
-
注意:因为逆矩阵A−1在数字计算机上只能表现出有限的精度,所以并不会逆矩阵A−1
在大多数软件应用程序中实际使用。而有效使用向量b的算法通常可以得到更精确的x。
-
-
线性组合(linear combination)
为了分析方程Ax = b有多少个解,我们可以将A的列向量看作从原点(origin)(元素都是零的向量)出发的不同方向,确定有多少种方法可以到达向量b。而向量x中的每个元素表示我们应该沿着这些方向走多远,即xi表示我们需要沿着第i个向量的方向走多远。即:
以上这种操作就称为线性组合。
一组向量的线性组合,是指每个向量乘以对应标量系数之后的和,即
线性相关和生成子空间
-
生成子空间(span),一组向量的生成子空间是原始向量线性组合后所能抵达的点的集合。
- 确定Ax=b是否有解,相当于确定向量b是否在A列向量的生成子空间
- 这个特殊的生成子空间被称为A的列空间(column space)或者A的值域(range)。
- 为了使线性方程Ax=b对于任意向量 都存在解,我们要求A的列空间构成整个Rm。如果Rm中的某个点不在A的列空间中,那么该点对应的b会使得该方程没有解。这表示A至少有m列,而 ,即 。否则,A列空间的维数会小于m。
- 注意:如果A中列向量有冗余,也就是说它的两个列向量是相同的,那么它的列空间和它的一个列向量作为矩阵的列空间是一样的。例如:
矩阵中2个列向量相同,那么它的列空间仍然只是一条线。这种冗余称为线性相关(linear dependence)
- 如果某个向量是一组向量中某些向量的线性组合,那么我们将这个向量加入这组向量后不会增加这组向量的生成子空间。
-
一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量称为线性无关(linearly independent)。
- 如果一个矩阵的列空间要涵盖整个 ,那么该矩阵必须包含至少一组m个线性无关的向量
-
如果要想让Ax=b对于每一个b有唯一解,那么该矩阵必须是方阵(square),即m = n,或者说行数和列数相等的矩阵。并且所有列向量都是线性无关的。
-
一个列向量线性相关的方阵被称为奇异(singular)矩阵。
-
如果矩阵A不是一个方阵或者是一个奇异的矩阵(方阵,列向量线性相关),Ax=b仍然可能有解。但是我们不能使用矩阵逆去求解,即x = A−1b。
-
我们已经知道,对于矩阵A的矩阵逆A−1满足如下条件A−1A=In,这个也叫逆矩阵左乘。对于方阵,它的逆矩阵左乘和逆矩阵右乘(AA−1=In)是相等的。
范数
-
范数是一种强化了的距离概念,它在定义上比距离多了一条数乘的运算法则。有时候为了便于理解,我们可以把范数当作距离来理解。
-
在数学上,范数包括向量范数和矩阵范数,向量范数表征向量空间中向量的大小,矩阵范数表征矩阵引起变化的大小。
-
机器学习中,我们经常使用称为范数(norm)的函数来衡量向量大小。范数(包括Lp范数)是将向量映射到非负值的函数。Lp范数(一组范数) ||x||p 定义如下: 其中, ,
- 直观上来说,向量x的范数衡量从原点到点x的距离。
- 当p=2时,L2范数称为欧几里得范数(Euclidean norm)。它表示从原点出发到向量x确定的点的欧几里得距离。简化表示为||x||,略去了下标2。
- 平方L2范数经常用来衡量向量的大小,可以简单地通过点积xTx计算。
- L1范数在各个位置斜率相同,同时保持简单的数学形式。当机器学习问题中零和非零元素之间的差异非常重要时,通常会使用L1范数。它的简化形式为
- 深度学习中,经常使用Frobenius范数(Frobenius norm)衡量矩阵的大小。
- 2个向量的点积可以用范数来表示。XTY=||x||2 ||y||2 cos , 表示x和y的夹角。
特殊类型的矩阵和向量
- 对角矩阵(diagonal matrix)只在主对角线上含有非零元素,其他位置都是零。矩阵D是对角矩阵,当且仅当对于所有的
, D{i,j} = 0
- 单位矩阵就是对角矩阵,其对角元素全部是1
- diag(ν)表示对角元素由向量ν中元素给定的一个对角方阵。
- 乘法diag(ν)x,我们只需要将x中的每个元素xi放大νi倍。 即,diag(ν)x = (元素对应乘积)
- 对角矩阵的逆矩阵存在,当且仅当对角元素都是非零值
- 机器学习中,通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且简明扼要的)算法。
- 并非所有的对角矩阵都是方阵。长方形的矩阵也有可能是对角矩阵。
- 非方阵的对角矩阵没有逆矩阵
- 长方形对角矩阵D,乘法Dx会涉及x中每个元素的缩放。如果D是瘦长型矩阵,那么在缩放后的末尾添加一些零;如果D是胖宽型矩阵,那么在缩放后去掉最后一些元素。
- 对称(sy mmetric)矩阵是转置和自己相等的矩阵,即A = AT。例如,如果A是一个距离度量矩阵,Ai,j表示点i到点j的距离,那么Ai,j=Aj,i,因为距离函数是对称的。
- 单位向量(unit vector)是具有单位范数(unit norm)的向量,即||x||2=1
- 正交(orthogonal),如果x+yT = 0,那么向量x和向量y互相正交。如果两个向量都有非零范数,那么这两个向量之间的夹角是90◦
- 在Rn中,最多有n个范数非零向量互相正交。
- 如果这些向量不但互相正交,而且范数都为1,那么我们称它们是标准正交(orthonormal)。
- 正交矩阵(orthogonal matrix)指行向量和列向量是分别标准正交的方阵。即ATA = AAT = I,显然A-1=AT。也就是说,如果矩阵A满足ATA=I或者AAT =I,那它就是正交矩阵。
- 正交矩阵求逆计算代价小
特征分解(A=Vdiag(λ)V-1)
-
矩阵分解 (decomposition, factorization)是将矩阵拆解为数个矩阵的乘积,可分为三角分解、满秩分解、QR分解、Jordan分解和SVD(奇异值分解)等
-
通过分解矩阵可以发现矩阵表示成数组元素时不明显的函数性质
-
特征分解(eigen decomposition)是使用最广的矩阵分解之一,即我们将矩阵分解成一组特征向量和特征值。
-
方阵A的特征向量(eigenvector)是指与A相乘后,相当于对该向量进行缩放的非零向量ν:Av=λv,其中标量λ称为这个特征向量对应的特征值(eigenvalue)。
- 我们也可以定义左特征向量(left eigenvector), vT A=λvT 。不过通常我们更关注右特征向量(right eigenvector)
- ν是A的特征向量,那么任何缩放后的向量sv( , )也是A的特征向量。同时,sv和v的特征值相同。由此,通常我们只考虑单位特征向量。
-
假设矩阵A有n个线性无关的特征向量{v(1),…,v(n)},对应着特征值{λ1,…,λn},我们将特征向量连接成一个矩阵,使得每一列是一个特征向量:V =[v(1),…,v(n)]。同样,也可以将特征值连接成一个向量λ=[λ1,…,λn]。因此矩阵A的特征分解(eigendecomposition)可以记作A=Vdiag(λ)V-1,其中diag(λ)表示对角元素由向量λ中元素给定的一个对角方阵。
-
不是每一个矩阵都可以分解成特征值和特征向量
-
深度学习中研究的每个实数对称矩阵都可以分解成实特征向量和实特征值,A=QΛQT。其中
- Q是A的特征向量组成的正交矩阵
- Λ是对角矩阵
- 特征值Λ{i,i}对应的特征向量是矩阵Q的第i列,记作Q{:,i}
- 因为Q是正交矩阵,我们可以将A看作沿方向ν(i)延展λi倍的空间。如下图所示,显示了特征向量和特征值的作用效果
上图中矩阵A有两个标准正交的特征向量,对应特征值为λ1的ν(1)以及对应特征值为λ2的ν(2)。
左图画出了所有单位向量 (二维空间)的集合,构成一个单位圆。
右图画出了所有Au点的集合。
结论:通过观察A拉伸单位圆的方式,我们可以看到它将ν(i)方向的空间拉伸了λi倍
-
一个实对称矩阵A特征分解可能并不唯一。如果两个或多个特征向量拥有相同的特征值,那么在由这些特征向量产生的生成子空间中,任意一组正交向量都是该特征值对应的特征向量。
-
我们通常按降序排列Λ(特征值对角矩阵)的元素。此时特征分解唯一,当且仅当所有的特征值都是唯一的。
-
矩阵的特征分解给了我们很多关于矩阵的有用信息
- 矩阵是奇异(方阵,列向量线性相关)的,当且仅当含有零特征值
- 实对称矩阵的特征分解也可以用于优化二次方程,f(x)=xTAx,其中||x||2=1(L2范数)。当x等于A的某个特征向量时,f将返回对应的特征值。在限制条件下,函数f的最大值是最大特征值,最小值是最小特征值。
- 所有特征值都是正数的矩阵称为正定(positive definite)。正定矩阵保证xTAx=0,那么x=0
- 所有特征值都是非负数的矩阵称为半正定(positive semidefinite)。半正定矩阵受到关注是因为它们保证对任何非零向量x,xTAx≥0。
- 所有特征值都是负数的矩阵称为负定(negative definite)
- 所有特征值都是非正数的矩阵称为半负定(negative semidefinite)
奇异值分解(A=UDVT)
- 奇异值分解(singular value decomposition,SVD),是将矩阵分解为奇异向量(singular vector)和奇异值(singular value)
- 每个实数矩阵都有一个奇异值分解,但不一定都有特征分解。例如,非方阵的矩阵没有特征分解,这时我们只能使用奇异值分解。
- 奇异值分解与特征分解是类似的,只不过我们将矩阵A分解成三个矩阵的乘积:A=UDVT
- 假设A是一个m×n的矩阵,那么U是一个m×m的矩阵,D是一个m×n的矩阵,V是一个n×n矩阵
- 矩阵U和V都定义为正交矩阵,而矩阵D定义为对角矩阵。注意,矩阵D不一定是方阵。
- 对角矩阵D对角线上的元素称为矩阵A的奇异值(singular value)。矩阵U的列向量称为左奇异向量(left singular vector),矩阵V的列向量称右奇异向量(right singular vector)。
- A的左奇异向量(left singular vector)U是AAT的特征向量
- A的右奇异向量(right singular vector)V是ATA的特征向量
- A的非零奇异值是ATA特征值的平方根,同时也是AAT特征值的平方根
Moore-Penrose伪逆(A+=VD+UT,利用奇异值分解SVD)
- 求伪逆通常可以用来求解线性最小平方、最小二乘法问题。
- 对于非方矩阵而言,其逆矩阵没有定义,即没有逆矩阵。说明如下
线性方程组Ax=b,等式两边左乘A的左逆B后,我们得到x = Bb。
此时,如果矩阵A的行数大于列数,那么x = Bb可能没有解;如果矩阵A的行数小于列数,那么上述矩阵可能有多个解。
- Moore-Penrose伪逆(Moore-Penrose pseudoinverse)使我们在这类问题上取得了一定的进展
- 伪逆矩阵A+是逆矩阵的广义形式
- 矩阵A的伪逆数学定义:
- 而计算伪逆的实际算法没有基于这个定义,而是使用下面的公式
- 矩阵U、D和V是矩阵A奇异值分解后得到的矩阵。
- 对角矩阵D的伪逆D+是其非零元素取倒数之后再转置得到的。
- 当矩阵A的列数多于行数时,使用伪逆求解线性方程是众多可能解法中的一种
- x=A+b 是方程所有可行解中欧几里得范数||x||2最小的一个。
- 当矩阵A的行数多于列数时,可能没有解。在这种情况下,通过伪逆得到的x使得Ax和b的欧几里得距离最小||Ax - b||2。
迹运算
- **迹运算(trace)**返回的是矩阵对角元素的和
- 若不使用求和符号,有些矩阵运算很难描述,而通过矩阵乘法和迹运算符号可以清楚地表示。例如:迹运算提供了另一种描述矩阵Frobenius范数的方式
原来
现在 - 用迹运算表示表达式,我们可以使用很多有用的等式巧妙地处理表达式。例如,迹运算
在转置运算下是不变的 - 多个矩阵相乘得到的方阵的迹,和将这些矩阵中的最后一个挪到最前面之后相乘的迹是
相同的 - 即使循环置换后矩阵乘积得到的矩阵形状变了,迹运算的结果依然不变。例如,假设矩阵 ,矩阵 ,尽管 和 ,我们可以得到
- 标量在迹运算后仍然是它自己:a=Tr(a)
行列式det(A)
- 行列式在数学中是一个函数,记作det(A)或 | A |,是一个将方阵A映射到实数的函数
- 行列式可以看做是有向面积或体积的概念在一般的欧几里得空间中的推广。或者说,在 n 维欧几里得空间中,行列式描述的是一个线性变换对“体积”所造成的影响。
- 行列式等于矩阵特征值的乘积
- 行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小了多少
- 如果行列式是0,那么空间至少沿着某一维完全收缩了,使其失去了所有的体积;如果行列式是1,那么这个转换保持空间体积不变。
实例:主成分分析PCA
- 主成分分析(principal components analy sis,PCA)是一个简单的机器学习算法,可以通过基础的线性代数知识推导
- PCA是一种简化数据的降维技术。通俗理解:就是找出一个最主要的特征,然后进行分析。例如: 考察一个人的智力情况,就直接看数学成绩就行(存在:数学、语文、英语成绩)
- PCA是应用最广泛的降维技术。
- 优点:降低数据的复杂度,识别最重要的多个特征
- 缺点:不一定需要,且可能损失有用的信息
- 使用数据类型:数值型数据
【PCA 工作原理】
- 找出第一个主成分的方向,也就是数据
方差最大
的方向。数据的最大方差给出了数据的最重要信息。 - 找出第二个主成分的方向,也就是数据
方差次大
的方向,并且该方向与第一个主成分方向正交(orthogonal 如果是二维空间就叫垂直)
。 - 通过这种方式计算出所有的主成分方向。
- 通过数据集的协方差矩阵及其特征值分析,我们就可以得到这些主成分的值。协方差矩阵上的特征值分析可以用一系列正交坐标轴来获取。
- 一旦得到了协方差矩阵的特征值和特征向量,我们就可以保留最大的 N 个特征。这些特征向量也给出了 N 个最重要特征的真实结构,我们就可以通过将数据乘上这 N 个特征向量 从而将它转换到新的空间上。
具体如下图所示,覆盖整个数据集的三条直线,其中直线 B 最长
在PCA中我们对数据进行了旋转,该旋转的过程取决与数据本身,如上图,在A,B,C三条直线中。B直线覆盖数据的范围最广,那么把第一条坐标轴旋转到B直线的位置,此时覆盖数据的方差最大,数据的最大放方差给出了数据的最重要的信息
选定第一条坐标轴之后,假如该坐标轴与第一条坐标轴垂直, 它就是覆盖数据次大差异性的坐标轴。这里更严谨的说法就是正交(orthogonal)当然 ,在二维平面下,垂直和正交是一回事,直线 C 就是第二条坐标轴。利用PCA我们将数据坐标轴旋转至数据角度上的那些最重要的方向。
【利用线性代数知识推导PCA】
假设在 Rn 空间中有 m 个点 {x(1),…,x(m)},我们希望对这些点进行有损压缩
。
有损压缩表示我们使用更少的内存,但损失一些精度去存储这些点。我们希望损失的精度尽可能少。
编码这些点的一种方式是用低维
表示。
对于每个点
会有一个对应的编码向量
。如果l比n小,那么我们便使用了更少的内存来存储原来的数据。
我们希望找到一个编码函数
,根据输入返回编码,f(x)=c;我们也希望找到一个解码函数
,给定编码重构输入,x≈g(f(x))。
PCA由我们选择的解码函数而定。
具体来讲,为了简化解码器,我们使用矩阵乘法
将编码映射回 Rn ,即g(c)=Dc。其中
是定义解码的矩阵
。
到目前为止,所描述的问题可能会有多个解。因为如果我们按比例地缩小所有点对应的编码向量ci,那么只需按比例放大D:,i,即可保持结果不变。为了使问题有唯一解,我们限制D中所有列向量都有单位范数。
计算这个解码器的最优编码可能是一个困难的问题。为了使编码问题简单一些,PCA限制D的列向量彼此正交(注意,除非l=n,否则严格意义上D不是一个正交矩阵)。
为了将这个基本想法变为我们能够实现的算法,首先我们需要明确如何根据每一个输入x得到一个最优编码
c∗
一种方法是最小化原始输入向量x和重构向量g(c∗)之间的距离。我们使用范数来衡量它们之间的距离。
在PCA算法中,我们使用L2范数
我们可以用 平方L2范数 替代 L2范数,因为两者在相同的值c上取得最小值。这是因为 L2范数 是非负的,并且平方运算在非负值上是单调递增的。
该最小化函数可以简化成
参考:L2范数||x||2 定义如下: