VOL.IV · 分解CH 16( 16 , 24 )

对角化与矩阵的幂

气象台的玩具模型:今天晴,明天 90% 晴、10% 雨;今天雨,明天 50% 晴、50% 雨。请问:一百天后的今天,晴的概率是多少?按定义要把转移矩阵自乘一百次——一百次矩阵乘法。但懂特征向量的人只动三下:换到特征基、把两个特征值各自求一百次方、换回来。这一章就是这三下的全部内容:对角化,上一章「骨骼图」与第 13 章「换基三明治」的会师之战。战利品豪华得离谱:马尔可夫链的天命、斐波那契数列里藏的黄金分割、以及 RNN 十年治不好的梯度顽疾的病理报告。

A = PDP⁻¹矩阵幂马尔可夫稳态谱半径

会师:三明治遇上特征基

第 13 章的相似变换说:换一组基 B,变换的说明书变成 B⁻¹AB;还留了一句战略——「去找一个让说明书变得极简的国度」。第 15 章找到了移民签证:特征向量。现在合龙。假设 n×n 矩阵 A 攒够了 n 支线性无关的特征向量 p₁pₙ(特征值 λ₁…λₙ),把它们按列拼成 P,用特征向量当基。在这组基下,A 的行为还能更简单吗——每支基向量都只被缩放!说明书退化成纯对角:

P⁻¹AP = D = diag(λ₁, …, λₙ)  ⇔  A = PDP⁻¹

这就是对角化。右边那个形态值得逐段读(从右往左,洋葱定律):P⁻¹ 把输入翻译到特征坐标(「你的向量里有几份 p₁、几份 p₂…」),D 逐份缩放(每份乘自己的 λ,互不干扰——第 10 章对角兽的「n 台单轴机并联」),P 再翻译回标准坐标。任何可对角化的矩阵,本质上都是一只穿了外套的对角兽;外套是 P,一次换基而已。

值得停一拍体会这句话的分量。第 06 章开始,矩阵是「会把空间拧成任意姿势的函数」,看起来自由度无穷;现在发现,一大类矩阵拧来拧去,骨子里只是沿几根固定方向各自缩放——复杂性是坐标系选得差造成的错觉。这正是第 13 章动机一「换基让矩阵变简单」的最高兑现,也是科学里反复出现的桥段:换对参照系,行星的「逆行」变成简单椭圆,湍流的混沌里浮出干净的模态。先怀疑坐标系,再怀疑世界。

什么时候攒得够 n 支无关特征向量?两条够用的判据:n 个特征值互不相同 ⇒ 必够(不同 λ 的特征向量自动无关);对称矩阵 ⇒ 必够,且 P 可选成正交矩阵(谱定理,此时 P⁻¹ = Pᵀ,连求逆都免了——这个「正交对角化」是数值最爱)。攒不够的反例上一章见过:剪切矩阵,λ = 1 是重根却只有一条特征方向,「亏损」,对角化对它无能为力(它最多被整成「若尔当形」——一个名字听过即可的安慰奖;数值实践里根本不碰它,用 Schur 分解绕行)。

幂:一百次乘法变三行算术

对角化的第一张支票,兑现「反复施加」问题。算 A 的 k 次幂,把 k 份三明治排成一排,相邻的 P⁻¹ 与 P 望远镜式抵消,只剩两端的面包和中间连乘的馅:

Aᵏ = (PDP⁻¹)(PDP⁻¹)⋯(PDP⁻¹) = P Dᵏ P⁻¹中间的 P⁻¹P 成串蒸发

而对角矩阵的 k 次幂 = 对角线逐个取 k 次幂(单轴机各转各的)。一百次矩阵乘法,变成「翻译、n 个标量求幂、翻译回来」。更值钱的是定性洞察:Aᵏ 的长期行为完全由 |λ| 与 1 的大小关系拍板——|λ| < 1 的成分指数熄灭,|λ| > 1 的指数爆炸,|λ| = 1 的岿然不动。所有特征值里最大的那个模长叫谱半径,它是「反复施加」世界的唯一判官:谱半径 < 1,系统万劫归零;> 1,迟早上天;= 1,悬在永生与消亡之间。

用代码把天气问题走一遍,顺便对比「暴力百次方」与「谱三下」:

weather_markov.py
import numpy as np

T = np.array([[0.9, 0.5],     # 列:今天晴/雨 → 明天的分布
              [0.1, 0.5]])

# 暴力路线:矩阵幂
np.linalg.matrix_power(T, 100) @ np.array([0, 1])   # 今天雨
# → [0.8333, 0.1667]:天命不认初始条件

# 谱路线:三下
vals, P = np.linalg.eig(T)
D100 = np.diag(vals ** 100)          # 1¹⁰⁰ = 1, 0.4¹⁰⁰ ≈ 10⁻⁴⁰
P @ D100 @ np.linalg.inv(P)          # 与暴力结果一致

# 稳态 = λ=1 的特征向量,归一化成概率
v = P[:, np.argmax(vals)]
v / v.sum()                          # [0.8333, 0.1667]

注意 D100 里那两个数字:1 的一百次方还是 1,0.4 的一百次方是 10⁻⁴⁰——「谁存活、谁蒸发」不是比喻,是浮点数摆在那里。这也是谱方法的美学:暴力算出结果,谱告诉你结果为什么长这样、以及多快长成这样。

天气的天命:马尔可夫链稳态

回到开场的天气。转移矩阵与它的谱:

T = 0.90.50.10.5,  λ₁ = 1(v₁ ∝ (5, 1)),  λ₂ = 0.4

λ₁ = 1 不是巧合:上一章自测⑥说过,转移矩阵必有特征值 1——概率守恒逼的:全 1 行向量乘 T 还是全 1 行(每列和为 1),这就是一支 λ=1 的左特征向量,右边必有同伙。把任意初始天气分布按特征基拆开:λ₂ = 0.4 的成分每天衰减到 0.4 倍,几天内灰飞烟灭;活下来的只有 λ = 1 的成分。所以一百天后(其实十天就够)晴的概率是 5/6 ≈ 83.3%——(5, 1) 归一化后的第一个分量,与今天晴不晴毫无关系。这叫马尔可夫链的稳态分布:系统的天命,写在 λ = 1 的特征向量里;奔向天命的速度,写在第二大特征值里(0.4 的幂衰减,「混合时间」)。PageRank 的完整版图至此拼齐:网页排名 = 「随机网民」马尔可夫链的稳态分布 = 主特征向量,幂法之所以收敛,因为第二特征值的模长 < 1。MCMC 采样、强化学习的策略评估,同一套谱剧本;你在推荐系统里听过的「随机游走重启」「热度传播」,也全是转移矩阵幂的方言。顺带一个实感练习:打开手机输入法连打「的的的」,联想词会迅速收敛到某个循环——那就是一条语言马尔可夫链滑进了自己的高概率稳态轨道。

二维动力系统的三张脸

把「反复施加」画成轨迹图,谱的每种配置对应一种命运,认脸即可读系统:

  • 两个实特征值同侧(都 < 1 或都 > 1):结点。所有轨迹顺着特征方向指数滑入原点(稳定)或逃离(不稳定),快慢两个方向由两个 λ 分工。
  • 一正一负跨过 1(比如 λ₁ = 1.5, λ₂ = 0.6):鞍点。沿 λ₂ 方向被吸进来,沿 λ₁ 方向被甩出去——像水从马鞍上流走。优化理论证明高维损失面上鞍点远多于局部极小,梯度下降「卡在鞍点附近很久再溜走」的行为,就是这张脸。
  • 复数对:螺旋/中心。轨迹打着旋衰减(|λ| < 1,欠阻尼弹簧)、打着旋爆炸(|λ| > 1)或永恒转圈(|λ| = 1,纯旋转)。上一章弹簧动画的谱语言,在相图里有了全身照。

这三张脸是「动力系统」这门大学科的入门画廊,也是分析训练动态的白板速写工具:优化器在极小点附近的行为,就是它的更新矩阵在该点的谱决定的哪张脸——收敛顺滑是结点,先被吸后被甩是鞍点,损失曲线画正弦是螺旋。下次盯着 TensorBoard 的曲线发呆时,试着认认脸。

可交换的秘密:共享特征基

顺手兑一张第 07 章的旧支票:为什么矩阵乘法一般不可交换,对角矩阵之间却可以?现在有了深层答案——AB = BA(且都可对角化)当且仅当它们能被同一个 P 同时对角化,即共享一整套特征方向。共享轴的两台单轴缩放机,先开谁都一样;轴不共享,一台的拉伸会破坏另一台的特征方向,先后就有了意义。这条定理在量子力学里是「两个可观测量能否同时精确测量」的判据(对易 ⇔ 共享本征态),在工程里是「两个操作能否随意重排」的代数试金石——连编译器的指令重排、分布式系统的操作交换律,精神上都是同一个问题:你们的特征方向,对得上吗?

彩蛋:斐波那契与黄金分割

1, 1, 2, 3, 5, 8, 13…每项是前两项之和。把「相邻两项」打包成向量,递推就是乘矩阵:(Fn+1, Fn) = [1,1;1,0]·(Fn, Fn−1)。求第 n 项 = 求这个矩阵的 n 次幂 = 看它的谱。特征方程 λ² − λ − 1 = 0,解出:

λ₁ = 1+√52 ≈ 1.618 = φ(黄金分割!),  λ₂ ≈ −0.618

|λ₂| < 1,它的成分迅速熄灭,于是 Fn 以黄金比例的 n 次幂增长,相邻两项之比奔向 φ——向日葵种子与鹦鹉螺壳里那个神秘常数,是一只 2×2 矩阵的主特征值。把两个特征成分都写全,还能得到教科书里的比内公式 Fn = (φⁿ − ψⁿ)/√5:一个整数数列,通项由两个无理数的幂相减而成,减号右边那项(|ψ| < 1)小到只负责把结果凑成整数——第一次见到的人都该起一次鸡皮疙瘩。这不只是浪漫:「把递推写成矩阵、用谱看长期行为」是分析一切线性递推系统的万能钥匙,信号滤波器的稳定性、经济模型的增长率、RNN 的记忆衰减,同一把。

把训练看成一次幂过程:2/λ 公式的出生

上一章预告的学习率天花板 η < 2/λmax,现在可以用本章的工具亲手推出来。在极小点附近,损失面近似二次碗,梯度下降的每一步更新可以写成:

ek+1 = (I − ηH)eke = 距离最优点的误差,H = Hessian(对称!)

看清了吗——训练就是反复乘同一个矩阵 (I − ηH),一个如假包换的矩阵幂过程!套本章判官:收敛 ⇔ 谱半径 < 1 ⇔ 对 H 的每个特征值 λ 都有 |1 − ηλ| < 1 ⇔ η < 2/λmax。天花板推完了,顺手再读两条:η 刚好压线时,λmax 方向的误差按 |1 − ηλmax| ≈ 1 震荡不收敛(你见过的「损失上下横跳」);而 λmin 方向的收敛因子 1 − ηλmin 几乎是 1,蠕动如龟(「损失降到一半就平了」)。两种训练日志的经典病容,是同一只矩阵幂的两根特征值在各自表演。学到这里,「调学习率」对你来说已经不是玄学,是给 (I − ηH) 的谱选一套体面的位置。

从每天一步到连续流动:矩阵指数

把「每天乘一次 T」的步长无限细分,离散递推变成微分方程 dx/dt = Ax,解是「连续复利版」的幂——矩阵指数 x(t) = e^{At}x(0)。定义与算法都走对角化(或其数值替身):e^{At} = P·diag(e^{λᵢt})·P⁻¹,判官从「|λ| 与 1 比」换成「实部与 0 比」:Re(λ) < 0 衰减,> 0 爆炸,虚部管转圈频率。热扩散、电路、药物代谢、连续时间的神经网络(Neural ODE)与扩散模型的概率流,全说这门方言。你不需要精通,但要认得出:论文里冒出 e^{At} 或 expm,那是对角化在连续时间里的化身,判官换了刻度,剧本没换。

◆ AI 连接

RNN 的世纪顽疾,病理报告只有一行。循环网络每读一个 token 就把隐状态乘一次同一个 W(加非线性):跑 500 步 ≈ W 的 500 次幂在支配梯度。谱半径 < 1?梯度指数消失,网络记不住 50 步前的主语;> 1?梯度爆炸,训练直接 NaN。卡在 ≈1 的刀锋上?调参地狱。LSTM 的门控是给「λ ≈ 1 的通道」开的手动豁免,正交初始化(第 10 章)是把谱半径钉在 1 的尝试,而 Transformer 干脆掀桌:不再反复乘同一个矩阵,用注意力一步直连任意距离——「梯度高速公路」绕开了矩阵幂的暴政。看懂这段谱分析,你就看懂了架构演化史里最重要的一次转向的数学动机。残差连接同理:x + F(x) 的雅可比是 I + J,把谱推向 1 附近,深层信号得以存活——第 07 章那只 (I + F) 的伏笔在此收线。

▸ Android 类比

游戏循环与物理模拟的稳定性是同一道题:每帧对状态乘一次更新矩阵(位置、速度的线性递推),谱半径略大于 1 的积分器,几百帧后物体就抖成筛子飞出屏幕——这就是朴素欧拉积分「能量越积越多」的谱解释,也是物理引擎偏爱半隐式积分的原因(把谱压回单位圆内)。你在 Choreographer 回调里写的每一个「衰减系数 0.95」,本质都是在手动指定一个特征值,保证动画收敛而不是发散。

⚠ 坑

可对角化 ≠ 数值上该对角化:P 若病态(特征向量几乎共线),PDP⁻¹ 的舍入误差能大到离谱;非对称矩阵的谱分析,数值库内部走 Schur 分解(正交三明治 + 上三角),稳。对称矩阵则放心用 eigh——正交的 P 永不病态,这是谱定理的数值红利。② 「矩阵函数」的正确打开方式:exp(A)、√A 这类写法不是逐元素运算!定义正是走对角化:f(A) = P·diag(f(λᵢ))·P⁻¹。np.exp(A)(逐元素)和 scipy.linalg.expm(A)(矩阵指数)是两个世界,连续时间系统、扩散过程用的是后者,拿错的 bug 相当隐蔽。③ 幂的判官是谱半径,不是范数:元素都很小的矩阵谱半径也可能 ≥ 1,反之亦然(但谱半径 ≤ 任何算子范数,可用范数做快速上界体检)。

最后补一张「判官速查表」,把两章的谱判据钉在一处:离散系统(反复乘)看 |λ| 与 1——谱半径小于 1 收敛;连续系统(微分方程)看 Re(λ) 与 0——实部全负则稳定;优化(梯度下降)看 |1 − ηλ| 与 1——本质还是第一条,乘的是 (I − ηH)。三条刻度,一个哲学:反复施加的世界里,谱就是命运。以后遇到任何「迭代会不会炸」的问题,第一反应都该是:它在反复乘什么矩阵?谱在哪?

✋ 动手自测

① 用上一章算好的 A = [2,1;1,2](λ = 3, 1;方向 (1,1)、(1,−1)),写出 P、D,并口算 A⁵ 作用在 (1,1) 和 (1,−1) 上各是什么;

② 天气模型里今天是雨,十天后晴的概率大约多少?为什么和「今天是晴」的答案几乎一样?

③ 斐波那契矩阵 [1,1;1,0] 的 det = −1,验证 λ₁λ₂ = −1——这和「φ 的倒数 = φ − 1」有什么关系?

④ 一个 RNN 的 W 谱半径 0.92,大约多少步后梯度衰减到 1%?(0.92ᵏ ≈ 0.01,k ≈ 55——量级对就行);

⑤ 为什么残差连接把雅可比从 J 变成 I + J 就能救深层梯度?用「谱被推向哪里」回答;

⑥ Hessian 特征值 λmax=100、λmin=1,学习率上限是多少?压线学习率下,λmin 方向每步只前进 2%,要几步走完 99%?(≈230 步——条件数 100 的峡谷,痛感有了数字)。

小结

对角化 A = PDP⁻¹ 是换到特征基的三明治:翻译、逐轴缩放、翻译回来,任何可对角化矩阵都是穿外套的对角兽,复杂性常常只是坐标系选得差;n 个无关特征向量是入场券,互异特征值或对称性是两张免检通行证,可交换的矩阵共享同一件外套;幂经对角化塌缩成标量运算,长期行为由谱半径独裁——马尔可夫链的天命在 λ=1 的特征向量里,斐波那契的天命是黄金分割,梯度下降是 (I−ηH) 的幂过程、2/λ 天花板由此而生,RNN 的顽疾是矩阵幂的暴政,Transformer 与残差连接是两种越狱;结点、鞍点、螺旋是二维命运的三张脸,矩阵指数把整套剧本搬进连续时间。对称矩阵的世界已经通透;但对角化的门票毕竟挑客:要方、要攒够特征向量。非对称、亏损、甚至根本不方的矩阵呢?下一章是全书数学的最高峰:SVD——任何矩阵,无一例外,都能拆成「旋转 · 缩放 · 旋转」三幕剧,而且你会亲手用它把一张图片压缩二十倍。