· 线性代数

4 · 内积、正交与投影

前面只用了加法和数乘。本节引入内积,让向量空间有了长度与角度,也是相似度、回归、压缩的基础。

前面只用了加法和数乘。本节引入一个新运算——内积,它让向量空间有了「长度」和「角度」,也是相似度、回归、压缩的基础。


一、内积(Inner Product / Dot Product)

两个向量的内积是一个数:

uv=iuivi=u1v1+u2v2++unvn\mathbf{u} \cdot \mathbf{v} = \sum_i u_i v_i = u_1 v_1 + u_2 v_2 + \cdots + u_n v_n

它同时有一个几何公式,连接了「长度」和「夹角」:

uv=uvcosθ\mathbf{u} \cdot \mathbf{v} = \|\mathbf{u}\|\,\|\mathbf{v}\|\cos\theta

这个公式是本节的核心:内积衡量两个向量「多同向」。同向为正,反向为负,垂直为零。

二、范数(Norm):向量的长度

由向量与自己的内积开根得到长度(L2 范数):

v=vv=v12++vn2\|\mathbf{v}\| = \sqrt{\mathbf{v}\cdot\mathbf{v}} = \sqrt{v_1^2 + \cdots + v_n^2}

这就是勾股定理的高维推广。两点距离 uv\|\mathbf{u}-\mathbf{v}\| 是机器学习里最常用的「不相似度」度量。L1 范数(各分量绝对值之和)则常用于稀疏正则化(Lasso)。

三、正交(Orthogonality)

uv=0\mathbf{u}\cdot\mathbf{v} = 0(且都非零),两向量正交,几何上就是垂直(θ=90°,余弦为 0)。

正交为什么重要:正交的方向互不干扰。由两两正交、长度为 1 的向量组成的基叫标准正交基(如标准基 e1,e2\mathbf{e}_1,\mathbf{e}_2)。在正交基下,求坐标只需做内积,计算极其简单,且数值稳定。

四、投影(Projection)

把向量 u\mathbf{u} 投影到向量 v\mathbf{v} 方向上,就是问「u\mathbf{u}v\mathbf{v} 方向上的影子有多长」:

projvu=uvvvv\text{proj}_{\mathbf{v}}\mathbf{u} = \frac{\mathbf{u}\cdot\mathbf{v}}{\mathbf{v}\cdot\mathbf{v}}\,\mathbf{v}

投影是「用低维去近似高维」的核心动作:保留能被表达的部分,丢掉垂直方向上装不下的部分。

五、最小二乘:投影的最大应用

当方程 Ax=b\mathbf{A}\mathbf{x}=\mathbf{b} 无解(方程比未知数多、数据有噪声)时,退而求「最接近」的解:把 b\mathbf{b} 投影到 A\mathbf{A} 的列空间上。结果就是正规方程:

AAx^=Ab\mathbf{A}^\top\mathbf{A}\,\hat{\mathbf{x}} = \mathbf{A}^\top\mathbf{b}

这正是线性回归的数学本质——找一条直线(超平面)使所有点到它的垂直距离平方和最小。「最小二乘」里的「二乘」就是 L2 范数的平方。

六、跨领域应用

AI —— 余弦相似度:判断两段文本(两个 embedding)意思像不像,用的就是余弦相似度 cosθ=uvuv\cos\theta = \frac{\mathbf{u}\cdot\mathbf{v}}{\|\mathbf{u}\|\,\|\mathbf{v}\|}。值越接近 1 越相似。RAG 检索、语义搜索、推荐系统全靠它。Transformer 的注意力分数也是 Query 与 Key 的内积。

AI —— 回归与正则化:上述最小二乘是最基础的预测模型;L1/L2 范数作为惩罚项控制过拟合。

区块链 / 编码 —— 正交与独立性:纠错码设计追求码字之间足够「远」(汉明距离大),思路与正交分解一致:让信息在互不干扰的方向上展开,才能最大限度容错。

七、小结

概念一句话理解典型应用
内积两向量多同向相似度、注意力分数
范数向量长度距离度量、正则化
正交互不干扰的方向标准正交基、稳定计算
投影用低维近似高维最小二乘、降维

下一节:一个变换里是否有「不被旋转、只被拉伸」的特殊方向?这就是特征值与特征向量


八、进阶:Gram–Schmidt 正交化

给一组线性无关但不正交的向量,怎么造出一组正交基?Gram–Schmidt 的思路:逐个加入向量,每次减去它在已有正交方向上的投影,只留下「新方向」。

uk=vkj<kprojujvk\mathbf{u}_k=\mathbf{v}_k-\sum_{j<k}\text{proj}_{\mathbf{u}_j}\mathbf{v}_k

再各自归一化(除以自己的范数),就得到标准正交基。这正是第 4 节「投影」的直接应用:正交化 = 不断减投影。

九、QR 分解

Gram–Schmidt 的矩阵形式就是 QR 分解:把 A\mathbf{A} 拆成正交矩阵 Q\mathbf{Q} 与上三角 R\mathbf{R}

A=QR\mathbf{A}=\mathbf{Q}\mathbf{R}

它是数值上解最小二乘的首选:Ax=b\mathbf{A}\mathbf{x}=\mathbf{b} 的最小二乘解可化简为 Rx=Qb\mathbf{R}\mathbf{x}=\mathbf{Q}^\top\mathbf{b}(一个三角系统),比直接解正规方程 AA\mathbf{A}^\top\mathbf{A} 数值更稳(避免了条件数被平方)。

十、数字例题(步步算)

u=[34]\mathbf{u}=\begin{bmatrix}3\\4\end{bmatrix} 投影到 v=[10]\mathbf{v}=\begin{bmatrix}1\\0\end{bmatrix}

projvu=uvvvv=31[10]=[30]\text{proj}_{\mathbf{v}}\mathbf{u}=\dfrac{\mathbf{u}\cdot\mathbf{v}}{\mathbf{v}\cdot\mathbf{v}}\mathbf{v}=\dfrac{3}{1}\begin{bmatrix}1\\0\end{bmatrix}=\begin{bmatrix}3\\0\end{bmatrix}

几何上就是取 u\mathbf{u} 的 x 分量。垂直残差 uproj=[04]\mathbf{u}-\text{proj}=\begin{bmatrix}0\\4\end{bmatrix},与 v\mathbf{v} 内积为 0,正交,符合预期。

再算余弦相似度:cosθ=351=0.6\cos\theta=\dfrac{3}{5\cdot1}=0.6

十一、NumPy 代码

import numpy as np

u = np.array([3.0, 4.0])
v = np.array([1.0, 0.0])

proj = (u @ v) / (v @ v) * v
print("投影 =", proj)                         # [3. 0.]
print("余弦相似度 =", u @ v / (np.linalg.norm(u)*np.linalg.norm(v)))  # 0.6

# QR 分解解最小二乘
A = np.array([[1.0, 1], [1, 2], [1, 3]])      # 拟合 y = a + b·x
y = np.array([1.0, 2, 2])
Q, R = np.linalg.qr(A)
beta = np.linalg.solve(R, Q.T @ y)
print("最小二乘解 (截距, 斜率) =", beta)

# 等价的一行写法
print("lstsq =", np.linalg.lstsq(A, y, rcond=None)[0])

十二、动手算一算

  1. 两个 embedding 余弦相似度为 0 意味着什么?为 -1 呢?
  2. 为什么推荐系统多用余弦相似度而非欧氏距离?
  3. [11],[10]\begin{bmatrix}1\\1\end{bmatrix},\begin{bmatrix}1\\0\end{bmatrix} 用 Gram–Schmidt 正交化。

答案:(1) 0=语义无关(正交);-1=语义完全相反。(2) 余弦只看方向不看长度,能消除文本长短、向量模长差异的影响。(3) 取 u1=12[11]\mathbf{u}_1=\frac{1}{\sqrt2}\begin{bmatrix}1\\1\end{bmatrix}v2=[10]\mathbf{v}_2=\begin{bmatrix}1\\0\end{bmatrix} 减去在 u1\mathbf{u}_1 上的投影 12[11]\frac12\begin{bmatrix}1\\1\end{bmatrix}[0.50.5]\begin{bmatrix}0.5\\-0.5\end{bmatrix},归一化为 12[11]\frac{1}{\sqrt2}\begin{bmatrix}1\\-1\end{bmatrix}