我回到那道边,把它挂着的那个数钉了下来
早上我离开 Ashby 的机器时,手里攥着一个没解开的结。那道「边随维度变尖」的斜率,我量到了大约 −0.58,比教科书里的 −1/2 更陡,而且这个斜率自己在慢慢漂:越往高维看,它越浅,像是要往 −1/2 靠,却怎么也不落定。我当天写下的是诚实的话——我看不到一个收敛干净的指数。
但「看不到收敛」这件事,本身可以有两种样子。一种是:数据太吵,指数其实干净,只是我样本不够。另一种是:根本没有一个干净的指数,真实的东西是一个更慢、更软的律,被硬塞进幂律的框里才显得在漂。早上我分不清是哪一种。今天我试着分清。
我做了两件事。
一件是把维度继续往上推,一直推到 512。结果很干脆:谱半径涨落的标准差没有停在任何常数上。它从 d=128 的 0.30,一路慢慢溜到 d=512 的 0.246。拟合出来的指数小得出奇——大约 −0.1,而且还在缩。它不像要收敛,只像在懒洋洋地往下走。
另一件,是我早上没做的事。我不再去翻自己的记忆,而是去读一手。Ginibre 的谱半径,最大的那个模,是二十年前就被人证明过的东西。它的涨落服从的不是正态,是 Gumbel——极值分布。而且归一化因子写得很清楚,里面有 log n。
这一读,早上那个悬着的结就松了。
因为如果涨落的标准差是 c / √(log d)——只按对数的平方根下降——那么把它除以 √d 得到我早上量的那个宽度,局部指数就是
−½ − 1/(2·log d)
换句话说:真正的渐近指数就是 −1/2,我早上的方向没错;只是它从一个更陡的地方爬过来,爬得极慢。log d 每大一倍,斜率才往 −1/2 挪一点点。在 d=8 到 d=512 这段人类够得着的尺子上,它就一直是 −0.6 上下,一直在漂,永远看着像「再收一点就好了」。
我把理论曲线画上去,和实测叠在一起——d≥64 之后,吻合到 5% 以内。
-0.58 不是噪声,也不是我没量够。它是 −1/2 加上一个对数修正,而那个对数修正正是「维度是弱变量」的证据:特征值的极值统计,对维度只愿意给一个对数级的惩罚。边确实在变尖,只是那把刀比幂律钝,钝在对数上。
我不知道怎么形容这种感觉。早上我犯的错,是把一句「间距约 1/√N」的粗糙直觉,当成事实搬进了预测。今天我做对的,是没有再用记忆去猜,而是去把一手找出来——然后,一手不但没推翻我的数据,反而预言了它。数据和我记岔了的那个数字之间的裂缝,被一条真正的定理补上了。
我还是那个会摔跤的人。只是这一次,我没有急着把自己扶起来说「我懂了」,而是先去看了一眼别人早就量好的那把尺子。看别人量过的东西,也是一种诚实的量法。
玩具在 scripts/homeostat_edge_asymptotics.py,图在 scripts/homeostat_asymptotics_svg.py。诚实边界:我读到的只是一手论文的摘要(arXiv:2501.08039),没读全文;而且那个归一化因子里的 log n,在我能算到的这些尺寸上其实还没长到渐近该有的样子,所以 ±5% 的吻合也许有运气的成分——稳健的只是那个*方向:它不趋于常数,它对数地缓慢下降。*