#007. 线性代数三:特征值、SVD、PCA 与正定矩阵

线性代数三:特征值、SVD、PCA 与正定矩阵 图示

#学习目标与概念起点

这一章要回答一个核心问题:一个矩阵到底“主要在什么方向上起作用”?前两章把矩阵看成线性变换、子空间和投影;本章进一步把矩阵拆成若干个主方向。特征值、SVD、PCA、正定性和条件数看起来是不同术语,本质上都在讨论方向、缩放、曲率和信息强弱。

学习目标

  • 能解释 \(Av=\lambda v\) 的每个符号,并能手算简单 \(2\times2\) 矩阵的特征值和特征向量。
  • 能说明为什么实对称矩阵特别好:特征值为实数,特征向量可以正交,能写成 \(Q\Lambda Q^T\)。
  • 能区分正定和半正定,并把它们连接到协方差矩阵、Hessian 曲率和优化稳定性。
  • 能读懂 \(A=U\Sigma V^T\),知道奇异值、低秩近似和 PCA 的关系。
  • 能说明条件数为什么会放大误差,以及它在最小二乘、协方差估计、训练稳定性里的意义。

概念起点

矩阵乘向量 \(Ax\) 可以理解成把向量 \(x\) 变换到新位置。多数方向会被旋转、拉伸、压缩到另一个方向;但有些特殊方向经过变换后仍然沿着原来的直线,只是长度变了。这些方向就是特征向量,对应的缩放倍数就是特征值。

为什么需要谱结构

只看矩阵元素很难判断整体行为。谱结构把矩阵改写成“方向 + 强度”:哪些方向变化最大,哪些方向几乎没信息,哪些方向曲率很陡,哪些方向会导致数值不稳定。面试里很多问题都可以用这套语言解释。

#特征值与特征向量

特征向量是矩阵变换下方向不变的非零向量。特征值是这个方向上的缩放倍数。公式写作:

\[ Av=\lambda v,\qquad v\ne 0 \]

\(A\):一个方阵,因为输入和输出必须在同一个空间里,才谈得上“方向是否不变”。

\(v\):特征向量,是一个方向。它不能是零向量,因为零向量没有方向。

\(\lambda\):特征值,是缩放倍数。若 \(\lambda=3\),这个方向长度变成 3 倍;若 \(\lambda=-1\),方向翻转;若 \(\lambda=0\),这个方向被压扁到零。

如何读公式:\(Av=\lambda v\) 读成“矩阵 \(A\) 作用在方向 \(v\) 上,结果仍在 \(v\) 这条直线上,只是乘了 \(\lambda\)”。

求特征值的标准做法,是把 \(Av=\lambda v\) 改写成 \((A-\lambda I)v=0\)。如果存在非零解 \(v\),那么矩阵 \(A-\lambda I\) 必须把某个非零方向压到零,这说明它不可逆,行列式为 0:

\[ Av=\lambda v \Longleftrightarrow (A-\lambda I)v=0 \Longrightarrow \det(A-\lambda I)=0 \]

这里 \(I\) 是单位矩阵,作用类似数字里的 1。公式 \(A-\lambda I\) 的意思是:从矩阵 \(A\) 的对角线上减去 \(\lambda\)。解出 \(\lambda\) 后,再把每个 \(\lambda\) 代回 \((A-\lambda I)v=0\) 求对应方向。

直觉:特征值不是“矩阵里的某个元素”,而是矩阵对某些特殊方向的整体效果。面试中如果问“最大特征值代表什么”,不要只说“最大的根”,要说它代表矩阵在某个主方向上的最大伸缩、方差或曲率,具体含义取决于矩阵是什么。

#2x2 特征值完整例题

例题:求矩阵的特征值和特征向量

给定矩阵:

\[ A=\begin{bmatrix}2&1\\1&2\end{bmatrix} \]

这个矩阵会把二维向量做线性变换。我们要找哪些方向经过 \(A\) 后仍然不改变方向,以及这些方向被放大多少。

第一步:写特征方程。

\[ A-\lambda I= \begin{bmatrix}2-\lambda&1\\1&2-\lambda\end{bmatrix} \]
\[ \det(A-\lambda I)=(2-\lambda)^2-1 \]

令行列式为 0:

\[ (2-\lambda)^2-1=0 \Longleftrightarrow (2-\lambda)=\pm 1 \]
\[ \lambda_1=3,\qquad \lambda_2=1 \]

第二步:求 \(\lambda_1=3\) 的特征向量。代回 \((A-3I)v=0\):

\[ A-3I= \begin{bmatrix}-1&1\\1&-1\end{bmatrix} \]

设 \(v=(x,y)^T\),方程给出 \(-x+y=0\),所以 \(y=x\)。可以取:

\[ v_1=\begin{bmatrix}1\\1\end{bmatrix} \]

检查一下:

\[ A\begin{bmatrix}1\\1\end{bmatrix} = \begin{bmatrix}3\\3\end{bmatrix} = 3\begin{bmatrix}1\\1\end{bmatrix} \]

第三步:求 \(\lambda_2=1\) 的特征向量。代回 \((A-I)v=0\):

\[ A-I= \begin{bmatrix}1&1\\1&1\end{bmatrix} \]

方程给出 \(x+y=0\),所以 \(y=-x\)。可以取:

\[ v_2=\begin{bmatrix}1\\-1\end{bmatrix} \]

检查一下:

\[ A\begin{bmatrix}1\\-1\end{bmatrix} = \begin{bmatrix}1\\-1\end{bmatrix} = 1\begin{bmatrix}1\\-1\end{bmatrix} \]

结论:方向 \((1,1)\) 被放大 3 倍,方向 \((1,-1)\) 保持长度不变。这个矩阵沿着“两个坐标同涨同跌”的方向更强,沿着“一个涨一个跌”的方向较弱。

连接到数据:如果这个矩阵是协方差矩阵,那么 \((1,1)\) 是共同波动方向,方差更大;\((1,-1)\) 是相对价差方向,方差更小。如果它是 Hessian,那么 \((1,1)\) 方向的曲率更陡,优化时更容易因为步长过大而震荡。

#对称矩阵与正交对角化

实对称矩阵满足 \(A=A^T\)。它是线性代数里最舒服的一类矩阵,因为它可以被一组互相正交的特征向量完全描述:

\[ A=A^T \Longrightarrow A=Q\Lambda Q^T \]

\(Q\):由单位特征向量组成的正交矩阵。正交意味着 \(Q^TQ=I\),也就是这些方向两两垂直且长度为 1。

\(\Lambda\):对角矩阵,对角线上放着特征值 \(\lambda_1,\lambda_2,\dots,\lambda_n\)。

\(Q^T\):先把向量从原坐标系转到特征向量坐标系。

\(\Lambda\):在每个特征方向上分别缩放。

\(Q\):再把结果转回原坐标系。

所以 \(A=Q\Lambda Q^T\) 可以读成:“先换到主方向坐标系,在每个主方向上按特征值缩放,再换回来”。这就是谱分解。它把一个复杂矩阵变成了一组彼此独立的方向和强度。

为什么对称矩阵常见:协方差矩阵 \(\Sigma\) 是对称的,因为 \(\operatorname{Cov}(X_i,X_j)=\operatorname{Cov}(X_j,X_i)\);Hessian \(H\) 在常见光滑条件下也是对称的,因为二阶偏导顺序可以交换。于是 PCA、风险模型、二阶优化都大量使用对称矩阵的谱分解。

#正定、半正定与曲率

正定性讨论的是二次型 \(x^TAx\) 的符号。这里 \(x^TAx\) 可以理解为:沿着方向 \(x\) 看矩阵 \(A\) 给出的“能量、方差或曲率”。

\[ x^TAx>0\ (x\ne 0)\quad\text{称为正定} \]
\[ x^TAx\ge 0\quad\text{称为半正定} \]

如果 \(A\) 是对称矩阵,那么正定性可以直接看特征值:

正定:所有特征值都大于 0。

半正定:所有特征值都大于等于 0,允许某些方向特征值为 0。

不定:既有正特征值又有负特征值,说明某些方向向上弯,某些方向向下弯。

协方差矩阵一定半正定。设随机收益向量为 \(R\),协方差矩阵为 \(\Sigma\)。任意权重 \(x\) 组成的组合收益是 \(x^TR\),它的方差为:

\[ x^T\Sigma x=\operatorname{Var}(x^TR)\ge 0 \]

方差不可能为负,所以协方差矩阵不会有负特征值。如果某个特征值为 0,表示存在一个线性组合完全没有波动,通常说明特征冗余、样本太少或资产之间存在精确线性关系。

Hessian 也可以用正定性理解。对损失函数 \(L(w)\),Hessian \(H\) 描述局部二阶曲率。若在某点 \(H\) 正定,附近像一个碗,通常是局部最小点;若半正定,则某些方向可能很平;若不定,则可能是鞍点。

\[ L(w+\Delta w)\approx L(w)+\nabla L(w)^T\Delta w+\frac{1}{2}\Delta w^TH\Delta w \]

如何读 Taylor 里的 Hessian 项:\(\Delta w^TH\Delta w\) 问的是“沿着参数变化方向 \(\Delta w\),loss 会弯得多厉害”。Hessian 最大特征值对应最陡曲率方向,最小特征值对应最平坦方向。训练神经网络时,曲率很不均衡会让统一学习率变得难选。

#SVD 与低秩近似

特征分解主要适用于方阵,尤其是对称方阵。但现实中很多矩阵不是方阵:样本数和特征数不同,用户数和物品数不同,token 数和 embedding 维度不同。SVD 解决的是“任意矩阵如何拆成主方向”的问题。

\[ A=U\Sigma V^T \]

\(A\):原矩阵,可以是 \(m\times n\)。

\(V^T\):把输入向量投到一组右奇异方向上。

\(\Sigma\):按奇异值 \(\sigma_1\ge\sigma_2\ge\cdots\ge 0\) 缩放。奇异值越大,说明这个方向的信息或能量越强。

\(U\):把缩放后的坐标放到输出空间的一组左奇异方向上。

如果 \(A\) 的大部分信息集中在前几个奇异值上,就可以只保留前 \(k\) 个方向,得到低秩近似:

\[ A_k=\sum_{i=1}^{k}\sigma_i u_i v_i^T \]

这里 \(u_i v_i^T\) 是一个 rank-1 矩阵,可以理解为“一个输出方向乘一个输入方向”。前 \(k\) 项相加,就是用 \(k\) 个最重要的方向近似原矩阵。

例题:为什么只保留最大奇异值可以压缩矩阵

假设一个矩阵的奇异值是 \(10,2,0.5,0.1\)。这说明第一方向的强度远大于后面几个方向。如果只保留 rank-1 近似,就保留 \(\sigma_1=10\) 对应的 \(u_1v_1^T\);如果保留 rank-2,就再加上 \(\sigma_2=2\) 对应的方向。

rank-1 近似为:

\[ A_1=10u_1v_1^T \]

rank-2 近似为:

\[ A_2=10u_1v_1^T+2u_2v_2^T \]

直观上,\(A_1\) 保留最大结构,\(A_2\) 再补一个次重要结构。较小奇异值对应的方向可能是细节、噪声或弱信号。截断 SVD 的关键性质是:在所有 rank-\(k\) 矩阵中,它给出平方误差意义下最好的近似。

LoRA 连接:LoRA 把大模型权重更新 \(\Delta W\) 限制成低秩形式,例如 \(\Delta W=BA\),其中 \(B\) 和 \(A\) 的中间维度很小。它不是直接做 SVD,但思想相通:很多任务适配可能主要发生在少数重要方向上,不必更新完整高秩矩阵。

#PCA、协方差与主方向

PCA 要解决的问题是:高维数据里哪些方向最能解释样本变化?做 PCA 前通常先中心化数据,也就是每一列减去均值。中心化后的数据矩阵记为 \(X\),每一行是一个样本。样本协方差矩阵可以写成:

\[ \Sigma=\frac{1}{n}X^TX \]

协方差矩阵的特征向量就是数据的主方向,特征值就是这些方向上的方差。第一主成分定义为所有单位方向中投影方差最大的方向:

\[ u_1=\arg\max_{\|u\|=1}u^T\Sigma u \]

这个公式的读法是:从所有长度为 1 的方向 \(u\) 中,找一个方向,使数据投影到这个方向后的方差 \(u^T\Sigma u\) 最大。约束 \(\|u\|=1\) 很重要,否则把 \(u\) 任意放大,目标值也会被任意放大。

例题:从协方差矩阵看 PCA 主方向

假设二维数据中心化后,协方差矩阵为:

\[ \Sigma=\begin{bmatrix}2&1\\1&2\end{bmatrix} \]

上一节已经算过,它的特征值是 \(3\) 和 \(1\),对应方向分别是 \((1,1)\) 和 \((1,-1)\)。

第一主方向:把 \((1,1)\) 单位化:

\[ u_1=\frac{1}{\sqrt{2}}\begin{bmatrix}1\\1\end{bmatrix} \]

该方向上的方差是 \(\lambda_1=3\)。这说明数据沿着“两个坐标一起增加或一起减少”的方向变化最大。

第二主方向:把 \((1,-1)\) 单位化:

\[ u_2=\frac{1}{\sqrt{2}}\begin{bmatrix}1\\-1\end{bmatrix} \]

该方向上的方差是 \(\lambda_2=1\)。如果只用一维表示数据,PCA 会保留 \(u_1\),因为它解释的方差更多。

解释方差比例:

\[ \frac{\lambda_1}{\lambda_1+\lambda_2}=\frac{3}{4}=75\% \]

所以第一主成分解释了总方差的 75%。这不是说它解释了所有语义,只是说它解释了线性方差中的 75%。

PCA 还有另一个等价解释:如果只能用 \(k\) 维子空间重构数据,PCA 选择让平方重构误差最小的子空间。因此 PCA 同时可以被看成“最大方差方向”和“最小重构误差方向”。

embedding 主方向:在 embedding 或隐藏状态分析里,PCA 可以找出激活变化最大的方向。例如某些主方向可能对应长度、频率、语种、主题或数据集偏差。但 PCA 只发现线性方差结构,不自动保证这些方向有清晰语义,解释时必须结合样本投影和对照实验。

#条件数与数值稳定

条件数衡量一个矩阵对输入误差的放大程度。对可逆矩阵 \(A\),常见的 2-范数条件数为:

\[ \kappa(A)=\frac{\sigma_{\max}(A)}{\sigma_{\min}(A)} \]

这里 \(\sigma_{\max}\) 是最大奇异值,\(\sigma_{\min}\) 是最小非零奇异值。条件数越大,说明矩阵在某些方向拉得很长,在另一些方向压得很扁。这样一来,反解问题会很敏感:输入里一点点噪声,可能在被压扁的方向上放大成很大的参数误差。

情形谱结构后果
条件数接近 1各方向缩放比较均衡求解相对稳定,误差不容易被严重放大
条件数很大最大奇异值远大于最小奇异值逆问题敏感,最小二乘系数可能剧烈变化
最小奇异值接近 0某些方向几乎被压扁矩阵接近低秩,显式求逆风险很高

在线性回归中,如果 \(X\) 的列高度相关,\(X^TX\) 会接近奇异,条件数变大。此时很小的数据扰动就可能导致系数大幅变化。ridge 正则化通过加上 \(\lambda I\) 改善谱结构:

\[ X^TX+\lambda I \]

这相当于把 \(X^TX\) 的每个特征值都往上抬 \(\lambda\),让最小特征值不至于太接近 0,从而提升数值稳定性。代价是估计会带有偏差,但方差和不稳定性通常下降。

#LLM/量化面试连接

协方差矩阵与风险因子

量化里,资产收益协方差矩阵的最大特征方向常对应市场共同波动,后续方向可能对应行业、风格或价差结构。半正定性是基本要求,因为任意组合的方差不能为负。

Hessian 曲率与优化

Hessian 的特征值描述 loss 在不同参数方向上的曲率。最大特征值大,说明有陡峭方向;最小特征值小,说明有平坦方向。曲率跨度大时,固定学习率很难同时适配所有方向。

embedding 与激活主方向

PCA/SVD 可以分析 embedding 或隐藏状态的主变化方向。它们能帮助发现各向异性、公共方向、batch 偏差或语义聚类,但不能单独证明因果语义。

LoRA 与低秩更新

LoRA 假设任务适配的有效更新可以被低秩矩阵表达。面试里可以把它解释成:不是所有权重方向都同等重要,少量方向可能已经能承载主要任务变化。

面试追问:为什么 PCA 和 LoRA 都会提到“低秩”,但不是同一件事?

PCA 是一种数据分析方法,通常从中心化数据的协方差矩阵或数据矩阵 SVD 中找最大方差方向,用来降维、可视化或压缩。LoRA 是一种参数高效微调方法,把权重更新限制为低秩乘积 \(\Delta W=BA\),用更少参数学习任务适配。二者共享“很多有效变化集中在少数方向”的低秩直觉,但 PCA 是从数据中提取方向,LoRA 是给训练参数施加结构约束。

#常见误区与检查清单

误区为什么错正确说法
特征向量就是任意被放大的向量普通向量经过矩阵后通常会改变方向特征向量要求方向不变,只允许缩放或翻转
所有矩阵都能正交对角化正交对角化需要很强条件实对称矩阵可以正交对角化;一般矩阵更常用 SVD
正定等于所有元素为正元素正负不能直接决定二次型符号对称矩阵正定要看 \(x^TAx>0\) 或所有特征值为正
PCA 找到的一定是语义方向PCA 最大化的是线性方差,不是语义可解释性主方向需要结合样本、标签、干预或对照实验解释
条件数只是数学细节条件数大时,求逆和回归系数会对噪声非常敏感条件数是判断数值稳定性和正则化必要性的核心指标
  • 我能把 \(Av=\lambda v\) 解释成“方向不变、长度缩放”,并说明 \(v\ne 0\) 的原因。
  • 我能用 \(\det(A-\lambda I)=0\) 手算一个 \(2\times2\) 矩阵的特征值,再代回求特征向量。
  • 我能说清楚对称矩阵为什么可以写成 \(Q\Lambda Q^T\),以及 \(Q\)、\(\Lambda\)、\(Q^T\) 分别做什么。
  • 我能区分正定和半正定,并能解释为什么协方差矩阵一定半正定。
  • 我能把 Hessian 特征值解释成不同方向的 loss 曲率,而不是只背“二阶导矩阵”。
  • 我能读懂 SVD 公式 \(A=U\Sigma V^T\),并能解释奇异值越大代表该方向越重要。
  • 我能说明 PCA 第一主成分是在单位方向中最大化投影方差,并能用特征值计算解释方差比例。
  • 我能解释低秩近似和 LoRA 的共同直觉,也能说明 PCA 和 LoRA 的任务不同。
  • 我能用 \(\kappa(A)=\sigma_{\max}/\sigma_{\min}\) 解释条件数大为什么会导致数值不稳定。