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

正交意味着没有线性重叠

用点积检验正交性,理解直角与零投影,并避免把零内积与独立性混为一谈;同时在 NumPy 中完成检验。

分享这篇文章

假设某个 AI 表示包含两个方向,它们应当为后续计算贡献不同的内容。如果一个方向在另一个方向上没有任何贡献,那么它们的内积就是零。例如,对于 u=(3,1)u=(3,1) 和 v=(−1,3)v=(-1,3),

uTv=3(−1)+1(3)=−3+3=0.u^{\mathsf T}v=3(-1)+1(3)=-3+3=0.

两个向量都不是空的,但在通常的点积几何中,任何一个向量都没有沿着另一个向量的分量。这就是正交背后的有用概念:在所选几何中,零内积意味着没有线性重叠。

完成本课后,你将能够手算并在 NumPy 中检验正交性,把这个零值解释为直角和零投影,并将正交性与相关性、独立性以及“没有信息”区分开来。

**学习目标:**检验正交性,并从几何角度解释零内积。

本课建立在第 041 课:内积衡量对齐程度之上,该课介绍了把点积作为对齐分数。第 044 课:角度与余弦相似度随后区分了方向与向量长度。官方 Mathematics for Machine Learning 图书的第 3.4 节是本课的数学参考。本课的解释、数字、代码、视觉图、AI 连接和评估题均为原创。

正交性就是零内积

设 x=(x1,…,xn)x=(x_1,\ldots,x_n) 和 y=(y1,…,yn)y=(y_1,\ldots,y_n) 是坐标数量相同的实向量。两个向量在位置 ii 的坐标必须描述同一种量。本课中的内积是标准欧几里得点积。

这是一个代数定义。在普通的欧几里得平面中,对于非零向量,它与我们熟悉的直角图像相符。上一课的角度公式明确展示了这种联系:

cos⁡(θ)=xTy∥x∥2∥y∥2.\cos(\theta)= \frac{x^{\mathsf T}y}{\lVert x\rVert_2\lVert y\rVert_2}.

如果两个向量都非零且 xTy=0x^{\mathsf T}y=0,分子就是零,分母为正。因此 cos⁡(θ)=0\cos(\theta)=0,且 θ=π/2=90∘\theta=\pi/2=90^\circ。非零条件很重要:零向量与任何向量的点积都是零,但它没有方向,因此不能解释为具有某个角度。

用坐标完成一次检验

回到 u=(3,1)u=(3,1) 和 v=(−1,3)v=(-1,3)。这两个条目是坐标,不是概率或度数。分三步完成计算。

抵消是这里的核心事件。第二个坐标产生的正乘积恰好抵消了第一个坐标产生的负乘积。在使用 uu 作为方向的线性分数中,vv 沿着 uu 没有贡献。

一个点积,三种几何关系

该表是直角视觉图的完整数值备用表示。
第一个向量第二个向量点积角度解释
u = (3, 1)v = (-1, 3)0.090.0°点积 = 0;角度 = 90°
u = (3, 1)w = (6, 2)20.00.0°点积 = 20;角度 = 0°
u = (3, 1)z = (2, 3)9.037.9°点积 = 9;角度 ≈ 37.9°

垂直

向量 u 与 v 垂直 实线向量 u 等于 (3, 1)。虚线向量 v 等于 (−1, 3)。它们以直角从原点出发,直角由一个小方框标出,且它们的点积为零。x₁x₂uv

同向

向量 u 与 w 对齐 实线向量 u 等于 (3, 1)。虚线向量 w 等于 (6, 2)。两支箭头从原点沿同一条射线延伸,因此角度为零,点积为正。x₁x₂uw

斜交

向量 u 与 z 斜交 实线向量 u 等于 (3, 1)。虚线向量 z 等于 (2, 3)。两支箭头形成既不是零度也不是 90 度的锐角,且它们的点积为正。x₁x₂uz

表格包含全部数字。实线与虚线、向量标签、直角方框以及文字关系都为图形提供了颜色之外的冗余提示。

垂直向量对是零内积的情形。其他面板展示了为什么正点积既可以表示完全对齐,也可以表示锐角的斜交关系。

这个视觉图把三个概念并列展示。对齐向量对 w=(6,2)w=(6,2) 是 uu 的正倍数,因此角度为 0∘0^\circ,点积为 3(6)+1(2)=203(6)+1(2)=20。斜交向量对 z=(2,3)z=(2,3) 的点积为 3(2)+1(3)=93(2)+1(3)=9,其余弦为

91013≈0.789,\frac{9}{\sqrt{10}\sqrt{13}}\approx0.789,

因此角度约为 37.9∘37.9^\circ。所以,零点积是正向和负向方向对齐之间的特殊边界,而不只是一个很小的正分数。

缩放改变大小,不改变零关系

对于标量 aa 和 bb,双线性性给出

(ax)T(by)=ab xTy.(ax)^{\mathsf T}(by)=ab\,x^{\mathsf T}y.

如果 xTy=0x^{\mathsf T}y=0,那么无论有限的 aa 和 bb 取何值,缩放后的向量仍然正交。例如,

(−4u)T(7v)=(−28)(uTv)=(−28)(0)=0.(-4u)^{\mathsf T}(7v)=(-28)(u^{\mathsf T}v)=(-28)(0)=0.

长度和箭头方向都可能改变:负标量会反转箭头,绝对值更大的标量会使箭头变长。当标量非零时,无论一侧还是两侧被拉伸或反转,直角都保持为直角。正交性关注的是内积为零,而不是向量长度相等。

残差可以正交,但并不为空

当一次计算从向量中去除一个线性方向时,正交性尤其有用。设 u≠0u\ne0 是一个方向,yy 是一个观测值。yy 在由 uu 张成的直线上的投影为

proj⁡u(y)=yTuuTuu.\operatorname{proj}_{u}(y) =\frac{y^{\mathsf T}u}{u^{\mathsf T}u}u.

把剩下的部分,或称残差,定义为

r=y−proj⁡u(y).r=y-\operatorname{proj}_{u}(y).

残差与 uu 正交,因为

uTr=uTy−yTuuTuuTu=uTy−yTu=0.\begin{aligned} u^{\mathsf T}r &=u^{\mathsf T}y -\frac{y^{\mathsf T}u}{u^{\mathsf T}u}u^{\mathsf T}u\\ &=u^{\mathsf T}y-y^{\mathsf T}u\\ &=0. \end{aligned}

最后一步使用了实点积的对称性。这也是投影会在线上留下最近点的几何原因:任何剩余移动都垂直于该直线。

残差并不为零:它是 (−2/5,6/5)(-2/5,6/5),仍然带有方向和大小。“与 uu 没有线性重叠”仅意味着残差沿着这一个方向没有分量。它可能包含其他结构、非线性关系、噪声,或对后续模型有用的信号。

NumPy 让检验变得明确

对于一维数组,当前 NumPy 文档将 numpy.dot 定义为向量内积。对一维数组使用时,numpy.linalg.norm 会计算欧几里得长度。下面的函数让形状约束和数值容差都清晰可见:

import numpy as np


def is_orthogonal(x, y, *, atol=1e-12):
    x = np.asarray(x, dtype=float)
    y = np.asarray(y, dtype=float)
    if x.ndim != 1 or y.ndim != 1 or x.shape != y.shape:
        raise ValueError('x and y must be 1-D vectors with the same shape')

    dot = float(np.dot(x, y))
    scale = max(1.0, np.linalg.norm(x) * np.linalg.norm(y))
    return bool(np.isclose(dot, 0.0, atol=atol * scale, rtol=0.0))


u = np.array([3.0, 1.0])
v = np.array([-1.0, 3.0])
residual = np.array([-0.4, 1.2])

print(np.dot(u, v))
print(is_orthogonal(u, v))
print(np.dot(u, residual))
print(is_orthogonal(u, residual))

输出是

0.0
True
-2.220446049250313e-16
True

容差并不是定义的替代品。它承认浮点运算可能会在本应由精确算术得到零的地方留下一个很小的带符号余数;不同平台可能显示略有不同的值。NumPy 的 isclose 文档还警告说,默认绝对容差在接近零时可能不合适,因此真实流水线应当根据数据选择考虑尺度的阈值。显式的形状检查可以防止把一次巧合的广播或非预期的矩阵运算误认为成对向量检验。

正交性、相关性和独立性回答的是不同问题

内积比较选定坐标空间中的两个固定向量。相关系数描述两个随机变量或两个观测列在中心化和缩放后如何共同变化。对于有限数据集,两者的联系是精确的,但前提是先说明数据约定。

设 xcx_c 和 ycy_c 是包含 mm 个观测的两个中心化特征列。对这个有限样本使用总体归一化时,

cov⁡(x,y)=1mxcTyc.\operatorname{cov}(x,y)=\frac{1}{m}x_c^{\mathsf T}y_c.

如果两列的方差都非零,那么它们的中心化点积为零,当且仅当经验 Pearson 协方差、进而 Pearson 相关系数为零。使用分母 m−1m-1 的样本约定具有同样的零分子。这只表示“在这个样本中没有测得的线性共同变化”,并不表示“这些特征以所有可能的方式都无关”。

下面是一个小型反例。令

x=(−1,0,1),y=(1,−2,1).x=(-1,0,1),\qquad y=(1,-2,1).

两个均值都为零,且

xTy=(−1)(1)+0(−2)+1(1)=−1+1=0.x^{\mathsf T}y=(-1)(1)+0(-2)+1(1)=-1+1=0.

中心化后的两列正交,经验相关系数也为零。然而,第二列由第一列逐坐标决定:

y=3x2−2y=3x^2-2

这是一种非线性关系,而不是没有关系。因此,移除或旋转相关方向的 AI 流水线可以减少线性冗余,同时仍然把非线性交互留给后续层。当前 scikit-learn 特征选择文档也从实现角度划出了同一条边界:F 检验方法估计线性依赖,而互信息方法可以检测更广泛的统计依赖,并且需要更多数据才能准确估计。

“独立”是关于联合分布的概率陈述。两个表示向量之间的零内积——甚至在一个数据集上测得的零相关——都不足以声称独立。始终说明你实际检验的空间、中心化约定、样本和关系。

对 AI 系统来说,这一区分赋予正交性一个有限但有用的作用。如果中心化特征方向正交,线性读出就无法通过把一个方向投影到另一个方向上,从该方向获得非零分数。如果残差分量与拟合方向正交,那么它就与那一个线性贡献清晰分离。两种说法都不能保证非线性层、不同度量或不同数据集会保持同样的分离。

课程的下一步是第 046 课:正交归一基简化坐标(英文内容)。它为正交方向加入单位长度,因此可以直接把内积读作坐标。Math for AI 课程中心(英文内容)会继续展示即将到来的课程及其先修序列,而英文源文件正在为之后的翻译集做准备。

检查你的理解

Question 1

对于 u = (3, 1) 和 v = (−1, 3),计算点积、两个欧几里得范数以及角度。

Show the step-by-step solution

首先将对应坐标相乘:uTv=3(−1)+1(3)=−3+3=0u^{\mathsf T}v=3(-1)+1(3)=-3+3=0。 接着,∥u∥2=32+12=10\lVert u\rVert_2=\sqrt{3^2+1^2}=\sqrt{10},而 ∥v∥2=(−1)2+32=10\lVert v\rVert_2=\sqrt{(-1)^2+3^2}=\sqrt{10}。两个向量都非零, 所以 cos⁡(θ)=0/(1010)=0\cos(\theta)=0/(\sqrt{10}\sqrt{10})=0。因此 θ=arccos⁡(0)=π/2=90∘\theta=\arccos(0)=\pi/2=90^\circ,这是对该零内积的直角几何解释。

Question 2

检验 a = (2, −1) 和 b = (1, 2) 是否正交,并说明结果不是因为其中一个向量为零。

Show the step-by-step solution

坐标乘积是 2(1)=22(1)=2 和 (−1)(2)=−2(-1)(2)=-2。它们的和为 aTb=2−2=0a^{\mathsf T}b=2-2=0,因此向量通过正交性检验。它们的范数为 ∥a∥2=5\lVert a\rVert_2=\sqrt{5} 和 ∥b∥2=5\lVert b\rVert_2=\sqrt{5},都严格为正。 因此这是两个非零的垂直向量;零值来自坐标之间的抵消。

Question 3

如果 x ⊥ y,在把 x 替换为 −4x、把 y 替换为 7y 后,内积会怎样?

Show the step-by-step solution

双线性性给出 (−4x)T(7y)=(−4)(7)xTy=−28xTy(-4x)^{\mathsf T}(7y)=(-4)(7)x^{\mathsf T}y=-28x^{\mathsf T}y。 由于 x⊥yx\perp y,原始乘积为 00,所以新乘积是 −28(0)=0-28(0)=0。向量可能变长, 其中一个箭头也可能反向,但零关系以及相同点积下的垂直性仍然保持。

Question 4

使用 u = (3, 1),根据 w 和 z 与 u 的点积符号对它们分类。

Show the step-by-step solution

对于 ww,uTw=3(6)+1(2)=20>0u^{\mathsf T}w=3(6)+1(2)=20>0,且 w=2uw=2u,因此向量以 0∘0^\circ 角对齐。对于 zz,uTz=3(2)+1(3)=9>0u^{\mathsf T}z=3(2)+1(3)=9>0;正号表示 锐角,但 zz 不是 uu 的标量倍数,所以角度是斜交而不是零度。因此,正点积 表示处于几何上的同一大致一侧,并不一定表示方向完全相同。

Question 5

将 y = (5, 3) 投影到 u = (3, 1) 上,然后计算残差并验证其正交性。

Show the step-by-step solution

首先计算 yTu=5(3)+3(1)=18y^{\mathsf T}u=5(3)+3(1)=18 和 uTu=32+12=10u^{\mathsf T}u=3^2+1^2=10。投影系数是 18/10=9/518/10=9/5,所以 proj⁡u(y)=(9/5)(3,1)=(27/5,9/5)\operatorname{proj}_u(y)=(9/5)(3,1)=(27/5,9/5)。相减得到 r=(5,3)−(27/5,9/5)=(−2/5,6/5)r=(5,3)-(27/5,9/5)=(-2/5,6/5)。最后, uTr=3(−2/5)+1(6/5)=−6/5+6/5=0u^{\mathsf T}r=3(-2/5)+1(6/5)=-6/5+6/5=0。残差不为零; 它只是没有沿着 uu 的分量。

Question 6

为什么直接用 np.dot(x, y) == 0 的 NumPy 检验可能错误分类一对浮点向量?本课的函数改为怎样处理?

Show the step-by-step solution

十进制计算用有限精度浮点数表示,因此纸面上恰好为零的运算可能留下类似 10−1510^ {-15} 的微小值。精确相等检验随后会返回 false。该函数首先要求一维数组 具有相同形状,计算点积和两个范数,然后用显式的、考虑尺度的绝对容差调用 np.isclose,并设置 rtol=0。容差应根据数据和精度选择;它不应掩盖较大的 点积或形状错误。

Question 7

对于 x = (−1, 0, 1) 和 y = (1, −2, 1),说明中心化后的向量正交,但在通常的统计意义下并不独立。

Show the step-by-step solution

两个均值都为零,因此这些向量已经中心化。它们的点积为 (−1)(1)+0(−2)+1(1)=−1+1=0(-1)(1)+0(-2)+1(1)=-1+1=0,这给出零经验协方差;由于两者的方差都非零, Pearson 相关系数也为零。但是坐标精确满足 y=3x2−2y=3x^2-2,所以观察 xx 就能 确定 yy。这种确定性的非线性关系就是依赖;零线性相关不是一般的独立性检验。

Question 8

某个模型说残差与拟合方向正交,因此‘没有信息’。这句话哪一部分有效,哪一部分过强?

Show the step-by-step solution

如果 rr 是投影到方向 uu 后的残差,那么 uTr=0u^{\mathsf T}r=0 是有效的:沿着 uu 的线性分数无法通过投影到同一方向来恢复 rr 的分量。说 rr 没有信息则 过强。残差可以有非零范数,包含另一个线性方向,编码非线性结构,或携带对 后续层有用的信号。正交性移除的是一个指定的线性重叠,而不是所有信息。

资料来源

  1. Mathematics for Machine Learning book PDF, Section 3.4
  2. NumPy documentation: numpy.dot
  3. NumPy documentation: numpy.linalg.norm
  4. NumPy documentation: numpy.isclose
  5. scikit-learn documentation: Feature selection