线性代数:坐标、点积、范数与相似度

本节目标

向量不是一串没有语义的数字。它通常表示同一对象在若干坐标轴上的分量,例如一条样本的特征、一次调用的质量指标,或一个文本 Embedding。学完本节,你应能区分坐标与对象,手算点积、长度、距离和余弦相似度,并知道这些量何时会误导。

坐标依赖约定

二维向量 表示“第一坐标为 3、第二坐标为 4”。要让它有工程意义,还要知道:

  • 每一维代表什么;
  • 单位是什么;
  • 维度顺序是否一致;
  • 是否做过中心化、缩放或归一化;
  • 缺失值和异常值如何处理。

把“延迟毫秒”和“成功率”直接放在同一向量里计算距离时,数值较大的延迟维可能主导结果。线性代数公式不会自动修复单位或数据语义。

向量加法与标量缩放

同维向量按坐标相加:

标量缩放把每个坐标乘同一个数:

线性组合 就是“先缩放,再相加”。后续的列空间、线性层和低秩分解都建立在这个操作上。

点积:对齐程度与加权和

两个同维实向量的点积:

例如 。点积有两种互补直觉:

  1. 代数视角:把对应分量相乘后求和,是线性模型的加权和。
  2. 几何视角:,同时受长度和夹角影响。

点积为 0 的非零向量正交。在二维平面里可理解为垂直;在高维空间里仍表示没有沿彼此方向的投影成分。

范数、距离与归一化

欧氏长度( 范数):

两点的欧氏距离是差向量的长度:

非零向量可归一化为单位向量:

归一化保留方向、去掉长度。零向量长度为 0,不能除以自身长度;工程实现必须明确拒绝或单独处理。

还有 范数 和最大范数 。不同范数定义不同的“近”,会改变正则化、最近邻和鲁棒性语义。

余弦相似度

对两个非零向量:

它在实向量空间中位于 :1 表示同方向,0 表示正交,-1 表示反方向。若向量都已做 归一化,余弦相似度就等于点积,且平方欧氏距离满足:

但这不表示余弦分数是“相关概率”。Embedding 模型、文本域、语言和预处理一变,分数分布与可用阈值都可能变化;阈值必须用代表性数据评测。

可运行的标准库示例

from math import fsum, sqrt
from typing import Sequence
 
 
def dot(left: Sequence[float], right: Sequence[float]) -> float:
    if len(left) != len(right) or not left:
        raise ValueError("vectors must be non-empty and have equal length")
    return fsum(a * b for a, b in zip(left, right))
 
 
def norm(vector: Sequence[float]) -> float:
    return sqrt(dot(vector, vector))
 
 
def cosine(left: Sequence[float], right: Sequence[float]) -> float:
    denominator = norm(left) * norm(right)
    if denominator == 0.0:
        raise ValueError("cosine is undefined for a zero vector")
    return dot(left, right) / denominator
 
 
x = (3.0, 4.0)
y = (4.0, -3.0)
assert dot(x, y) == 0.0
assert norm(x) == 5.0
assert abs(cosine(x, y)) < 1e-12
assert abs(norm((x[0] - y[0], x[1] - y[1])) - sqrt(50.0)) < 1e-12

这个示例用于验证公式,不是高性能向量库。生产代码还要检查非有限数、数据类型、批量形状和数值精度。

在 Agent 工程中的用途

  • 线性模型把特征向量与权重做点积得到得分。
  • Embedding 检索常比较归一化向量的点积或余弦相似度。
  • Attention 用 query 与 key 的点积形成相对打分,再经过缩放和 softmax;点积本身不是最终概率。
  • 梯度、残差和参数更新都可视作高维向量。
  • 多指标评测中的“距离”只有在单位、缩放和权重有明确含义时才可靠。

常见错误

  • 对不同维度或不同坐标语义的向量计算点积。
  • 把余弦相似度直接解释为正确率、置信度或因果关系。
  • 忘记处理零向量、NaN 和无穷值。
  • 归一化后仍声称保留了原向量长度信息。
  • 在高维空间只凭直觉设置相似度阈值,不做目标数据评测。

练习与自测

  1. 手算 的 、 与 范数。
  2. 证明两个单位向量的平方欧氏距离为 。
  3. 构造两个点积很大但余弦相似度不高的向量,解释长度的影响。
  4. 给标准库示例增加维度不等、空向量和零向量测试。
  5. 说明为什么更换 Embedding 模型后不能沿用旧的相似度阈值。
  • 我能从坐标语义解释一个向量。
  • 我能手算点积、范数、距离和余弦相似度。
  • 我知道归一化去掉了什么信息。
  • 我不会把相似度分数当作概率。

下一步:向量、矩阵与形状。

参考资料

核验日期:2026-07-14。