线性代数

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

基础概念

标量、向量、矩阵、张量

  • 标量维度为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


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

原文地址:https://www.cnblogs.com/YoungF/p/14422417.html