笃行
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
  • 向量入门

    • 看得见的机器学习数学
    • 向量是什么
    • 向量的加减与数乘
    • 线性组合与张成
  • 矩阵与变换

    • 矩阵是一次变换
    • 矩阵乘法
  • 度量与求解

    • 行列式与面积
    • 解方程组就是倒着走回去
    • 特征向量的直觉
    • 点积与相似度
  • 高维与结构

    • 高维空间的直觉
    • 正交基与投影
    • 秩与低秩
    • 长度与归一化
    • 线性与非线性
  • 概率与信息

    • 概率分布与采样
    • 期望与方差
    • 指数与 softmax
    • 对数与信息量
    • 交叉熵
  • 学习与优化

    • 导数就是坡度
    • 梯度下降
    • 链式法则与反向传播

秩:一张大表里,真正独立的方向有几个

成绩表上有语文、数学、英语三列,看着信息挺多。可要是英语分永远等于语文分,那第三列一个字的新消息都没带来——表是三列宽,真本事只有两样。

🧠 一句话结论

秩就是"真正独立的方向有几个"——一堆箭头里,扣掉那些能被别人拼出来的,剩下几根。秩比表面的行数列数小,就叫低秩,意味着这堆数据能用很少几根主方向近似地拼回来,这正是压缩和降维能成立的原因。


场景问题

班主任做了一张全班成绩表,三列:语文、数学、英语。

她想按"学习特点"给同学分类,一开始以为要考虑三个方面。可翻着翻着发现一件怪事:每个人的英语分,都恰好等于他的语文分。一个不差。

那这张表到底该算"三个方面"还是"两个方面"?

从格式上说它有三列。但从信息上说,英语那一列完全是白搭——知道了语文分,英语分闭着眼睛就能写出来。真正在描述同学的,只有语文和数学两样东西。

于是班主任心里冒出个问题:有没有办法一眼看出,一张表里"真正独立的方向"到底有几个? 如果不是"恰好相等"这么明显,而是"大致跟着走"呢?

这一篇讲的就是这件事。

实现方案

有的箭头是多余的

先回到第三篇的语言。那一篇讲过:几根箭头能张成(拼出)一片范围。

现在把成绩表的每一列当成一根箭头。三根箭头,能拼出多大的地方?

如果英语 = 语文,那两根箭头躺在同一条直线上。 这时候第三根箭头对"能拼出多大地方"一点贡献都没有——它能到的地方,第一根箭头自己就能到。它是多余的。

青色两根:方向不同,各带一个新方向橙色虚线这根:正好躺在第一根的延长线上,没带来任何新方向语文数学英语(= 语文 × 2)

图里青色两根箭头各指一个方向,谁也拼不出谁。橙色那根正好躺在语文那根的延长线上——它带来的一切,语文那根自己就能给。

扣掉所有多余的箭头之后,还剩几根,这个数就叫秩。 三列的表,秩是 2。

秩不满的时候,空间会被压扁

把这件事翻译成第四篇的语言:矩阵是把整张网格搬一次家。

如果一个矩阵的秩不满(比如 2 列的矩阵秩只有 1),搬家之后会发生什么?

秩不满的矩阵:整张网格被压成一条线面积归零 → 压扁之后,倒不回去了

整张网格被压成了一条线。所有格子的面积都变成 0——这正是第六篇讲的"行列式为 0",也正是第七篇说的"倒不回去"的原因。

秩不满 ⟺ 面积(体积)归零 ⟺ 变换不可逆。 三篇讲的是同一件事的三个侧面:秩说的是"独立方向剩几个",行列式说的是"面积缩到多少倍",可逆性说的是"能不能倒着走回去"。

少数几根主方向,就能把表拼个八九不离十

现实里很少有"英语分恰好等于语文分"这么干净的事。更常见的是大致跟着走:英语分和语文分不完全相等,但明显同涨同跌。

这时候秩严格算起来是满的(3),可从信息上说,第三列带来的新东西少得可怜。

于是有了一个更有用的问法:能不能只留最重要的几根方向,把整张表近似地拼回来?

留 1 根留 2 根留 5 根原图只剩粗条纹轮廓出来了几乎看不出差别同一幅图案,用不同根数的主方向重建留 5 根就几乎和原图一样 —— 剩下的方向其实没装多少东西

看这组对比:只留 1 根主方向,图案只剩个粗略的条纹;留 2 根,轮廓就出来了;留 5 根,已经和原图几乎看不出差别。

这说明一件事:真实数据里,绝大部分内容都挤在少数几根方向上,剩下的方向装的东西少得可以忽略。这种"名义上秩很高,实际上只有少数几根方向真正装东西"的情况,就叫低秩。

低秩不是特例,是常态。班里同学的成绩、一张照片的像素、一段文字的含义——真实世界的数据几乎都是这样。这就是压缩能成立的根本原因:不是我们手段高明,是数据本来就没那么"满"。

挑主方向不是"砍掉几列"

有个地方特别容易搞混:留下"几根主方向",不等于从原表里挑几列留着。

原表的列(语文、数学、英语)不一定是最好的量尺。主方向是第十一篇说的那种换出来的新量尺——它们通常是原来几列的混合,比如"语文和英语的共同部分"算一根、"数学独有的部分"算一根。

所以流程是:先换一组更合身的量尺,再只留前几根。直接砍列是把整整一列的信息全丢掉;换量尺后砍,丢掉的只是各列里最不重要的那部分渣滓。

为什么这么做

为什么要专门给"独立方向有几个"起个名字叫秩?

因为这个数把好几件事一口气说清了:能不能倒着走回去(第七篇)、面积会不会归零(第六篇)、这堆数据能压到多小。一个词说清一串事,值得起名字。

为什么低秩能压缩,不会把东西弄丢?

因为真实数据本来就"不满"。各个方向装的东西极不平均:前几根方向装了绝大部分,后面那些方向装的接近于零。丢掉几乎空着的方向,当然不心疼。压缩省下的是本来就没什么内容的地方,不是把有内容的地方硬砍掉。

为什么要先换量尺再砍,不能直接砍列?

因为原来的列往往互相纠缠——语文和英语各装了一部分"语言能力"。直接砍掉英语列,那部分信息就整块没了。换一组量尺之后,"语言能力"被单独拎成一根量尺,剩下的量尺装的才是真正的边角料,砍它才不心疼。

为什么别的选择不行

错误直觉一:以为秩就是行数或列数

"三列的表,秩不就是 3 吗?"

不是。秩数的是真正独立的方向,不是格式上有几列。三列的表里要是有一列能被另外两列拼出来,秩就是 2;要是三列全躺在同一条直线上,秩就是 1。

行数列数是表的外形,秩是表的实际本事。 外形唬人,本事不一定跟得上。

错误直觉二:以为低秩必然丢掉大量信息

"只留 5 根方向,那不是把其它方向全扔了?"

扔了,但那些方向本来就几乎是空的。看上面那组重建图:留 5 根已经和原图几乎看不出差别——说明第 6 根往后的方向装的东西微乎其微。

关键不是"扔了多少根方向",是"扔掉的那些方向里装了多少东西"。 真实数据几乎都是低秩的,所以扔掉一大堆方向往往只损失一丁点内容。

错误直觉三:以为降维就是砍掉几列

不是。降维是先换一组更合身的量尺,再只留前几根,砍的是新量尺不是原来的列。

直接砍列的后果很具体:砍掉英语列,"语言能力"这件事就整块丢了。而换量尺之后,"语言能力"已经被单独拎成一根主方向留了下来,被砍掉的只是各列里零碎的边角料。同样是"变少",砍对地方和砍错地方,结果天差地别。

沉淀结论

  1. 秩 = 扣掉多余箭头之后,真正独立的方向还剩几根——不是行数列数
  2. 秩不满 ⟺ 空间被压扁 ⟺ 面积归零 ⟺ 倒不回去,这是第六、第七篇结论的另一个侧面
  3. 低秩 = 名义上方向很多,实际上内容全挤在少数几根上——真实数据几乎都是这样
  4. 只留前几根主方向就能把数据拼个八九不离十,因为丢掉的那些方向本来就几乎是空的
  5. 降维是"先换量尺、再留前几根",不是直接砍掉几列——砍对地方才不心疼

记忆口诀

秩 = 真正独立的方向有几根,不是有几列。
秩不满就压扁,压扁就倒不回去。
真实数据都低秩:内容全挤在前几根方向上。
留前几根就够像,因为后面那些本来就空着。
降维是先换量尺再留前几根,不是硬砍几列。

延伸阅读

  • LoRA 为什么能用极少参数微调大模型:因为微调要改的那部分本来就是低秩的——不用动整张大表,只用两张又窄又薄的表就能把改动拼出来。详见模型微调。
  • embedding 压缩与降维:把上千根量尺换成几十根主方向,检索效果掉不了多少、存储和计算却省一大截,靠的正是低秩。详见RAG 架构。

自测:合上资料能说清楚吗?

  1. 一张三列的成绩表,英语分永远等于语文分。这张表的秩是几?为什么?
参考答案

秩是 2。 秩数的是真正独立的方向,不是有几列。英语那一列能被语文那一列直接拼出来(躺在同一条直线上),它一个字的新消息都没带来,是多余的。扣掉它,剩下语文和数学两个独立方向。

  1. 秩不满和"倒不回去"是什么关系?
参考答案

是同一件事的两个说法。 秩不满意味着变换把空间压扁了(比如整张网格压成一条线),所有格子面积归零——这正是行列式为 0。压扁之后,原来不同的点被挤到了同一个位置,分不清谁是谁,自然倒不回去。秩说的是"独立方向剩几个",行列式说的是"面积缩到多少倍",可逆性说的是"能不能走回去",三者讲的是一件事。

  1. 只留 5 根主方向重建的图和原图几乎一样,这说明了什么?
参考答案

说明这堆数据是低秩的:内容极不平均地挤在前几根方向上,第 6 根往后装的东西微乎其微。所以扔掉一大堆方向只损失一丁点内容。真实数据几乎都是这样——这正是压缩能成立的根本原因:不是手段高明,是数据本来就没那么"满"。

  1. 降维和"砍掉几列"有什么区别?
参考答案

降维是先换一组更合身的量尺,再只留前几根,砍的是新量尺不是原来的列。

原来的列往往互相纠缠(语文和英语各装一部分"语言能力"),直接砍英语列会把那部分信息整块丢掉。换量尺之后"语言能力"被单独拎成一根主方向留下来了,被砍的只剩零碎边角料。同样是变少,砍对地方和砍错地方结果天差地别。

  1. 一张 1000 列的表,秩算出来是 1000(满的)。它还有可能被大幅压缩吗?
参考答案

很有可能。 秩满只说明"没有哪一列能被别的列恰好拼出来",但各方向装的内容可以极不平均——前 20 根方向装了 99% 的内容,后面 980 根各装一丁点。

现实里"恰好相等"很罕见,"大致跟着走"才是常态。所以真正有用的问题不是"秩满不满",而是"内容集中在前几根方向上",这才是低秩近似的用武之地。

最近更新: 2026/9/10 11:38
Prev
正交基与投影
Next
长度与归一化