第二章 线性代数
2.1 标量、向量、矩阵和张量
- 标量(scalar):一个数
- 向量(vector):一列数
- 矩阵(matrix):二维数组
- 张量(tensor):多维数组(n>=3)
- 矩阵的每一行可以看做是一个向量,因此向量要能够与矩阵相加,必须满足向量元素个数等于矩阵列数
2.2 矩阵和向量相乘
- 向量点积(dot product)的结果是一个标量
- 注意矩阵乘积(matrix product)和元素对应乘积(dot product)的区别
2.3 单位矩阵和逆矩阵
- 单位矩阵(identity matrix):所有沿主对角线的元素都是 1,而所有其他位置的元素都是 0。
- 逆矩阵(matrix inversion):A的矩阵逆记作:
2.4 线性相关和生成子空间
- 要想用逆矩阵求解Ax=b,A必须满足是方阵(square),且不是奇异(singular)矩阵
- 奇异矩阵:列向量线性相关的方阵
- 列空间(column space):由A的各列张成的Rm的子空间称为A的列空间
- 线性相关(linear dependence):某个向量是一组向量中某些向量的线性组合
- 线性无关(linearly independent):如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量称为线性无关
2.5 范数
- 衡量向量的大小---范数(norm):将向量映射到非负值的函数
-
Lp 范数定义如下:
- L2范数:向量元素平方和的开根号,机器学习中一般使用平方L2范数(why???)
- 平方L2范数:向量元素的平方和
- 计算上方便:可以简单地通过向量与自身的点积x^T*x计算得到
- 数学上也方便:平方L2范数对x中每个元素的导数结果只取决于对应的元素,而L2范数对每个元素求导却和所有元素相关
- L1范数:
- 很多情况下平方L2范数并不受欢迎(why???)
- 它在原点附近增长缓慢:原点附近的x元素接近于0,平方后的结果更加接近于0,而在很多机器学习应用中,区分恰好是0元素和非0但很小的元素是很重要的。
- 当机器学习问题中0和非0元素之间的差异非常重要时,通常使用L1范数。每当x 中某个元素从0 增加ϵ,对应的L1 范数也会增加ϵ
- L∞范数,也被称为最大范数(maxnorm):向量中绝对值最大的元素的绝对值
- 衡量矩阵的大小---Frobenius 范数(Frobenius norm)
- 类似于向量的L2范数:矩阵元素平方和的开根号
2.6 特殊类型的矩阵和向量
- 对角矩阵(diagonal matrix):只在主对角线上含有非0元素,其他位置都是0。受到关注(why???)
- 用diag(v) 表示一个对角元素由向量v 中元素给定的对角方阵
- 对角矩阵参与的矩阵乘法计算高效:计算乘法diag(v)x,我们只需要将x 中的每个元素xi 放大vi 倍。换言之,diag(v)x = v ⊙ x
- 当对角矩阵的逆矩阵存在时,计算也比较高效:diag(v)^-1 = diag([1/v1; : : : ; 1/vn]⊤)
- 通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且简明扼要的)算法
- 对于一个长方形对角矩阵D 而言,乘法Dx 会涉及到x 中每个元素的缩放,如果D 是瘦长型矩阵,那么在缩放后的末尾添加一些零;如果D是胖宽型矩阵,那么在缩放后去掉最后一些元素
- 向量x,y正交:(orthogonal):x^T*y=0即∥x∥2∥y∥2 cos Θ=0
- 如果向量不仅正交,而且范数(L2范数)都为1,称它们是标准正交(orthonormal)
- 正交矩阵(orthogonal matrix):行向量标准正交和列向量也标准正交的方阵,A⊤A = AA⊤
= I,则A^-1 = A⊤,所以正交矩阵受到关注是因为求逆计算代价小。
2.7 特征分解
- 方阵A 的特征向量(eigenvector)是指与A 相乘后相当于对该向量进行缩放的非零向量v:Av =λv,λ为特征值,v为特征向量
- A 的特征分解(eigendecomposition)可以记作A = Vdiag(λ)V^-1
- 每个实对称矩阵都可以分解成实特征向量和实特征值A=QΛQ⊤,Q是A特征向量组成的正交矩阵,Λ是对角矩阵
- 矩阵分解可以得到的信息:
- 矩阵是奇异的:当且仅当含有0特征值
- 正定矩阵:所有特征值都是正数;半正定矩阵:所有特征值都是大于等于0;负定矩阵:所有特征值都是负数;半负定:所有特征值都小于等于0。
- 正定矩阵还保证x⊤Ax = 0 ==>x = 0。
2.8 奇异值分解
- 每个实数矩阵都有一个奇异值分解,但不一定都有特征分解。例如,非方阵的矩阵没有特征分解,这时我们只能使用奇异值分解。
- 奇异值分解(singular value decomposition, SVD):将矩阵A 分解成三个矩阵的乘积:
- 假设 A 是一个 m×n 的矩阵,那么 U 是一个 m×m 的矩阵,D 是一个 m×n 的矩阵,V 是一个 n × n 矩阵。矩阵 U 和 V 都被定义为正 交矩阵,而矩阵 D 被定义为对角矩阵。注意,矩阵 D 不一定是方阵。
- SVD最有用的一个性质可能是拓展矩阵求逆到非方矩阵上
2.9 Moore-Penrose伪逆
- Ax=y:如果矩阵A 的行数大于列数,那么上述方程可能没有解。如果矩阵A 的行数 小于列数,那么上述矩阵可能有多个解。
- 矩阵A伪逆的定义:
- 实际算法:
- 矩阵U,D 和V 是矩阵A奇异值分解后得到的矩阵。对角矩阵D 的伪逆 D+ 是其非零元素取倒数之后再转置得到的
- 当矩阵A 的列数多于行数时,使用伪逆求解线性方程是众多可能解法中的一种。特别地,x = A+*y 是方程所有可行解中欧几里得范数∥x∥2 最小的一个。
- 当矩阵A 的行数多于列数时,可能没有解。在这种情况下,通过伪逆得到的x使得Ax 和y 的欧几里得距离∥Ax - y∥2 最小
2.10 迹运算
- 迹运算返回的是矩阵对角元素的和:
- 迹运算提供了另一种描述矩阵Frobenius范数的方式:
- 多个矩阵相乘得到的方阵的迹,和将这些矩阵中的最后一个挪到最前面之后相乘的迹是相同的:
- 另一个有用的事实是标量在迹运算后仍然是它自己:a = Tr(a)
2.11 行列式
- 行列式,记作det(A),行列式等于矩阵特征值的乘积。行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小了多少
2.12 实例:主成分分析
-
主成分分析(principal components analysis, PCA):
假设在 Rn 空间中我们有 m 个点 {x(1), . . . , x(m)},我们希望对这些点进行有损压缩。
一种编码这些点的方式是用低维表示。每个点 x(i) ∈ Rn,会有一个对应的编码向量 c(i) ∈ Rl(其中l<n)
给定编码函数f(x),使得f(x) = c;给定解码函数,使得x ≈ g(f(x))。 - 为了简化解码器,我们使用矩阵乘法将编码映射回 Rn,即 g(c) = Dc,其中 D ∈ Rn×l 是定义解码的矩阵
- D 的列向量彼此正交(除非 l = n,否则严格意义上 D 不是一个 正交矩阵)
定义目标函数:最小化原始输入向量 x 和重构向量 g(c∗) 之间的距离。我们使用范数来衡量它们之间的距离(L2 范数):
求导得到:
则
记
求解编码矩阵D,由于用相同的矩阵 D 对所有点进行解码,即最小化所有x与c之间的误差,需使用 Frobenius 范数,得到
当l=1时,此时D为一维列向量,将D简化为d,得到:
记
得到:
最优的 d 是 X⊤X 最大特征值对应的特征向量。
以上推导特定于 l = 1 的情况,仅得到了第一个主成分。更一般地,当我们希望得到主成分的基时,矩阵 D 由前 l 个最大的特征值对应的特征向量组成。
附1:
矩阵求导:(参考:https://github.com/soloice/Matrix_Derivatives)
- 变量多次出现的求导法则:若某个变量在函数表达式中多次出现,可以单独计算函数对⾃变量的每一次出现的导数,再把结果加起来。
f(x)=(2x+1)x+x^2
=> f=(2x_1+1)x_2+x_3^2
=> ∇f=2x_2+2x_1+1+2x_3
=> 6x+1- 向量求导的链式法则
- 实值函数对向量求导
变量多次出现的求导法则, x_c表示将x的此次出现不视作自变量
同上
- 向量量数乘求导公式
- 矩阵迹求导
上式证明
- 矩阵求导的链式法则
设y=f(U),U=G(x),则:
- 线性变换的导数
设
则:
附2:
推导1:线性方程组Ax=b的最⼩二乘解
使用线性变换的求导公式
推导2:F范数的求导公式推导
推导3:
学习仿射变换