线性代数

本文记录深度学习中常用的线性代数基础知识。

基础概念

标量、向量、矩阵、张量

  • 标量维度为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 \times n}B_{n \times p} = C_{m \times p}\)
  • 元素级乘积(element-wise product)/哈达玛积(hadamard product,符号为\(A \bigodot B\)):仅限于两个同阶矩阵之间

向量乘法

  • 内积/数量积/点乘:\(a \cdot b = |a| \cdot |b| \cdot cos \theta\),结果为标量
  • 外积/叉乘:\(|a \times b| = |a| \cdot |b| \cdot sin \theta\),方向和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 \times n}\)的左逆矩阵\(B\),那么我们就可以通过\(x = By\)来计算方程\(Ax=y\)的解。

因为此时\(m \not = n\),分两种情况来讨论:

  • 如果\(m>n\),此时\(A\)为瘦高型,方程无解;
  • 如果\(m<n\),此时\(A\)为矮胖型,我们可以找到多个可行解;

摩尔彭若斯伪逆矩阵定义为:

\[A^+ = \lim_{a \rightarrow 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


  1. \(|A|=0\)时,矩阵A称为奇异矩阵;否则称为非奇异矩阵。 ↩︎

posted @ 2021-02-20 17:35  YoungF  阅读(689)  评论(0编辑  收藏  举报