马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
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=(acbd)
其行列式为:
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= adgbehcfi
其行列式为:
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()方法可以用来计算行列式,示例代码如下:
- import torch
- # 定义一个 3x3 的矩阵 A
- A = torch.tensor([[1, 2, 3],
- [4, 5, 6],
- [7, 8, 10]],dtype=torch.float32)
- # 计算行列式
- det_A = torch.linalg.det(A)
- print("Matrix A:")
- print(A)
- print("Determinant of A:")
- print(det_A)
复制代码 输出为:
- Matrix A:
- tensor([[ 1., 2., 3.],
- [ 4., 5., 6.],
- [ 7., 8., 10.]])
- Determinant of A:
- 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)1A∗
矩阵中第 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()方法可以用来计算逆矩阵,实例如下:
- import torch
- # 定义一个 3x3 的矩阵 A
- A = torch.tensor([[1, 2, 3],
- [4, 5, 6],
- [7, 8, 10]],dtype=torch.float32)
- #计算逆矩阵
- inv_A = torch.linalg.inv(A)
- print('inverse of A:\n', inv_A)
- print('validation:\n',torch.mm(A, inv_A))
复制代码 输出为:
- inverse of A:
- tensor([[-0.6667, -1.3333, 1.0000],
- [-0.6667, 3.6667, -2.0000],
- [ 1.0000, -2.0000, 1.0000]])
- validation:
- tensor([[ 1.0000e+00, 0.0000e+00, 2.3842e-07],
- [ 0.0000e+00, 1.0000e+00, 4.7684e-07],
- [-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()可以用来计算特征值和特征向量,实例如下:
- import torch
- # 假设A是对称矩阵
- A = torch.tensor([[1., 2.],
- [2., 1.]], dtype=torch.float)
- # 计算矩阵A的特征值和特征向量
- eigenvalues_sym, eigenvectors_sym = torch.linalg.eigh(A)
- # 输出特征值
- print("Eigenvalues (Symmetric Matrix):\n", eigenvalues_sym)
- # 输出特征向量
- print("Eigenvectors (Symmetric Matrix):\n", eigenvectors_sym)
- #进行验算
- print("Validation:\n",A @ eigenvectors_sym[0] == eigenvalues_sym[0] * eigenvectors_sym[0])
复制代码 输出为:
- Eigenvalues (Symmetric Matrix):
- tensor([-1., 3.])
- Eigenvectors (Symmetric Matrix):
- tensor([[-0.7071, 0.7071],
- [ 0.7071, 0.7071]])
- Validation:
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |