深度学习中的常用线性代数知识汇总——第二篇:行列式、逆矩阵、特征值与特 ...

麻花痒  论坛元老 | 2024-9-13 11:50:58 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1043|帖子 1043|积分 3129

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
0. 前言

   按照国际惯例,首先声明:本文只是我本身学习的明确,固然参考了他人的宝贵见解及成果,但是内容大概存在不正确的地方。假如发现文中错误,希望批评指正,共同进步。
  本系列文章用于介绍深度学习中必须要把握的线性代数基础知识,并结合了PyTorch代码实例。这是本系列文章的第二篇,相关文章链接如下:


  • 第一篇:基础概念、秩、奇特值
  • 第二篇:行列式、逆矩阵、特征值与特征向量(本篇)
  • 第三篇:协方差矩阵、主成分分析、正交性与正定性
1. 行列式

矩阵的行列式(Determinant)是线性代数中的一个重要概念,它在矩阵理论和线性变换中扮演着关键角色。行列式提供了一种量化矩阵性子的方法,特别是在解决线性方程组、计算体积变化判定矩阵可逆性等方面具有重要意义。下面具体介绍矩阵的行列式的定义、性子及其在深度学习中的应用。
   推荐一个关联视频:https://www.bilibili.com/video/BV1Hy4y1a7wm/?spm_id_from=333.999.0.0&vd_source=b1f7ee1f8eac76793f6cadd56716bfbf
  1.1 行列式的定义

对于一个                                    n                         ×                         n                              n \times n                  n×n 的方阵                                   A                              A                  A,其行列式                                    det                         ⁡                         (                         A                         )                              \det(A)                  det(A)或记作                                    ∣                         A                         ∣                              |A|                  ∣A∣是一个标量值,它由矩阵的元素通过特定的方式计算得出。
1.2 行列式的计算方法


  • 2x2 矩阵
    对于一个                                              2                               ×                               2                                      2 \times 2                        2×2 的矩阵                                              A                                      A                        A:
                                                       A                                  =                                               (                                                                                                   a                                                                                                           b                                                                                                                                     c                                                                                                           d                                                                                               )                                                      A = \begin{pmatrix} a & b \\ c & d \end{pmatrix}                           A=(ac​bd​)
    其行列式为:
                                                       det                                  ⁡                                  (                                  A                                  )                                  =                                  a                                  d                                  −                                  b                                  c                                          \det(A) = ad - bc                           det(A)=ad−bc
  • 3x3 矩阵
    对于一个                                             3                               ×                               3                                      3 \times 3                        3×3的矩阵                                              A                                      A                        A:
                                                       A                                  =                                               (                                                                                                   a                                                                                                           b                                                                                                           c                                                                                                                                     d                                                                                                           e                                                                                                           f                                                                                                                                     g                                                                                                           h                                                                                                           i                                                                                               )                                                      A = \begin{pmatrix} a & b & c \\ d & e & f \\ g & h & i \end{pmatrix}                           A=                 ​adg​beh​cfi​                 ​
    其行列式为:
                                                       det                                  ⁡                                  (                                  A                                  )                                  =                                  a                                  (                                  e                                  i                                  −                                  f                                  h                                  )                                  −                                  b                                  (                                  d                                  i                                  −                                  f                                  g                                  )                                  +                                  c                                  (                                  d                                  h                                  −                                  e                                  g                                  )                                          \det(A) = a(ei - fh) - b(di - fg) + c(dh - eg)                           det(A)=a(ei−fh)−b(di−fg)+c(dh−eg)
  • 一般                                                   n                                  ×                                  n                                          n \times n                           n×n 矩阵
    对于                                             n                               ×                               n                                      n \times n                        n×n的矩阵,可以通过递归展开的方式来计算行列式。通常选择第一行(或第一列)来进行展开。具体步骤如下:
    ①选择一行(或一列):通常选择第一行或第一列,由于如许可以简化计算。
    ②计算辅因子:对于该行(或列)的每个元素                                                          a                                               i                                     j                                                             a_{ij}                        aij​,计算其对应的辅因子(cofactor),记作                                                          A                                               i                                     j                                                             A_{ij}                        Aij​。辅因子                                                         A                                               i                                     j                                                             A_{ij}                        Aij​ 是去掉第                                              i                                      i                        i 行和第                                             j                                      j                        j列后剩余子矩阵的行列式乘以                                              (                               −                               1                                           )                                               i                                     +                                     j                                                             (-1)^{i+j}                        (−1)i+j。
    ③ 求和:将该一行(或列)的每个元素与其对应的辅因子相乘,然后求和。
PyTorch中的linalg.det()方法可以用来计算行列式,示例代码如下:
  1. import torch
  2. # 定义一个 3x3 的矩阵 A
  3. A = torch.tensor([[1, 2, 3],
  4.               [4, 5, 6],
  5.               [7, 8, 10]],dtype=torch.float32)
  6. # 计算行列式
  7. det_A = torch.linalg.det(A)
  8. print("Matrix A:")
  9. print(A)
  10. print("Determinant of A:")
  11. print(det_A)
复制代码
输出为:
  1. Matrix A:
  2. tensor([[ 1.,  2.,  3.],
  3.         [ 4.,  5.,  6.],
  4.         [ 7.,  8., 10.]])
  5. Determinant of A:
  6. tensor(-3.0000)
复制代码
1.3 行列式的性子

行列式有很多重要的性子,这些性子使得它在理论和应用中都非常有用。


  • 线性性:假如矩阵的某一行(或列)乘以一个标量                                         k                                  k                     k,那么行列式也乘以                                         k                                  k                     k。
  • 反对称性:交换恣意两行(或列)的位置,行列式的值变号。
  • 零行(列):假如矩阵有一行(或一列)全是零,则行列式为零。
  • 单位矩阵:单位矩阵                                         I                                  I                     I 的行列式为 1。
  • 对角矩阵:对角矩阵的行列式等于对角线上元素的乘积。
  • 三角矩阵:上三角矩阵或下三角矩阵的行列式等于对角线上元素的乘积。
  • 可逆性:当且仅当                                         det                            ⁡                            (                            A                            )                            ≠                            0                                  \det(A) \neq 0                     det(A)=0矩阵                                         A                                  A                     A 可逆。
  • 相似矩阵:相似矩阵具有雷同的行列式。
  • 矩阵乘法:假如                                         A                                  A                     A 和                                         B                                  B                     B是两个                                        n                            ×                            n                                  n \times n                     n×n 的矩阵,则                                        det                            ⁡                            (                            A                            B                            )                            =                            det                            ⁡                            (                            A                            )                            det                            ⁡                            (                            B                            )                                  \det(AB) = \det(A) \det(B)                     det(AB)=det(A)det(B)。
1.4 行列式在深度学习中的应用

在深度学习中,行列式重要应用于以下几个方面:

  • 判定矩阵可逆性:行列式不为零的矩阵是可逆的。这在深度学习中很重要,特别是在计算矩阵的逆时,确保矩阵是可逆的是必要的。
  • 梯度流的稳固性:行列式可以用来估计矩阵的条件数(回忆一下上一篇文章的奇特值介绍部门),从而判定矩阵的稳固性。条件数大意味着矩阵靠近奇特,大概导致数值不稳固,影响梯度流。
  • 模型诊断:通过计算权重矩阵的行列式,可以诊断模型训练过程中是否存在数值不稳固或梯度消失等问题。假如行列式靠近零,大概表明矩阵靠近奇特,必要调整模型或优化算法。
  • 数据变换:行列式可以用来权衡线性变换对体积的影响。在深度学习中,某些变换(如卷积层中的滤波器应用)大概会影响输入数据的空间分布,行列式可以用来量化这种影响。
2. 逆矩阵

对于一个方阵而言,假如存在另一个矩阵,使得这两个矩阵相乘的结果为单位矩阵,那么这个矩阵称为原矩阵的逆矩阵。逆矩阵在解决线性方程组、矩阵求解、数据拟合、图像处理等范畴都有广泛应用。下面具体介绍逆矩阵的概念、计算方法及其应用。
2.1 逆矩阵的定义

对于一个                                    n                         ×                         n                              n \times n                  n×n 的方阵                                    A                              A                  A,假如存在另一个                                    n                         ×                         n                              n \times n                  n×n 的方阵                                    B                              B                  B,使得:
                                         A                            B                            =                            B                            A                            =                            I                                  AB = BA = I                     AB=BA=I
此中                                   I                              I                  I 是单位矩阵,那么矩阵                                    B                              B                  B称为矩阵                                    A                              A                  A的逆矩阵,记作                                             A                                       −                               1                                                 A^{-1}                  A−1。换句话说,假如矩阵                                    A                              A                  A与矩阵                                    B                              B                  B相乘的结果为单位矩阵,那么                                    B                              B                  B 就是                                    A                              A                  A的逆矩阵。
2.2 逆矩阵的计算方法

逆矩阵的计算有以下方法:

  • 伴随矩阵法(比力复杂的方法)
    对于一个                                              n                               ×                               n                                      n \times n                        n×n 的矩阵                                             A                                      A                        A,其伴随矩阵                                                          A                                  ∗                                                 A^*                        A∗ 的定义为:
                                                                    A                                     ∗                                              =                                  adj                                  (                                  A                                  )                                          A^* = \text{adj}(A)                           A∗=adj(A)
    此中,                                             adj                               (                               A                               )                                      \text{adj}(A)                        adj(A) 是                                              A                                      A                        A的伴随矩阵,其元素为                                              A                                      A                        A的代数余子式的转置矩阵。逆矩阵可以用伴随矩阵和行列式来体现:
                                                                    A                                                   −                                        1                                                           =                                               1                                                   det                                        ⁡                                        (                                        A                                        )                                                                        A                                     ∗                                                      A^{-1} = \frac{1}{\det(A)} A^*                           A−1=det(A)1​A∗
    矩阵中第                                              i                                      i                        i 行和第                                              j                                      j                        j列元素对应的代数余子式是将矩阵中第                                              i                                      i                        i 行和第                                              j                                      j                        j列删除后剩下的                                              (                               n                               −                               1                               )                               ×                               (                               n                               −                               1                               )                                      (n-1) \times (n-1)                        (n−1)×(n−1) 子矩阵的行列式,乘以                                              (                               −                               1                                           )                                               i                                     +                                     j                                                             (-1)^{i+j}                        (−1)i+j。
  • 行列变换法(高斯消元法)
    通过行列变换将矩阵                                             A                                      A                        A转换为单位矩阵,同时对单位矩阵                                             I                                      I                        I进行雷同的变换,终极得到的矩阵即为                                                          A                                               −                                     1                                                             A^{-1}                        A−1。
  • 矩阵分解法(LU 分解)
    假如矩阵                                              A                                      A                        A 可以分解为一个下三角矩阵                                              L                                      L                        L和一个上三角矩阵                                              U                                      U                        U的乘积,即                                              A                               =                               L                               ⋅                               U                                      A = L · U                        A=L⋅U,那么可以通过求解                                              L                                      L                        L和                                              U                                      U                        U 的逆矩阵来间接求得                                                         A                                               −                                     1                                                             A^{-1}                        A−1。
PyTorch中的torch.linalg.inv()方法可以用来计算逆矩阵,实例如下:
  1. import torch
  2. # 定义一个 3x3 的矩阵 A
  3. A = torch.tensor([[1, 2, 3],
  4.                         [4, 5, 6],
  5.                         [7, 8, 10]],dtype=torch.float32)
  6. #计算逆矩阵
  7. inv_A = torch.linalg.inv(A)
  8. print('inverse of A:\n', inv_A)
  9. print('validation:\n',torch.mm(A, inv_A))
复制代码
输出为:
  1. inverse of A:
  2. tensor([[-0.6667, -1.3333,  1.0000],
  3.         [-0.6667,  3.6667, -2.0000],
  4.         [ 1.0000, -2.0000,  1.0000]])
  5. validation:
  6. tensor([[ 1.0000e+00,  0.0000e+00,  2.3842e-07],
  7.         [ 0.0000e+00,  1.0000e+00,  4.7684e-07],
  8.         [-9.5367e-07,  1.9073e-06,  1.0000e+00]])
复制代码
2.3 逆矩阵的性子


  • 唯一性:假如矩阵                                         A                                  A                     A存在逆矩阵,那么逆矩阵是唯一的。
  • 存在性:只有当矩阵                                         A                                  A                     A的行列式                                         det                            ⁡                            (                            A                            )                            ≠                            0                                  \det(A) \neq 0                     det(A)=0时,矩阵                                         A                                  A                     A 才存在逆矩阵。
  • 单位矩阵的逆:单位矩阵                                         I                                  I                     I的逆矩阵仍然是                                         I                                  I                     I。
  • 逆的逆:假如矩阵                                        A                                  A                     A 可逆,则                                         (                                       A                                           −                                  1                                                            )                                           −                                  1                                                 =                            A                                  (A^{-1})^{-1} = A                     (A−1)−1=A。
  • 转置矩阵的逆:假如矩阵                                         A                                  A                     A可逆,则                                         (                                       A                               T                                                 )                                           −                                  1                                                 =                            (                                       A                                           −                                  1                                                            )                               T                                            (A^T)^{-1} = (A^{-1})^T                     (AT)−1=(A−1)T。
  • 乘积的逆:假如矩阵                                         A                                  A                     A 和                                         B                                  B                     B 都可逆,则                                         (                            A                            B                                       )                                           −                                  1                                                 =                                       B                                           −                                  1                                                            A                                           −                                  1                                                       (AB)^{-1} = B^{-1}A^{-1}                     (AB)−1=B−1A−1。
2.4 逆矩阵在深度学习中的应用

直接计算逆矩阵在深度学习中并不是常见的操作,由于计算逆矩阵的时间复杂度较高,而且在数值上大概是不稳固的(看看上面PyTorch的示例,验算的结果并不是严格的单位矩阵)。
但是在一些特殊的神经网络架构中,如正交初始化或者在某些循环神经网络(RNNs)变种中,保持权重矩阵的可逆性有助于制止梯度消失或爆炸问题。此时,逆矩阵的概念会被间策应用。
3. 特征值与特征向量

3.1 特征值与特征向量的定义

给定一个                                   n                         ×                         n                              n \times n                  n×n的方阵                                    A                              A                  A,假如存在一个非零向量                                   v                              \mathbf{v}                  v和一个标量                                    λ                              \lambda                  λ,使得:
                                         A                            v                            =                            λ                            v                                  A\mathbf{v} = \lambda\mathbf{v}                     Av=λv
则称                                    λ                              \lambda                  λ是矩阵                                   A                              A                  A的一个特征值,而                                   v                              \mathbf{v}                  v 是对应于                                   λ                              \lambda                  λ的特征向量。
3.2 特征值和特征向量的计算方法

为了找到特征值,我们可以将上述方程重写为:
                                         (                            A                            −                            λ                            I                            )                            v                            =                            0                                  (A - \lambda I)\mathbf{v} = \mathbf{0}                     (A−λI)v=0
此中                                   I                              I                  I是单位矩阵。为了使上述方程有非零解,系数矩阵                                   A                         −                         λ                         I                              A - \lambda I                  A−λI必须是奇特的(即行列式等于0,即不是满秩矩阵)。因此,我们必要求解行列式:
                                         det                            ⁡                            (                            A                            −                            λ                            I                            )                            =                            0                                  \det(A - \lambda I) = 0                     det(A−λI)=0
这个行列式方程即为矩阵                                   A                              A                  A的特征方程。解这个多项式方程就可以得到矩阵                                   A                              A                  A的全部特征值。
PyTorch中的torch.linalg.eigh()可以用来计算特征值和特征向量,实例如下:
  1. import torch
  2. # 假设A是对称矩阵
  3. A = torch.tensor([[1., 2.],
  4.                         [2., 1.]], dtype=torch.float)
  5. # 计算矩阵A的特征值和特征向量
  6. eigenvalues_sym, eigenvectors_sym = torch.linalg.eigh(A)
  7. # 输出特征值
  8. print("Eigenvalues (Symmetric Matrix):\n", eigenvalues_sym)
  9. # 输出特征向量
  10. print("Eigenvectors (Symmetric Matrix):\n", eigenvectors_sym)
  11. #进行验算
  12. print("Validation:\n",A @ eigenvectors_sym[0] == eigenvalues_sym[0] * eigenvectors_sym[0])
复制代码
输出为:
  1. Eigenvalues (Symmetric Matrix):
  2. tensor([-1.,  3.])
  3. Eigenvectors (Symmetric Matrix):
  4. tensor([[-0.7071,  0.7071],
  5.         [ 0.7071,  0.7071]])
  6. Validation:
  7. tensor([True, True])
复制代码
3.3 特征值和特征向量的性子


  • 特征值的性子

    • 特征值的和:全部特征值的和等于矩阵的迹(trace),即对角线元素的和。
    • 特征值的乘积:全部特征值的乘积等于矩阵的行列式(determinant)。

  • 特征向量的性子

    • 线性无关性:差异特征值对应的特征向量是线性无关的。
    • :对于                                                   n                                  ×                                  n                                          n \times n                           n×n矩阵,假如存在                                                   n                                          n                           n个线性无关的特征向量,那么这些向量可以构成                                                   n                                          n                           n 维空间的一个基。

3.4 特征值和特征向量在深度学习中的应用

在深度学习中,特征值和特征向量重要用于以下几个方面:

  • 主成分分析(PCA):通过 PCA 技能,可以找到数据的重要成分(特征向量),并将其投影到低维空间中,从而实现数据降维。
  • 正则化:通过惩罚权重矩阵的特征值(即核范数),可以控制模型的复杂度,防止过拟合。
  • 模型诊断:通过计算矩阵的特征值,可以估计矩阵的条件数(最大特征值与最小特征值的比值),从而判定矩阵的数值稳固性。(这点与奇特值类似)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表