🧮 线性代数核心:向量空间、四大子空间、SVD/EVD、投影与最小二乘、Jacobian/Hessian 全景
核心摘要 :线性代数是机器学习和深度学习的底层基座——每个张量都是矩阵,每一层都是矩阵乘法,每一条损失曲面都是矩阵运算的函数。本指南覆盖 AI 工程师不可妥协的数理核心:向量空间与矩阵运算、带有秩-零化度定理的四大子空间、特征值分解 EVD 与奇异值分解 SVD 的几何意义、正交投影与最小二乘的几何(正规方程 X T X w = X T y X^T X w = X^T y X T X w = X T y 本质上是一条投影声明)、PCA / 低秩近似 / Moore-Penrose 伪逆等分解应用,以及多元微积分(梯度、Jacobian、Hessian)与每次反向传播都要用到的链式法则维度检查。
¶ 💡 交互式 Mermaid 架构流程图
📊 Modular Blueprint 🌐 Topology Graph
STAGE 1
1. 向量空间与矩阵运算 (Vector Spaces & Matrix Operations) 📌 矩阵乘法
(m x p) @ (p x n) -> (m x n),列视角与外积视角
📌 秩 r = dim C(A)
最大独立列数 = 最大独立行数
STAGE 2
2. 四大子空间 (Four Fundamental Subspaces) 📌 列空间 C(A)
维数 r — 所有可达输出 A x
📌 零空间 N(A)
维数 n - r — 映射到 0 的输入
📌 左零空间 N(Aᵀ)
维数 m - r — 最小二乘中的不可解释残差
STAGE 3
3. 谱分解 (Spectral Decompositions) 📌 EVD (对称矩阵)
A = Q Λ Qᵀ,实特征值,正交 Q
📌 SVD (任意矩阵)
A = U Σ Vᵀ,奇异值 σᵢ = √λᵢ(AᵀA)
📌 几何
Vᵀ 旋转 -> Σ 拉伸 -> U 旋转 (球面变椭球面)
STAGE 4
4. 投影、最小二乘与应用 (Projection & Applications) 📌 投影矩阵 P = X (XᵀX)⁻¹ Xᵀ,残差 ⊥ 列空间
📌 正规方程 XᵀX w = Xᵀy;病态时改用 SVD 伪逆 A⁺ = V Σ⁺ Uᵀ
📌 PCA = 数据中心化后的 SVD;截断 SVD = 最优低秩近似
STAGE 5
5. 向量微积分 (Vector Calculus) 📌 梯度 ∇f ∈ Rⁿ (Rⁿ -> R),Jacobian J ∈ R^(k x n) (Rⁿ -> Rᵏ)
📌 链式法则
J_(g∘f) = J_g · J_f,维度检查 (k x n) = (k x m)(m x n)
📌 Hessian H ∈ R^(n x n) 对称 (Schwarz 定理),牛顿步 -H⁻¹ ∇f
¶ 💡 经典面试追问与考点速查
考点 1 :矩阵 A ∈ R m × n A \in \mathbb{R}^{m \times n} A ∈ R m × n 的四大子空间分别是什么?秩-零化度定理如何联系它们的维度?
标准回答 :设秩为 r r r :列空间 C ( A ) = { A x } C(A) = \{Ax\} C ( A ) = { A x } 维数为 r r r ;零空间 N ( A ) = { x : A x = 0 } N(A) = \{x : Ax = 0\} N ( A ) = { x : A x = 0 } 维数为 n − r n - r n − r ;行空间 C ( A T ) C(A^T) C ( A T ) 维数为 r r r ;左零空间 N ( A T ) = { y : A T y = 0 } N(A^T) = \{y : A^T y = 0\} N ( A T ) = { y : A T y = 0 } 维数为 m − r m - r m − r 。秩-零化度定理给出 dim C ( A ) + dim N ( A ) = n \dim C(A) + \dim N(A) = n dim C ( A ) + dim N ( A ) = n 且 dim C ( A T ) + dim N ( A T ) = m \dim C(A^T) + \dim N(A^T) = m dim C ( A T ) + dim N ( A T ) = m 。更关键的是两对子空间互为正交补 :C ( A T ) ⊥ N ( A ) C(A^T) \perp N(A) C ( A T ) ⊥ N ( A ) 、C ( A ) ⊥ N ( A T ) C(A) \perp N(A^T) C ( A ) ⊥ N ( A T ) ,因此任意向量可唯一分解为"行空间分量 + 零空间分量"——这正是最小二乘几何的根基。
考点 2 :推导正规方程 X T X w = X T y X^T X w = X^T y X T X w = X T y ,并解释其几何含义。
标准回答 :最小化 J ( w ) = 1 2 ∥ X w − y ∥ 2 J(w) = \frac{1}{2}\|Xw - y\|^2 J ( w ) = 2 1 ∥ X w − y ∥ 2 ,令梯度 ∇ J ( w ) = X T ( X w − y ) \nabla J(w) = X^T(Xw - y) ∇ J ( w ) = X T ( X w − y ) 为零即得 X T X w = X T y X^T X w = X^T y X T X w = X T y 。几何上,最优预测 y ^ = X w ∗ \hat{y} = Xw^* y ^ = X w ∗ 必须是 y y y 在 C ( X ) C(X) C ( X ) 上的正交投影 :残差 r = y − y ^ r = y - \hat{y} r = y − y ^ 与 X X X 的每一列都垂直,即 X T r = X T ( y − X w ) = 0 X^T r = X^T(y - Xw) = 0 X T r = X T ( y − X w ) = 0 ——这正是正规方程本身。求解正规方程等价于丢掉 y y y 落在 N ( X T ) N(X^T) N ( X T ) 中的分量(任何线性模型都无法解释的部分)。当 X T X X^T X X T X 奇异(列共线或 n < d n < d n < d )时,需引入岭正则 λ I \lambda I λ I 或改用 SVD 伪逆。
考点 3 :解释奇异值分解 A = U Σ V T A = U\Sigma V^T A = U Σ V T 的几何意义,以及它与 A T A A^T A A T A 、A A T AA^T A A T 特征分解的联系。
标准回答 :SVD 把任意实矩阵拆成三步映射:V T V^T V T (输入空间的旋转/反射)→ Σ \Sigma Σ (按奇异值 σ 1 ≥ ⋯ ≥ σ r > 0 \sigma_1 \ge \dots \ge \sigma_r > 0 σ 1 ≥ ⋯ ≥ σ r > 0 做坐标轴对齐缩放)→ U U U (输出空间的旋转/反射)。A A A 把 R n \mathbb{R}^n R n 中的单位球面映成 R m \mathbb{R}^m R m 中的椭球面,半轴长度正是 σ i \sigma_i σ i 。代数上 A T A = V Σ 2 V T A^T A = V\Sigma^2 V^T A T A = V Σ 2 V T 、A A T = U Σ 2 U T AA^T = U\Sigma^2 U^T A A T = U Σ 2 U T 均为特征分解,故奇异值 = 格拉姆矩阵特征值的平方根 ,V V V 的列是 A T A A^T A A T A 的特征向量,U U U 的列是 A A T AA^T A A T 的特征向量。对对称矩阵,SVD 退化为以 ∣ λ i ∣ |\lambda_i| ∣ λ i ∣ 为奇异值的 EVD。
考点 4 :如何使用 SVD 计算 Moore-Penrose 伪逆?何时应优先于 ( X T X ) − 1 X T (X^T X)^{-1} X^T ( X T X ) − 1 X T ?
标准回答 :伪逆定义为 A + = V Σ + U T A^+ = V\Sigma^+ U^T A + = V Σ + U T ,其中 Σ + \Sigma^+ Σ + 把每个非零奇异值取倒数 1 / σ i 1/\sigma_i 1/ σ i 并转置。它总是给出最小范数最小二乘解 w ∗ = A + y w^* = A^+ y w ∗ = A + y ;当列满秩时与正规方程解 ( X T X ) − 1 X T y (X^T X)^{-1} X^T y ( X T X ) − 1 X T y 一致。当 X T X X^T X X T X 奇异或病态时应优先使用伪逆:构造 ( X T X ) − 1 (X^T X)^{-1} ( X T X ) − 1 会把条件数平方 κ ( X T X ) = κ ( X ) 2 \kappa(X^T X) = \kappa(X)^2 κ ( X T X ) = κ ( X ) 2 ,剧烈放大舍入误差与噪声,而 SVD 路线只保留 κ ( X ) \kappa(X) κ ( X ) 。这也是 np.linalg.lstsq(SVD 实现)成为生产环境默认的原因。
考点 5 :反向传播中如何通过 Jacobian 维度检查验证链式法则?Hessian 矩阵在优化中起什么作用?
标准回答 :对 f : R n → R k f: \mathbb{R}^n \to \mathbb{R}^k f : R n → R k ,Jacobian J ∈ R k × n J \in \mathbb{R}^{k \times n} J ∈ R k × n 的 ( i , j ) (i,j) ( i , j ) 元为 ∂ f i / ∂ x j \partial f_i / \partial x_j ∂ f i / ∂ x j (梯度是 k = 1 k=1 k = 1 的特例)。对 h = g ∘ f h = g \circ f h = g ∘ f (f : R n → R m f: \mathbb{R}^n \to \mathbb{R}^m f : R n → R m 、g : R m → R k g: \mathbb{R}^m \to \mathbb{R}^k g : R m → R k ):J h = J g ( f ( x ) ) ⋅ J f ( x ) J_h = J_g(f(x)) \cdot J_f(x) J h = J g ( f ( x )) ⋅ J f ( x ) ,维度检查 ( k × n ) = ( k × m ) ( m × n ) (k \times n) = (k \times m)(m \times n) ( k × n ) = ( k × m ) ( m × n ) 能立刻抓住写反的转置梯度——这是手写反向传播最常见的静默 bug。Hessian H = ∇ 2 f ∈ R n × n H = \nabla^2 f \in \mathbb{R}^{n \times n} H = ∇ 2 f ∈ R n × n 是梯度的 Jacobian,在 f f f 二阶可导时对称(Schwarz 定理);其特征值符号判定临界点类型(全正 = 局部极小,混合 = 鞍点),牛顿法步长 Δ w = − H − 1 ∇ f \Delta w = -H^{-1}\nabla f Δ w = − H − 1 ∇ f 用曲率重新标定梯度。
¶ 📚 第一章:向量空间与矩阵基本运算
¶ 1.1 向量空间、基与维数
向量空间 V V V 是在向量加法与数乘下封闭的集合。核心派生概念:
概念 定义 AI 相关意义 张成 (Span) 一组向量的所有线性组合 线性层能够到达的特征空间 线性无关 ∑ i c i v i = 0 ⟹ \sum_i c_i v_i = 0 \implies ∑ i c i v i = 0 ⟹ 所有 c i = 0 c_i = 0 c i = 0 满秩设计矩阵 X X X 的列 基 (Basis) 最小的独立张成集 使矩阵对角化的坐标系 维数 (Dimension) 任何基中向量的个数 模型的固有自由度
基是几何与计算之间的桥梁:任意 x = ∑ i α i b i x = \sum_i \alpha_i b_i x = ∑ i α i b i 由其坐标 ( α 1 , … , α d ) (\alpha_1, \dots, \alpha_d) ( α 1 , … , α d ) 唯一表示——这正是矩阵(坐标映射)能够代表抽象线性变换的原因。
📖 怎么读这张表 :四行其实是一条推理链:Span 定义"能到达哪里"→ 线性无关保证"没有冗余方向"→ 基 = 两者兼得的最小集合 → 维数 = 基的大小。面试常问"为什么秩=最大独立行数=最大独立列数",答案就在"行秩=列秩"这个基本定理上。
💡 直观理解 :把向量空间想成"用积木能拼出的所有形状":Span 是所有积木组合的集合,线性无关说"没有一块积木是其他积木的拼法",基是"最少积木组合"(多一块就冗余、少一块就拼不全),维数是"最少需要几块积木"。"基"的价值在于它给了每个向量一个唯一的"坐标住址"——就像经纬度之于地球:有了基,抽象的几何对象才变成计算机里的一列数字。
🎤 面试速答 :"结论:Span=所有线性组合,基=最小独立张成集,维数=基的大小。原理:线性无关保证表示唯一,基的存在让每个向量有唯一坐标。例子:R 2 \mathbb{R}^2 R 2 的标准基 { ( 1 , 0 ) , ( 0 , 1 ) } \{(1,0),(0,1)\} {( 1 , 0 ) , ( 0 , 1 )} ,向量 ( 3 , 4 ) (3,4) ( 3 , 4 ) 的坐标就是 ( 3 , 4 ) (3,4) ( 3 , 4 ) ;换成基 { ( 1 , 1 ) , ( 1 , − 1 ) } \{(1,1),(1,-1)\} {( 1 , 1 ) , ( 1 , − 1 )} ,同一向量的坐标变为 ( 3.5 , − 0.5 ) (3.5,-0.5) ( 3.5 , − 0.5 ) ——向量没变,坐标系变了。面试点:'特征向量构成对角化坐标系'就是在换基。"
¶ 1.2 矩阵乘法:维度与三种视角
对 A ∈ R m × p A \in \mathbb{R}^{m \times p} A ∈ R m × p 、B ∈ R p × n B \in \mathbb{R}^{p \times n} B ∈ R p × n :
( A B ) i j = ∑ k = 1 p A i k B k j , A B ∈ R m × n (AB)_{ij} = \sum_{k=1}^{p} A_{ik} B_{kj}, \qquad AB \in \mathbb{R}^{m \times n} ( A B ) ij = ∑ k = 1 p A ik B k j , A B ∈ R m × n
实践中三种等价视角:(1) 行-列视角 :A A A 的行与 B B B 的列做内积;(2) 列视角 :A B = [ A b 1 , … , A b n ] AB = [Ab_1, \dots, Ab_n] A B = [ A b 1 , … , A b n ] ——每个输出列都是 A A A 作用于 B B B 的一列,即批量推理的视角;(3) 外积视角 :A = ∑ i σ i u i v i T A = \sum_i \sigma_i u_i v_i^T A = ∑ i σ i u i v i T ——任意矩阵都是一系列秩 1 片段的叠加,这正是 SVD 与低秩分解(LoRA 的 Δ W = B A \Delta W = BA Δ W = B A )的机制基础。
💡 直观理解 :矩阵乘法公式 ( A B ) i j = ∑ k A i k B k j (AB)_{ij}=\sum_k A_{ik}B_{kj} ( A B ) ij = ∑ k A ik B k j 看起来只是"乘加循环",但三种视角是三个世界观:行-列视角回答"怎么算"(内积);列视角回答"在算什么"——A A A 是一台机器,把 B B B 的每一列当原料加工(神经网络前向传播就是这么看:整批数据一次喂给权重矩阵);外积视角回答"矩阵是由什么构成的"——任何矩阵都能拆成"一层薄片"(秩 1 矩阵)的叠加,薄片的层数就是秩。LoRA 微调的本质就是"只改少数几层薄片"。
🎤 面试速答 :"结论:矩阵乘法有三种等价视角——内积(算)、列组合(语义)、外积分解(结构)。原理:A B = [ A b 1 , … , A b n ] AB=[Ab_1,\dots,Ab_n] A B = [ A b 1 , … , A b n ] 说明每列是 A 作用于 B 的一列;A = ∑ i σ i u i v i T A=\sum_i\sigma_i u_iv_i^T A = ∑ i σ i u i v i T 说明任意矩阵是秩 1 矩阵之和。例子:LoRA 把 Δ W \Delta W Δ W 写成 B A BA B A (比如 8 × 4096 8\times 4096 8 × 4096 的 B B B 乘 4096 × 4096 4096\times 4096 4096 × 4096 的 A A A 分解为两个低秩矩阵),参数从 1600 万降到约 6.5 万——靠的就是'矩阵可以摊成薄片,只需保留最厚的几片'。"
¶ 1.3 秩:矩阵最重要的一个数字
rank ( A ) = dim C ( A ) = 最大独立列数 = 最大独立行数 \text{rank}(A) = \dim C(A) = \text{最大独立列数} = \text{最大独立行数} rank ( A ) = dim C ( A ) = 最大独立列数 = 最大独立行数
行秩恒等于列秩。对机器学习的影响:若 rank ( X ) = d \text{rank}(X) = d rank ( X ) = d (列满秩),格拉姆矩阵 X T X X^T X X T X 可逆、最小二乘解唯一;若 rank ( X ) < d \text{rank}(X) < d rank ( X ) < d ,正规方程有无穷多解,必须借助正则化或伪逆来选取其一。
💡 直观理解 :秩就是"信息通道数"。一列若能被其他列拼出来(如第 3 列 = 第 1 列 + 第 2 列),它就没有携带新方向——就像三个人里有一人是另两人的"拼凑",队伍实际只有两个独立意见。行秩=列秩这个"巧合"本质是:行方向的空间与列方向的空间由同一个线性映射定义,互为"双胞胎"。ML 里秩直接决定"解是否唯一":数据矩阵满秩,方程才"信息足够";欠秩就是"信息重复",需要正则化来挑一个答案。
🎤 面试速答 :"结论:秩 = 最大独立列数 = 最大独立行数,决定最小二乘解的唯一性。原理:列空间维数 = 行空间维数(行秩=列秩);X X X 列满秩时 X T X X^TX X T X 可逆、解唯一,否则无穷多解。例子:设计矩阵 X X X 里第 3 个特征是前两个之和(如 '年龄' 与 '出生年' 高度共线),rank 从 3 掉到 2,X T X X^TX X T X 奇异——正规方程解不出来,必须 Ridge(加 λ I \lambda I λ I )或伪逆取最小范数解。面试金句:'秩是矩阵的身份证,决定方程有没有唯一答案。'"
¶ 📚 第二章:四大子空间与秩
¶ 2.1 线性代数基本定理
子空间 定义 维数 正交补 列空间 C ( A ) C(A) C ( A ) { A x : x ∈ R n } ⊆ R m \{Ax : x \in \mathbb{R}^n\} \subseteq \mathbb{R}^m { A x : x ∈ R n } ⊆ R m r r r N ( A T ) N(A^T) N ( A T ) 零空间 N ( A ) N(A) N ( A ) { x : A x = 0 } ⊆ R n \{x : Ax = 0\} \subseteq \mathbb{R}^n { x : A x = 0 } ⊆ R n n − r n - r n − r C ( A T ) C(A^T) C ( A T ) 行空间 C ( A T ) C(A^T) C ( A T ) { A T y : y ∈ R m } ⊆ R n \{A^T y : y \in \mathbb{R}^m\} \subseteq \mathbb{R}^n { A T y : y ∈ R m } ⊆ R n r r r N ( A ) N(A) N ( A ) 左零空间 N ( A T ) N(A^T) N ( A T ) { y : A T y = 0 } ⊆ R m \{y : A^T y = 0\} \subseteq \mathbb{R}^m { y : A T y = 0 } ⊆ R m m − r m - r m − r C ( A ) C(A) C ( A )
📖 怎么读这张表 :四行是两对"正交互补":行空间与零空间(在输入空间 R n \mathbb{R}^n R n 里互补,维数和 = n)、列空间与左零空间(在输出空间 R m \mathbb{R}^m R m 里互补,维数和 = m)。面试最爱问"为什么最小二乘残差在左零空间"——答案就在这张表最后一行的"正交补"列。
💡 直观理解 :四大子空间是"矩阵这台机器的四个房间":列空间 C ( A ) C(A) C ( A ) = 机器能产出的所有产品(A x Ax A x 的所有可能结果);零空间 N ( A ) N(A) N ( A ) = 哪些原材料会被加工成 0(被机器"吞掉"的信息);行空间 = 原材料的"有效维度";左零空间 = 产品空间里"机器永远产不出的方向"。关键事实:行空间与零空间互相垂直且拼满整个输入空间 ——任何输入都能唯一拆成"有效部分 + 被吞掉的部分",这正是"解的存在性与唯一性"的几何来源。
¶ 2.2 秩-零化度定理与正交分解
dim C ( A ) + dim N ( A ) = n , dim C ( A T ) + dim N ( A T ) = m \dim C(A) + \dim N(A) = n, \qquad \dim C(A^T) + \dim N(A^T) = m dim C ( A ) + dim N ( A ) = n , dim C ( A T ) + dim N ( A T ) = m
证明思路:把 N ( A ) N(A) N ( A ) 的一组基 { v 1 , … , v n − r } \{v_1, \dots, v_{n-r}\} { v 1 , … , v n − r } 扩充为 R n \mathbb{R}^n R n 的基,剩余 r r r 个向量的像在 C ( A ) C(A) C ( A ) 中线性无关。又因 C ( A T ) ⊥ N ( A ) C(A^T) \perp N(A) C ( A T ) ⊥ N ( A ) 且维数和为 n n n ,得到两个正交分解 :R n = C ( A T ) ⊕ N ( A ) \mathbb{R}^n = C(A^T) \oplus N(A) R n = C ( A T ) ⊕ N ( A ) ,R m = C ( A ) ⊕ N ( A T ) \mathbb{R}^m = C(A) \oplus N(A^T) R m = C ( A ) ⊕ N ( A T ) 。
💡 直观理解 :秩-零化度定理的直觉是"维度守恒":矩阵不会凭空创造维度,也不会凭空消灭维度。输入里有多少维被"保留"(进入行空间、被映射到列空间),剩下的维就必然被"吞掉"(进入零空间)——两者加起来恒等于输入维度 n n n 。就像把 n n n 个人的队伍分成两队:r r r 个人被派去干活(列空间),n − r n-r n − r 个人原地待命(零空间),总人数不变。正交分解进一步说明这种分工还是"垂直分工":干活的人不会踩着待命的人。
🎤 面试速答 :"结论:dim C ( A ) + dim N ( A ) = n \dim C(A)+\dim N(A)=n dim C ( A ) + dim N ( A ) = n ,且 C ( A T ) ⊥ N ( A ) C(A^T)\perp N(A) C ( A T ) ⊥ N ( A ) 正交互补。原理:矩阵只把输入维度映射过去,不增不减;被零空间吞掉的维度 + 活着的维度 = 输入总维数。例子:3 × 3 3\times3 3 × 3 矩阵秩 2(如第 3 行 = 第 1 行 + 第 2 行),零空间维数 3 − 2 = 1 3-2=1 3 − 2 = 1 :方程 A x = 0 Ax=0 A x = 0 的解是一条直线(一维),A x = b Ax=b A x = b 有解时解也是'一条直线上的所有点'。面试金句:'秩决定解的空间有多大,零空间是自由的尺度。'"
¶ 2.3 对机器学习的意义
解的存在性 :A x = b Ax = b A x = b 有解当且仅当 b ∈ C ( A ) b \in C(A) b ∈ C ( A ) ;唯一当且仅当 N ( A ) = { 0 } N(A) = \{0\} N ( A ) = { 0 } 。
最小二乘 :把 y = y ^ + r y = \hat{y} + r y = y ^ + r 拆成可解释部分 y ^ ∈ C ( X ) \hat{y} \in C(X) y ^ ∈ C ( X ) 与噪声 r ∈ N ( X T ) r \in N(X^T) r ∈ N ( X T ) ——左零空间就是"不可解释残差"的栖身之所。
可辨识性 :w = ( X T X ) − 1 X T y w = (X^T X)^{-1} X^T y w = ( X T X ) − 1 X T y 有定义当且仅当 rank ( X ) = d \text{rank}(X) = d rank ( X ) = d ,否则参数必须依赖先验/正则化才能辨识。
💡 直观理解 :把 ML 的回归问题放进子空间框架:y y y 落在 C ( X ) C(X) C ( X ) 里的分量(行空间部分)是模型能解释的,落在 N ( X T ) N(X^T) N ( X T ) 里的分量(左零空间部分)是任何线性模型都解释不了的。最小二乘"放弃"后者——不是模型不够努力,而是那些方向根本不在 X X X 的可达范围内。零空间非空(欠秩)时 X w = y Xw=y X w = y 有无穷多解:不同 w w w 只差一个零空间向量,预测完全一样但参数天差地别——这就是"参数不可辨识",需要正则化选最小范数那一个。
🎤 面试速答 :"结论:A x = b Ax=b A x = b 有解当且仅当 b ∈ C ( A ) b\in C(A) b ∈ C ( A ) ,唯一当且仅当 N ( A ) = { 0 } N(A)=\{0\} N ( A ) = { 0 } ;回归中残差落在 N ( X T ) N(X^T) N ( X T ) 。原理:y y y 分解为 C ( X ) C(X) C ( X ) 分量(可解释)+ N ( X T ) N(X^T) N ( X T ) 分量(不可解释);欠秩时解之间只差零空间向量。例子:特征 A、B 完全共线(B=2A),β A = 1 , β B = 0 \beta_A=1,\beta_B=0 β A = 1 , β B = 0 与 β A = − 1 , β B = 1 \beta_A=-1,\beta_B=1 β A = − 1 , β B = 1 预测完全相同——参数不唯一,所以共线数据必须删特征或正则化。面试点:'共线性的本质是零空间非零,可辨识性的本质是零空间为零。'"
¶ 📚 第三章:特征值分解 EVD 与奇异值分解 SVD
¶ 3.1 特征值分解
特征对满足 A v = λ v Av = \lambda v A v = λ v 。对对称矩阵 A = A T ∈ R n × n A = A^T \in \mathbb{R}^{n \times n} A = A T ∈ R n × n ,谱定理保证正交对角化:
A = Q Λ Q T , Q T Q = I , Λ = diag ( λ 1 , … , λ n ) ∈ R A = Q \Lambda Q^T, \qquad Q^T Q = I, \quad \Lambda = \text{diag}(\lambda_1, \dots, \lambda_n) \in \mathbb{R} A = Q Λ Q T , Q T Q = I , Λ = diag ( λ 1 , … , λ n ) ∈ R
几何意义:Q T Q^T Q T 旋入特征基,Λ \Lambda Λ 沿各轴独立缩放,Q Q Q 再旋回。PCA、马尔可夫链平稳分布、图拉普拉斯谱分析因此都可归结为特征值问题。
💡 直观理解 :特征向量是"矩阵只拉伸不转向的方向"。想象一个线性变换把圆形压成椭圆:长轴方向就是最大特征值对应的特征向量(被拉得最狠),短轴方向是最小特征值对应的特征向量。A = Q Λ Q T A = Q\Lambda Q^T A = Q Λ Q T 的读法是"先旋到这些特殊方向(Q T Q^T Q T ),沿各方向独立拉伸(Λ \Lambda Λ ),再旋回原坐标系(Q Q Q )"——把一个复杂的任意变换分解成"转一下、拉一下、转回去"三个简单动作。对称矩阵保证 Q Q Q 是纯旋转(正交),这是谱定理的威力。
🎤 面试速答 :"结论:对称矩阵可对角化 A = Q Λ Q T A=Q\Lambda Q^T A = Q Λ Q T ,Q Q Q 正交、Λ \Lambda Λ 是特征值。原理:特征向量方向变换不变(A v = λ v Av=\lambda v A v = λ v ),对称矩阵保证特征向量互相正交。例子:协方差矩阵 ( 2 1 1 2 ) \begin{pmatrix}2&1\\1&2\end{pmatrix} ( 2 1 1 2 ) 特征值 3、1,特征向量 ( 1 , 1 ) T (1,1)^T ( 1 , 1 ) T 、( 1 , − 1 ) T (1,-1)^T ( 1 , − 1 ) T ——PCA 找的就是它,方差最大方向是 ( 1 , 1 ) (1,1) ( 1 , 1 ) ,解释 3 / ( 3 + 1 ) = 75 % 3/(3+1)=75\% 3/ ( 3 + 1 ) = 75% 的方差。几何记忆:'特征向量是变换的锚点,特征值是锚点上的刻度。'"
¶ 3.2 从 EVD 构造 SVD
对任意 A ∈ R m × n A \in \mathbb{R}^{m \times n} A ∈ R m × n ,格拉姆矩阵 A T A ∈ R n × n A^T A \in \mathbb{R}^{n \times n} A T A ∈ R n × n 对称半正定,有完全特征分解 A T A = V Λ V T A^T A = V \Lambda V^T A T A = V Λ V T ,Λ = diag ( σ 1 2 , … , σ n 2 ) \Lambda = \text{diag}(\sigma_1^2, \dots, \sigma_n^2) Λ = diag ( σ 1 2 , … , σ n 2 ) ,σ i ≥ 0 \sigma_i \ge 0 σ i ≥ 0 。令 σ i > 0 \sigma_i > 0 σ i > 0 时 u i = A v i σ i u_i = \frac{A v_i}{\sigma_i} u i = σ i A v i ,{ u i } \{u_i\} { u i } 是标准正交集,扩充成第二组正交基后得到:
A = U Σ V T , U ∈ R m × m , V ∈ R n × n 正交 , Σ 对角且 σ 1 ≥ σ 2 ≥ ⋯ ≥ σ r > 0 A = U \Sigma V^T, \qquad U \in \mathbb{R}^{m \times m}, \ V \in \mathbb{R}^{n \times n} \text{ 正交}, \ \Sigma \text{ 对角且 } \sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r > 0 A = U Σ V T , U ∈ R m × m , V ∈ R n × n 正交 , Σ 对角且 σ 1 ≥ σ 2 ≥ ⋯ ≥ σ r > 0
💡 直观理解 :SVD 为什么可以这样构造?思路是"先偷懒再补全":A T A A^T A A T A 是对称矩阵,一定有特征分解 A T A = V Λ V T A^T A = V\Lambda V^T A T A = V Λ V T ,它的特征值全是非负的(因为 ∥ A v ∥ 2 = v T A T A v ≥ 0 \|Av\|^2 = v^TA^TAv \ge 0 ∥ A v ∥ 2 = v T A T A v ≥ 0 ),开方就是奇异值 σ i \sigma_i σ i 。然后关键一步:u i = A v i / σ i u_i = Av_i/\sigma_i u i = A v i / σ i 恰好是互相正交的单位向量(因为 u i T u j = v i T A T A v j / σ i σ j = σ j 2 δ i j / σ i σ j = δ i j u_i^Tu_j = v_i^TA^TAv_j/\sigma_i\sigma_j = \sigma_j^2\delta_{ij}/\sigma_i\sigma_j = \delta_{ij} u i T u j = v i T A T A v j / σ i σ j = σ j 2 δ ij / σ i σ j = δ ij )——用 A A A 自己把 V V V 的列"投"到输出空间,就得到了 U U U 的列,补齐到 m m m 维即可。所以 SVD 不需要任何新假设,它只是"把对称矩阵的 EVD 推广到任意长方形矩阵"的搬运工。
🎤 面试速答 :"结论:SVD 由 A T A A^TA A T A 的 EVD 构造——奇异值 σ i = λ i ( A T A ) \sigma_i=\sqrt{\lambda_i(A^TA)} σ i = λ i ( A T A ) ,右奇异向量 V V V 是 A T A A^TA A T A 的特征向量,左奇异向量 u i = A v i / σ i u_i=Av_i/\sigma_i u i = A v i / σ i 。原理:A T A A^TA A T A 对称半正定保证特征值非负、特征向量正交;u i u_i u i 的构造保证 U U U 正交。例子:A = ( 1 0 0 0 ) A=\begin{pmatrix}1&0\\0&0\end{pmatrix} A = ( 1 0 0 0 ) ,A T A = ( 1 0 0 0 ) A^TA=\begin{pmatrix}1&0\\0&0\end{pmatrix} A T A = ( 1 0 0 0 ) 特征值 1、0 → σ = ( 1 , 0 ) \sigma=(1,0) σ = ( 1 , 0 ) ,v 1 = ( 1 , 0 ) T v_1=(1,0)^T v 1 = ( 1 , 0 ) T ,u 1 = A v 1 / 1 = ( 1 , 0 ) T u_1=Av_1/1=(1,0)^T u 1 = A v 1 /1 = ( 1 , 0 ) T 。记忆:'SVD 是 EVD 的正式员工,负责长方形矩阵。'"
¶ 3.3 几何意义与条件数
分解 适用对象 对角元 正交因子 EVD A = Q Λ Q T A = Q\Lambda Q^T A = Q Λ Q T 对称(或可对角化)矩阵 特征值 λ i \lambda_i λ i Q Q Q :A A A 的特征向量SVD A = U Σ V T A = U\Sigma V^T A = U Σ V T 任意实矩阵 奇异值 σ i = λ i ( A T A ) \sigma_i = \sqrt{\lambda_i(A^T A)} σ i = λ i ( A T A ) U U U :A A T AA^T A A T 的特征向量;V V V :A T A A^T A A T A 的特征向量
几何上,A A A 把 R n \mathbb{R}^n R n 的单位球面映成 R m \mathbb{R}^m R m 中的椭球面,半轴长为 σ 1 , … , σ r \sigma_1, \dots, \sigma_r σ 1 , … , σ r ,方向为左奇异向量。条件数 κ ( A ) = σ max / σ min \kappa(A) = \sigma_{\max} / \sigma_{\min} κ ( A ) = σ m a x / σ m i n 度量 A A A 放大相对误差的能力——小奇异值正是噪声与数值舍入误差爆发的区域。
📖 怎么读这张表 :对比两行的"适用对象":EVD 只对对称(或可对角化)方阵,SVD 对任意矩形矩阵。对角元一列是记忆核心——奇异值 = 特征值开平方根,且 SVD 的 U U U /V V V 分别来自 A A T AA^T A A T 与 A T A A^TA A T A 的特征向量。面试问"SVD 与 EVD 什么关系",答这张表即可。
💡 直观理解 :SVD 的几何故事是"球面变椭球":V T V^T V T 先旋转(把球转到奇异方向),Σ \Sigma Σ 沿各轴拉伸(半径变成 σ 1 , … , σ n \sigma_1,\dots,\sigma_n σ 1 , … , σ n ),U U U 再旋转(把椭圆转到输出空间的任意方向)——旋转-拉伸-旋转 三个动作描述任意线性变换,这是 SVD 最美的几何意义。条件数 κ = σ m a x / σ m i n \kappa=\sigma_{max}/\sigma_{min} κ = σ ma x / σ min 是"最长轴与最短轴之比":轴越长说明变换在某个方向放大得越狠,反过来解方程时那个方向的一丁点误差也会被放大 κ \kappa κ 倍——病态矩阵就是"椭圆太扁"。
🎤 面试速答 :"结论:SVD 把任意矩阵拆成旋转×缩放×旋转:A = U Σ V T A=U\Sigma V^T A = U Σ V T ,单位球面变成半轴为 σ i \sigma_i σ i 的椭球。原理:σ i = λ i ( A T A ) \sigma_i=\sqrt{\lambda_i(A^TA)} σ i = λ i ( A T A ) ,V V V 是 A T A A^TA A T A 特征向量、U U U 是 A A T AA^T A A T 特征向量;条件数 κ = σ m a x / σ m i n \kappa=\sigma_{max}/\sigma_{min} κ = σ ma x / σ min 。例子:σ = ( 100 , 0.001 ) \sigma=(100, 0.001) σ = ( 100 , 0.001 ) → κ = 10 5 \kappa=10^5 κ = 1 0 5 ,方程 A x = b Ax=b A x = b 中 b b b 的 1% 相对误差会被放大到约 1000 倍——所以 X T X X^TX X T X 会平方条件数(κ ( X T X ) = κ ( X ) 2 \kappa(X^TX)=\kappa(X)^2 κ ( X T X ) = κ ( X ) 2 ),生产环境一律用 SVD/QR 而不是直接求逆。金句:'奇异值谱就是矩阵的体检报告。'"
¶ 📚 第四章:投影与最小二乘的几何——正规方程
¶ 4.1 正交投影矩阵
对列满秩的 X ∈ R n × d X \in \mathbb{R}^{n \times d} X ∈ R n × d ,C ( X ) C(X) C ( X ) 上的投影为
P = X ( X T X ) − 1 X T , P 2 = P , P T = P P = X (X^T X)^{-1} X^T, \qquad P^2 = P, \quad P^T = P P = X ( X T X ) − 1 X T , P 2 = P , P T = P
对任意 y y y ,P y Py P y 是 C ( X ) C(X) C ( X ) 中离 y y y 最近的点(投影定理)。最小化 ∥ X w − y ∥ 2 \|Xw - y\|^2 ∥ X w − y ∥ 2 :
∥ X w − y ∥ 2 = w T X T X w − 2 w T X T y + y T y ⟹ ∇ w = 2 X T X w − 2 X T y = 0 ⟹ X T X w = X T y \|Xw - y\|^2 = w^T X^T X w - 2 w^T X^T y + y^T y \implies \nabla_w = 2X^T X w - 2 X^T y = 0 \implies X^T X w = X^T y ∥ X w − y ∥ 2 = w T X T X w − 2 w T X T y + y T y ⟹ ∇ w = 2 X T X w − 2 X T y = 0 ⟹ X T X w = X T y
💡 直观理解 :投影矩阵 P = X ( X T X ) − 1 X T P = X(X^TX)^{-1}X^T P = X ( X T X ) − 1 X T 是"列空间影子的工厂":任何向量 y y y 进去,出来的是 y y y 在 C ( X ) C(X) C ( X ) 上留下的影子 P y Py P y 。两个性质点破本质——P 2 = P P^2 = P P 2 = P (影子再投影还是自己,投两次等于投一次)、P T = P P^T = P P T = P (影子方向和原点的连线与地面垂直,正交投影)。最小二乘求 w w w 的过程,就是"找一组合法参数,让 X w Xw X w 恰好等于 y y y 的影子":∥ X w − y ∥ 2 \|Xw-y\|^2 ∥ X w − y ∥ 2 最小当且仅当 X w = P y Xw = Py X w = P y ,即误差向量与列空间垂直。
🎤 面试速答 :"结论:P = X ( X T X ) − 1 X T P=X(X^TX)^{-1}X^T P = X ( X T X ) − 1 X T 是到列空间的正交投影,P 2 = P P^2=P P 2 = P 、P T = P P^T=P P T = P 。原理:P P P 把任意 y y y 映成 C ( X ) C(X) C ( X ) 中离它最近的点;P 2 = P P^2=P P 2 = P 说明投影是幂等的(影子投两次不变),P T = P P^T=P P T = P 说明是正交投影。例子:一维列空间(直线方向 ( 1 , 1 ) T (1,1)^T ( 1 , 1 ) T ),X = ( 1 1 ) X=\begin{pmatrix}1\\1\end{pmatrix} X = ( 1 1 ) ,P = 1 2 ( 1 1 1 1 ) P=\frac{1}{2}\begin{pmatrix}1&1\\1&1\end{pmatrix} P = 2 1 ( 1 1 1 1 ) ,y = ( 1 , 3 ) T y=(1,3)^T y = ( 1 , 3 ) T 的影子是 P y = ( 2 , 2 ) T Py=(2,2)^T P y = ( 2 , 2 ) T ,残差 ( 1 , − 1 ) (1,-1) ( 1 , − 1 ) 与直线垂直。考试点:'投影矩阵的行列式为 0、特征值为 1(列空间)和 0(正交补)。'"
¶ 4.2 正规方程的几何解读
最优点处的残差满足 r = y − X w ∗ r = y - Xw^* r = y − X w ∗ 且 X T r = 0 X^T r = 0 X T r = 0 ,即 r ∈ N ( X T ) r \in N(X^T) r ∈ N ( X T ) 。因此正规方程的本质声明是:"预测 y ^ = X w ∗ \hat{y} = Xw^* y ^ = X w ∗ 是 y y y 在列空间上的正交投影,残差完全落在左零空间中。" 写成分解形式即 y = X w ∗ ⏟ ∈ C ( X ) + r ⏟ ∈ N ( X T ) y = \underbrace{Xw^*}_{\in C(X)} + \underbrace{r}_{\in N(X^T)} y = ∈ C ( X ) X w ∗ + ∈ N ( X T ) r 。这是统计学中最干净的几何事实:最小二乘永远不会去"够"它表达不出来的分量。
💡 直观理解 :正规方程的"一句话版"是:最优预测是 y y y 在特征列空间上的正投影 。想象一束光从正上方照下来,y y y 在 X X X 的"地面"(列空间)上投下的影子就是 y ^ \hat y y ^ ,地面与影子垂直方向的距离就是残差——残差垂直于地面上每一根柱子(每一列特征),即 X T r = 0 X^Tr=0 X T r = 0 。这同时解释了正规方程的诞生:不是"发明"出来的,而是"残差必须垂直"这个几何事实的代数翻译。
🎤 面试速答 :"结论:正规方程 X T X w = X T y X^TXw=X^Ty X T X w = X T y 的几何含义是 y ^ = X w ∗ \hat y=Xw^* y ^ = X w ∗ 为 y y y 在 C ( X ) C(X) C ( X ) 上的正交投影,残差 r ∈ N ( X T ) r\in N(X^T) r ∈ N ( X T ) 。原理:∇ J = X T ( X w − y ) = 0 \nabla J = X^T(Xw-y)=0 ∇ J = X T ( X w − y ) = 0 等价于 X T r = 0 X^Tr=0 X T r = 0 (残差垂直于所有特征列)。例子:y = ( 1 , 2 , 3 ) T y=(1,2,3)^T y = ( 1 , 2 , 3 ) T 在直线方向 ( 1 , 1 , 1 ) T (1,1,1)^T ( 1 , 1 , 1 ) T 上的投影是 ( 2 , 2 , 2 ) T (2,2,2)^T ( 2 , 2 , 2 ) T ,残差 ( 1 , − 1 , 1 ) (1,-1,1) ( 1 , − 1 , 1 ) 与方向向量点积为 0——这就是一维版本的正规方程。金句:'最小二乘不是在解方程,而是在找影子。'"
¶ 📚 第五章:分解应用——PCA、低秩近似与伪逆
¶ 5.1 PCA 就是一次 SVD
中心化数据 X ~ = X − 1 x ˉ T \tilde{X} = X - \mathbf{1}\bar{x}^T X ~ = X − 1 x ˉ T ,再做 SVD X ~ = U Σ V T \tilde{X} = U \Sigma V^T X ~ = U Σ V T 。主方向是 V V V 的列(载荷),得分是 U Σ U\Sigma U Σ ,第 k k k 个主成分解释的方差为 σ k 2 / ( n − 1 ) \sigma_k^2 / (n-1) σ k 2 / ( n − 1 ) 。所以 PCA 本质上是"均值减预处理 + 奇异值分解"。
💡 直观理解 :PCA 问的问题是"数据最'胖'的方向在哪里"。每个数据点从原点出发是一个箭头,数据云是一簇箭头;协方差矩阵描述箭头的伸展方向,它的特征分解告诉我们"最长的轴"(第一主成分)、"第二长的轴"……SVD 帮我们绕开了显式构造协方差矩阵:中心化后直接分解数据矩阵 X ~ \tilde X X ~ ,右奇异向量 V V V 就是主方向,奇异值平方(除以 n − 1 n-1 n − 1 )就是各方向上的方差。降维 = 把数据投影到最粗的几根轴上,丢掉最细的轴(噪声轴)。
🎤 面试速答 :"结论:PCA = 中心化 + SVD,主方向是 V V V 的列,第 k k k 主成分方差占比 σ k 2 / ∑ σ j 2 \sigma_k^2/\sum\sigma_j^2 σ k 2 / ∑ σ j 2 。原理:X ~ = U Σ V T \tilde X=U\Sigma V^T X ~ = U Σ V T ,V V V 列是协方差矩阵的特征向量,方差 = 奇异值平方/(n-1)。例子:100 个学生的 4 科成绩,σ = ( 12 , 3 , 0.5 , 0.1 ) \sigma=(12, 3, 0.5, 0.1) σ = ( 12 , 3 , 0.5 , 0.1 ) ,第一主成分解释 144 / 154.3 ≈ 93 % 144/154.3\approx93\% 144/154.3 ≈ 93% 方差——只需 1 维就能保留几乎全部信息,相当于"综合成绩"。金句:'PCA 找的是数据云的脊椎。'"
¶ 5.2 低秩近似(Eckart-Young 定理)
在所有秩不超过 k k k 的矩阵中,截断 SVD A k = U k Σ k V k T A_k = U_k \Sigma_k V_k^T A k = U k Σ k V k T 最小化 Frobenius 误差:
min rank ( B ) ≤ k ∥ A − B ∥ F = ∥ A − A k ∥ F = ∑ i = k + 1 r σ i 2 \min_{\text{rank}(B) \le k} \|A - B\|_F = \|A - A_k\|_F = \sqrt{\sum_{i=k+1}^{r} \sigma_i^2} min rank ( B ) ≤ k ∥ A − B ∥ F = ∥ A − A k ∥ F = ∑ i = k + 1 r σ i 2
这一条定理支撑着嵌入压缩、图像去噪、协同过滤(矩阵补全)以及 LoRA 对权重矩阵的低秩自适应。
💡 直观理解 :Eckart-Young 定理说的是一件极自然的事:"近似一个矩阵最好的办法,是按奇异值从大到小把'薄片'一层层叠起来,叠到第 k k k 层为止,丢掉的层厚度之和就是误差。"误差公式 ∑ i > k σ i 2 \sqrt{\sum_{i>k}\sigma_i^2} ∑ i > k σ i 2 就是"被丢掉的薄片厚度平方和的平方根"——σ i \sigma_i σ i 本身已经是"每片有多重要"的刻度,根本不需要重新发明近似方法。这解释了为什么截断 SVD 是压缩的默认武器:它既是最优的(定理保证),又可以直接读数(σ \sigma σ 谱)。
🎤 面试速答 :"结论:秩 k 近似的最优解是截断 SVD A k = U k Σ k V k T A_k=U_k\Sigma_kV_k^T A k = U k Σ k V k T ,误差 = ∑ i > k σ i 2 =\sqrt{\sum_{i>k}\sigma_i^2} = ∑ i > k σ i 2 。原理:每个 σ i u i v i T \sigma_iu_iv_i^T σ i u i v i T 是一张秩 1 薄片,按重要性(σ \sigma σ 大小)截断最省误差。例子:奇异值 ( 10 , 9 , 1 , 0.1 ) (10, 9, 1, 0.1) ( 10 , 9 , 1 , 0.1 ) 的 4 × 4 4\times4 4 × 4 矩阵,取 k = 2 k=2 k = 2 丢掉 ( 1 2 + 0.1 2 ) 1 / 2 ≈ 1.005 (1^2+0.1^2)^{1/2}\approx1.005 ( 1 2 + 0. 1 2 ) 1/2 ≈ 1.005 的误差,却能省一半参数(16 个元素存 8 个)——图像压缩、LoRA 同理。金句:'截断 SVD 是按重要性裁员,误差就是裁员名单的工资总和。'"
¶ 5.3 Moore-Penrose 伪逆
A + = V Σ + U T , Σ + = diag ( 1 σ 1 , … , 1 σ r , 0 , … , 0 ) A^+ = V \Sigma^+ U^T, \qquad \Sigma^+ = \text{diag}\left(\frac{1}{\sigma_1}, \dots, \frac{1}{\sigma_r}, 0, \dots, 0\right) A + = V Σ + U T , Σ + = diag ( σ 1 1 , … , σ r 1 , 0 , … , 0 )
w ∗ = A + y w^* = A^+ y w ∗ = A + y 求解 min w ∥ A w − y ∥ \min_w \|Aw - y\| min w ∥ A w − y ∥ 且 ∥ w ∥ \|w\| ∥ w ∥ 最小——唯一的最小范数最小二乘解。当 n > d n > d n > d (欠定)时 ( X T X ) − 1 (X^T X)^{-1} ( X T X ) − 1 不存在,但 A + A^+ A + 永远存在且不会平方条件数,是数值上最安全的生产默认(np.linalg.lstsq)。
💡 直观理解 :伪逆的思路是"把逆的定义改得宽容一点"。普通逆要求 A − 1 A = I A^{-1}A=I A − 1 A = I ,欠秩矩阵做不到;伪逆只要求:沿着 A A A 的"活方向"(列空间)按 1 / σ i 1/\sigma_i 1/ σ i 精确还原,沿着"死方向"(零空间/小奇异值方向)输出 0。翻译成操作:Σ + \Sigma^+ Σ + 把每个非零奇异值取倒数,零奇异值保持 0——"有信息的方向求逆,没信息的方向闭嘴"。所以 A + y A^+y A + y 永远给"最小范数的最小二乘解":不解释的就不瞎猜,猜的部分尽量小。正规方程 ( X T X ) − 1 X T (X^TX)^{-1}X^T ( X T X ) − 1 X T 其实等于 A + A^+ A + 在列满秩时的特例,但构造 X T X X^TX X T X 会把条件数平方,而 SVD 只用到 A A A 本身。
🎤 面试速答 :"结论:伪逆 A + = V Σ + U T A^+=V\Sigma^+U^T A + = V Σ + U T (非零奇异值取倒数)给出最小范数最小二乘解 w ∗ = A + y w^*=A^+y w ∗ = A + y 。原理:正规方程解是列满秩时的特例;欠秩时 ( X T X ) − 1 (X^TX)^{-1} ( X T X ) − 1 不存在,且 κ ( X T X ) = κ ( X ) 2 \kappa(X^TX)=\kappa(X)^2 κ ( X T X ) = κ ( X ) 2 放大误差,SVD 路线只保留 κ ( X ) \kappa(X) κ ( X ) 。例子:2 个样本 3 个特征(n > d n>d n > d 欠定),正规方程直接崩溃,A + y A^+y A + y 给出最小范数解;σ = ( 100 , 0.001 ) \sigma=(100,0.001) σ = ( 100 , 0.001 ) 的病态矩阵,直接求逆误差放大 10 5 10^5 1 0 5 倍,伪逆只在活方向(100)上还原。金句:'伪逆是逆的宽恕版——能求逆的方向求逆,不能求逆的方向沉默。'"
¶ 📚 第六章:Jacobian、Hessian 与链式法则维度检查
¶ 6.1 梯度、Jacobian 与 Hessian 的维度
对象 函数 形状 元素 梯度 ∇ f \nabla f ∇ f f : R n → R f: \mathbb{R}^n \to \mathbb{R} f : R n → R n × 1 n \times 1 n × 1 ∂ f / ∂ x i \partial f / \partial x_i ∂ f / ∂ x i Jacobian J f J_f J f f : R n → R k f: \mathbb{R}^n \to \mathbb{R}^k f : R n → R k k × n k \times n k × n ∂ f i / ∂ x j \partial f_i / \partial x_j ∂ f i / ∂ x j (第 i i i 行 = f i f_i f i 的梯度)Hessian ∇ 2 f \nabla^2 f ∇ 2 f f : R n → R f: \mathbb{R}^n \to \mathbb{R} f : R n → R n × n n \times n n × n ∂ 2 f / ∂ x i ∂ x j \partial^2 f / \partial x_i \partial x_j ∂ 2 f / ∂ x i ∂ x j
对 f ( x , y ) = ( 2 x 2 , x y ) f(x, y) = (2x^2, x\sqrt{y}) f ( x , y ) = ( 2 x 2 , x y ) :J f = ( 4 x 0 y x 2 y ) J_f = \begin{pmatrix} 4x & 0 \\ \sqrt{y} & \frac{x}{2\sqrt{y}} \end{pmatrix} J f = ( 4 x y 0 2 y x ) ——每一行都是某个输出分量的梯度。
📖 怎么读这张表 :看"形状"一列区分三件套:梯度是"标量函数对所有输入的偏导"(n × 1 n\times1 n × 1 列向量),Jacobian 是"向量函数的梯度打包"(k k k 个输出 → k k k 行,每行是 f i f_i f i 的梯度),Hessian 是"梯度的梯度"(二阶偏导矩阵)。k = 1 k=1 k = 1 时 Jacobian 退化为梯度,这是记忆锚点。
💡 直观理解 :梯度问"往哪个方向走 f f f 涨得最快"(登山找坡),Jacobian 问"每个输出分别受哪些输入影响、影响多大"(一张灵敏度表:第 i i i 行第 j j j 列 = 输出 i i i 对输入 j j j 的敏感度)。Hessian 则是"坡度的坡度"——它不仅说"这里是上坡"(梯度),还说"坡是越来越陡还是越来越缓"(曲率)。三者的递进关系:梯度管一阶信息,Jacobian 管多个输出的一阶信息,Hessian 管二阶信息。
🎤 面试速答 :"结论:梯度是标量对向量的偏导(n × 1 n\times1 n × 1 ),Jacobian 是向量函数的梯度矩阵(k × n k\times n k × n ,每行一个输出分量的梯度),Hessian 是梯度的 Jacobian(n × n n\times n n × n ,二阶偏导)。原理:J i j = ∂ f i / ∂ x j J_{ij}=\partial f_i/\partial x_j J ij = ∂ f i / ∂ x j 。例子:f ( x , y ) = ( 2 x 2 , x y ) f(x,y)=(2x^2, x\sqrt y) f ( x , y ) = ( 2 x 2 , x y ) → J = ( 4 x 0 y x / 2 y ) J=\begin{pmatrix}4x&0\\\sqrt y&x/2\sqrt y\end{pmatrix} J = ( 4 x y 0 x /2 y ) :第一行是 f 1 f_1 f 1 的梯度 [ 4 x , 0 ] [4x, 0] [ 4 x , 0 ] (f 1 f_1 f 1 不依赖 y y y ,所以第二列是 0)。手写反向传播时对每一行做一次梯度检查(gradcheck)就能验证 Jacobian 正确。"
¶ 6.2 链式法则与维度检查
对 h = g ∘ f h = g \circ f h = g ∘ f (f : R n → R m f: \mathbb{R}^n \to \mathbb{R}^m f : R n → R m ,g : R m → R k g: \mathbb{R}^m \to \mathbb{R}^k g : R m → R k ):
J h ( x ) = J g ( f ( x ) ) ⋅ J f ( x ) , 形状: ( k × n ) = ( k × m ) ( m × n ) J_h(x) = J_g(f(x)) \cdot J_f(x), \qquad \text{形状: } (k \times n) = (k \times m)(m \times n) J h ( x ) = J g ( f ( x )) ⋅ J f ( x ) , 形状 : ( k × n ) = ( k × m ) ( m × n )
反向传播中,对 L = ℓ ( y ) L = \ell(y) L = ℓ ( y ) 、y = W x y = Wx y = W x :∂ L ∂ x = W T ∂ L ∂ y \frac{\partial L}{\partial x} = W^T \frac{\partial L}{\partial y} ∂ x ∂ L = W T ∂ y ∂ L 的形状为 ( n × 1 ) = ( n × k ) ( k × 1 ) (n \times 1) = (n \times k)(k \times 1) ( n × 1 ) = ( n × k ) ( k × 1 ) ;∂ L ∂ W = ∂ L ∂ y x T \frac{\partial L}{\partial W} = \frac{\partial L}{\partial y} x^T ∂ W ∂ L = ∂ y ∂ L x T 的形状为 ( k × n ) = ( k × 1 ) ( 1 × n ) (k \times n) = (k \times 1)(1 \times n) ( k × n ) = ( k × 1 ) ( 1 × n ) 。只要乘法顺序或外积方向写错,维度检查立刻失败——这是手写梯度最廉价有效的运行时断言。
💡 直观理解 :反向传播就是把链式法则的 Jacobian 乘法"从后往前"走一遍,而维度检查是它最便宜的保险:每个乘积的中间形状必须严丝合缝地咬合(( k × n ) = ( k × m ) ( m × n ) (k\times n)=(k\times m)(m\times n) ( k × n ) = ( k × m ) ( m × n ) ),写错转置立刻露馅。记忆技巧:∂ L / ∂ x = W T ∂ L / ∂ y \partial L/\partial x = W^T\partial L/\partial y ∂ L / ∂ x = W T ∂ L / ∂ y 里"冒出来的 W T W^T W T "正是转置的来源——因为 y = W x y=Wx y = W x 中 W W W 左乘 x x x ,往回走就要用 W W W 的"反向作用"(W T W^T W T )。∂ L / ∂ W \partial L/\partial W ∂ L / ∂ W 是外积(上游梯度 × 输入),因为权重同时被"输入喂"和"梯度拉",两个方向的向量直接相乘。
🎤 面试速答 :"结论:反向传播 = 链式法则 J h = J g ⋅ J f J_h=J_g\cdot J_f J h = J g ⋅ J f ,用维度检查 ( k × n ) = ( k × m ) ( m × n ) (k\times n)=(k\times m)(m\times n) ( k × n ) = ( k × m ) ( m × n ) 抓转置错误。原理:L = ℓ ( W x ) L=\ell(Wx) L = ℓ ( W x ) 时 ∂ L / ∂ x = W T ∂ L / ∂ y \partial L/\partial x = W^T\partial L/\partial y ∂ L / ∂ x = W T ∂ L / ∂ y 、∂ L / ∂ W = ( ∂ L / ∂ y ) x T \partial L/\partial W = (\partial L/\partial y)x^T ∂ L / ∂ W = ( ∂ L / ∂ y ) x T 。例子:x ∈ R 64 x\in\mathbb{R}^{64} x ∈ R 64 、W ∈ R 10 × 64 W\in\mathbb{R}^{10\times64} W ∈ R 10 × 64 :∂ L / ∂ W \partial L/\partial W ∂ L / ∂ W 必须是 10 × 64 10\times64 10 × 64 ,若手滑写成 x ( ∂ L / ∂ y ) T x(\partial L/\partial y)^T x ( ∂ L / ∂ y ) T 得到 64 × 10 64\times10 64 × 10 ,维度检查 0 秒报错;梯度数值检查(gradcheck)偏差应在 10 − 6 10^{-6} 1 0 − 6 量级。金句:'形状对不上的梯度,一定是错的梯度。'"
¶ 6.3 Hessian、曲率与二阶方法
f ∈ C 2 f \in C^2 f ∈ C 2 时 Hessian H = ∇ 2 f H = \nabla^2 f H = ∇ 2 f 对称(Schwarz 定理:混合偏导可交换)。其特征值符号对驻点分类:全正 = 局部极小;全负 = 局部极大;符号混杂 = 鞍点(高维训练的头号障碍)。牛顿法使用完整曲率信息:
Δ w = − H − 1 ∇ f \Delta w = -H^{-1} \nabla f Δ w = − H − 1 ∇ f
深度学习里 H H H 是 n × n n \times n n × n 且 n ∼ 10 9 n \sim 10^9 n ∼ 1 0 9 ,精确二阶方法不可行;优化器用对角近似(AdaGrad/Adam)或克罗内克分解块(K-FAC)逼近曲率。
💡 直观理解 :一阶方法(梯度下降)像"盲人摸坡"——只知道脚下往哪斜,迈的步子永远一样大;牛顿法像"知道整座山的形状"——H − 1 ∇ f H^{-1}\nabla f H − 1 ∇ f 不只是方向,还按曲率缩放步长:山腰缓坡大步走,陡谷小步挪,一步就能到二次曲面的顶点。这也是为什么牛顿法收敛极快(二次收敛)却没人给神经网络用:n = 10 9 n=10^9 n = 1 0 9 时 H H H 是 10 9 × 10 9 10^9\times10^9 1 0 9 × 1 0 9 的矩阵,存下来要 10 18 10^{18} 1 0 18 个浮点数(约 8 艾字节)。Adam 的聪明之处:只用梯度的"二阶矩"近似对角线曲率,花一阶的代价拿到部分二阶的好处。
🎤 面试速答 :"结论:Hessian 特征值符号决定驻点类型(全正=极小,全负=极大,混合=鞍点),牛顿步 Δ w = − H − 1 ∇ f \Delta w=-H^{-1}\nabla f Δ w = − H − 1 ∇ f 用曲率缩放梯度。原理:H H H 是梯度的 Jacobian、对称;二次收敛于凸二次目标。例子:损失 f ( w ) = w 4 f(w)=w^4 f ( w ) = w 4 在 0 处 f ′ = 0 , f ′ ′ = 0 f'=0,f''=0 f ′ = 0 , f ′′ = 0 ——梯度下降识别不出这是鞍点还是极值,牛顿法看到 H = 0 H=0 H = 0 也知道棘手;高维神经网络 99% 的临界点都是鞍点(∇ f = 0 \nabla f=0 ∇ f = 0 但 H H H 特征值有正有负)。实用结论:AdaGrad/Adam 用对角二阶矩近似曲率,K-FAC 用克罗内克分块,别硬算 H H H 。金句:'梯度给方向,Hessian 给曲率,曲率贵的用不起就近似。'"
¶ 🐍 Pure Numpy 实现
import numpy as np
np.set_printoptions(precision=4, suppress=True)
def four_subspaces(A):
"""通过 SVD 计算矩阵 A 的四大子空间(数值稳定地求秩)。"""
m, n = A.shape
U, s, Vt = np.linalg.svd(A)
r = int(np.sum(s > 1e-10))
col = U[:, :r] # C(A) : 维数 r (m x r)
row = Vt[:r, :].T # C(Aᵀ) : 维数 r (n x r)
null = Vt[r:, :].T # N(A) : 维数 n - r (n x (n-r))
left = U[:, r:] # N(Aᵀ) : 维数 m - r (m x (m-r))
return col, row, null, left
def lstsq_normal(X, y):
"""正规方程:仅当 XᵀX 可逆时有效。"""
return np.linalg.inv(X.T @ X) @ X.T @ y
def lstsq_qr(X, y):
"""基于 QR 的最小二乘:避免显式 (XᵀX)⁻¹,条件数更好。"""
Q, R = np.linalg.qr(X) # 精简 QR: Q (n x d), R (d x d)
return np.linalg.solve(R, Q.T @ y)
def lstsq_svd(X, y):
"""SVD 伪逆:最小范数解,对秩亏 X 数值稳定。"""
return np.linalg.pinv(X) @ y # pinv == V @ Sigma_plus @ Uᵀ
def low_rank_approx(A, k):
"""Eckart-Young:Frobenius 范数意义下的最优秩 k 近似。"""
U, s, Vt = np.linalg.svd(A, full_matrices=False)
return (U[:, :k] * s[:k]) @ Vt[:k, :]
def pca_via_svd(X, k):
"""PCA = 数据中心化后的 SVD。返回得分、载荷、各主成分方差。"""
Xc = X - X.mean(axis=0)
U, s, Vt = np.linalg.svd(Xc, full_matrices=False)
scores = Xc @ Vt[:k, :].T # 投影后数据 (n x k)
variances = s**2 / (len(Xc) - 1) # 协方差矩阵的特征值
return scores, Vt[:k, :].T, variances
if __name__ == "__main__":
np.random.seed(42)
# 1. 四大子空间:A 是 4x3 矩阵,秩为 2(第 3 行 = 第 1 行 - 第 2 行,第 4 行 = 第 1 行 + 第 2 行)
A = np.array([[1, 2, 0], [0, 1, 1], [1, 1, -1], [1, 3, 1]], dtype=float)
col, row, null, left = four_subspaces(A)
print(f"维度 -> C(A):{col.shape[1]} N(A):{null.shape[1]} C(Aᵀ):{row.shape[1]} N(Aᵀ):{left.shape[1]}")
# 2. 最小二乘:三条路线通向同一个 w*
X = np.random.randn(50, 3)
y = X @ np.array([2.0, -1.0, 0.5]) + 0.1 * np.random.randn(50)
print("正规方程:", lstsq_normal(X, y))
print("QR :", lstsq_qr(X, y))
print("SVD :", lstsq_svd(X, y))
# 3. Eckart-Young:||A - A_k||_F 应等于 sigma_{k+1}
B = np.random.randn(5, 3)
err = np.linalg.norm(B - low_rank_approx(B, 2), ord="fro")
print("低秩误差 =", round(err, 5), " vs sigma_3 =", round(np.linalg.svd(B, compute_uv=False)[2], 5))
# 4. PCA:前两个主成分的解释方差占比
Xd = np.random.randn(100, 4)
_, _, var = pca_via_svd(Xd, 2)
print("PCA 解释方差 (k=2):", np.round(var[:2] / var.sum(), 4))
¶ 📝 总结与学习路线
先想子空间再动手 :拟合之前先问 C ( X ) C(X) C ( X ) 、N ( X ) N(X) N ( X ) 、N ( X T ) N(X^T) N ( X T ) 里各有什么——这决定解的存在性、唯一性以及残差的含义。
生产环境永远不要手算 ( X T X ) − 1 (X^T X)^{-1} ( X T X ) − 1 :病态或秩亏设计矩阵一律用 SVD 伪逆(np.linalg.lstsq)或 QR,把条件数保持在一次方而非平方。
研究任意矩阵用奇异值而非特征值 :σ i = λ i ( A T A ) \sigma_i = \sqrt{\lambda_i(A^T A)} σ i = λ i ( A T A ) 是稳定路径,且当 rank ( A ) < min ( m , n ) \text{rank}(A) < \min(m, n) rank ( A ) < min ( m , n ) 时依然优雅退化。
每次反向传播都要过维度检查 :链式法则 ( k × n ) = ( k × m ) ( m × n ) (k \times n) = (k \times m)(m \times n) ( k × n ) = ( k × m ) ( m × n ) 能在转置梯度污染训练前抓住它。
截断 SVD 是通用压缩原语 :PCA、嵌入剪枝、去噪、LoRA 全部归结为 Eckart-Young——用奇异值谱和解释方差曲线来选择 k k k 。