1.3 线性代数(下)范数、特征值与SVD的直觉

1.上回书说到

上一篇我们把向量、矩阵、导数、梯度这些最基础的工具过了一遍,你大概也感觉到了,深度学习这套东西说穿了就是把一堆数按某种方式组合起来,再拿梯度去调。这一篇里,我会把线性代数剩下的几个重要工具补齐,包括范数、特征值、特征向量、奇异值分解还有矩阵的秩。这几个名字听着吓人,其实背后都是特别具体的几何画面。

这篇我会一边带直觉、一边把关键推导走完——尤其是 SVD 那一节,光知道结论不知道怎么来的,到后面用起来心里总没底。这几个工具后面全是要派上用场的,它们在正则化、初始化、主成分分析这些地方会反复出来露脸,你现在把它们认全了,后面看到就不会觉得陌生。

2.范数:给向量量个长短

你还记得吧,向量就是有顺序的一排数。那么问题就来了,一个向量到底有多长?说起来也不复杂,把每个数平方加起来再开根号就好了。这就是最常见的一种量法,我们管它叫L2范数,记作 x2\lVert x\rVert_2。式子长这样:

x2=x12+x22++xn2\lVert x\rVert_2=\sqrt{x_1^2+x_2^2+\cdots+x_n^2}

这里的 x1,x2,,xnx_1,x_2,\cdots,x_n 是向量 xx 各个位置上的数,\sqrt{} 就是开根号。L2范数算出来的就是初中学的勾股定理那种直线距离,几何上特别直白,二维情况下就是从原点到这个点的那根直线的长度。

我们举个数字例子。假设 x=(3,4)x=(3,4),那么 x2=32+42=9+16=25=5\lVert x\rVert_2=\sqrt{3^2+4^2}=\sqrt{9+16}=\sqrt{25}=5。这就是经典的勾股例子,两条直角边分别是3和4,斜边正好是5。

但L2只是最常见的一种量法,并不是唯一的尺子。还有一种叫L1范数,记作 x1\lVert x\rVert_1,它的算法是把每个数的绝对值直接加起来:

x1=x1+x2++xn\lVert x\rVert_1=|x_1|+|x_2|+\cdots+|x_n|

这里的 xi|x_i| 表示 xix_i 的绝对值。还是拿 x=(3,4)x=(3,4) 这个点举例,x1=3+4=3+4=7\lVert x\rVert_1=|3|+|4|=3+4=7。你看,同一个向量,换一把尺子量出来的长度就不一样了。

那么L1在几何上是什么样子呢?它叫曼哈顿距离。你不妨想象一下,站在纽约曼哈顿那种横平竖直的格子街区里,要从原点走到 (3,4)(3,4) 这个点,中间挡着一栋栋楼,没法直接斜穿过去,只能先横着走3格、再竖着走4格,总共走了7格,这就是L1。换句话说,L2是鸟飞过去的直线距离,L1是人沿着街道一步步走的距离。说起来,小明在市中心送外卖也是一样的道理,电动车只能沿着横竖的马路拐来拐去,从一家店到另一家店走的也是这种横竖拐弯的曼哈顿距离,没法笔直地穿过去。

那么在深度学习里这两样到底有什么用呢?最直接的一个用处就是权重衰减,英文叫weight decay,它在训练的时候会给损失函数额外加上一项惩罚,专门管束参数别长太大。写成式子大概是这样:

L=L+βθ22L_{\text{总}}=L+\beta\lVert\theta\rVert_2^2

这里的 LL 是原来的损失,θ\theta 是模型参数,β\beta 是一个手动调的小正数(也就是超参数),叫权重衰减强度,θ22\lVert\theta\rVert_2^2 就是参数向量的L2范数的平方,平方之后那个开根号就省掉了。整项加进去之后,参数要是想变大,就得先付出额外的损失代价,于是训练的时候就倾向于把参数压在一个比较小的范围里,避免它学得太野。

你可能会问,为什么非得压着参数呢?因为参数一旦飘得特别大,模型就特别容易过拟合,把训练集里那些噪声一股脑死记硬背下来,换个测试集表现就掉得很难看。加上L2之后,模型就像被套了个紧箍咒,不能太放飞自我,泛化能力通常就能稳住。这个东西在很多框架里都很常用,你以后写PyTorch代码会经常手动开启它(设置weight_decay大于0),它是防过拟合的一把好手。

至于L1,思路类似,加进去之后它有个特别实在的好处,会把很多参数直接压成0,相当于自动帮你挑特征,没用的特征权重直接清零。这个我们以后讲正则化那篇会专门聊。

3.单位矩阵、转置和矩阵的逆

这三个概念很简单但绕不开,我们快速过一遍。

单位矩阵通常记作 II,它长得就像数字1的矩阵版本,对角线上全是1、其它地方全是0。一个 3×33\times3 的单位矩阵长这样:

I=[100010001]I=\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}

它的性质也跟数字1一样,任何矩阵乘上它都等于自己,写成式子就是 AI=AAI=AIA=AIA=A。深度学习里它经常用来占位或者做初始化。

转置这个操作就是把矩阵的行和列互换一下,原来第 ii 行第 jj 列的那个数,转置之后跑到第 jj 行第 ii 列去。矩阵 AA 的转置记作 AA^\top,右上角那个小T是transpose的缩写。举个 2×32\times3 的例子:

A=[123456],A=[142536]A=\begin{bmatrix}1&2&3\\4&5&6\end{bmatrix},\quad A^\top=\begin{bmatrix}1&4\\2&5\\3&6\end{bmatrix}

转置这个操作后面会经常用到,比如算梯度的时候、算注意力分数的时候,到处都是它的身影。

再说矩阵的逆,记作 A1A^{-1}。它满足 A1A=IA^{-1}A=IAA1=IAA^{-1}=I,也就是说矩阵乘上自己的逆就变回单位矩阵,这跟数字里 3×13=13\times\frac{1}{3}=1 是一个意思。但逆这个东西并不是每个矩阵都有的,得满足一个硬性条件,就是这个矩阵满秩(秩这个概念下面专门讲)。满秩的方阵才有逆,行不满或者列不满的矩阵没逆。

为什么深度学习里要管逆呢?其实大多数情况下你不会真的去算一个矩阵的逆,算起来又慢又容易出数值问题。但是理解逆的存在性对后面理解很多东西都关键,比如说一个线性层的输入维度比输出维度大,那这一层就有可能把不同的输入压成同一个输出,这种操作是不可逆的,信息就这么被丢掉了,跟把一篇长文压缩成一句话一样回不去了。

4.特征值和特征向量:只被拉伸的方向

这一节我们来聊一个特别有画面感的东西。

前面说过,矩阵乘向量这个操作本质上是把一个向量扭成另一个向量。一般来说,向量被矩阵作用完之后方向会变、长度也会变。但是有那么一些特别的方向,矩阵作用上去之后只是被拉长或者压短了,方向(连同它的反向)保持不变。这种特别的方向就叫特征向量,对应的那一个拉伸倍数叫特征值,通常记作 λ\lambda

写成式子就是:

Av=λvAv=\lambda v

这里的 AA 是一个方阵,vv 是它的特征向量,λ\lambda 是特征值。意思就是矩阵 AA 作用在 vv 上,效果跟直接把 vv 乘上一个数 λ\lambda 完全一样。

我们拿一个简单的 2×22\times2 例子来说。考虑这样一个对角矩阵:

A=[2003]A=\begin{bmatrix}2&0\\0&3\end{bmatrix}

向量 v1=(1,0)v_1=(1,0) 被它作用之后变成 (2,0)(2,0),方向没变,长度从1变成了2,所以 v1v_1 是特征向量,对应特征值 λ1=2\lambda_1=2。同理向量 v2=(0,1)v_2=(0,1) 变成 (0,3)(0,3),方向也没变,对应特征值 λ2=3\lambda_2=3。这个例子因为是对角矩阵,所以特别直观,普通矩阵的特征向量方向可能斜着,但思路是一模一样的,矩阵只在那几个特别的方向上做纯粹的拉伸。

那么这个概念为什么重要呢?我给你两个特别实在的理由。

第一个理由是PCA,也就是主成分分析。你手头有一大堆高维数据,比如每张人脸图片拍扁了是几千个数,你想找几个最重要的方向,把数据投影到这几个方向上,做到降维。我记得看过一本讲金融数据分析的书,里面说分析一篮子股票的涨跌时,真正驱动市场的方向往往就那么几个(比如宏观经济、利率、行业景气),PCA帮你把这些主方向找出来,剩下的细枝末节就可以丢掉。回到人脸图片的例子,这些最重要的方向恰恰就是数据协方差矩阵的特征向量,对应的特征值越大,说明这个方向上数据散得越开、信息越丰富。所以挑特征值最大的几个方向留下,就能用很少的维度抓住数据的大头,剩下的维度尽管扔掉。这招在数据可视化、特征工程里都用了很多年,口碑很好。

第二个理由是理解一个线性层到底在怎么扭数据。一个矩阵的特征值如果都比较大,说明它在这个空间里把向量整体拉得很猛。反过来,如果有些特征值接近0,说明它把某些方向几乎压没了,那些方向上的信息就丢了。深度学习里训练深层网络的时候,如果每一层都把向量往大里拉,最后激活值就会膨胀失控。反过来,如果每一层都往小里压,最后信号就消失没了,网络也就学不进去。理解特征值,你就能从方向和幅度两个角度去想象一个线性层干了什么事。

5.奇异值分解:把任意矩阵拆成三步

特征值有个让人为难的限制,它只对方阵好使。可深度学习里的矩阵大多不是方阵,比如一层全连接层,输入维度是784(一张28乘28的图片拍扁),输出维度是10(10个类别的分数),这就是个 10×78410\times784 的矩阵,行和列并不相等。这种一般形状的矩阵想要类似的分解,就得靠奇异值分解,简称SVD。

5.1 是什么:三个矩阵的连乘

SVD说的是这么一回事:任意一个矩阵 AA(行数 mm、列数 nn 不限),都能被拆成三个矩阵连乘的形式:

A=UΣVA=U\Sigma V^\top

挨个交代清楚每一项的形状,免得新手对不上号。AAm×nm\times n 的;UUm×mm\times m 的方阵;Σ\SigmaAA 一样是 m×nm\times n 的,但它只在左上角的对角线上有非负的数,其余位置全是 00VVn×nn\times n 的方阵,VV^\top 是它的转置。

两个关键性质。第一,UUVV 都是正交矩阵(orthogonal matrix),意思是它们的列向量彼此两两垂直、长度都是1,满足 UU=IU^\top U=IVV=IV^\top V=III 是单位阵)。几何上,正交矩阵对向量只做旋转(或翻转),不改长度。第二,Σ\Sigma 对角线上那些从大到小排好的非负数 σ1σ20\sigma_1\geq\sigma_2\geq\cdots\geq 0,叫奇异值(singular value),它们就是这次分解的主角。

5.2 为什么:先把几何直觉说清

这个分解的几何画面特别漂亮。矩阵 AA 作用在向量上,本来是一团说不清楚的扭曲操作,SVD告诉你这团操作可以拆成三步:先让 VV^\top 把向量旋转一下(正交矩阵只旋转、不改长度),然后让 Σ\Sigma 把向量沿坐标轴方向拉伸或者压扁(这里奇异值就是各个方向上的拉伸倍数),最后让 UU 再旋转一下。所以任意矩阵对向量的作用,本质上就是旋转、缩放、再旋转这三步,就这么简单。

这个"三步走"的直觉先记牢,但光有直觉不够——新手最容易被卡住的是"SVD 这三个矩阵到底怎么算出来、凭什么一定存在"。下面我把推导从头走一遍,你看完会发现它不是黑魔法,而是特征值分解的直接推广。

5.3 怎么推:从 AAA^\top A 入手

SVD 的推导,核心思路是借力"方阵的特征值分解",把它用在 AAA^\top A 这种方阵上。设 AAm×nm\times n 的矩阵,那么 AAA^\top An×nn\times n 的方阵。我们来观察它有什么好性质。

先看它是不是对称的。(AA)=A(A)=AA(A^\top A)^\top=A^\top(A^\top)^\top=A^\top A,对称。再看它是不是半正定的:对任意向量 xxxAAx=(Ax)(Ax)=Ax220x^\top A^\top A x=(Ax)^\top(Ax)=\lVert Ax\rVert_2^2\geq 0。所以 AAA^\top A 是一个对称半正定矩阵。

对称半正定矩阵有个现成的结论(这条结论本身是线性代数的基本定理,这里拿来用):它能被特征值分解成 AA=VΛVA^\top A=V\Lambda V^\top,其中 VV 的列是彼此正交的单位特征向量,Λ\Lambda 是对角阵,对角线上的特征值全都是非负实数。我们把这些特征值记作 λi0\lambda_i\geq 0,把对应的特征向量记作 viv_i,于是:

AA=VΛV,AAvi=λiviA^\top A=V\Lambda V^\top,\qquad A^\top A\,v_i=\lambda_i v_i

现在定义奇异值 σi=λi\sigma_i=\sqrt{\lambda_i}(取正根),把 Λ=ΣΣ\Lambda=\Sigma^\top\Sigma(因为 Σ\Sigma 对角线就是 σi\sigma_i,而 ΣΣ\Sigma^\top\Sigma 的对角线就是 σi2=λi\sigma_i^2=\lambda_i)。于是关键的一步来了:

AA=VΛV=VΣΣVA^\top A=V\Lambda V^\top=V\Sigma^\top\Sigma V^\top

这一步把"VV 就是 SVD 里的 VV"钉死了——SVD 中的右奇异矩阵 VV,就是 AAA^\top A 的特征向量排成的矩阵;奇异值 σi\sigma_i 就是 AAA^\top A 特征值的平方根。

5.4 构造 UU,凑出 A=UΣVA=U\Sigma V^\top

VVΣ\Sigma 有了,剩下的 UU 怎么定?思路是"造"一组向量,让它们正好充当 UU 的列。对每一个 σi>0\sigma_i>0 的方向,定义:

ui=Aviσiu_i=\frac{A v_i}{\sigma_i}

为什么这么定义?因为这样 Avi=σiuiA v_i=\sigma_i u_i,正好把"AAviv_i 方向上的作用"翻译成"σi\sigma_i 倍的 uiu_i"。我们来验证这些 uiu_i 是单位正交的,从而能当 UU 的列。先算长度:

ui22=uiui=viAAviσi2=vi(λivi)σi2=λiσi2=1\lVert u_i\rVert_2^2=u_i^\top u_i=\frac{v_i^\top A^\top A v_i}{\sigma_i^2}=\frac{v_i^\top(\lambda_i v_i)}{\sigma_i^2}=\frac{\lambda_i}{\sigma_i^2}=1

(最后一步用了 σi2=λi\sigma_i^2=\lambda_i。)所以每个 uiu_i 都是单位向量。再验证两个不同的 ui,uju_i,u_jiji\neq j)彼此正交:

uiuj=viAAvjσiσj=vi(λjvj)σiσj=λjvivjσiσj=0u_i^\top u_j=\frac{v_i^\top A^\top A v_j}{\sigma_i\sigma_j}=\frac{v_i^\top(\lambda_j v_j)}{\sigma_i\sigma_j}=\frac{\lambda_j\,v_i^\top v_j}{\sigma_i\sigma_j}=0

(最后一步用了特征向量彼此正交 vivj=0v_i^\top v_j=0。)所以 {ui}\{u_i\} 这组向量单位正交,可以充当正交矩阵 UU 的列。

最后把分解拼出来。我们已知两件事:Avi=σiuiA v_i=\sigma_i u_i(对 σi>0\sigma_i>0 的方向),以及 viv_iVV 的列。把所有方向摞在一起写成矩阵形式:

AV=UΣAV=U\Sigma

两边右乘 VV^\top,注意 VV=IV V^\top=I(正交矩阵),就得到:

A=UΣVA=U\Sigma V^\top

这就是 SVD。至此我们不光说清了"是什么",还把"U,Σ,VU,\Sigma,V 各自从哪来"都推出来了——VV 来自 AAA^\top A 的特征向量,Σ\Sigma 来自对应特征值的平方根,UUui=Avi/σiu_i=Av_i/\sigma_i 造出来。(严格说当 AA 的秩不满时,σi=0\sigma_i=0 的方向上 uiu_i 没法定义,这时需要用 AAAA^\top 的特征向量补齐 UU 剩余的列,思路完全对称。)

5.5 一个 2×3 的手算例子

光看推导还是虚,我们拿一个最小例子手算一遍,你就彻底踏实了。设:

A=[322232]A=\begin{bmatrix}3&2&2\\2&3&-2\end{bmatrix}

第一步算 AAA^\top A

AA=[322322][322232]=[1312212132228]A^\top A=\begin{bmatrix}3&2\\2&3\\2&-2\end{bmatrix}\begin{bmatrix}3&2&2\\2&3&-2\end{bmatrix}=\begin{bmatrix}13&12&2\\12&13&-2\\2&-2&8\end{bmatrix}

第二步求它的特征值和特征向量。解特征方程 det(AAλI)=0\det(A^\top A-\lambda I)=0,算出来 λ1=25,λ2=9,λ3=0\lambda_1=25,\lambda_2=9,\lambda_3=0。于是奇异值 σ1=25=5\sigma_1=\sqrt{25}=5σ2=9=3\sigma_2=\sqrt{9}=3σ3=0=0\sigma_3=\sqrt{0}=0

对应的单位特征向量(解 (AAλiI)vi=0(A^\top A-\lambda_i I)v_i=0 再归一化)取:

v1=12[110],v2=12[110],v3=[001]v_1=\frac{1}{\sqrt 2}\begin{bmatrix}1\\1\\0\end{bmatrix},\quad v_2=\frac{1}{\sqrt 2}\begin{bmatrix}1\\-1\\0\end{bmatrix},\quad v_3=\begin{bmatrix}0\\0\\1\end{bmatrix}

所以 V=[v1v2v3]V=\begin{bmatrix}v_1&v_2&v_3\end{bmatrix}

第三步造 UU。对 σ1,σ2>0\sigma_1,\sigma_2>0 的方向:u1=Av1/σ1=152[55]=12[11]u_1=Av_1/\sigma_1=\frac{1}{5\sqrt2}\begin{bmatrix}5\\5\end{bmatrix}=\frac{1}{\sqrt2}\begin{bmatrix}1\\1\end{bmatrix}u2=Av2/σ2=132[11]3u_2=Av_2/\sigma_2=\frac{1}{3\sqrt2}\begin{bmatrix}1\\-1\end{bmatrix}\cdot 3……仔细算 Av2=12[3223]=12[11]Av_2=\frac{1}{\sqrt2}\begin{bmatrix}3-2\\2-3\end{bmatrix}=\frac{1}{\sqrt2}\begin{bmatrix}1\\-1\end{bmatrix},所以 u2=1312[11]3=12[11]u_2=\frac{1}{3}\cdot\frac{1}{\sqrt2}\begin{bmatrix}1\\-1\end{bmatrix}\cdot 3=\frac{1}{\sqrt2}\begin{bmatrix}1\\-1\end{bmatrix}。于是 U=[u1u2]=12[1111]U=\begin{bmatrix}u_1&u_2\end{bmatrix}=\frac{1}{\sqrt2}\begin{bmatrix}1&1\\1&-1\end{bmatrix}

把三块拼起来,你可以自己验证 UΣVU\Sigma V^\top 确实还原回 AAΣ\Sigma2×32\times3 的,对角线 5,35,3,其余 00)。这个例子里秩是2(第三个奇异值为0),第三列 v3v_3 对应的方向被 AA 完全压没了,正好呼应下一节要讲的"秩"。

5.6 Eckart–Young 定理:为什么截断小奇异值是最优的

前面说"扔掉小奇异值就能压缩",这话其实有个严格的数学保证,叫 Eckart–Young 定理。它说的是:在所有秩不超过 kk 的矩阵 BB 里,把 SVD 截断到前 kk 个奇异值得到的 Ak=UkΣkVkA_k=U_k\Sigma_k V_k^\top,是离 AA 最近的那个,用的是 Frobenius 范数(矩阵所有元素平方和开根号)来量距离:

AAkF=σk+12+σk+22+\lVert A-A_k\rVert_F=\sqrt{\sigma_{k+1}^2+\sigma_{k+2}^2+\cdots}

也就是说,扔掉 σk+1\sigma_{k+1} 之后那些小奇异值,带来的误差恰好就是这些奇异值的平方和再开根号。因为奇异值是从大到小排的,所以扔掉的都是最小的那几个,误差被压到理论最小。这就给"用 SVD 做低秩近似"提供了一个数学上无可挑剔的理由——它不是经验上好用,而是理论上最优。

5.7 几个应用

数据压缩是SVD最经典的应用。你把 Σ\Sigma 里最大的几个奇异值留下来,其余的小奇异值统统扔掉,矩阵 AA 就能被一个低秩的近似给替代,存储量小很多,但还原回来的内容看上去跟原来差不多。这就是为什么图片能被压缩得那么厉害还能看清——背后就是 Eckart–Young 定理保证的"扔掉小奇异值误差最小"。说起来,推荐系统里也常用这一招,把用户和物品之间那张巨大的评分矩阵做SVD,只用几十个主要维度就能还原出大部分偏好,工程上又快又省。

PCA也能用SVD来做,事实上工程上算PCA基本就是上SVD,因为SVD更稳、更快,还顺便把主成分给你算好了——这一点我们到 2.6 节讲 PCA 时会展开说,到时你会发现 PCA 的主成分就是数据矩阵 SVD 里的 VV

至于深度学习里的正交初始化,思路就是让权重矩阵一开始接近一个正交矩阵,这样前向传播的时候信号既不会爆炸也不会消失(毕竟正交矩阵只旋转、不改长度),梯度反向传播的时候也稳。这种初始化在训练很深的网络时特别有用,效果很稳健。

6.矩阵的秩:到底有多少有效方向

最后我们聊聊秩,英文叫rank。

秩衡量的是一个矩阵里头到底有多少独立的、互不重复的信息方向。说白了,就是矩阵的列向量(或者行向量)张成的空间有多少维。

举个直观例子。矩阵

A=[1224]A=\begin{bmatrix}1&2\\2&4\end{bmatrix}

它的第二列是第一列的2倍,第二行也是第一行的2倍,两列里其实只有一列是独立的信息,另一列是重复的,所以这个矩阵的秩就是1。再看单位矩阵

B=[1001]B=\begin{bmatrix}1&0\\0&1\end{bmatrix}

它的两列互相独立,秩是2,满秩。

那么秩这个东西在深度学习里有什么用呢?我把它联系到一层的表达力。一个全连接层的权重矩阵,秩越高,它能表达的方向就越丰富、能识别的模式就越多。秩一旦很低,意味着这个矩阵把很多方向都压扁了,能表达的模式就很有限,就像一个只会做一种题型的学生,换套卷子就答不上来了。所以工程上人们有时候会特意给低秩矩阵做补救,比如用残差连接让信号能绕过低秩的那一层,免得表达力被卡死。

低秩矩阵也有它的好处,参数少、算得快。所以现在很多大模型会用低秩微调(也就是LoRA那一套),把一个大的权重更新拆成两个小矩阵的乘积,参数量和计算量都降一大截,省下来的资源相当可观。

回到前面讲的逆,方阵满秩才有逆,这回你应该能从直觉上理解了。满秩意味着这个矩阵没有把任何方向压没,所以操作可逆。秩不满说明有方向被压没了,自然就不可逆,信息丢了就找不回来。

7.收个尾

这一篇我们把范数、单位矩阵、转置、逆、特征值、特征向量、SVD和秩都过完了。你可以这么记:范数管大小,特征值找方向,SVD把任意矩阵拆成三步,秩衡量信息含量。这几个工具在后面的优化、正则化、初始化、降维里会反复出现,到时候你回头再看这篇就不会觉得陌生。

下一篇我们换个口味,去聊概率论和信息论,那里头会有随机变量、期望、方差、高斯分布、KL散度这些概念,它们是理解分类损失和生成模型的关键。

练习

Q1. L1 范数和 L2 范数在深度学习里分别用来干啥?谁能在训练时顺手做特征选择?

L2 范数常用于权重衰减(weight decay),把损失加上一项 βθ22\beta\lVert\theta\rVert_2^2,压着参数别长太大、防过拟合,但它只会把权重整体按比例一起压小,压不到精确的零。L1 范数加进损失后会把很多权重直接压成零,没用的特征权重被清零,相当于自动挑特征,所以做特征选择靠 L1。

Q2. 向量 x=(3,4)x=(3,4),分别算它的 L2 范数和 L1 范数。几何上它俩分别对应哪种"距离"?

L2 范数 x2=32+42=25=5\lVert x\rVert_2=\sqrt{3^2+4^2}=\sqrt{25}=5,就是勾股定理那种直线距离(鸟飞过去的距离)。L1 范数 x1=3+4=7\lVert x\rVert_1=|3|+|4|=7,对应曼哈顿距离,也就是沿横竖街道一步步走的距离。同一个向量,换把尺子量出来的长短就不一样。

Q3. 特征值分解 Av=λvAv=\lambda v 只对什么矩阵好使?SVD 凭啥在深度学习里更吃香?

特征值分解只对方阵好使。可深度学习里大多数矩阵不是方阵(比如一层全连接层是 10×78410\times784),想给这种一般形状的矩阵做类似分解就得靠 SVD:任意矩阵 AA 都能拆成 A=UΣVA=U\Sigma V^\top,几何上对应"旋转、缩放、再旋转"三步,缩放倍数就是奇异值。

Q4.(面试题) 完整说明 SVD 里的右奇异矩阵 VV 为什么就是 AAA^\top A 的特征向量矩阵,奇异值 σi\sigma_iAAA^\top A 的特征值 λi\lambda_i 是什么关系。

先看 AAA^\top A:它是 n×nn\times n 的方阵,且 (AA)=AA(A^\top A)^\top=A^\top A 对称,对任意向量 xxxAAx=(Ax)(Ax)=Ax220x^\top A^\top A x=(Ax)^\top(Ax)=\lVert Ax\rVert_2^2\geq0,所以它是对称半正定矩阵,能特征值分解成 AA=VΛVA^\top A=V\Lambda V^\top,特征值 λi0\lambda_i\geq0。定义奇异值 σi=λi\sigma_i=\sqrt{\lambda_i},于是 AA=VΣΣVA^\top A=V\Sigma^\top\Sigma V^\top,这就把 VV 钉死了:SVD 的右奇异矩阵 VV 就是 AAA^\top A 的特征向量排成的矩阵,奇异值 σi\sigma_i 就是 AAA^\top A 特征值的平方根σi=λi\sigma_i=\sqrt{\lambda_i})。再用 ui=Avi/σiu_i=Av_i/\sigma_iUU 造出来,两边右乘 VV^\top(注意 VV=IVV^\top=I)就拼出 A=UΣVA=U\Sigma V^\top

相关标签
深度学习数学线性代数