在分解概述中,我们建立了 Part 1 “拆”的路线图:面对高维、稀疏、有噪声的数据矩阵,分解是统一的应对框架。我们知道了特征分解、SVD、范数、微积分这四件工具将层层推进。但在进入这些工具之前,我们需要先建立描述矩阵行为的语言。
一个矩阵对向量做了什么?它把向量映射到哪里?保留了什么、丢弃了什么?要精确回答这些问题,需要度量向量之间的关系(角度、距离、投影),理解一组向量”撑起”了多大的空间,以及找出被变换”消灭”的方向。
这就是本文要建立的工具箱。 七个概念形成一条链:
内积告诉你两个向量的”对齐程度” → 投影是用内积把一个向量分解为”沿某方向”和”垂直于该方向”两部分 → Ax=y 的多重解读建立矩阵作用的完整图景 → 基变换揭示矩阵分解的灵魂:选一组好基,让复杂操作变简单 → 一组向量能张成(span)多大的空间定义了秩 → 被矩阵压到零的方向构成零空间 → 正交矩阵保长度保角度,是 SVD 的旋转部分。
这些概念是理解后续所有分解方法的几何基础。特征分解需要理解特征方向和正交性,SVD 需要理解投影和秩,PCA 需要理解方差和子空间。没有这些工具,分解公式就只是符号操作,看不到背后的几何图景。
内积:度量向量的对齐程度
两个向量 a,b∈Rn 的内积(inner product,也叫点积 dot product)定义为:
aTb=∑i=1naibi
这个”对应元素相乘再求和”的操作看起来平淡无奇。但它有一个强大的几何解释:
内积的几何意义
aTb=∥a∥∥b∥cosθ
其中 ∥a∥=∑iai2 是向量的长度(范数),θ 是两个向量之间的夹角。
内积的几何意义
a · b = ‖a‖‖b‖cos θ = 投影长度 × ‖b‖
这个等式揭示了内积的本质含义:它度量两个向量指向同一方向的程度。
- aTb>0:两个向量大致同向(θ<90°)
- aTb=0:两个向量正交(θ=90°),彼此完全”无关”
- aTb<0:两个向量大致反向(θ>90°)
以 a=(3,4) 和 b=(4,0) 为例:aTb=3×4+4×0=12。从几何上看,∥a∥=5,∥b∥=4,cosθ=12/(5×4)=0.6,对应夹角约 53.1°。内积为正——两个向量指向大致相同的方向。
还有一种等价的理解方式:aTb=∥a∥cosθ⋅∥b∥ = a 在 b 方向上的投影长度 乘以 ∥b∥。这直接引出了下一节的投影公式。
内积在 ML 中无处不在
内积是 ML 中最基础的运算之一:
- Attention 机制:QKT 计算的就是 query 和 key 向量的内积,度量它们的”对齐程度”——对齐度越高,attention 权重越大
- 相似度度量:余弦相似度 cosθ=∥a∥∥b∥aTb 就是归一化后的内积
- 线性层:y=Wx 的每一行就是权重向量与输入的内积——度量输入在该方向上的”分量”
推广预告:内积不仅可以定义在向量之间,也可以定义在矩阵之间。矩阵内积 ⟨A,B⟩=tr(ATB)=∑ijaijbij,即”对应元素相乘再求和”——与向量内积的形式完全平行。这个概念将在后续的范数讨论中发挥重要作用。
投影:分解为”沿某方向 + 垂直方向”
内积给了我们度量对齐程度的工具。投影则用这个工具把一个向量分解为两部分。
向量到方向的投影
给定方向向量 u(不要求是单位向量),向量 v 在 u 方向上的投影为:
projuv=uTuuTvu
这个公式由三部分组成:
- uTv:内积,度量 v 在 u 方向上的”分量大小”
- uTu=∥u∥2:归一化因子,消除 u 长度的影响
- 乘以 u:把标量系数变回向量,方向与 u 一致
正交残差(residual)是被投影”剩下”的部分:
r=v−projuv
关键性质:残差与投影方向正交,即 uTr=0。这可以直接验证:
uTr=uTv−uTuuTvuTu=uTv−uTv=0
因此,任何向量都可以被分解为投影 + 正交残差,两部分互不干扰。
投影分解:v = 投影 + 正交残差
任何向量都可以分解为"沿某方向"和"垂直于该方向"两部分
以 u=(2,1) 和 v=(1,3) 为例,手算投影过程:
uTuuTv=22+122×1+1×3=55=1
projuv=1×(2,1)=(2,1)
r=(1,3)−(2,1)=(−1,2)
验证正交性:(2,1)⋅(−1,2)=−2+2=0 ✓
验证勾股定理:∥v∥2=1+9=10,∥proj∥2=4+1=5,∥r∥2=1+4=5。确实 10=5+5 ✓
向量到子空间的投影
投影可以从”投影到一个方向”推广为”投影到一个子空间”。设 W∈Rn×k 的 k 个列向量张成一个 k 维子空间,向量 v 到这个子空间的投影为:
v^=W(WTW)−1WTv
特殊情况:当 W 的列向量两两正交且长度为 1(即 WTW=Ik)时,公式大幅简化:
v^=WWTv
注意 W∈Rn×k(k<n)不是正交矩阵——正交矩阵要求是方阵且 WTW=WWT=I。这里 W 只是”列正交”的(列构成标准正交组),WWT 是秩-k 的投影矩阵而非单位矩阵。
矩阵 P=WWT 叫做投影矩阵(projection matrix)。它有两个标志性性质:
- 幂等性:P2=P — 投影两次等于投影一次(已经投到子空间里的向量,再投一次不会改变)
- 对称性:PT=P — 投影是对称操作
投影公式速查
投影核心公式
| 投影目标 | 条件 | 投影矩阵 | 投影结果 |
|---|
| 单位向量 q(∥q∥=1) | — | P=qqT | v^=q(qTv) |
| 列正交矩阵 W(WTW=Ik) | k 列标准正交 | P=WWT | v^=W(WTv) |
两行本质上是同一件事:qqT 是 WWT 在 k=1 时的特殊情况。阅读顺序是从右往左:先内积(qTv 或 WTv)求出在各方向上的坐标,再乘回基向量还原成原空间的向量。
这两个公式会在后续文章中反复出现——谱分解(Art. 2)、SVD(Art. 3)、PCA(Art. 6)的核心操作都是某种形式的投影。
投影为什么重要
投影是线性代数中最普遍的操作之一,它在 ML 中反复出现:
- PCA(后续 Art. 6)就是把高维数据投影到方差最大的低维子空间——投影矩阵就是前 k 个主成分方向构成的 WWT
- 最小二乘法:b^=A(ATA)−1ATb 把 b 投影到 A 的列空间——找到列空间中离 b 最近的点。其中 x^=(ATA)−1ATb 是投影点在 A 的列向量下的坐标(即 b^=Ax^)
- Attention 中的 QKT:第 (i,j) 元素就是 query qi 与 key kj 的内积,度量两者的对齐程度。softmax 归一化后变成权重,对 value 做加权求和——本质上是一种”软检索”
投影发生在哪个空间?——ML 中最常见的混淆
上面提到投影在 PCA 和最小二乘中都出现,但它们投影的”舞台”完全不同。这个区别不弄清楚,后续的 SVD、PCA、低秩近似都会读得似是而非。
数据矩阵的约定
ML 中,m 个样本、每个样本有 n 个特征,数据矩阵排成 X∈Rm×n:
X=—x1T——x2T—⋮—xmT—
每一行是一个样本在 Rn(特征空间)中的坐标。每一列是全部 m 个样本在某个特征维度上的取值,构成 Rm(样本空间)中的一个向量。
所以,同一个矩阵 X 同时涉及两个空间:
| 列空间 col(X) | 行空间 row(X) |
|---|
| 所在空间 | Rm(样本空间) | Rn(特征空间) |
| 基向量含义 | 每一列 = 某个特征在全部样本上的取值 | 每一行 = 一个样本的全部特征 |
| 维度 | =rank(X)≤min(m,n) | =rank(X)≤min(m,n) |
两个空间的维度恰好相等——都等于秩(行秩 = 列秩,后面”秩”一节会详细解释)。
最小二乘:在样本空间 Rm 中投影
线性回归 y=Xβ 中,y∈Rm 是目标值——m 个样本各一个标签,住在样本空间 Rm 中。
根据矩阵乘法的定义,Xβ=β1x(1)+β2x(2)+⋯+βnx(n)(x(j) 是 X 的第 j 列)——矩阵乘向量就是列的线性组合(后面"Ax=y"一节会详细展开)。所以 Xβ 的所有可能取值就是 X 的列空间——Rm 的一个子空间。
当 y 不在列空间中时(方程无精确解),最小二乘就是把 y 投影到列空间,找到最近的那个点:
y^=X(XTX)−1XTy
整个过程发生在 Rm 中:被投影的向量 y 和投影结果 y^ 都是 m 维的。
PCA:在特征空间 Rn 中投影
PCA 想做的事完全不同:把每个样本(一个 Rn 中的点)投影到一个 k 维子空间,从而降维。
设投影方向为 W∈Rn×k(k 个标准正交方向,每个是 Rn 中的向量),降维后的数据为:
Z=XW∈Rm×k
每个样本 xiT∈Rn 变成 ziT=xiTW∈Rk——这是在 特征空间 Rn 中的投影,和列空间无关。
从 SVD 的角度看(后续 Art. 3、Art. 6 会详细展开):X=UΣVT 中,PCA 用的是 V(右奇异向量,特征空间中的方向),不是 U(左奇异向量,样本空间中的方向)。
为什么容易混淆
因为投影公式的形式看起来一样——都是 W(WTW)−1WT——但 W 的列向量住在不同的空间里:
- 最小二乘中 W=X∈Rm×n,列向量在 Rm(样本空间),投影的是 y∈Rm
- PCA 中 W∈Rn×k,列向量在 Rn(特征空间),投影的是每个样本 xi∈Rn
同一个投影公式,作用在不同空间中,回答的是完全不同的问题:最小二乘在问”y 离 X 的列空间有多近”,PCA 在问”数据沿哪些方向的方差最大”。记住这个区别,后续 SVD 的两组奇异向量(U 对应样本空间,V 对应特征空间)就不会搞混了。
Ax=y:一个等式的多重解读
上面我们大量使用了”A 把 x 映射到 y”、”y 是列的线性组合”之类的说法。这一节系统地梳理 Ax=y 的各种理解方式——它们不矛盾,而是同一件事的不同侧面,回答的问题各不相同。
术语提示:本文的”特征空间”指 feature space(n 个特征维度构成的 Rn)。线性代数中另有”特征空间”(eigenspace)指某个特征值 λ 对应的特征向量张成的空间——两者中文同名但含义完全不同。Art. 2 讨论特征值时会引入后者。
三个代数视角
设 A∈Rm×n,x∈Rn,y=Ax∈Rm。
行视角——“每个输出分量是什么?”
yi=第 i 行⋅x=∑j=1naijxj
每个输出 yi 是 A 的第 i 行与 x 的内积。这是计算上最直接的理解:要算 y 的第 3 个分量,就取 A 的第 3 行和 x 做点积。行视角直接回扣本文开头的内积概念——矩阵乘法本质上就是一批内积。
列视角——“输出能到哪?”
y=x1a1+x2a2+⋯+xnan
x 提供组合系数,y 是 A 的列向量的加权组合。Ax 的所有可能取值就是列向量能”张成”的空间——列空间 col(A)(下一节正式定义)。这个视角关注的是”输出空间中哪些地方是可达的”。
映射视角——“输入发生了什么?”
A 是一个函数 f(x)=Ax,把 Rn 中的向量送到 Rm 中。这个函数是线性的——满足 A(u+v)=Au+Av 和 A(cu)=cAu——称为线性映射(linear map),也叫线性变换(linear transformation),两个术语本质相同。这个视角关注的是”A 对输入做了什么几何操作:哪些方向被保留、哪些被压死、各方向被拉伸了多少”。
| 视角 | 公式 | 关注的问题 | 催生的概念 |
|---|
| 行视角 | yi=rowi⋅x | 每个输出分量是什么? | 内积、线性方程组 |
| 列视角 | y=∑xjaj | 输出能到哪? | 列空间、秩、最小二乘 |
| 映射视角 | A:Rn→Rm | 输入发生了什么? | 特征值、零空间、可逆性 |
三个视角贯穿整个线性代数。列视角催生秩、投影、最小二乘;映射视角催生特征值、零空间、SVD;行视角在 ML 中尤其自然——神经网络的线性层 y=Wx 每个输出神经元就是权重行向量与输入的内积。后续文章中,我们会在三个视角之间自由切换。
方阵与非方阵:两种几何图景
映射视角说”A 对输入做了几何操作”,但具体做了什么,方阵和非方阵的情况很不同。
方阵(n×n,Rn→Rn):输入和输出在同一个空间中。你可以把变换前后的向量叠在一起比较——整个空间的网格线被旋转、拉伸、剪切、反射,但保持平行且经过原点。这就是 3Blue1Brown 的经典可视化方式。Art. 2 特征分解 的特征分解正是在这个情境下展开的。
非方阵(m×n,m=n,Rn→Rm):输入和输出在不同维度的空间中——无法把 x 和 y 画在同一张图上直接比较,说”x 被旋转了 30°“没有意义。几何图景变成了:
- m>n(如 A∈R100×3):A 把 R3 嵌入到 R100 的一个低维子空间中——像把一张纸放进三维空间
- m<n(如 A∈R3×100):A 把 R100 压缩到 R3 中,必然有方向被丢弃(零空间非平凡)
虽然非方阵不能简单说”旋转、拉伸”,但 SVD 恢复了几何图景。A=UΣVT 对任意矩阵都成立,它把 A 的作用分解为三步:
Ax=U(Σ(VTx))
- VT:在输入空间 Rn 中做正交变换——保持所有向量的长度和夹角不变的变换,几何上只有旋转和反射(详见后面”正交矩阵”一节)
- Σ(m×n 矩形对角矩阵):沿各方向拉伸(σi 倍),同时处理维度变化——多出的维度补零(嵌入),或截掉多余方向(压缩)
- U:在输出空间 Rm 中做正交变换(旋转/反射)
方阵的变换是 SVD 的特例——维度变化那一步不存在。Art. 3 SVD 会完整展开这个图景。
| 方阵 n×n | 非方阵 m×n |
|---|
| 空间关系 | Rn→Rn,同一空间 | Rn→Rm,不同空间 |
| 直觉 | 变形网格:旋转、拉伸、剪切 | 跨空间映射:嵌入或压缩 |
| 可直接比较 x 和 y? | 可以(同一空间) | 不可以(不同维度) |
| 特征分解 | 适用:A=QΛQ−1 | 不适用 |
| SVD | 适用 | 适用:统一框架 |
基变换:Q−1 作为坐标翻译器
映射视角让我们把矩阵看成函数。基变换是其中一类特别重要的映射——它不改变向量本身,只改变描述向量的坐标系。这个概念是理解所有矩阵分解(特征分解、SVD、PCA)的关键。
什么是基? 在 Rn 中,任意一组 n 个线性无关的向量 {q1,…,qn} 构成一组基(basis)。基的核心性质是:空间中的任何向量都可以唯一地表示为基向量的线性组合。
我们最熟悉的是标准基 {e1,e2,…,en}(第 i 个分量为 1,其余为 0)。向量 x=(3,2)T 在标准基下的含义很直接:沿第一轴走 3,沿第二轴走 2。但标准基只是一种描述方式——同一个向量在不同基下有不同的坐标,就像同一个地点在经纬度和 UTM 坐标下有不同的数字。
基变换的数学。 设 Q=[q1q2⋯qn] 是由新基向量排成列组成的矩阵(每列是一个基向量,用标准坐标表示)。任意向量 x 都可以表示为新基的线性组合:
x=c1q1+c2q2+⋯+cnqn=Qc
这里系数向量 c=(c1,…,cn)T 就是 x 在新基下的坐标——它回答的问题是”沿 q1 方向走多少、沿 q2 方向走多少……才能到达 x“。两边左乘 Q−1:
c=Q−1x
这就是基变换的本质:Q−1 把标准坐标翻译成 Q-基下的坐标,Q 把 Q-基下的坐标翻译回标准坐标。 注意这正是映射视角的一个实例——A=Q−1 是一个从”标准语言”到”新基语言”的翻译器。
一个具体的例子:取 Q=[111−1],即新基是 q1=(1,1)T(45° 方向)和 q2=(1,−1)T(-45° 方向)。向量 x=(3,1)T 在新基下的坐标为:
c=Q−1x=21[111−1][31]=[21]
验证:2⋅(1,1)T+1⋅(1,−1)T=(3,1)T ✓。同一个向量,标准基下叫 (3,1),新基下叫 (2,1)——向量没动,只是描述它的语言换了。
正交基的简化。 当 Q 的列向量彼此正交且长度为 1(即 Q 是正交矩阵,QTQ=I)时,Q−1=QT,基变换退化为逐方向做内积:
ci=qiTx
每个坐标分量就是 x 在 qi 方向上的投影长度——回到了前面投影那一节的操作。这解释了为什么正交基在计算中如此受欢迎:不需要求逆,一次内积就能得到坐标。
| 一般基 | 正交基 |
|---|
| 基变换 | c=Q−1x(需要求逆) | c=QTx(转置即可) |
| 第 i 个坐标 | 需要 Q−1 的第 i 行与 x 做内积 | ci=qiTx(直接投影) |
| 数值稳定性 | 可能不稳定(Q 接近奇异——即基向量接近线性相关、Q 接近不可逆——时,微小误差被 Q−1 放大) | 完美稳定(正交矩阵保长度) |
为什么基变换是矩阵分解的灵魂? 几乎所有矩阵分解都可以理解为”找到一组好的基,让矩阵在新基下变得简单”:
- 特征分解 A=QΛQ−1:在特征基下,A 变成逐方向独立缩放(Art. 2 特征分解)
- SVD A=UΣVT:分别为输入空间和输出空间各找一组最佳正交基(Art. 3 SVD)
- PCA:找到方差最大的正交基方向(Art. 6)
当 Art. 2 特征分解 写出 Ax=Q(Λ(Q−1x)) 时,三步的含义现在完全清楚了:Q−1x 是把 x 翻译成特征基坐标,Λ 在特征基下做独立缩放,Q 把结果翻译回标准坐标。分解 = 选基 + 在新基下做简单操作 + 翻译回来。
四个基本子空间
映射视角引出一个自然的问题:A 把哪些方向保留了、哪些压死了、哪些输出方向是可达的?Strang 的”四个基本子空间”框架给出了完整的回答。
对 A∈Rm×n,秩为 r,输入空间 Rn 和输出空间 Rm 各被切成两个正交互补的部分:
| 子空间 | 所在空间 | 维度 | 含义 |
|---|
| 行空间 row(A) | Rn | r | 输入中被 A 保留的方向 |
| 零空间 null(A) | Rn | n−r | 输入中被 A 压死的方向(Ax=0) |
| 列空间 col(A) | Rm | r | 输出中 A 能到达的方向 |
| 左零空间 null(AT) | Rm | m−r | 输出中 A 永远到不了的方向 |
关键的对应关系:A 把行空间一一对应地映射到列空间——没有信息丢失(各方向被拉伸 σi 倍),没有重叠。零空间被完全压死——这些方向的信息被彻底丢弃。左零空间是不可达的——输出空间中的这些方向,无论输入什么 x 都到达不了。
Rn=r 维,被保留row(A)⊕(n−r) 维,被压死null(A)Rm=r 维,可达col(A)⊕(m−r) 维,不可达null(AT)
这个框架将在”秩”和”零空间”两节中用具体例子展开,在 Art. 3 SVD 中达到完整形式——SVD 的 V 的列给出行空间和零空间的正交基,U 的列给出列空间和左零空间的正交基。
y 的含义取决于矩阵的角色
到目前为止,我们讨论的都是纯数学:A、x、y 只是矩阵和向量。但当 Ax=y 出现在具体应用中时,x 和 y 的语义完全取决于矩阵扮演的角色。(回忆 Art. 0 全景图中的三种角色:数据容器、给定算子、学习算子。)
当 A 是数据矩阵(X∈Rm×n,行=样本,列=特征):
在 y=Xv 中,v 不是一个样本——它是特征空间 Rn 中的一组系数/权重/方向。y 是所有 m 个样本对 v 的”响应”:yi=xiTv(第 i 个样本与 v 的内积),每个分量对应一个样本的标量评分。
| 应用 | 右侧向量的角色 | yi 的含义 |
|---|
| 线性回归 Xβ | 权重向量 β | 第 i 个样本的预测值 |
| PCA 投影 Xw | 主成分方向 w | 第 i 个样本在该方向上的坐标 |
| 任意的 Xv | 特征空间中的任意方向 | 第 i 个样本在该方向上的”评分” |
共同模式:X 把特征空间中的一个方向,转换为样本空间中每人一个标量值。 反过来 XTw(w∈Rm 是对每个样本的权重)则是把样本空间中的权重转换为特征空间中的一个合成向量——例如 w=(1/m,…,1/m)T 时,XTw 就是样本均值。
当 A 是算子矩阵(变换规则):
这时 x 才是”被变换的对象”——一个样本、一个信号、一个状态向量。y=Ax 是变换后的结果。
| 应用 | A 的角色 | x 的角色 | y 的含义 |
|---|
| 神经网络层 Wx+b | 权重矩阵 | 一个输入向量 | 该层的输出 |
| PCA 降维 VkTx | 投影矩阵 | 一个样本 | 降维后的坐标 |
| 旋转 Rx | 旋转矩阵 | 被旋转的向量 | 旋转后的向量 |
共同模式:A 定义变换规则,x 是被变换的个体,y 是变换结果。 前面讨论的”旋转、拉伸、剪切”这些几何直觉,正是在这个语境下最自然的。
同一个公式 Ax=y,矩阵角色不同,x 和 y 的语义完全不同。 认识到这一点,是避免混淆的关键。
Span、线性无关与秩
我们已经知道如何度量两个向量的关系(内积)、分解一个向量(投影),以及 Ax=y 的多重含义。现在问一个更大的问题:一组向量能”撑起”多大的空间?
Span:线性组合的集合
一组向量 {v1,…,vk} 的张成空间(span)是它们所有线性组合构成的集合:
span{v1,…,vk}={∑i=1kcivi:c1,…,ck∈R}
直观地说,span 就是”这组向量通过缩放和相加能到达的所有地方”。
线性无关:没有”多余”的向量
一组向量 {v1,…,vk} 是线性无关(linearly independent)的,当且仅当没有一个向量可以用其他向量的线性组合表示。等价地:如果 c1v1+⋯+ckvk=0 只有 c1=⋯=ck=0 这一组解。
举个例子:v1=(1,2,0),v2=(0,1,1),v3=(2,5,1)。注意到 v3=2v1+v2——第三个向量是前两个的线性组合,所以这三个向量线性相关。v3 没有带来”新的方向”,它对 span 的贡献是多余的:span{v1,v2,v3}=span{v1,v2}。
秩:矩阵有多少个独立方向
有了 span 的定义,我们可以精确定义列空间和秩。矩阵 A∈Rm×n 的 n 个列向量 a1,…,an 张成的空间就是 A 的列空间(column space),记为 col(A)=span{a1,…,an}。从前面的列视角可知,Ax 的所有可能取值恰好就是列空间。这也是为什么最小二乘中 b^=Ax^ 一定在列空间中——它本身就是列向量的线性组合。
rank(A)=dim(col(A))=dim(row(A))
秩只有一个——行秩等于列秩,这是线性代数的基本定理。直觉上:把 A 看作映射 f(x)=Ax,函数的像(image)就是所有可能的输出值构成的集合 {Ax:x∈Rn}——这恰好就是列空间 col(A)。回忆前面四个基本子空间的框架:A 把行空间一一对应地映射到列空间,没有多对一,也没有遗漏。一一对应的两个集合维度必然相等。注意”独立方向数相等”不等于”冗余数相等”——一个 1000×3 的满秩矩阵有 997 个冗余行但零个冗余列。
秩就是独立方向的数量——无论从行还是列数,结果一样。
一个 m×n 矩阵的秩最大为 min(m,n)。当秩达到这个上限时称为满秩(full rank)。如果秩小于 min(m,n),说明列(和行)有冗余——矩阵”退化”了。
秩的几何含义:独立方向的数量
3 个 3D 向量可以撑满空间、退化为平面、或退化为直线
秩的几何图景非常直观:
- 一个 3×3 矩阵秩为 3 → 三个列向量撑满了三维空间,矩阵是可逆的
- 秩为 2 → 三个列向量只能撑起一个二维平面(其中一个向量可以用另外两个表示)
- 秩为 1 → 所有列向量都是同一个方向的倍数,只能撑起一条线
秩的深层意义
秩不仅仅是一个数学定义——它直接对应着”信息维度”的概念。
在分解概述中,我们提到数据矩阵往往是”名义维度很高、但有效维度很低”的。这里的”有效维度”就是秩的概念:一个 1000×500 的数据矩阵,名义上有 500 个特征维度,但如果秩只有 20,说明这些特征实际上只有 20 个独立方向,其余都可以用这 20 个的线性组合表示。
低秩近似(low-rank approximation)是整个 Part 1 的核心主题:找一个秩为 k≪n 的矩阵来近似原始矩阵——LoRA、矩阵补全、PCA 都在做这件事。
零空间:被矩阵”压死”的方向
秩告诉我们矩阵保留了多少维度。那么,被丢弃的维度去了哪里?
定义
回忆前面的映射视角和四个基本子空间:A 把 Rn 中的向量映射到 Rm 中,行空间被保留,而零空间被”压死”。现在来正式定义零空间。
矩阵 A∈Rm×n 的零空间(null space,也叫核 kernel)就是所有满足 Ax=0 的向量的集合:
null(A)={x∈Rn:Ax=0}
零空间中的向量是被矩阵”完全压死”的——它们经过变换后消失了,信息被完全丢弃。
几何直觉
考虑矩阵 B=101011112。注意到第三行等于前两行之和,所以 rank(B)=2。B 把三维空间映射到一个二维平面上。
哪些向量被压死了?解 Bx=0,由第一行 x1+x3=0 和第二行 x2+x3=0,得 x1=−x3,x2=−x3,即 x=x3(−1,−1,1)T。
零空间是 span{(−1,−1,1)T}——一条通过原点的直线。沿着这条线的所有向量,经过 B 变换后都变成零。验证:B⋅(−1,−1,1)T=(−1+0+1,0−1+1,−1−1+2)=(0,0,0) ✓
零空间与列空间:变换前后的对比
秩 2 的矩阵把 3D 空间压成 2D 平面,垂直于平面的方向被"压死"
秩-零化度定理
秩和零空间的维度满足一个优雅的等式:
秩-零化度定理
rank(A)+dim(null(A))=n
被矩阵保留的维度 + 被矩阵压死的维度 = 输入空间的总维度(n = 列数)。
在上面的例子中:rank(B)=2,dim(null(B))=1,n=3,确实 2+1=3 ✓
零空间为什么重要
零空间在后续学习中会反复出现:
- 线性方程组 Ax=b:如果零空间非平凡(不仅仅包含零向量),方程组有无穷多解——任何特解加上零空间中的向量都是解
- 在后续 Art. 2 和 Art. 3 中:特征值为零的特征向量就在零空间里;SVD 中奇异值为零对应的方向被完全丢弃
- 矩阵的可逆性:矩阵可逆当且仅当零空间只包含零向量(即 null(A)={0},没有信息被丢弃)
正交矩阵:保长度、保角度的变换
在讨论投影时,我们看到正交列的矩阵 W 使投影公式大幅简化(P=WWT)。现在来看正交性的”终极形式”:正交矩阵。
定义
一个方阵 Q∈Rn×n 是正交矩阵(orthogonal matrix),当且仅当:
正交矩阵核心性质
QTQ=QQT=I⟹Q−1=QT
保长度:∥Qx∥=∥x∥ 保角度:(Qx)T(Qy)=xTy
这意味着 Q 的列向量(和行向量)两两正交且长度为 1——形成一组标准正交基(orthonormal basis)。
命名陷阱:“正交矩阵”(orthogonal matrix)的列实际上是单位正交的(orthonormal)——不仅两两垂直,而且长度为 1。如果列只是正交但长度不为 1,则 QTQ 是对角矩阵 D(而非 I),不满足定义。这个不一致是历史遗留:orthogonal matrix 这个术语早于 orthonormal 的广泛使用。
正交 = 对称:正交矩阵要求 QTQ=I,但不要求 Q=QT。典型例子:旋转矩阵 R=[cosθsinθ−sinθcosθ] 是正交的但不对称(θ=0,π 时)。只有反射矩阵(如 Householder 矩阵 H=I−2vvT)才同时满足正交和对称——此时 Q2=I,即 Q 是自身的逆。
几何意义
正交矩阵的作用是旋转(rotation)或反射(reflection)——它改变向量的方向,但不改变长度和角度。
保长度:∥Qx∥2=(Qx)T(Qx)=xTQTQx=xTx=∥x∥2
保角度:(Qx)T(Qy)=xTQTQy=xTy——内积不变意味着角度不变。
det(Q)=+1 时是纯旋转,det(Q)=−1 时包含反射。
反射矩阵:给定单位向量 v(∥v∥=1),关于 v 的法平面的反射定义为:
H=I−2vvT
几何直觉:vvTx 提取 x 在 v 方向上的分量,I−2vvT 将这个分量反号——等效于关于垂直于 v 的超平面做镜像翻转。在 2D 中,取 v=(0,1)T,则 H=[100−1]——关于 x 轴的反射,把 (a,b) 映射到 (a,−b)。
验证 H 的性质:(I−2vvT)T=I−2vvT=H(对称),H2=I−4vvT+4v=1(vTv)vT=I(做两次反射回到原处)。所以反射矩阵是同时正交且对称的,H−1=HT=H。这种矩阵叫做 Householder 矩阵,是数值线性代数中 QR 分解的核心构建块。
正交变换 vs 一般变换对单位圆的作用
正交矩阵保持长度和角度,一般矩阵会拉伸和扭曲
上图展示了关键区别:一般矩阵把单位圆变成椭圆(拉伸和剪切),而正交矩阵把单位圆变成另一个单位圆(只是旋转了)。
正交基的计算优势
QTQ=I 意味着 Q−1=QT——转置就是逆。这在计算上是巨大的优势:
- 计算一般矩阵的逆需要 O(n3) 的运算和担心数值稳定性
- 计算正交矩阵的”逆”只需要转置——O(1) 的额外存储,零额外计算
这就是为什么在数值线性代数中,有大量算法专门用于构造正交基——Gram-Schmidt 正交化、Householder 变换、QR 分解等。它们是 numpy.linalg.svd() 和 torch.linalg.eigh() 等库函数的内部实现基石,本路径不逐一展开,但理解它们存在的动机很简单:正交基让一切计算变得简洁而稳定。
为什么正交矩阵如此重要
在后续文章中,正交矩阵是核心角色:
- SVD(Art. 3):A=UΣVT 中,U 和 V 都是正交矩阵 → SVD 的几何意义就是”旋转 → 拉伸 → 旋转”
- 特征分解(Art. 2):对称矩阵的特征分解 A=QΛQT 中,Q 是正交矩阵
- 数值稳定性:正交变换不放大误差(因为保长度),所以涉及正交矩阵的算法天然具有良好的数值性质
数值秩与有效秩
前面讨论的秩是一个精确的整数:要么线性无关,要么不是。但在真实数据中,情况更微妙。
理论秩的局限
理论上秩是精确定义的。但真实数据总有噪声——即使数据”本质上”在一个低维子空间附近,微小的噪声扰动也能让所有方向的方差都非零,使得精确秩等于矩阵的列数。
例如,一组三维数据点本来几乎在一个平面上(2 维),加上微量测量噪声后,垂直于平面的方向也有了极小的方差。精确秩变成了 3,但说”有效维度是 3”显然不对——绝大部分信息仍然在那个平面上。
有效秩的直觉
有效秩(effective rank)不是一个精确的数,而是一个”软”概念:数据在各个正交方向上的方差差异有多大?
想象把数据投影到各个正交方向上,计算每个方向上的方差,从大到小排列。如果方差衰减得很快——前几个方向的方差远大于后面的——那么有效秩就是”方差显著的方向的数量”。
方差衰减曲线与有效秩
各正交方向上的方差按大小排列,曲线急剧下降处标志着有效秩
上图是一条典型的方差衰减曲线(也叫 scree plot)。前 3 个方向的方差占总方差的约 94%,之后的方向方差很小(noise floor)。虽然精确秩可能等于 10(所有方向方差都非零),但有效秩约为 3。
如何判断有效秩
在没有引入特征值和奇异值(它们将在 Art. 2 和 Art. 3 正式定义)的情况下,判断有效秩的直觉方法是:
- 计算数据在各正交方向上的方差(例如通过协方差矩阵的对角元素,或者通过逐步寻找方差最大的正交方向)
- 按大小排列,画衰减曲线
- 找 elbow(拐点):曲线急剧下降的位置,大方差方向(信号)和小方差方向(噪声)的分界
在后续文章中,我们会看到更精确的定义方式。Art. 3 的奇异值给出方差衰减的精确量化,Art. 4 的范数定义了如 stable rank rs=∥A∥F2/∥A∥22 这样的连续指标。本节只需要建立一个直觉:有效维度远低于名义维度。
有效秩为什么重要
“名义维度高、有效维度低”这个现象是整个矩阵分解理论的出发点:
- PCA(Art. 6):保留前 k 个主成分就是选择方差最大的 k 个方向,丢弃方差极小的(噪声)方向。选 k 的标准就是有效秩
- 截断 SVD(Art. 3):保留前 k 个奇异值,k 的选择基于奇异值的衰减速率
- LoRA(Art. 24):大模型微调时权重更新矩阵 ΔW 是低秩的——其 intrinsic dimensionality 远小于名义维度
完整数值例子:从 3D 数据到有效秩
让我们把本文的所有概念串起来,用一个具体的数值例子走一遍完整流程。
数据
8 个三维数据点,大致分布在一个倾斜的平面上,加了微量噪声:
p1=(1,2,1.15),p2=(3,1,1.72),p3=(2,5,2.56),p4=(5,3,3.37)
p5=(4,6,3.84),p6=(6,4,4.15),p7=(3,3,2.47),p8=(5,6,4.24)
第一步:中心化
均值:xˉ=(3.625,3.750,2.938)
第二步:计算各方向方差
这里我们预告 Art. 1B 的协方差矩阵概念。协方差矩阵 C=n−11X~TX~(其中 X~ 是中心化后的数据矩阵)对角线上就是各坐标轴方向的方差:
C=2.841.181.711.183.361.611.711.611.32
注意对角元素:x 方向方差 2.84,y 方向方差 3.36,z 方向方差 1.32。但坐标轴不一定是方差最大的方向——非对角元素(协方差)不为零,说明各维度之间有关联。
第三步:找到真正的主方向
通过数值方法(后续 Art. 2 会正式介绍),可以找到三个互相正交的方向,使得数据在这些方向上的方差分别为:
| 方向 | 方差 | 占比 |
|---|
| 方向 1 | 5.583 | 74.3% |
| 方向 2 | 1.927 | 25.7% |
| 方向 3 | 0.0012 | 0.02% |
前两个方向解释了 99.98% 的方差。第三个方向的方差几乎为零——数据在这个方向上几乎没有变化。
第四步:投影到前 2 个方向
把 8 个点投影到前两个主方向构成的平面上,然后重建:
| 点 | 原始坐标 | 重建坐标 | 误差 |
|---|
| p1 | (1, 2, 1.15) | (1.00, 2.00, 1.15) | 0.001 |
| p2 | (3, 1, 1.72) | (2.98, 0.99, 1.76) | 0.049 |
| p7 | (3, 3, 2.47) | (3.02, 3.02, 2.42) | 0.055 |
| p8 | (5, 6, 4.24) | (4.98, 5.99, 4.28) | 0.048 |
所有点的重建误差都极小(< 0.06)。上表仅展示 4 个代表点,全部 8 个点的总平方误差约 0.008。
第五步:被丢弃的方向 ≈ 零空间方向
第三个方向(被丢弃的那个)约为 (−0.41,−0.27,0.87)。数据在这个方向上的投影值都在 ±0.06 以内——几乎为零。
这就是”有效零空间”:虽然不是精确为零(有微量噪声),但实际上这个方向携带的信息可以忽略不计。如果我们构建一个最优秩-2 近似矩阵来表示这些数据,这个方向就是被”压死”的方向。
小结
这个例子完整展示了概念链:
- 内积(通过协方差矩阵的元素)度量了各维度的对齐关系
- 投影到主方向上保留了几乎全部信息
- 秩(有效秩 ≈ 2)揭示了数据的内在维度远低于名义维度 3
- 零空间方向(方差极小的方向)对应了可以安全丢弃的噪声方向
总结与展望
本文建立了描述向量和子空间几何关系的完整工具箱:
| 概念 | 核心含义 | 在 ML 中的作用 |
|---|
| 内积 | 度量两个向量的对齐程度 | Attention 的 QKT、余弦相似度 |
| 投影 | 分解为”沿某方向 + 垂直方向” | PCA 降维、最小二乘 |
| Ax=y 的三视角 | 行(内积)、列(线性组合)、映射(几何变换) | 理解不同语境下矩阵乘法的含义 |
| 基变换 | Q−1x:换一组基描述同一个向量 | 特征分解、SVD、PCA 的核心机制 |
| 四个基本子空间 | 行空间↔列空间,零空间↔左零空间 | SVD 的结构基础 |
| 秩 | 独立方向的数量 | 低秩近似、LoRA |
| 零空间 | 被变换压死的方向 | 方程求解、信息丢弃 |
| 正交矩阵 | 保长度保角度的变换 | SVD 的旋转部分、数值稳定性 |
| 有效秩 | 信号方向的数量(软概念) | 选择截断维度 k |
这些是向量级的工具——描述向量之间的关系、向量组的结构、以及矩阵对向量的作用。
但我们还缺少矩阵级的工具:矩阵本身有什么结构?对称矩阵和一般矩阵有什么区别?矩阵的”形状”(正定、半正定)意味着什么?协方差矩阵为什么必须是半正定的?这些问题将在下一篇(Art. 1B)中回答——从对称性、正定性到二次型,建立矩阵级的几何语言,为 Art. 2 的特征分解做好最后的铺垫。