AI 数学课程 · 第 31 课,共 180

基底为 AI 向量提供可逆的坐标系

检验向量是否构成基底,在新坐标框架中计算坐标,并观察线性模型如何在协调变换后保持得分不变。

分享这篇文章

模型二维表示中的同一个点,可以写成 (1, 7) 或 (3, 2)。只要说明使用的是哪一种坐标系,这两个数对都可以表示第一坐标为 1、第二坐标为 7 的向量。第一组使用熟悉的水平轴和垂直轴;第二组使用两个倾斜的基向量。基底使这种替代表示成为一种完整且没有歧义的方式,能够描述空间中的每个向量。

学完本课后,你将能够检验一组向量是否构成基底,在该基底中计算向量的坐标,并解释输入坐标改变时线性模型必须如何变化。

**学习目标:**验证一个基底,并用基底坐标表示向量。

本课建立在线性无关和张成空间的基础上:基底结合了这两个概念。讲解依据《Mathematics for Machine Learning》第 2.6 节;下面的数值示例、模型得分计算、交互探索器和问题均为原创。

基底恰好提供所需方向

考虑一个有限维向量空间。一组向量要成为该空间的基底,必须通过两项检验:

  1. **它张成该空间:**空间中的每个向量都能由这组向量的线性组合构成。
  2. **它线性无关:**其中没有冗余向量;只有所有系数都为零的线性组合才能得到零向量。

这两个条件合在一起,意味着这组向量拥有到达每个向量所需的足够方向,也没有会造成歧义的多余方向。该书第 2.6 节给出了等价表述:基底是极小的张成集,也是极大的线性无关集;而且每个向量都能由该基底唯一地线性组合得到。

在 Rn\mathbb{R}^n 中,基底恰有 nn 个向量。对于更小的子空间,基底中的向量数等于该子空间的独立方向数。例如,两个向量可以构成 R3\mathbb{R}^3 中一个平面的基底,却不构成整个 R3\mathbb{R}^3 的基底。

为什么坐标是唯一的

假设 b1,…,bn\boldsymbol{b}_1,\ldots,\boldsymbol{b}_n 是一个基底,v\boldsymbol{v} 是空间中的任意向量。张成性保证至少存在一组系数可以表示它:

v=c1b1+⋯+cnbn.\boldsymbol{v}=c_1\boldsymbol{b}_1+\cdots+c_n\boldsymbol{b}_n.

现在设另一组系数 d1,…,dnd_1,\ldots,d_n 也能得到同一个向量。将两个表达式相减可得

0=(c1−d1)b1+⋯+(cn−dn)bn.0=(c_1-d_1)\boldsymbol{b}_1+\cdots+(c_n-d_n)\boldsymbol{b}_n.

由于基向量线性无关,这个零线性组合中的每个系数都必须为零。因此,每个 ii 都有 ci=dic_i=d_i。基底没有冗余方向,所以坐标是唯一的。

我们把坐标列写作 [v]B[\boldsymbol{v}]_B。下标很重要:它说明这些坐标是由哪个基底给出的。向量与它的坐标列相关,但两者不是可以互换的对象。

计算坐标变换

取 R2\mathbb{R}^2 中的两个向量:

b1=[11],b2=[−12].\boldsymbol{b}_1=\begin{bmatrix}1\\1\end{bmatrix},\qquad \boldsymbol{b}_2=\begin{bmatrix}-1\\2\end{bmatrix}.

把基向量放在矩阵的列中:

B=[1−112].B=\begin{bmatrix}1&-1\\1&2\end{bmatrix}.

它们线性无关:行列式为 1⋅2−(−1⋅1)=31\cdot2-(-1\cdot1)=3,不等于零。R2\mathbb{R}^2 中有两个线性无关的向量,因此它们也张成整个平面,构成一个基底。

求 v=(1,7)T\boldsymbol{v}=(1,7)^\mathsf{T} 的坐标。坐标列 c=[v]B\boldsymbol{c}=[\boldsymbol{v}]_B 必须满足 Bc=vB\boldsymbol{c}=\boldsymbol{v}。令 c=(c1,c2)T\boldsymbol{c}=(c_1,c_2)^\mathsf{T},矩阵方程就变成两个普通方程:

c1−c2=1,c1+2c2=7.\begin{aligned} c_1-c_2&=1,\\ c_1+2c_2&=7. \end{aligned}

用第二个方程减去第一个方程:3c2=63c_2=6,因此 c2=2c_2=2。接着 c1−2=1c_1-2=1,所以 c1=3c_1=3。直接检查重构结果:

3[11]+2[−12]=[3−23+4]=[17].3\begin{bmatrix}1\\1\end{bmatrix} +2\begin{bmatrix}-1\\2\end{bmatrix} =\begin{bmatrix}3-2\\3+4\end{bmatrix} =\begin{bmatrix}1\\7\end{bmatrix}.

坐标对 (3,2)(3,2) 表示“沿 b1\boldsymbol{b}_1 前进三步,再沿 b2\boldsymbol{b}_2 前进两步”。它指向标准坐标 (1,7)(1,7) 所表示的同一个终点。

一个向量,两种坐标系

向量 (1, 7) 在两个基底中的表示同一终点分别用标准坐标轴,或用倾斜的基向量 (1, 1) 和 (−1, 2) 表示。坐标对从 (1, 7) 变为 (3, 2)。e₁e₂vxy

所选基底下的坐标: (1, 7)

标准坐标下的向量: (1, 7)

v = c₁b₁ + c₂b₂

所选基底下的坐标: (1, 7)
终点始终固定在 (1, 7)。改变基底会改变用于命名该点的坐标对。

探索器初始显示标准坐标。使用可通过键盘操作的选择器切换到倾斜基底:指向 v\boldsymbol{v} 的箭头终点保持不变,而显示的坐标从 (1,7)(1,7) 变为 (3,2)(3,2)。图注和读数也会以文本形式呈现结果。

让 NumPy 求解坐标方程

对于较大的基底,同一关系就是一个线性方程组。把基向量作为矩阵的列存储,然后求解 Bc=vB\boldsymbol{c}=\boldsymbol{v}:

import numpy as np

B = np.array([[1, -1],
              [1,  2]])  # columns are b1=(1, 1) and b2=(-1, 2)
v = np.array([1, 7])

rank = np.linalg.matrix_rank(B)
coordinates = np.linalg.solve(B, v)
reconstructed = B @ coordinates

print(rank)                         # 2: full rank in R^2
print(coordinates)                  # [3. 2.]
print(np.allclose(reconstructed, v)) # True

对于这个 R2\mathbb{R}^2 中的方阵,满秩意味着两列线性无关,足以证明它们构成基底。numpy.linalg.solve 返回方阵满秩系统的解;矩阵奇异或不是方阵时,NumPy 会引发 LinAlgError。这里的秩结果是一种数值诊断:NumPy 通过奇异值和容差估计秩,因此,对于接近线性相关的浮点数据,可能需要根据应用的尺度和测量精度选择容差。请参阅官方 NumPy matrix_rank 参考文档和 solve 参考文档。

对于小型整数的精确示例,上面的手算行列式可以给出明确证明。对于实数数据,检查重构结果很有用,但它本身并不能检验是否为基底:奇异矩阵仍可能重构某些向量。还要检查矩阵形状正确且满秩。

模型权重必须随坐标一起变化

基底变换可以帮助理解模型的内部表示,但必须与使用该表示的运算协调进行。考虑线性得分 s=wTvs=\boldsymbol{w}^{\mathsf T}\boldsymbol{v},其中 w=(2,1)T\boldsymbol{w}=(2,1)^\mathsf{T},v=(1,7)T\boldsymbol{v}=(1,7)^\mathsf{T}。在标准坐标中,得分为

2⋅1+1⋅7=9.2\cdot1+1\cdot7=9.

在倾斜基底中,v=Bc\boldsymbol{v}=B\boldsymbol{c},且 c=(3,2)T\boldsymbol{c}=(3,2)^\mathsf{T}。于是

wTv=wTBc=(BTw)Tc.\boldsymbol{w}^{\mathsf T}\boldsymbol{v} =\boldsymbol{w}^{\mathsf T}B\boldsymbol{c} =(B^{\mathsf T}\boldsymbol{w})^{\mathsf T}\boldsymbol{c}.

新坐标中相匹配的权重是 BTw=(3,0)TB^{\mathsf T}\boldsymbol{w}=(3,0)^\mathsf{T},得分仍为 3⋅3+0⋅2=93\cdot3+0\cdot2=9。如果把原权重 (2,1)(2,1) 直接用于新的坐标对,得分就会变成 2⋅3+1⋅2=82\cdot3+1\cdot2=8。表示方式变了,但模型参数没有相应更新。

对于这里展示的线性得分,这个等式是精确成立的。在层与层之间应用非线性激活、归一化或其他运算的神经网络,任意基底变换不一定能保持其行为。实际中,表示的坐标与已学习的参数及其周围运算相联系;只改变其中一部分就可能改变预测结果。

候选向量组不合格时

两个候选向量即使指向同一方向,看起来仍可能像列表中的两个独立条目:

a1=[11],a2=[22].\boldsymbol{a}_1=\begin{bmatrix}1\\1\end{bmatrix},\qquad \boldsymbol{a}_2=\begin{bmatrix}2\\2\end{bmatrix}.

第二个向量是第一个的两倍。它们的行列式为零,张成空间仅为直线 y=xy=x,而非整个平面。它们完全无法到达向量 (1,7)(1,7)。即便对于可达向量,坐标也可能有歧义:(2,2)(2,2) 可以写作 2a1+0a22\boldsymbol{a}_1+0\boldsymbol{a}_2,也可以写作 0a1+1a20\boldsymbol{a}_1+1\boldsymbol{a}_2。

近乎平行的向量可能通过精确的线性无关检验,但只要测量或舍入发生微小变化,求得的坐标就可能很敏感。这是数值条件问题:数学上的坐标可能唯一,计算出的数值却很脆弱。秩估计与重构残差回答的是不同问题,应结合数据精度来解读。

因此,基底不只是一个紧凑的向量列表。它是一项约定:选定空间中的每个向量都可达,并且固定基底后,每个向量恰好只有一组坐标。基向量数也就给出了空间的维数,这是下一步将线性代数与模型表示联系起来的基础。

检查理解情况

问题 1

(2, 0) 和 (1, 3) 是否构成 ℝ² 的基底?写出线性无关检验,并解释为什么在这里它足以判断。

显示分步解答

将两个向量作为矩阵的列:

A=[2103].A=\begin{bmatrix}2&1\\0&3\end{bmatrix}.

其行列式为 2⋅3−1⋅0=62\cdot3-1\cdot0=6,不为零,因此两列线性无关。R2\mathbb{R}^2 中有两个线性无关向量;它们张成整个平面,构成基底。

问题 2

使用 b₁=(1, 1) 和 b₂=(−1, 2),求 v=(1, 7) 的基底坐标,并通过重构验证答案。

显示分步解答

令 c1b1+c2b2=(1,7)c_1\boldsymbol{b}_1+c_2\boldsymbol{b}_2=(1,7)。比较分量可得 c1−c2=1c_1-c_2=1 和 c1+2c2=7c_1+2c_2=7。用第二式减去第一式:3c2=63c_2=6,因此 c2=2c_2=2。随后 c1=3c_1=3。重构:3(1,1)+2(−1,2)=(3−2,3+4)=(1,7)3(1,1)+2(-1,2)=(3-2,3+4)=(1,7)。坐标为 (3,2)(3,2)。

问题 3

在同一个倾斜基底中,坐标 (−2, 4) 在标准坐标中表示哪个向量?

显示分步解答

将坐标代入线性组合:−2(1,1)+4(−1,2)-2(1,1)+4(-1,2)。第一分量为 −2−4=−6-2-4=-6;第二分量为 −2+8=6-2+8=6。因此,所表示的向量是 (−6,6)(-6,6)。

问题 4

为什么基底只能为一个向量给出一组坐标?

显示分步解答

假设 v=∑icibi\boldsymbol{v}=\sum_i c_i\boldsymbol{b}_i 与 v=∑idibi\boldsymbol{v}=\sum_i d_i\boldsymbol{b}_i 都成立。将两个表达式相减,得到 ∑i(ci−di)bi=0\sum_i(c_i-d_i)\boldsymbol{b}_i=0。线性无关性说明,只有所有系数都为零,才能得到零向量。因此,对每个基向量都有 ci=dic_i=d_i。

问题 5

设 a₁=(1, 2),a₂=(2, 4)。它们能表示 (3, 1) 吗?给出一个可达向量,并展示它有多种坐标表示。

显示分步解答

两个向量都位于直线 y=2xy=2x 上,因此任意线性组合也位于该直线上。由于 (3,1)(3,1) 不满足 1=2⋅31=2\cdot3,所以无法到达。可达向量 (2,4)(2,4) 有两种表示:2a1+0a22\boldsymbol{a}_1+0\boldsymbol{a}_2 和 0a1+1a20\boldsymbol{a}_1+1\boldsymbol{a}_2。线性相关既导致无法张成整个平面,也使某些可达向量的坐标不唯一。

问题 6

在 ℝ³ 中,设 a₁=(1, 0, 1)、a₂=(0, 1, 1)、a₃=(1, 1, 2)。这组向量是整个 ℝ³ 的基底吗?a₁ 和 a₂ 能否成为一个更小空间的基底?

显示分步解答

注意到 a3=a1+a2\boldsymbol{a}_3=\boldsymbol{a}_1+\boldsymbol{a}_2,所以这组三个向量线性相关。它不能构成 R3\mathbb{R}^3 的基底;它张成的空间至多是一个平面。前两个向量线性无关,因此它们构成其张成空间的基底,也就是由 a1\boldsymbol{a}_1 和 a2\boldsymbol{a}_2 生成的平面。

问题 7

对于基向量按列存储的 B=[[1, −1], [1, 2]],`np.linalg.solve(B, [1, 7])` 会返回什么?之后应检查什么?

显示分步解答

方程组为 c1−c2=1c_1-c_2=1 和 c1+2c2=7c_1+2c_2=7。解为 c=(3,2)\boldsymbol{c}=(3,2)。通过 BcB\boldsymbol{c} 重构,检查是否返回 (1,7)(1,7);np.allclose(B @ coordinates, v) 之类的数值残差检验可以发现转置或索引错误。还要检查 BB 是方阵且满秩,之后才能把它的列视为 R2\mathbb{R}^2 的基底。

问题 8

线性模型用 w=(2, 1) 对 v=(1, 7) 评分。如果坐标在倾斜基底中变为 c=(3, 2),需要匹配什么权重才能保持得分?如果仍用原权重会怎样?

显示分步解答

写成 v=Bc\boldsymbol{v}=B\boldsymbol{c}。于是 wTv=(BTw)Tc\boldsymbol{w}^{\mathsf T}\boldsymbol{v}=(B^{\mathsf T}\boldsymbol{w})^{\mathsf T}\boldsymbol{c},所以新权重为 BTw=(3,0)B^{\mathsf T}\boldsymbol{w}=(3,0)。得分为 3⋅3+0⋅2=93\cdot3+0\cdot2=9,与原得分 2⋅1+1⋅7=92\cdot1+1\cdot7=9 相同。如果将原权重 (2,1)(2,1) 原样用于 (3,2)(3,2),得分会变成 2⋅3+1⋅2=82\cdot3+1\cdot2=8,模型输出因此改变。

资料来源

  1. Mathematics for Machine Learning book PDF
  2. NumPy documentation: numpy.linalg.solve
  3. NumPy documentation: numpy.linalg.matrix_rank