本文记录深度学习中常用的线性代数基础知识。
基础概念
标量、向量、矩阵、张量
- 标量维度为0,就像坐标轴上的一个点,只有数值。它是没有方向的,以下标量以外的统称为矢量;
- 向量维度为1,就像平面直角坐标系中的一条线;
- 矩阵维度为2,可以理解成三维空间中的一个平面;
- 张量维度大于等于3
特殊向量和矩阵
- 单位向量:(||x||_2 = 1)
- 零向量
- 转置阵:更改轴的顺序,对于矩阵而言就是行变列、列变行,一般用(A^T)表示
- 对角阵:只有主对角线元素不为0,(Lambda = diag(lambda_1, lambda_2, cdots, lambda_n))
- 对称阵:(A=A^T)
- 单位阵:主对角线为1,其余都为0,通常表示为(E)或者(I)
- 逆矩阵:矩阵可逆的充分必要条件是A为非奇异矩阵[1]。求逆矩阵的三种方法:(1)待定系数法;(2)根据伴随阵计算:(A^{-1} = frac{1}{|A|}A^*);(3)根据初等行(列)变换;
- 正交阵:(AA^T=I), (A^{-1}=A^T),充分必要条件是A的列向量都是单位向量且两两正交
矩阵、向量的乘法
矩阵乘法
- 矩阵乘法:(A_{m imes n}B_{n imes p} = C_{m imes p})
- 元素级乘积(element-wise product)/哈达玛积(hadamard product,符号为(A igodot B)):仅限于两个同阶矩阵之间
向量乘法
- 内积/数量积/点乘:(a cdot b = |a| cdot |b| cdot cos heta),结果为标量
- 外积/叉乘:(|a imes b| = |a| cdot |b| cdot sin heta),方向和a、b所在平面垂直并且满足右手系(和物理电磁中的右手准则一样,四指方向从a到b,大拇指指向的方向就是外积结果的方向)
范数norm
范数是度量向量大小的函数。如下是闵可夫斯基距离的表达式(其中p>=1):
[||x||_p = (sum_i |x_i|^p)^{frac{1}{p}}
]
- 当(p=1)时,为曼哈顿距离
- 当(p=2)时,为欧几里得距离
- 当(p=infty),为切比雪夫距离,表达式为(||x||_{infty}=max_i |x_i|)
import torch
def euclidean_distance(v1, v2=None):
if v2 is None:
v1, v2 = torch.zeros_like(v1), v1
return (v2 - v1).square_().sum().sqrt_()
def manhattan_distance(v1, v2=None):
if v2 is None:
v1, v2 = torch.zeros_like(v1), v1
return (v2 - v1).abs_().sum()
def chebyshev_distance(v1, v2=None):
if v2 is None:
v1, v2 = torch.zeros_like(v1), v1
return (v2 - v1).abs_().max()
特殊的,Frobenius norm:
[||A||_F = sqrt {sum_{i,j} A_{i,j}^2}
]
它等价于每个元素的第二范数。
附加:余弦相似度,和范数不同的是,它仅限于计算两个向量之间的相似度:
def cosine_similarity(v1: FloatTensor, v2: FloatTensor):
""" 使用前先归一化 """
if v1.equal(torch.zeros_like(v1)) or v2.equal(torch.zeros_like(v2)):
return torch.tensor(0, dtype=torch.float)
return v1.matmul(v2).true_divide(euclidean_distance(v1)*euclidean_distance(v2))
方阵的特征值和特征向量
特征值分解:(Av = lambda v),(A=Q Lambda Q^{-1})
- 正定阵:所有特征值都为正;
- 半正定阵:所有特征值大于等于0;
- 负正定阵、半负正定阵以此类推。
半正定阵保证,对于任何(x),有(x^TAx geq 0);正定阵在此基础上保证:如果(x^TAx = 0),那么(x=0)
奇异值分解
[A = UDV^{T}
]
摩尔-彭若斯伪逆(The Moore-Penrose Pseudoinverse)
我们知道,逆矩阵这个概念是定义在方阵这个前提上的。假设我们可以计算出矩阵(A_{m imes n})的左逆矩阵(B),那么我们就可以通过(x = By)来计算方程(Ax=y)的解。
因为此时(m ot = n),分两种情况来讨论:
- 如果(m>n),此时(A)为瘦高型,方程无解;
- 如果(m<n),此时(A)为矮胖型,我们可以找到多个可行解;
摩尔彭若斯伪逆矩阵定义为:
[A^+ = lim_{a
ightarrow 0} (A^TA + alpha I)^{-1}A^T
]
然而实际上计算伪逆时通常采用如下公式:
[A^+ = VD^+U^T
]
其中(U, D, V)是A的奇异值分解组成部分,将(D)的主对角线上非零元素取倒数后再做转置即得到(D^+)。
当(A)为矮胖型时,可以计算出(x=A^+y)可行解中第二范数最小的解;当(A)为瘦高型,无解,此时只能求一个尽可能靠近y的解,使得(||Ax-y||_2)尽可能小。
迹(Trace Operator)
[Tr(A) = sum_i A_{i, i}
]
性质:(1)(||A||_F=sqrt {Tr(AA^T)}); (2)(Tr(A)=Tr(A^T))
PCA
略
当(|A|=0)时,矩阵A称为奇异矩阵;否则称为非奇异矩阵。 ↩︎