Skip to content

向量的点积 -- 从投影到相乘

点积(Dot Product)是 AI 中使用频率最高的向量运算。

全连接层的计算、注意力机制的相似度匹配——它们的核心都是点积。

点积有 两种等价的视角,理解它们之间的桥梁是本章的核心收获。

视角一:代数计算

对应位置的元素相乘,然后求和。

$ \mathbf{a} \cdot \mathbf{b} = \sum a_i b_i $

例如:(2,3) · (4,1) = 2×4 + 3×1 = 11

视角二:几何直觉

将一个向量投影到另一个向量上,然后两段长度相乘。

$ \mathbf{a} \cdot \mathbf{b} = |\mathbf{a}| |\mathbf{b}| \cos\theta $

夹角 θ 越小,点积越大

两种算法得出的是同一个值——这是数学中一个极其优雅的等式。

点积的正负号揭示了方向关系

<90°

点积 > 0

方向大致相同

=90°

点积 = 0

方向垂直(正交)

>90°

点积 < 0

方向大致相反


生活例子

购物账单:数量 × 单价

你买了 2 瓶可乐(每瓶 3 元)、3 包薯片(每包 5 元)、1 桶泡面(每桶 4 元)。

数量向量 (2, 3, 1) 和价格向量 (3, 5, 4) 的点积就是总价:2×3 + 3×5 + 1×4 = 25 元。

推购物车:力 × 位移

你推购物车的力是一个向量(有大小和方向),车的位移是另一个向量。

物理学中,功 = 力在位移方向上的分量 × 位移大小 = 力向量与位移向量的点积。

如果你向侧面推(垂直方向),完全不做功——点积为零。


数学定义

代数定义

ab=_i=1na_ib_i=a_1b_1+a_2b_2++a_nb_n

几何定义

ab=abcosθ

两个定义的桥梁:求夹角

cosθ=abab

这意味着:给定两个向量的坐标,就能算出它们之间的夹角,不需要量角器

运算性质

性质公式说明
交换律$ \mathbf{a} \cdot \mathbf{b} = \mathbf{b} \cdot \mathbf{a} $顺序不影响
分配律$ \mathbf{a} \cdot (\mathbf{b} + \mathbf{c}) = \mathbf{a}\cdot\mathbf{b} + \mathbf{a}\cdot\mathbf{c} $可先加再点积
自身点积$ \mathbf{a} \cdot \mathbf{a} = |\mathbf{a}|^2 $向量与自己的点积 = 长度的平方

Python 动手实践

实例

python

import numpy as np

a_runoob = np.array([2, 3, 1])

b_runoob = np.array([4, 1, 2])

# 方法1:np.dot()

dot1 = np.dot(a_runoob, b_runoob)

# 方法2:@ 运算符(推荐)

dot2 = a_runoob @ b_runoob

# 方法3:手写验证

dot3 = sum(a_runoob[i] * b_runoob[i] for i in range(len(a_runoob)))

print("a · b =", dot1)   # 13

print("三种方法结果一致:", dot1 == dot2 == dot3)

# 用几何定义反推夹角

norm_a = np.linalg.norm(a_runoob)

norm_b = np.linalg.norm(b_runoob)

cos_theta = dot1 / (norm_a * norm_b)

theta_deg = np.degrees(np.arccos(cos_theta))

print(f"||a||={norm_a:.2f}, ||b||={norm_b:.2f}, cosθ={cos_theta:.4f}")

print(f"夹角 = {theta_deg:.1f}°")

# 验证几何公式

verify = norm_a * norm_b * cos_theta

print(f"||a||·||b||·cosθ = {verify:.4f} (与点积一致)")

# 不同夹角的演示

print("\n[1,0] · [0.8,0.6] =", np.array([1,0]) @ np.array([0.8,0.6]), " (锐角,正)")

print("[1,0] · [0,1] =", np.array([1,0]) @ np.array([0,1]), " (直角,零)")

print("[1,0] · [-1,0] =", np.array([1,0]) @ np.array([-1,0]), " (钝角,负)")
python
a · b = 13
三种方法结果一致: True
||a||=3.74, ||b||=4.58, cosθ=0.7580
夹角 = 40.7°

[1,0] · [0.8,0.6] = 0.8  (锐角,正)
[1,0] · [0,1] = 0  (直角,零)
[1,0] · [-1,0] = -1.0  (钝角,负)

交互式点积演示

拖动向量 a 和 b 的端点,观察点积值和夹角如何变化。点积的正负决定了锐角/钝角/直角:


AI 中的应用场景

全连接层 = 点积的批量计算

一个神经元计算 $ y = w_1x_1 + w_2x_2 + \cdots + w_nx_n + b $。加和部分就是权重向量 w 和输入向量 x 的 点积

当你看到一个全连接层 nn.Linear(784, 256),它在数学上做的事就是:256 个神经元,每个神经元拿自己的权重向量(784 维)与输入向量做点积,再加上偏置。256 个点积并行计算 = 矩阵乘法。

注意力机制 = 点积 + Softmax

Transformer 的核心操作:Query 向量与 Key 向量做点积,结果越大表示两者越「相关」。

Attention(Q,K,V)=softmax(QKTd_k)V

$ QK^T $ 是 seq_len × d_k 矩阵与 d_k × seq_len 矩阵的乘法,结果矩阵中位置 (i, j) 的值 = 第 i 个 Query 与第 j 个 Key 的点积。这个值越大,表示第 i 个位置对第 j 个位置的「注意力」越高。

除以 $ \sqrt{d_k} $ 是为了防止点积值过大导致 Softmax 梯度消失。GPT、BERT、Claude 等所有现代大语言模型都基于这个点积注意力机制。

推荐系统中的相似度计算

用户向量与物品向量做点积,得到用户对该物品的「偏好分数」。这就是矩阵分解推荐算法的核心——评分矩阵 ≈ 用户隐向量矩阵 × 物品隐向量矩阵的转置。


AI 思考中...

向量的加法与数乘 — 几何视角

向量的模长与余弦相似度

基于 VitePress 构建,部署于 GitHub Pages