有时候我会把“世界变复杂”的过程,想象成一个矩阵在长大。

一开始只是一个很小的矩阵,行不多,列也不多。后来数据越来越多,行在增加,列也在增加。你也可以换个角度想,不只是二维的扩展,而是维度在不断长出来。

但这里有一个关键问题:新增的数据,到底是“新信息”,还是“旧信息的变形”?

如果只是线性组合——也就是新数据可以用旧数据加权拼出来——那从线性代数的角度,这个矩阵的秩并没有变。你看起来有了更多数据,本质上却没有获得更多自由度。

但现实世界很少这么“规矩”。

更多时候,数据的增长不是线性的,而是某种更微妙的展开方式。比如分形。

自然界的很多结构——树叶、山脉、云、海岸线——都有一个共同特点:你放大看,还是那个样子。尺度变了,规则没变。这种自相似性,本质上来自于基本作用机制在不同尺度上的一致性。

如果把这种机制搬到数据上,你会得到一种很有意思的结构:整体看起来非常复杂,但它其实是由少量规则不断递归展开出来的。

换句话说,它是低维信息,通过非线性的方式“长出来”的。

这种情况下,就会出现一个很反直觉的现象:

一个看起来维度很高、秩很高的矩阵,其实可以被一个很低秩的结构很好地近似。

原因很简单——信息是冗余的,而且这种冗余是有结构的。

自相似带来的,不只是重复,而是“有偏好的重复”。某些方向的信息被不断强化,而另外一些方向几乎是空的。这种分布的不均匀性,使得奇异值谱往往呈现长尾:前面几维承载了大部分信息,后面的维度虽然存在,但贡献极小。

这也是为什么很多高维数据,用低秩近似效果 surprisingly 好。

但如果你还停留在“线性秩”的框架里,这一切其实是解释不通的。

线性代数默认了一件事:信息是通过线性组合扩展的,向量之间的关系是线性的,高维结构是在一个线性空间里铺开的。

问题是,现实数据往往不是这样构造的。

图像、语言、行为轨迹、金融时间序列——它们更像是分布在某个低维的非线性流形上,而不是一个均匀的高维空间。

局部来看,每一小块结构都很简单,甚至有点重复;但整体拼起来,却异常复杂。这种“局部简单 + 全局复杂”的组合,本质上就是分形思维在起作用。

所以,与其问“这个矩阵的 rank 是多少”,不如换个问题:

它背后的“本质维度”是多少?

这个维度,未必是线性的。它可能是一个流形的维度,也可能是一个分形维度。

前者描述的是:数据点实际上贴在一个弯曲的低维空间上。

后者描述的是:这个结构在不同尺度上的复杂度如何增长。

一旦你从这个角度看问题,很多技术路径就自然出现了。

比如 t-SNE、UMAP 这些非线性降维方法,本质上是在试图还原那个低维流形的结构;小波变换、金字塔模型是在做多尺度分解;而神经网络,尤其是自监督学习,本质上是在学习一种“低维但复杂”的表示分布。

换句话说,我们正在用一整套“超越线性代数”的工具,去逼近真实世界的数据结构。

但建模这件事,从来都不只是“选一个更高级的方法”这么简单。

只要你开始建模,就会遇到三个老问题:偏差、方差和噪声。

如果模型选错了,比如你用线性模型去拟合一个本质上是分形结构的数据,那你的偏差会很大。就像一把精度不够的枪,瞄准本身就是错的。

如果模型太复杂,又没有足够的数据约束,它就会过拟合。你会得到一个在训练数据上几乎完美,但一换数据就崩掉的模型。这更像是手在抖,每一枪都不稳定。

而噪声,是你无论如何都绕不过去的东西。它像风。你再精准、再稳定,也总有不可控的扰动。

有意思的是,当数据本身具有分形结构时,这三者之间的关系会变得更加微妙。

分形意味着“模式在重复”,但这种重复不是完全一致,而是带着扰动的。这种扰动,一部分是结构性的(你可以建模),一部分是随机的(你只能接受)。

如果你把结构性的部分当成噪声丢掉,你会提高偏差;如果你把随机噪声当成结构去拟合,你会提高方差。

真正困难的,不是拟合数据,而是分辨:哪些复杂性是“应该被解释的”,哪些只是“世界本来就会抖动”。

回到最开始那个矩阵的比喻。

它确实在变大。但更重要的不是它有多少行、多少列,而是它是“怎么长出来的”。

如果你看懂了这个“生长机制”,你就不会再执着于 rank 这种单一指标,而会去寻找更接近本质的描述方式。

那时候,你看的就不再是一个矩阵,而是一个正在展开的世界。

ray

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注