矩阵的性质


文档摘要

矩阵的性质 矩阵是承载数据集、编码变换、并定义每一个神经网络层的数据结构。本文件讲解矩阵的维度、元素、转置、迹、行列式、逆、秩与零空间——这些基础性质贯穿整个线性代数与机器学习。 从本质上讲,矩阵(matrix)就是按行列排成网格的一组数。如果向量是一列数,那矩阵就像一摞向量叠在一起。 如果用向量 $[\text{age}, \text{height}, \text{weight}]$(年龄、身高、体重)来描述一个人,那么三个人就组成一个矩阵,每一行代表一个人: 这个矩阵有 3 行 3 列,所以我们称它是一个 $3 \times 3$ 矩阵。 网格中的每一个数称为一个元素(element)或项(entry),由它所在的行和列来确定:$A{ij}$ 表示第 $i$ 行、第 $j$ 列的元素。

矩阵的性质

矩阵是承载数据集、编码变换、并定义每一个神经网络层的数据结构。本文件讲解矩阵的维度、元素、转置、迹、行列式、逆、秩与零空间——这些基础性质贯穿整个线性代数与机器学习。

  • 从本质上讲,**矩阵(matrix)**就是按行列排成网格的一组数。如果向量是一列数,那矩阵就像一摞向量叠在一起。
A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}
  • 如果用向量 [\text{age}, \text{height}, \text{weight}](年龄、身高、体重)来描述一个人,那么三个人就组成一个矩阵,每一行代表一个人:
\begin{bmatrix} 25 & 170 & 65 \\ 30 & 180 & 80 \\ 22 & 160 & 55 \end{bmatrix}
  • 这个矩阵有 3 行 3 列,所以我们称它是一个 3 \times 3 矩阵。

  • 网格中的每一个数称为一个元素(element)项(entry),由它所在的行和列来确定:A_{ij} 表示第 i 行、第 j 列的元素。

  • 矩阵的**转置(transpose)**是沿主对角线把它翻转,行变列、列变行。若 Am \times n,则 A^Tn \times m

A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \quad \Rightarrow \quad A^T = \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix}
  • 把一个矩阵和它的转置相乘,结果总是一个方阵:AA^Tm \times mA^TAn \times n

  • 方阵的**迹(trace)**是它对角线元素之和:\text{tr}(A) = A_{11} + A_{22} + \cdots + A_{nn}。迹等于特征值之和(后面会讲到)。

迹:对角线元素之和

  • 对于上面那个矩阵,\text{tr}(A) = 1 + 4 + 9 = 14。只有高亮的那条对角线才起作用。

  • 如果两个矩阵表示同一个线性变换(只是在不同的基下表示),它们的迹会相同。迹是「与基无关」的量。

  • 矩阵的**秩(rank)**是线性无关的行(等价地,列)的个数。它告诉你这个矩阵到底携带了多少「有用信息」。

  • 例如,下面这个矩阵秩为 2,因为两行都不是对方的倍数:

\begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}

而这个矩阵秩为 1,因为第二行只是第一行的两倍,没有带来任何新信息:

\begin{bmatrix} 1 & 2 \\ 2 & 4 \end{bmatrix}
  • 一个 5 \times 3 矩阵的秩最多是 3。如果某些行只是其他行的缩放或组合,秩就会下降。达到最大可能秩的矩阵称为满秩(full rank)

秩:无关的行张成整个空间;相关的行只能张成一个子空间

  • 方阵可逆(有逆)当且仅当它满秩。

  • 秩通过**秩-零化度定理(rank-nullity theorem)零空间(null space)**联系起来:\text{rank}(A) + \text{nullity}(A) = \text{number of columns of } A。矩阵「保留的」(秩)加上「消灭的」(零化度)等于总维度。

  • 矩阵的**列空间(column space)**是用任意向量乘以该矩阵所能得到的全部输出。它由矩阵的各列张成。如果一个矩阵有 3 列但只有 2 列线性无关,那它的列空间是一个二维平面,而不是整个三维空间。

列空间:无关的列张成一个平面,相关的列只能张成一条直线

  • **行空间(row space)**是同样的想法,只是从行的角度看。秩等于列空间和行空间的维度,所以两者始终一致。

  • 列空间告诉你「这个矩阵能产生哪些输出?」,零空间告诉你「哪些输入会被映射为零?」。这两个空间共同完整地刻画了矩阵所做的事。

  • 方阵的**行列式(determinant)**是一个单一的数,刻画了矩阵如何缩放空间。把一个 2 \times 2 矩阵想象成把单位正方形变换成一个平行四边形,行列式就是这个平行四边形的面积(带正负号)。

\det\begin{bmatrix} a & b \\ c & d \end{bmatrix} = ad - bc

行列式:线性变换的面积缩放因子

  • 例如:
\det\begin{bmatrix} 2 & 1 \\ 0 & 3 \end{bmatrix} = 2 \cdot 3 - 1 \cdot 0 = 6

这个变换把单位正方形拉伸成一个面积为 6 的平行四边形。

  • 如果行列式为正,说明变换保持了朝向(东西没有被「翻转」)。如果为负,则翻转了朝向(就像镜像反射)。如果为零,说明矩阵把空间压扁到了更低维度——平行四边形坍缩成一条线或一个点。

  • 行列式为零的矩阵称为**奇异(singular)**矩阵。它没有逆,信息被永久丢失。

  • 对于大于 2 \times 2 的矩阵,行列式要用**余子式(minors)代数余子式(cofactors)**来计算。余子式 M_{ij} 是删去第 i 行第 j 列后得到的小矩阵的行列式。

余子式:删掉一行一列得到一个更小的矩阵

  • 代数余子式 C_{ij} = (-1)^{i+j} M_{ij} 给每个余子式配一个正负号(像棋盘一样交替:+, -, +, \ldots)。整个矩阵的行列式就是沿任意一行或一列求和:\det(A) = \sum_j A_{1j} \cdot C_{1j}。这叫作代数余子式展开(cofactor expansion)

  • 方阵 A逆(inverse),记作 A^{-1},是「撤销」A 所做之事的矩阵:AA^{-1} = A^{-1}A = I(单位矩阵)。只有非奇异矩阵才有逆。

  • 对于 2 \times 2 矩阵,逆有直接的公式:

\begin{bmatrix} a & b \\ c & d \end{bmatrix}^{-1} = \frac{1}{ad - bc}\begin{bmatrix} d & -b \\ -c & a \end{bmatrix}

注意分母里的行列式——这正是奇异矩阵(行列式为零)没有逆的原因。

  • **条件数(condition number)**衡量一个矩阵对输入微小变化的敏感程度。定义为 \kappa(A) = \|A\| \cdot \|A^{-1}\|

  • 条件数接近 1 意味着矩阵是良态(well-conditioned)的:输入的微小变化只会引起输出的微小变化。条件数很大则意味着病态(ill-conditioned):极小的误差会被巨大地放大。正交矩阵和单位矩阵的条件数为 1,而奇异矩阵的条件数为无穷大。

  • 例如,下面这个矩阵的条件数为 10^8。一个方向被正常缩放,另一个方向几乎被压成零,所以沿那个方向的微小扰动会被严重扭曲:

\begin{bmatrix} 1 & 0 \\ 0 & 10^{-8} \end{bmatrix}
  • 就像向量有范数(长度),矩阵也有衡量其「大小」的范数(norm)。最常用的是Frobenius 范数(Frobenius norm),它把矩阵当成一个长向量来算长度:
\|A\|_F = \sqrt{\sum_{i}\sum_{j} A_{ij}^2}
  • 例如:
\left\|\begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}\right\|_F = \sqrt{1 + 4 + 9 + 16} = \sqrt{30} \approx 5.48
  • 谱范数(spectral norm) \|A\|_2A 的最大奇异值。它衡量矩阵最多能把任一单位向量拉伸多少。在 ML 中,矩阵范数被用于权重正则化(惩罚过大的权重)以及监控训练的稳定性。

  • 对称矩阵 A 是**正定(positive definite)**的,如果对任意非零向量 \mathbf{x} 都有:\mathbf{x}^T A \mathbf{x} > 0。这个二次型总是产生正数。

  • 例如,下面这个矩阵是正定的:

A = \begin{bmatrix} 2 & 1 \\ 1 & 3 \end{bmatrix}

随便取一个向量,比如 \mathbf{x} = [1, -1]^T\mathbf{x}^T A \mathbf{x} = 2 - 1 - 1 + 3 = 3 > 0。无论你试哪个非零的 \mathbf{x},结果总是正的。

  • 正定矩阵之所以重要,是因为它们能保证优化问题有唯一的最小值。

  • 如果把条件放宽为 \mathbf{x}^T A \mathbf{x} \geq 0(允许等于零),矩阵就叫半正定(positive semi-definite,PSD)。半正定矩阵在 ML 中无处不在:协方差矩阵、SVM 中的核矩阵、以及局部最小值处的 Hessian 矩阵都是半正定的。区别在于半正定允许某些方向是「平坦」的(曲率为零),而不是严格地向上弯曲。

编程练习(使用 CoLab 或 notebook)

  1. 计算矩阵的迹、秩和行列式。试试把某一行设为另一行的倍数,看看秩和行列式如何变化。
import jax.numpy as jnp A = jnp.array([[1.0, 2.0], [3.0, 4.0]]) print(f"Trace: {jnp.trace(A)}") print(f"Rank: {jnp.linalg.matrix_rank(A)}") print(f"Determinant: {jnp.linalg.det(A):.2f}")
  1. 求矩阵的逆,再乘回原矩阵,验证你得到的是单位矩阵。然后再试一个奇异矩阵,看看会发生什么。
import jax.numpy as jnp A = jnp.array([[1.0, 2.0], [3.0, 4.0]]) A_inv = jnp.linalg.inv(A) print(f"A * A_inv:\n{A @ A_inv}")

发布者: 作者: HenryNdubuaku 转发
评论区 (0)
U