特征向量:变换中的不动方向
地球转了一整天,每个城市都在天上画了一个圈——除了南北极点:自转轴上的点,转完还在原方向上。任何变换都有自己的「自转轴」候选:那些只被缩放、不被扭转的方向。它们叫特征向量,缩放的倍数叫特征值。这对概念大概是线性代数里名声最大、挂科率也最高的——因为教材直接甩公式 det(A−λI)=0,却不告诉你这是在找什么。这一章反过来:先在 Demo 里亲手逮住一个特征方向,再谈怎么算;最后你会看到,从 Google 的发家算法到你调不好的学习率,都攥在这几个特殊方向手里。
定义:只许缩放,不许拐弯
一支非零向量 v 是矩阵 A 的特征向量(eigenvector),如果 A 作用在它身上的效果仅仅是缩放:
为什么要费劲找这些方向?因为它们是把复杂变换解耦的钥匙。一般方向上,A 的作用是「旋转 + 缩放」搅在一起,难以单独分析;而在特征方向上,A 退化成一个乘法系数——把任何输入按特征方向拆开(换基!),矩阵这台纠缠的机器就散成 n 台互不干扰的单轴缩放机,每台只有一个旋钮 λ。「把耦合系统拆成独立模式」,是工程数学的第一杀招:电路、振动、马尔可夫链、优化收敛,分析套路全是「先找特征方向,再逐轴处理」。
几何读法:变换后的 Av 和原来的 v 躺在同一条直线上。λ = 2 是拉长一倍,λ = 0.5 是压短一半,λ = −1 是调头(还在同一条线上!),λ = 0 是压死(这个方向就是零空间——第 12 章的老朋友以新身份返场)。「eigen」是德语「自己的、固有的」:特征方向是变换与生俱来的骨骼朝向,不随坐标系(第 13 章:特征值是换基不变量)。
先去逮一个。下面的探测器里,拖着橙红的 v 绕原点慢慢转一圈,紫色的 Av 会跟着摆动;当两支箭躺上同一条线的瞬间,画布点亮——恭喜,抓到一个特征方向:
实验清单,四个预设各转一圈:① 对称:能逮到两个方向,而且它们互相垂直——记住这个观感,一会儿有大定理;② 剪切:只逮得到一个方向(x 轴,λ=1),其他方向都被推歪——特征向量可以「不够用」;③ 旋转:一个也逮不到!旋转把所有方向都拐了弯,实平面里没有不动方向(它的特征值是复数,躲进了复平面);④ 一般:两个方向,但不垂直。开「显示特征方向」校验你的手感,读数里的 λ 就是紫箭与橙箭的长度比(带符号)。再做一个细节实验:在对称预设下把 v 转到两个特征方向之间,观察 Av 总是被「拽向」λ 大的那个方向——这就是「赢家通吃」的单帧预览:大 λ 方向对任何输入都有更强的话语权。
怎么求:一个方程,两步拆
手算路线一遍就够(理解 > 熟练)。把定义移项:Av − λv = 0,即 (A − λI)v = 0(那个 I 是为了让「矩阵减数字」合法——λI 才是能和 A 相减的对象,漏写 I 是手算第一坑)。现在我们在找矩阵 (A − λI) 的零空间里的非零居民。第 12 章说过,零空间有非零居民 ⇔ 矩阵降秩 ⇔ 行列式为零:
二维展开是一元二次方程 λ² − (a+d)λ + (ad−bc) = 0,两个系数都是熟人:一次项是迹(trace,对角线之和),常数项是 det。解出 λ 后代回 (A − λI)v = 0 找 v。顺手白捡两条恒等式,验算与读论文都常用:迹 = 特征值之和,det = 特征值之积(后者第 08 章预支过:各方向缩放倍数的乘积 = 体积倍数)。
完整走一遍二维的账,以后读到「解特征值」就不虚。取 A = [2, 1; 1, 2](对称,好性格):迹 = 4,det = 3,特征方程 λ² − 4λ + 3 = 0,解得 λ₁ = 3、λ₂ = 1。代回找方向:λ = 3 时,(A − 3I)v = 0 即 [−1, 1; 1, −1]v = 0,解出 v₁ ∝ (1, 1);λ = 1 时同法解出 v₂ ∝ (1, −1)。检验读性格:沿 45° 方向放大 3 倍,沿 −45° 方向原样保留,两方向恰好垂直(谱定理开始营业)。验算恒等式:λ₁ + λ₂ = 4 = 迹 ✓,λ₁λ₂ = 3 = det ✓。这一套流程,就是「拆开一个对称矩阵的全部内脏」。
但请把手算封存在二维:高维的特征多项式没有求根公式(五次以上是数学定理级的没有),数值库走完全不同的路——QR 迭代等算法,几十次正交变换把矩阵「磨」成上三角,特征值浮现在对角线上。np.linalg.eig 一行调用,你只需要会读结果。
特征值的正负与大小,是变换在该方向上的「性格档案」:|λ| > 1 扩张,|λ| < 1 收缩,λ < 0 附带调头,λ = 1 完全冻结(剪切的 x 轴),λ = 0 彻底压死。一个矩阵反复施加时,|λ| 最大的方向终将统治一切——所有初始向量都会被拖向它(其他成分相对衰减)。这个「赢家通吃」下一章是主角,这里先给名字:主特征方向。
谱定理:对称矩阵的贵族待遇
Demo 实验①的「垂直」不是巧合。第 10 章立档的对称矩阵(Sᵀ = S),享受全线性代数最漂亮的定理——谱定理:对称矩阵的特征值全是实数,且可以选出一整套互相垂直的特征向量,拼成标准正交基。翻译成变换语言:对称矩阵 = 在某组互相垂直的方向上做纯缩放,没有旋转、没有剪切、没有复数的幺蛾子——把坐标系转到那组方向上(正交换基,第 13 章),它就是一只对角兽。
谱定理还有一幅可以画在纸上的肖像。对称矩阵的二次型 xᵀSx(第 10 章正定兽的体检式)的等高线是一族同心椭圆,而椭圆的长短轴,恰好指向 S 的特征方向;轴长比,由特征值之比决定。损失函数的等高线为什么是歪的椭圆?因为 Hessian 的特征方向不对齐坐标轴。峡谷形损失面(等高线细长)= 特征值悬殊 = 条件数大——三种说法,同一张图。下一章 PCA 的数据椭圆、第 17 章「圆变椭圆」的 SVD 全景,都是这幅肖像的续集。
为什么 AI 从业者要在乎?因为你天天遇到的矩阵一半是对称的:协方差矩阵(XᵀX 型,天生对称)、核矩阵、Hessian(损失面的曲率矩阵)、无向图的邻接矩阵。谱定理保证它们「可以被彻底看穿」:找到那组垂直方向,一切行为分解成各方向上的独立缩放。下一章 PCA 的合法性、优化理论的整套分析,全部站在谱定理上。「谱」(spectrum)这个词也值得记:一个矩阵的特征值全家福就叫它的谱——读文献时「谱分析」「谱范数」「谱归一化」都指向这里。
它为什么无处不在:共振的血统
特征向量不是线性代数的内部玩具,它是物理世界的「固有模式」语言。敲一只玻璃杯,它以固定的几个频率嗡鸣——那些频率是振动方程矩阵的特征值,对应的振动形状(哪里鼓、哪里静)是特征向量;士兵过桥不许齐步走,因为踏步频率若撞上桥的某个特征值,那个模式的振幅被持续泵大——共振塌桥。转陀螺、卫星姿态里的「主轴」,是惯性张量(对称矩阵!)的特征方向:绕主轴转最安稳,绕别的轴转会晃。凡是「系统有自己偏好的模式」的现象,背后都是一次特征分解。AI 里的版本咱们马上看:数据有偏好的方向(PCA)、网络有偏好的放大路径(谱范数)、随机游走有偏好的驻留分布(PageRank)——同一个数学器官,长在不同的身体上。
这个血统还解释了「特征值」在中文里的另一个译名困惑:eigenvalue 旧译「本征值」,物理系至今沿用——「本征」二字其实更传神:它是系统本来就有的属性,观测者只是发现,不是发明。量子力学里可观测量的取值就是算符的本征值(能级!),「测量塌缩到本征态」是这个词最深的一次出场。你不需要懂量子力学,但下次看到「本征」不再陌生。
听矩阵唱歌:谱聚类一瞥
再给一个「看似与缩放毫无关系」的应用,展示谱的穿透力。一张社交网络图,想自动把它切成两个联系紧密的社区。写出图的拉普拉斯矩阵(度数对角阵减邻接矩阵,对称!),取它第二小特征值对应的特征向量——把每个节点按这支向量里自己那个分量的正负分成两组,切出来的恰好接近「割断边数最少」的最优二分。这套魔法叫谱聚类,推导超出本书,但它传递的信息很清楚:特征向量装着矩阵的全局结构信息,连「社区在哪」这种离散问题都被它编码在连续的分量符号里。推荐系统的隐向量、图神经网络的谱卷积,都是这条思路的后代。它也回应了第 13 章的元定律:节点编号(坐标)是任意的,把图的节点重新编号,拉普拉斯矩阵的数字全变,但谱不变、切分不变——谱是图的坐标无关指纹,所以「谱方法」在图问题里天然站得稳。
三个岗位,一个比一个贴身。① PageRank:把网页跳转写成转移矩阵(第 10 章),网页的重要性排名 = 它的主特征向量(λ=1 对应的那支)——Google 的第一桶金是一道特征向量题。② 幂法(power iteration):求主特征向量的算法朴素到可爱——随便起一支向量,反复「乘 A、归一化」,十几轮后它自动转向主特征方向(赢家通吃的直接应用)。深度学习里做谱归一化(约束每层的放大倍数,稳住 GAN 训练)时,内部跑的就是一两步幂法。③ 学习率的天花板:用梯度下降优化二次损失(局部近似下一切损失都是二次),收敛要求学习率 η < 2/λmax(Hessian 最大特征值),而收敛速度由 λmax/λmin(条件数!)决定——损失面像细长峡谷(条件数大)时,大步在陡壁上震荡、小步在谷底蠕动,怎么调都难受。你调学习率的每一次痛苦,都是特征值在背后拿捏。Adam 类优化器的动机之一,就是给每个方向自适应不同的步长——相当于按特征值各自开药。
逮不到 ≠ 没有:复数特征值的用处
旋转矩阵在实平面里一个方向也逮不到,但它的特征值没有失踪——转 θ 角的矩阵,特征值是 cos θ ± i·sin θ,一对模长为 1 的复数,乖乖躺在复平面的单位圆上。复数在这里不是麻烦,是旋转的原生记法:模长管缩放,辐角管旋转,「乘一个复数」天然等于「转一下再缩一下」。所以看到复特征值,读法固定:实部与虚部合谋出一个旋转角,模长决定螺旋是收敛(|λ|<1,螺旋落回原点)还是发散(|λ|>1,螺旋甩出去)——弹簧动画的欠阻尼、循环网络的梯度旋转衰减,全用这套读法。甚至 Transformer 的 RoPE 位置编码(第 10 章的旋转小轮子),等价形式就是把 embedding 两两配对当复数、按位置乘上单位复数——「位置」被编码成了一族复特征值的辐角。逮不到实方向的变换,在复数的世界里照样被看得一清二楚。
写成代码:eig、eigh 与五行幂法
import numpy as np A = np.array([[2.0, 1.0], [1.0, 2.0]]) vals, vecs = np.linalg.eigh(A) # 对称专用:实数、升序、更稳 vals # [1., 3.] vecs[:, 1] # [0.707, 0.707] —— λ=3 的方向,列! # 五行幂法:反复乘 + 归一化 → 主特征方向 v = np.random.randn(2) for _ in range(30): v = A @ v v /= np.linalg.norm(v) (v @ A @ v) # ≈ 3.0:瑞利商,顺手读出 λ_max
两个工程细节:特征向量在返回矩阵的列里(vecs[:, i],不是 vecs[i]——一半的新手 bug 出在这);最后一行的 vᵀAv(v 已归一)叫瑞利商,是「读出某方向上缩放倍数」的标准探针,谱归一化、Hessian 分析里都拿它当温度计。
DynamicAnimation/SpringAnimation 的手感,由一对特征值拍板。弹簧-阻尼系统写成矩阵微分方程,系统矩阵的特征值决定运动模式:两个实特征值 = 过阻尼(闷闷地趴回去,不过冲);一对复特征值 = 欠阻尼(弹几下,实部管衰减快慢、虚部管弹跳频率)。你调 dampingRatio 的本质,是在挪这对特征值在复平面上的位置。「旋转矩阵没有实特征向量」在这里有了工程回声:复特征值 = 系统里藏着旋转/振荡——UI 弹跳、电路振荡、心跳节律,同一套谱语言。
① 特征向量不是一支箭,是一条方向:v 是特征向量,2v、−v 也都是(代入定义即验),数值库返回的只是「归一化后的代表」,符号甚至可能跨版本翻转——比较两次 eig 的结果时务必先对齐符号,无数复现实验栽在这。② 不是所有矩阵都有「够用」的特征向量:剪切只有一条方向,凑不齐一组基(「亏损矩阵」),下一章的对角化对它无能为力。③ 非对称矩阵的特征值可以是复数(旋转),NumPy 会安静地返回 complex 数组,下游代码若没料到会炸——对称矩阵请改用 np.linalg.eigh,专吃对称、保证实数、还更快更稳。④ 特征值 ≠「重要性」的万能尺:它只对「反复施加」「二次型」这类语境有直接含义,别看见大特征值就喊重要。
① diag(3, 0.5) 的特征向量和特征值是什么?(不用算,读性格);
② 在 Demo 的「剪切」预设下,为什么 x 轴上 λ = 1?剪切矩阵 [1,1;0,1] 的迹和 det 各是多少,与「λ=1 是重根」对得上吗?
③ 镜像矩阵(沿 45° 线翻转)有哪两个特征方向,λ 各是多少?(提示:镜面上的、垂直镜面的);
④ 用「赢家通吃」解释:为什么幂法收敛的速度取决于 |λ₁/λ₂|?
⑤ 训练日志显示损失沿某些参数方向震荡、沿另一些方向纹丝不动——用 Hessian 的谱语言描述这个现象,并说出两种对策;
⑥ 转移矩阵(第 10 章)为什么必有一个特征值恰好等于 1?(提示:概率守恒——全 1 行向量与它的关系)。
小结
特征向量是变换只缩放不扭转的方向,特征值是缩放倍数,λ 的正负零刻画性格,迹与 det 是谱的两条汇总账,复数谱是旋转与振荡的原生记法;特征方向把耦合的变换解耦成 n 台单轴缩放机;求解的理解版是 det(A−λI)=0(在零空间里找非零居民),生产版是 QR 迭代;对称矩阵享受谱定理——实谱 + 正交特征基,等高线椭圆的主轴就是它的特征方向,是「可以被彻底看穿」的变换;PageRank 是主特征向量,幂法是「反复乘」的赢家通吃,谱聚类把社区切分藏进第二特征向量,学习率的天花板与峡谷型损失面的痛苦都由 Hessian 的谱拍板。你已经拿到了变换的「骨骼图」,也第一次体验了「先逮方向、再读倍数」的分析节奏;下一章把它变成手术刀——沿着特征方向换基(第 13 章的三明治终于等到了它的最佳馅料),矩阵将在你面前躺平成对角,而「矩阵的一百次幂」会变成三行小学算术。