向量与点积
两个向量的点积是对应坐标相乘,再把结果相加:w·x = w₁x₁ + w₂x₂。同一个数也等于 |w|·|x|·cos θ。对非零向量,正负由夹角决定,大小还受长度影响。线性分类器、神经网络层、注意力和向量检索都用到这种乘加运算。
计算过程没有测角或量长度:只做 total += w[i] * x[i]。结果却反映几何关系:同向为正,垂直为零,夹角超过 90° 为负。感知机分数、神经元激活前的值、注意力 logit 和部分相似度分数,都可用这套关系理解。
代数与几何
二维点积需要两次乘法、一次加法;d 维只是把循环延长。由此可得:
v·v = |v|²,所以|v| = √(v·v)。- 对非零向量,
cos θ = (w·x)/(|w||x|),可比较方向。 |x| cos θ是x在w方向上的有符号投影长度,因此点积等于|w| × 有符号投影长度。投影落在反方向时为负。
夹角小于 90°,点积为正;等于 90°,点积为零;大于 90°,点积为负。因此 w·x = 0 是经过原点、垂直于非零 w 的直线,把平面分成正负两侧。无偏置的线性分类器用它作边界。加入偏置 b 后,边界为 w·x + b = 0,方向不变,位置平移。
原始点积与余弦相似度
原始点积同时包含方向和长度。一个更长但方向较差的候选,可能超过短而同向的候选。正比例放大向量会放大点积,却不改变夹角。如果只想比较方向,用两向量长度的乘积作除数,得到余弦相似度。基于余弦的检索常先归一化向量。
若长度是模型评分规则的一部分,保留原始点积。模型内的线性打分和注意力常需要幅值,但向量长不自动等于经过校准的高置信度。是否归一化取决于要比较什么,不能仅凭“相似度”三个字决定。
逐步演示
默认 w = (3,1)、x = (1,2),每一步都可手算。
- 代数,第 1–4 拍。 两个箭头出现。辅助线先标出横坐标,记录
3 × 1 = 3;再标纵坐标,记录1 × 2 = 2。相加得w·x = 5。算法到这里已完成,后面解释这个 5。 - 几何,第 5–7 拍。
|w| = √10 ≈ 3.16,|x| = √5 ≈ 2.24。cos θ = 5/√50 = 1/√2 ≈ 0.707,所以夹角为 45°。从x端点向w所在直线作垂线,投影长度为5/√10 ≈ 1.58。乘回|w|得 5,与代数相同。图中约数相乘会有舍入差。 - 固定角度,第 8 拍。 虚线箭头把
x长度加倍。投影从约1.58变成3.16,点积从 5 变成 10,余弦仍为0.707。若放大后超出 ±5 平面,动画改为缩短一半,保持角度不变。 - 固定长度,第 9–13 拍。 虚线箭头沿圆周转动。与
w的夹角依次为 0°、45°、90°、135°、180°,点积依次为+7.07、+5、0、−5、−7.07。最大幅值为|w||x|,数值随余弦变化。 - 结论,第 14 拍。 默认点积
5 > 0,说明夹角小于 90°。正比例缩放不会改变这个符号;零倍缩放会失去方向,负倍缩放会反向。 - 边界,第 15 拍。 绘制
w·x = 0,正侧着色。两侧符号不同,这就是无偏置线性分类的几何基础。加入b后得到平行边界。
左侧记录代数,平面展示几何,每拍突出一个新事实。改变输入时,分别观察方向变化是否翻转符号、长度变化如何缩放数值。“双倍长度”预设会在较长向量上重跑整段计算;两个向量都加倍,点积变为四倍。
时间与空间复杂度
d 维需要 d 次乘法、d−1 次加法,时间 O(d)、额外空间 O(1)。系统成本还取决于点积次数:注意力要计算查询与键的配对分数,检索可能要评价大量候选。实际数值代码应使用 np.dot、torch.matmul 等优化实现;教材循环用于看清运算结构。
边界情况
- 零向量。 点积仍有定义且为零,但方向和余弦相似度无定义,因为分母为零。面板拒绝零向量,±5 网格内其他整数坐标对可用。
- 垂直。 两个非零向量也能点积为零。它表示没有该方向的投影,不表示输入不存在。
- 反向。 夹角超过 90° 时为负;分类器可把符号解释为边界另一侧。
- 共线。 同向达到
|w||x|,反向达到−|w||x|,由余弦的范围给出界限。 - 缩放。 固定方向时按比例改变点积。画布范围只决定示意箭头放大还是缩小,不改变这个规律。
常见错误
- 交叉相乘:
w₁x₂ + w₂x₁不是点积。w₁x₂ − w₂x₁则是二维叉积对应的有向面积,绝对值在垂直时最大。 - 用相加代替相乘。
w_i + x_i不能让w_i充当第i项的权重。 - 把点积当距离。大的正点积来自方向一致和长度,两个相距很远的端点也可得到大值。
- 跨长度直接比较方向相似性。只关心方向时应归一化。
- 把负数当计算失败。符号本身携带边界侧别信息。