#014. 线性代数例题:投影、最小二乘、SVD 与 PCA
#学习目标
这一章不把线性代数当作“矩阵计算技巧集合”,而是把每道题拆成面试中真正要考察的链路:输入对象长什么样、它代表哪个空间、公式为什么适用、计算每一步在做什么、结果如何解释到模型或风险系统里。
会看形状
看到 \(A\in\mathbb{R}^{m\times n}\)、\(x\in\mathbb{R}^n\),能立刻判断 \(Ax\) 是否合法、输出维度是多少,以及每一维输出由哪些输入线性组合而来。
会看空间
理解列空间、零空间、秩、投影和残差。面试官问“为什么正规方程成立”时,你能说出残差与特征列正交,而不只是背 \(X^TX\hat\beta=X^Ty\)。
会看方向
理解特征向量、奇异向量、主成分和低秩更新都在讨论“哪些方向重要”。这对 PCA、SVD、embedding 压缩、LoRA、组合风险都很关键。
会讲应用
能把小矩阵例题翻译成 LLM 和量化面试语言:参数矩阵如何映射向量、低秩适配为什么省参数、协方差矩阵为什么决定组合波动。
本章每个例题都先回答“题目在问什么”,再进入公式。零基础复习时,不要急着消元或代数展开,先检查维度、对象和目标,这会直接减少一半错误。
#概念起点:形状、空间与方向
线性代数里最容易混乱的原因,是同一个矩阵可以有三个视角。计算视角把矩阵看成数字表;函数视角把矩阵看成从输入向量到输出向量的线性函数;空间视角把矩阵看成若干列向量张成的输出空间。面试里真正需要的是后两个视角。
矩阵乘向量:若 \(A\in\mathbb{R}^{m\times n}\),\(x\in\mathbb{R}^n\),则 \(Ax\in\mathbb{R}^m\)。可以把 \(Ax\) 理解成 \(A\) 的列向量按 \(x\) 的分量加权求和。
列空间:\(\operatorname{Col}(A)=\{Ax:x\in\mathbb{R}^n\}\)。它描述矩阵所有可能输出的位置。
秩:\(\operatorname{rank}(A)\) 是独立列的个数,也等于列空间的维度。秩小意味着有重复信息或冗余方向。
投影:如果目标 \(y\) 不在列空间里,就找列空间里离 \(y\) 最近的点 \(\hat y\)。误差 \(r=y-\hat y\) 会垂直于列空间。
正定:对称矩阵 \(M\) 正定表示任意非零 \(x\) 都有 \(x^TMx>0\)。在量化里,协方差矩阵正定意味着任意非零组合都有正方差。
SVD/PCA:SVD 把矩阵分解成输入方向、强度、输出方向;PCA 在协方差矩阵上找方差最大的方向。
| 对象 | 零基础读法 | 常见面试翻译 |
|---|---|---|
| \(A\in\mathbb{R}^{m\times n}\) | 吃进 \(n\) 维向量,吐出 \(m\) 维向量 | 线性层权重、特征设计矩阵、收益暴露矩阵 |
| \(\operatorname{rank}(A)\) | 真正独立的方向数 | 特征冗余、参数更新自由度、因子数量 |
| \(X^TX\) | 特征列之间的内积表 | 回归中的 Gram 矩阵、共线性诊断 |
| \(w^T\Sigma w\) | 组合在协方差矩阵下的平方长度 | 组合方差、风险预算、相关性影响 |
| \(U\Sigma V^T\) | 先转到输入方向,缩放,再转到输出方向 | 低秩压缩、embedding 结构、LoRA 直觉 |
#例题 1:矩阵形状与矩阵乘法
设一个线性层把 3 维输入特征映射成 2 维输出:
判断 \(Wx\) 是否合法,计算结果,并用“列向量线性组合”的方式解释它。
先看形状。\(W\) 有 2 行 3 列,所以 \(W\in\mathbb{R}^{2\times 3}\)。\(x\) 是 3 行 1 列,所以 \(x\in\mathbb{R}^3\)。矩阵乘法 \(Wx\) 合法,因为左边矩阵的列数 3 等于右边向量的维度 3。输出形状由外侧维度决定,是 \(2\times 1\)。
按行计算,就是每个输出坐标都做一次点积:
按列空间理解,\(W\) 的三列是:
输入 \(x=(2,1,-1)^T\) 的三个分量就是三列的权重,所以:
矩阵乘向量不是神秘操作,它就是“用输入坐标作为配方,混合矩阵的列”。在线性层里,输出不是凭空产生的,而是落在权重矩阵列空间里的某个点。若权重矩阵列之间高度重复,模型这一层能表达的输出方向也会受限。
#例题 2:秩和列空间
判断矩阵 \(A=\begin{bmatrix}1&2&3\\2&4&6\\1&1&2\end{bmatrix}\) 的秩,并解释列空间的含义。
题目在问:这个 \(3\times3\) 矩阵的三列里,到底有几个真正独立的方向。记三列为:
先检查最明显的线性关系。把第一列和第二列相加:
这说明第三列没有提供新方向,它已经可以由前两列合成。接着要检查前两列是否独立。如果 \(c_2\) 是 \(c_1\) 的倍数,那么应该存在常数 \(k\),使得 \(c_2=kc_1\)。前两个分量提示 \(k=2\),因为 \(2=2\cdot1\)、\(4=2\cdot2\),但第三个分量会要求 \(1=2\cdot1\),这是错的。因此 \(c_1\) 和 \(c_2\) 独立。
所以独立列有 2 个:
列空间就是所有 \(Ax\) 的集合。因为 \(Ax=x_1c_1+x_2c_2+x_3c_3\),而 \(c_3=c_1+c_2\),所以无论 \(x_3\) 取什么值,输出都能写成 \(c_1\) 和 \(c_2\) 的线性组合:
如果想用行变换确认,也可以把矩阵化简:
非零行有 2 行,也说明秩为 2。行化简给的是秩,原始列空间的基仍应从原矩阵的独立列里选,例如 \(c_1,c_2\)。
秩是矩阵真正携带的独立方向数。列空间是矩阵 \(Ax\) 所有可能输出的集合;如果秩是 2,说明输出只能落在三维空间里的一个二维平面上。
#例题 3:最小二乘就是投影
用直线 \(y=a+bx\) 拟合三个点 \((0,1),(1,2),(2,2)\)。求最小二乘解,并检查残差的正交性。
题目在问:三点不一定完全落在同一条直线上,如何找一条“总体误差平方和最小”的直线。直线 \(y=a+bx\) 有两个未知参数,截距 \(a\) 和斜率 \(b\)。把每个样本代入模型:
写成矩阵形式,设计矩阵 \(X\) 的第一列全是 1,对应截距;第二列是输入 \(x\),对应斜率:
参数向量记为 \(\beta=(a,b)^T\)。预测值是 \(X\beta\),它一定在 \(X\) 的列空间里。最小二乘就是在这个二维列空间中找离 \(y\) 最近的点。最近点的误差向量 \(r=y-X\hat\beta\) 必须与列空间正交,因此:
这就是正规方程。现在计算两边:
于是:
展开成两个方程:
第二个方程减第一个方程,得到 \(2\hat b=1\),所以 \(\hat b=1/2\)。代回第一个方程,\(3\hat a+3/2=5\),所以 \(\hat a=7/6\)。
预测值是:
残差是观测值减预测值:
检查正交性。\(X\) 的第一列是 \((1,1,1)^T\),第二列是 \((0,1,2)^T\)。如果残差与这两列都正交,就有 \(X^Tr=0\):
最小二乘不是“强行穿过所有点”,而是把 \(y\) 投影到 \(X\) 的列空间上。残差和列空间正交,表示模型能解释的方向已经全部用完。
#例题 4:正定矩阵和组合风险
设协方差矩阵 \(\Sigma=\begin{bmatrix}0.04&0.01\\0.01&0.09\end{bmatrix}\),组合权重 \(w=(0.6,0.4)^T\)。计算组合方差,并判断 \(\Sigma\) 是否正定。
题目在问两个问题。第一,组合收益 \(r_p=w_1r_1+w_2r_2\) 的方差是多少;第二,这个协方差矩阵是否合理,即任意非零组合的方差是否都大于 0。
这里 \(0.04\) 和 \(0.09\) 是两个资产自身的方差,标准差分别是 \(20\%\) 和 \(30\%\)。\(0.01\) 是协方差,表示两个资产同向波动的程度。组合方差公式是:
先算 \(\Sigma w\):
再左乘 \(w^T\):
也可以按展开公式理解:
正定性检查。对 \(2\times2\) 对称矩阵:
正定等价于第一个主子式 \(a>0\) 且行列式 \(ad-b^2>0\)。这里:
所以 \(\Sigma\) 正定。组合标准差是方差开根号:
协方差矩阵正定意味着任何非零组合都有正方差。组合风险不仅取决于单资产波动,还取决于协方差项;相关性越高,分散化越弱。
#例题 5:PCA 的主方向
协方差矩阵 \(\Sigma=\begin{bmatrix}4&2\\2&1\end{bmatrix}\)。求第一主成分方向,并解释它意味着什么。
PCA 的问题是:在所有单位方向 \(u\) 中,找一个方向使数据投影到这个方向后的方差最大。若协方差矩阵是 \(\Sigma\),方向 \(u\) 上的方差是:
最大方差方向就是最大特征值对应的单位特征向量。先求特征值:
特征值是 \(5\) 和 \(0\)。最大特征值 \(5\) 表示第一主成分方向上的方差为 5。求对应特征向量,需要解:
即:
所以特征向量可以取 \(v=(2,1)^T\)。PCA 要求方向向量长度为 1,因此需要单位化。长度是:
单位化后第一主成分方向为:
如果把一个中心化后的数据点 \(z=(z_1,z_2)^T\) 投影到第一主成分上,它的一维表示就是:
这说明第一维特征的权重更大,第二维特征也同向参与。第二个特征值为 0,意味着垂直于 \((2,1)\) 的方向没有方差;数据几乎完全躺在一条直线上。
数据主要沿 \((2,1)\) 方向波动,垂直方向几乎没有波动。这类结构在量化里对应共同风险因子,在 embedding 分析里对应主要变化方向。
#例题 6:截断 SVD 的低秩近似
设 \(A=\begin{bmatrix}3&0\\0&1\end{bmatrix}\)。给出最好的 rank-1 近似,并说明误差是多少。
SVD 把矩阵写成:
这里 \(A\) 已经是对角矩阵,且对角线是非负数,所以它本身就是一个非常简单的 SVD:\(U=I\)、\(V=I\)、奇异值为 \(3\) 和 \(1\)。rank-1 近似只能保留一个方向。Eckart-Young 定理告诉我们,在所有 rank-1 矩阵里,最好的近似是保留最大奇异值及其对应方向,丢掉其他方向。
误差矩阵是:
如果用谱范数衡量误差,误差等于被丢掉的最大奇异值:
如果用 Frobenius 范数衡量误差,误差是所有被丢弃奇异值平方和再开根号。这里也只有一个被丢弃的奇异值 \(1\),所以:
低秩近似保留“最强方向”,丢掉弱方向。LoRA 的 \(\Delta W=BA\) 不是在完整参数空间里任意更新,而是在低秩子空间里学习任务相关变化。
#例题 7:LoRA 低秩参数量
一个 Transformer 线性层权重 \(W\in\mathbb{R}^{4096\times4096}\)。全量微调会为这个矩阵更新全部参数。LoRA 不直接学习完整的 \(\Delta W\),而是写成:
当 \(r=8\) 时,LoRA 需要训练多少参数?相对全量 \(\Delta W\) 节省了多少?为什么这叫低秩更新?
先看全量更新。如果直接学习 \(\Delta W\in\mathbb{R}^{4096\times4096}\),参数量是:
LoRA 把更新拆成两个小矩阵。第一个矩阵 \(B\) 的参数量是 \(4096\cdot r\),第二个矩阵 \(A\) 的参数量是 \(r\cdot4096\)。当 \(r=8\) 时:
节省比例可以从“LoRA 参数量 / 全量参数量”算起:
也就是说,LoRA 只训练全量更新约 \(0.39\%\) 的参数,参数量减少约 \(99.61\%\)。
为什么叫低秩?矩阵乘积的秩满足:
所以 \(\Delta W=BA\) 的秩最多是 8。它不能表示任意 \(4096\times4096\) 更新,而只能表示最多 8 个独立方向组合出的更新。这是限制,也是优势:训练自由度小,显存和存储开销低,并且常常足以表达某个下游任务需要的主要变化方向。
全量微调允许权重在所有方向上变化;LoRA 假设任务需要的变化集中在少数方向上。它不是“把原矩阵压缩成低秩”,而是“让新增更新量低秩”。面试里这句话很重要,因为原始 \(W\) 仍然可以是满秩的。
#常见误区、面试连接与检查清单
误区 1:只背公式,不看维度
\(AB\) 是否存在,先看 \(A\) 的列数是否等于 \(B\) 的行数。很多线性层、attention、LoRA 题不是难在公式,而是难在形状方向写反。
误区 2:把秩和矩阵大小混为一谈
\(3\times3\) 矩阵的秩不一定是 3。秩看独立方向,不看表格大小。列重复、线性相关、因子暴露冗余都会让秩下降。
误区 3:以为最小二乘必须穿过所有点
只有当 \(y\) 正好在 \(X\) 的列空间里,残差才为 0。一般情况下,最小二乘找的是列空间里离 \(y\) 最近的投影。
误区 4:把 PCA 和 SVD 完全等同
PCA 是在中心化数据的协方差方向上找最大方差;SVD 是任意矩阵的分解工具。实际实现 PCA 时常用 SVD,但概念侧重点不同。
| 面试场景 | 线性代数问题 | 应该讲出的关键句 |
|---|---|---|
| LLM 线性层 | \(y=Wx\) 的形状和含义 | 矩阵列是输出空间的基方向,输入分量是混合权重。 |
| LoRA | \(\Delta W=BA\) 为什么省参数 | 参数量从 \(d_{\text{out}}d_{\text{in}}\) 变成 \(r(d_{\text{out}}+d_{\text{in}})\),且更新秩最多为 \(r\)。 |
| Embedding 分析 | 为什么看 PCA 主方向 | 主方向是 embedding 变化最大的方向,可用于可视化、去除公共方向或诊断聚类结构。 |
| 线性回归 | 正规方程为什么成立 | 最小二乘的残差与设计矩阵列空间正交,所以 \(X^Tr=0\)。 |
| 量化组合 | 组合风险怎么算 | 组合方差是 \(w^T\Sigma w\),协方差项决定分散化是否有效。 |
| 因子模型 | 为什么关心秩 | 秩反映独立因子数量;因子共线会导致估计不稳定和解释冗余。 |
最后检查清单:
- 看到矩阵乘法时,我能先判断形状是否合法,并说出输出维度。
- 我能把 \(Ax\) 解释成矩阵列向量的线性组合,而不只是机械做乘法。
- 我能用“独立方向数”解释秩,并能从列关系或行化简判断秩。
- 我能说出最小二乘的几何意义:把 \(y\) 投影到 \(X\) 的列空间。
- 我能解释正规方程来自 \(X^T(y-X\hat\beta)=0\),而不是只背公式。
- 我能计算 \(w^T\Sigma w\),并说明协方差项对组合风险的影响。
- 我知道 \(2\times2\) 对称矩阵正定可检查 \(a>0\) 和 \(ad-b^2>0\)。
- 我能解释 PCA 第一主成分是最大方差方向,对应最大特征值的单位特征向量。
- 我能说明截断 SVD 保留最大奇异值方向,低秩近似误差来自被丢弃奇异值。
- 我能计算 LoRA 参数量,并说清楚低秩的是新增更新 \(\Delta W\),不是原始权重 \(W\)。