上一篇 把降维看成选择少数方向:同样压到一维,沿点云延伸的方向投影,往往比直接保留一个原始特征损失更少。但数据矩阵为什么能呈现出这些方向?要回答这个问题,先得看懂矩阵怎样作用于向量,以及哪些方向在变换后仍然有规律可循。
我们沿一条线走:从矩阵改变空间的方式出发,认识正交的坐标系,再找出变换中特别稳定的方向。最后把这些想法用到长方形的数据矩阵上。
矩阵如何改变向量# 输入与输出的维数# 矩阵不仅是一张数字表,也是一条把输入向量变成输出向量的规则。设 A ∈ R m × n A\in\mathbb{R}^{m\times n} A ∈ R m × n ,输入 x ∈ R n x\in\mathbb{R}^n x ∈ R n ,则
y = A x ∈ R m . y=Ax\in\mathbb{R}^m. y = A x ∈ R m . n n n 是输入维数,m m m 是输出维数,两者不必相等。把 A A A 按列写作 A = [ a 1 , … , a n ] A=[a_1,\ldots,a_n] A = [ a 1 , … , a n ] ,矩阵乘法就是 A x = x 1 a 1 + ⋯ + x n a n Ax=x_1a_1+\cdots+x_na_n A x = x 1 a 1 + ⋯ + x n a n 。所以矩阵的第 i i i 列 a i a_i a i ,恰好是第 i i i 个原始坐标轴的单位向量 e i e_i e i 经变换后的结果 A e i Ae_i A e i 。知道坐标轴被送往哪里,就知道空间里任何向量会被送往哪里。
例如 C = [ 1 0 0 1 1 1 ] C=\begin{bmatrix}1&0\\0&1\\1&1\end{bmatrix} C = 1 0 1 0 1 1 把二维向量 [ x 1 x 2 ] \begin{bmatrix}x_1\\x_2\end{bmatrix} [ x 1 x 2 ] 送到三维向量 [ x 1 x 2 x 1 + x 2 ] \begin{bmatrix}x_1\\x_2\\x_1+x_2\end{bmatrix} x 1 x 2 x 1 + x 2 。输出多出一个坐标,却没有多出一个独立的输入自由度:第三个坐标由前两个决定。这和上一篇的特征冗余是同一件事,只是现在从变换 而非数据表的角度观察。
乘法与转置# 矩阵连乘时,先作用的是右边的矩阵。若 B ∈ R n × p B\in\mathbb{R}^{n\times p} B ∈ R n × p ,那么 A B ∈ R m × p AB\in\mathbb{R}^{m\times p} A B ∈ R m × p ,表示先用 B B B 把 p p p 维输入送到 n n n 维,再用 A A A 送到 m m m 维。矩阵顺序通常不能交换;只需按维度检查一遍,就能避开不少公式里的错误。
转置 A ⊤ A^\top A ⊤ 则把行与列交换,形状从 m × n m\times n m × n 变为 n × m n\times m n × m 。乘积转置时顺序也要倒过来:
( A B ) ⊤ = B ⊤ A ⊤ . (AB)^\top=B^\top A^\top. ( A B ) ⊤ = B ⊤ A ⊤ . 可以把它记成先作用的矩阵,转置后放在最后。后文我们会用这条规则检查某些方阵的对称性。
行列式与空间大小# 想知道一个二维方阵把平面改变了多少,先别盯着元素计算,不妨看一块单位正方形变换后的面积。这正是行列式回答的问题:从原点出发的两个单位坐标轴围成面积为 1 1 1 的正方形,经过 A A A 后,两条边分别变成 A A A 的两列,围成平行四边形。新面积与原面积之比是 ∣ det A ∣ |\det A| ∣ det A ∣ ,高维时对应体积的缩放倍数。
拿 A = [ 2 1 1 2 ] A=\begin{bmatrix}2&1\\1&2\end{bmatrix} A = [ 2 1 1 2 ] 举例,两条边变成 [ 2 1 ] \begin{bmatrix}2\\1\end{bmatrix} [ 2 1 ] 和 [ 1 2 ] \begin{bmatrix}1\\2\end{bmatrix} [ 1 2 ] ,新面积为 ∣ 2 ⋅ 2 − 1 ⋅ 1 ∣ = 3 |2\cdot2-1\cdot1|=3 ∣2 ⋅ 2 − 1 ⋅ 1∣ = 3 。也就是说,同一块平面区域经它变换后面积扩大为原来的 3 3 3 倍:
图中两条变换后的边独立,才围得出非零面积。如果边被压到同一条直线上,面积就变为 0 0 0 ,也就是 det A = 0 \det A=0 det A = 0 ;这与矩阵的秩小于维数相呼应。行列式的正负还区分方向是否翻转,空间大小看绝对值 。长方形矩阵把空间送往不同维数的空间,没有这里所说的行列式。
正交矩阵与换坐标# 正交矩阵# 上一篇用过两两垂直、长度为 1 1 1 的方向。若一个 n × n n\times n n × n 方阵 Q Q Q 的列恰好组成这样的完整 坐标系,它就是正交矩阵。所有列两两内积为零,各自与自己的内积为一,合写为
Q ⊤ Q = I n . Q^\top Q=I_n. Q ⊤ Q = I n . 由于方阵的 n n n 列已构成完整的基,也有 Q Q ⊤ = I n QQ^\top=I_n Q Q ⊤ = I n ,因此 Q − 1 = Q ⊤ Q^{-1}=Q^\top Q − 1 = Q ⊤ 。I n I_n I n 是 n n n 维单位矩阵。旋转、镜像都可以用正交矩阵表示:它们会改变坐标轴的朝向,但不会把两条互相垂直的轴挤在一起,也不会改变长度。面积或体积同样保持不变,所以 ∣ det Q ∣ = 1 |\det Q|=1 ∣ det Q ∣ = 1 。
完整换基与投影# 若用 Q Q Q 的列作为新坐标轴,向量 x x x 在这组轴下的坐标是 z = Q ⊤ x z=Q^\top x z = Q ⊤ x ,乘回去即可还原:Q z = Q Q ⊤ x = x Qz=QQ^\top x=x Q z = Q Q ⊤ x = x 。这是换一种方式记录同一个向量 ,没有丢掉方向。
上一篇的 W ∈ R d × k W\in\mathbb{R}^{d\times k} W ∈ R d × k 则只有 k < d k<d k < d 列,虽然 W ⊤ W = I k W^\top W=I_k W ⊤ W = I k ,但 W W ⊤ WW^\top W W ⊤ 并非 I d I_d I d 。它把 x x x 投影到选出的 k k k 个方向上,W W ⊤ x WW^\top x W W ⊤ x 可能不等于 x x x 。两者画在一起,区别会更直观:
图中左边的两个正交方向足以还原整个平面中的向量;右边只留下一个方向,另一个方向上的分量就成了残差。正交 保证各坐标互不重复,是否完整 决定能否无损还原。
长度为什么不变# 正交矩阵还有一个直接的好处。向量长度的平方等于它与自己的内积,故换到完整的正交坐标系后
∥ Q ⊤ x ∥ 2 2 = ( Q ⊤ x ) ⊤ ( Q ⊤ x ) = x ⊤ Q Q ⊤ x = x ⊤ x = ∥ x ∥ 2 2 . \|Q^\top x\|_2^2
=(Q^\top x)^\top(Q^\top x)
=x^\top QQ^\top x
=x^\top x
=\|x\|_2^2. ∥ Q ⊤ x ∥ 2 2 = ( Q ⊤ x ) ⊤ ( Q ⊤ x ) = x ⊤ Q Q ⊤ x = x ⊤ x = ∥ x ∥ 2 2 . 同样的计算也说明两个向量的内积不变,因而它们之间的夹角也不变。注意这里依赖的是 Q Q ⊤ = I QQ^\top=I Q Q ⊤ = I ;对只保留部分列的 W W W ,W W ⊤ ≠ I WW^\top\ne I W W ⊤ = I ,不能把这段推导照搬过去。
特征值与特征向量# 不改变方向的向量# 如果逐个追踪向量经过方阵 A A A 后去了哪里,很难看出变换的规律:长度和方向都可能变化。不如先找那些仍落在原来直线上的方向 。有些非零向量 v v v 满足
A v = λ v . Av=\lambda v. A v = λ v . 这样的 v v v 称为特征向量 ,λ \lambda λ 是对应的特征值 。它们描述变换中沿同一条直线运动的特殊方向:λ > 0 \lambda>0 λ > 0 时方向不反转,λ < 0 \lambda<0 λ < 0 时反向,λ = 0 \lambda=0 λ = 0 时被压到原点。这里讨论的两侧向量必须同维,所以这个等式针对方阵。
一个二维例子# 继续看前面面积扩大 3 3 3 倍的矩阵
A = [ 2 1 1 2 ] . A=\begin{bmatrix}2&1\\1&2\end{bmatrix}. A = [ 2 1 1 2 ] . 沿 [ 1 1 ] \begin{bmatrix}1\\1\end{bmatrix} [ 1 1 ] 方向,A [ 1 1 ] = [ 3 3 ] = 3 [ 1 1 ] A\begin{bmatrix}1\\1\end{bmatrix}=\begin{bmatrix}3\\3\end{bmatrix}=3\begin{bmatrix}1\\1\end{bmatrix} A [ 1 1 ] = [ 3 3 ] = 3 [ 1 1 ] ;沿 [ 1 − 1 ] \begin{bmatrix}1\\-1\end{bmatrix} [ 1 − 1 ] 方向,A [ 1 − 1 ] = [ 1 − 1 ] A\begin{bmatrix}1\\-1\end{bmatrix}=\begin{bmatrix}1\\-1\end{bmatrix} A [ 1 − 1 ] = [ 1 − 1 ] 。两条方向互相垂直,分别被放大 3 3 3 倍和保持不变。面积放大的 3 3 3 倍,正好是两个垂直方向上缩放倍数的乘积。
一般方向却未必如此。例如 A [ 1 0 ] = [ 2 1 ] A\begin{bmatrix}1\\0\end{bmatrix}=\begin{bmatrix}2\\1\end{bmatrix} A [ 1 0 ] = [ 2 1 ] ,结果不再沿原来的水平轴。这不是说矩阵只能沿两条方向作用,而是说换成这两条特征方向看,同一个变换会简单得多 。
把变换拆成独立方向# 换到特征方向# 把上面两条方向单位化,得到 q 1 = 1 2 [ 1 1 ] q_1=\frac{1}{\sqrt2}\begin{bmatrix}1\\1\end{bmatrix} q 1 = 2 1 [ 1 1 ] 、q 2 = 1 2 [ 1 − 1 ] q_2=\frac{1}{\sqrt2}\begin{bmatrix}1\\-1\end{bmatrix} q 2 = 2 1 [ 1 − 1 ] 。让它们成为矩阵 Q = [ q 1 , q 2 ] Q=[q_1,q_2] Q = [ q 1 , q 2 ] 的两列,再将两个缩放倍数放进对角矩阵 Λ = diag ( 3 , 1 ) \Lambda=\operatorname{diag}(3,1) Λ = diag ( 3 , 1 ) 。由 A q 1 = 3 q 1 Aq_1=3q_1 A q 1 = 3 q 1 和 A q 2 = q 2 Aq_2=q_2 A q 2 = q 2 ,逐列合并得到
A Q = Q Λ ⟹ Q ⊤ A Q = Λ ⟹ A = Q Λ Q ⊤ . AQ=Q\Lambda
\quad\Longrightarrow\quad
Q^\top A Q=\Lambda
\quad\Longrightarrow\quad
A=Q\Lambda Q^\top. A Q = Q Λ ⟹ Q ⊤ A Q = Λ ⟹ A = Q Λ Q ⊤ . 对角矩阵只有主对角线上的数不为零,作用是分别缩放对应坐标轴。这样,A x = Q Λ ( Q ⊤ x ) Ax=Q\Lambda(Q^\top x) A x = Q Λ ( Q ⊤ x ) 可按从右到左读作三步:先把 x x x 换到特征方向的坐标系,再沿各方向缩放,最后换回原坐标系。图中展示的是同一个变换的三种动作 ,不是三个不同的矩阵问题:
图中四支箭头按相同的单位长度绘制,但使用的不是同一组坐标轴。首尾两格用原坐标 x 1 , x 2 x_1,x_2 x 1 , x 2 ,中间两格用特征方向 q 1 , q 2 q_1,q_2 q 1 , q 2 对应的坐标 z 1 , z 2 z_1,z_2 z 1 , z 2 。因此,x x x 在第一格水平、z z z 在第二格指向斜上方,并不意味着同一个几何向量在原平面里转了 45 ∘ 45^\circ 4 5 ∘ ;它只是换了一组坐标来表示。本例的 Q Q Q 还包含镜像,不能仅凭不同坐标系下箭头的倾角把换基当成一次旋转。
对称矩阵的作用# 上例有个关键条件:A ⊤ = A A^\top=A A ⊤ = A ,它是实对称矩阵 。任意实对称方阵都有一组完整的标准正交特征向量,而且特征值是实数,因此总能按刚才的方式写成 A = Q Λ Q ⊤ A=Q\Lambda Q^\top A = Q Λ Q ⊤ 。我们只需要记住这个结论的作用:它保证能找到一组互相垂直的方向,让变换逐方向地缩放。
为什么不同缩放值对应的方向会垂直?设 A q i = λ i q i Aq_i=\lambda_iq_i A q i = λ i q i 、A q j = λ j q j Aq_j=\lambda_jq_j A q j = λ j q j ,并且 A ⊤ = A A^\top=A A ⊤ = A 。先看 A A A 作用于右边的 q j q_j q j ,直接代入特征向量的定义:
q i ⊤ A q j = q i ⊤ ( λ j q j ) = λ j q i ⊤ q j . \begin{aligned}
q_i^\top A q_j
&=q_i^\top(\lambda_jq_j)\\
&=\lambda_jq_i^\top q_j.
\end{aligned} q i ⊤ A q j = q i ⊤ ( λ j q j ) = λ j q i ⊤ q j . 再看同一个式子,用转置把 A A A 移到左边。由于 A ⊤ = A A^\top=A A ⊤ = A ,它作用于 q i q_i q i 后同样可以换成缩放倍数:
q i ⊤ A q j = ( A ⊤ q i ) ⊤ q j = ( A q i ) ⊤ q j = ( λ i q i ) ⊤ q j = λ i q i ⊤ q j . \begin{aligned}
q_i^\top A q_j
&=(A^\top q_i)^\top q_j\\
&=(Aq_i)^\top q_j\\
&=(\lambda_iq_i)^\top q_j\\
&=\lambda_iq_i^\top q_j.
\end{aligned} q i ⊤ A q j = ( A ⊤ q i ) ⊤ q j = ( A q i ) ⊤ q j = ( λ i q i ) ⊤ q j = λ i q i ⊤ q j . 左边是同一个数,因此 λ j q i ⊤ q j = λ i q i ⊤ q j \lambda_jq_i^\top q_j=\lambda_iq_i^\top q_j λ j q i ⊤ q j = λ i q i ⊤ q j 。把两边相减,就得到
( λ i − λ j ) q i ⊤ q j = 0. (\lambda_i-\lambda_j)q_i^\top q_j=0. ( λ i − λ j ) q i ⊤ q j = 0. 当 λ i ≠ λ j \lambda_i\ne\lambda_j λ i = λ j 时,只能有 q i ⊤ q j = 0 q_i^\top q_j=0 q i ⊤ q j = 0 。如果两个方向的缩放值恰好相同,仍可在它们所在的空间里选互相垂直的方向;实对称矩阵的完整结论已经保证这一点。需要区分的是:对称保证正交方向,不保证缩放值非负 ,非负还需要矩阵满足更具体的性质。
从矩形矩阵找到方向# 两个对称方阵# 数据矩阵不一定是方阵。对 A ∈ R m × n A\in\mathbb{R}^{m\times n} A ∈ R m × n ,A x Ax A x 属于 m m m 维,不能直接要求它等于 n n n 维的 λ x \lambda x λ x 。不过把 A A A 与它的转置接起来,就得到两个方阵:
A ⊤ A ∈ R n × n , A A ⊤ ∈ R m × m . A^\top A\in\mathbb{R}^{n\times n},
\qquad
AA^\top\in\mathbb{R}^{m\times m}. A ⊤ A ∈ R n × n , A A ⊤ ∈ R m × m . 而且它们都是对称的。例如 ( A ⊤ A ) ⊤ = A ⊤ ( A ⊤ ) ⊤ = A ⊤ A (A^\top A)^\top=A^\top(A^\top)^\top=A^\top A ( A ⊤ A ) ⊤ = A ⊤ ( A ⊤ ) ⊤ = A ⊤ A 。第一个矩阵作用于输入空间,第二个作用于输出空间。图中的箭头把维数也标了出来:
特别要注意,A ⊤ A^\top A ⊤ 不是把 A A A 的作用原路撤销的逆变换;A ⊤ A x A^\top Ax A ⊤ A x 一般不等于 x x x 。它把一个输入向量经过变换后,再带回输入空间进行比较,因此能告诉我们哪些输入方向经过 A A A 后变化得更明显。
非负的缩放值# 取任意输入向量 x ∈ R n x\in\mathbb{R}^n x ∈ R n 。由转置和内积的规则,有一个非常有用的等式:
x ⊤ A ⊤ A x = ( A x ) ⊤ ( A x ) = ∥ A x ∥ 2 2 ≥ 0. x^\top A^\top A x=(Ax)^\top(Ax)=\|Ax\|_2^2\ge0. x ⊤ A ⊤ A x = ( A x ) ⊤ ( A x ) = ∥ A x ∥ 2 2 ≥ 0. 若单位特征向量 v v v 满足 A ⊤ A v = λ v A^\top Av=\lambda v A ⊤ A v = λ v ,代入上式得到 λ v ⊤ v = ∥ A v ∥ 2 2 \lambda v^\top v=\|Av\|_2^2 λ v ⊤ v = ∥ A v ∥ 2 2 ,于是 λ = ∥ A v ∥ 2 2 ≥ 0 \lambda=\|Av\|_2^2\ge0 λ = ∥ A v ∥ 2 2 ≥ 0 。缩放值不是负数,因为它对应的是输出长度的平方 。同理,A A ⊤ AA^\top A A ⊤ 的特征值也非负。这类对任意向量都让 x ⊤ B x ≥ 0 x^\top Bx\ge0 x ⊤ B x ≥ 0 的对称矩阵称为半正定矩阵 。
回到开头的 3 × 2 3\times2 3 × 2 矩阵 C C C ,直接相乘可得 C ⊤ C = [ 2 1 1 2 ] C^\top C=\begin{bmatrix}2&1\\1&2\end{bmatrix} C ⊤ C = [ 2 1 1 2 ] ,恰好就是前面讨论过的对称矩阵。那里的两个单位特征方向对应特征值 3 3 3 和 1 1 1 :现在它们有了新的含义,分别表示输入沿这两个方向变化时,经过 C C C 后的长度平方会变为原来的 3 3 3 倍和 1 1 1 倍。
特别地,λ = 0 \lambda=0 λ = 0 当且仅当 A v = 0 Av=0 A v = 0 :这个输入方向被整个变换压没了。多个独立方向被压没时,矩阵的秩就会减小;其余方向则以不同强度参与输出。只看原始矩阵的元素往往看不出这些信息,但看它作用于哪些正交方向,就能区分“真正传过去的变化”和“消失的变化”。
矩阵的列告诉我们坐标轴被送往哪里,行列式记录方阵怎样改变面积或体积;正交矩阵让我们安全地换坐标,特征方向让复杂的变换变成逐方向缩放。对矩形矩阵,A ⊤ A A^\top A A ⊤ A 和 A A ⊤ AA^\top A A ⊤ 把输入、输出两侧各自带回可寻找正交方向的空间,而 ∥ A x ∥ 2 2 \|Ax\|_2^2 ∥ A x ∥ 2 2 则告诉我们缩放强度为何非负。这些方向和强度,正是理解 SVD 的起点。