• 线性代数


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

    基础概念

    标量、向量、矩阵、张量

    • 标量维度为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称为奇异矩阵;否则称为非奇异矩阵。 ↩︎

  • 相关阅读:
    python 学习分享-进程
    python 学习分享-实战篇类 Fabric 主机管理程序开发
    python 学习分享-线程
    python 学习分享-paramiko模块
    linux ubuntu开启sshd
    python 学习分享-实战篇高级的ftp
    python 学习分享-socketserver
    python 学习分享-socket编程
    Java学习笔记--Java开发坏境搭建
    C# 泛型
  • 原文地址:https://www.cnblogs.com/YoungF/p/14422417.html
Copyright © 2020-2023  润新知