线性代数:坐标、点积、范数与相似度
本节目标
向量不是一串没有语义的数字。它通常表示同一对象在若干坐标轴上的分量,例如一条样本的特征、一次调用的质量指标,或一个文本 Embedding。学完本节,你应能区分坐标与对象,手算点积、长度、距离和余弦相似度,并知道这些量何时会误导。
坐标依赖约定
二维向量 表示“第一坐标为 3、第二坐标为 4”。要让它有工程意义,还要知道:
- 每一维代表什么;
- 单位是什么;
- 维度顺序是否一致;
- 是否做过中心化、缩放或归一化;
- 缺失值和异常值如何处理。
把“延迟毫秒”和“成功率”直接放在同一向量里计算距离时,数值较大的延迟维可能主导结果。线性代数公式不会自动修复单位或数据语义。
向量加法与标量缩放
同维向量按坐标相加:
标量缩放把每个坐标乘同一个数:
线性组合 就是“先缩放,再相加”。后续的列空间、线性层和低秩分解都建立在这个操作上。
点积:对齐程度与加权和
两个同维实向量的点积:
例如 。点积有两种互补直觉:
- 代数视角:把对应分量相乘后求和,是线性模型的加权和。
- 几何视角:,同时受长度和夹角影响。
点积为 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和无穷值。 - 归一化后仍声称保留了原向量长度信息。
- 在高维空间只凭直觉设置相似度阈值,不做目标数据评测。
练习与自测
- 手算 的 、 与 范数。
- 证明两个单位向量的平方欧氏距离为 。
- 构造两个点积很大但余弦相似度不高的向量,解释长度的影响。
- 给标准库示例增加维度不等、空向量和零向量测试。
- 说明为什么更换 Embedding 模型后不能沿用旧的相似度阈值。
- 我能从坐标语义解释一个向量。
- 我能手算点积、范数、距离和余弦相似度。
- 我知道归一化去掉了什么信息。
- 我不会把相似度分数当作概率。
下一步:向量、矩阵与形状。
参考资料
核验日期:2026-07-14。