点积是什么
从 Bit 到 AGI · 第二章:数学(Math) · 点积是什么
矩阵乘法 的每个元素,都是一行与一列的点积。Self-Attention 里 的每个得分,也是两个向量的点积。本篇定义点积、给出几何意义(投影与夹角),并量化 attention 里 次点积的开销——读 Transformer 论文公式时,每一行 都应对应本章定义。
直觉:两个列表「有多对齐」
推荐系统:用户向量 、物品向量 ,点积越大 → 越匹配。
NLP:query 向量与 key 向量点积大 → 语义相关,attention 权重大。
定义
点积(dot product,内积):
要求 ,同维。
几何形式:
为夹角。(同向)→ 点积最大;(正交)→ 点积 0。
矩阵乘法连接:
例子
例 1:手算
,
例 2:Attention 得分
,scaled dot-product:
缩放因子 : 大时点积方差大,softmax 易饱和。设 ,。
import numpy as np
q = np.array([1.0, 0.0, 1.0, 0.0])
k = np.array([1.0, 1.0, 1.0, 0.0])
dk = len(q)
score = q @ k / np.sqrt(dk)
print(f"scaled score = {score:.3f}") # 1.000例 3:Embedding 相似度
两个 token embedding 点积 ≈ 共现/语义相似度(未归一化时受模长影响)。实践中常用余弦相似度 ,只比方向。
| 度量 | 公式 | 范围 |
|---|---|---|
| 点积 | ||
| 余弦 |
量化
单次点积(维度 ): 次乘法 + 次加法 ≈ FLOPs。
Self-Attention(序列长 ,头维 , 头,batch ):
- QK^T:每个 query 与 个 key 做点积 → 次点积,每次 FLOPs
- 总计 QK^T: FLOPs
| , , QK^T FLOPs | |
|---|---|
| 512 | ≈ 2.1 GFLOPs |
| 4096 | ≈ 137 GFLOPs |
| 8192 | ≈ 549 GFLOPs |
FlashAttention 不改变数学结果,通过 IO 感知的 tiling 减少 HBM 读写,加速实现。
工程视角:Attention 里的点积
Scaled dot-product attention 论文(Vaswani et al.)核心:。每个 得分是 query 与 key 的点积——语义匹配度的可微 proxy。
Multi-Query / Grouped-Query Attention(MQA/GQA):多个 query 头共享同一组 K/V,减少 KV cache 显存——推理长 context 时 KV cache 是瓶颈。数学仍是点积,只是 K/V 头数 。
ALiBi / RoPE 等位置编码不改变点积形式,但修改 使得分含相对位置信息——实现「远距离衰减」等 inductive bias。
点积 vs 加性 attention(Bahdanau):。Transformer 选点积因可并行 GEMM,GPU 友好。
| 变体 | 得分计算 | 复杂度 |
|---|---|---|
| Dot-product | ||
| Linear attention | kernel trick 近似 | 某些设定 |
FlashAttention 数学等价标准 attention,IO 优化:分块算 ,softmax 与 乘在同一 SRAM 块完成,减少 HBM 读写 次。
Embedding 检索(RAG):query 与文档 chunk embedding 点积排序,top-100 送 LLM——百万库用 FAISS/HNSW 近似 MIPS,不必精确全排序。
常见误区
- 点积大 ≠ 一定相似:若 很大,点积 inflate;比相似度用余弦。
- 但矩阵乘 不可交换:。
- Attention 用点积不用欧氏距离:点积 + softmax 可微、可并行;距离 展开后含 项,相关但不等价。
动手试一试
import numpy as np
def cosine_sim(a, b):
return (a @ b) / (np.linalg.norm(a) * np.linalg.norm(b))
a = np.array([3.0, 0.0])
b = np.array([1.0, 0.0])
c = np.array([0.0, 5.0])
print(f"a·b={a@b}, cos={cosine_sim(a,b):.2f}") # 同向 cos=1
print(f"a·c={a@c}, cos={cosine_sim(a,c):.2f}") # 正交 cos=0深入一层:双线性形式
点积是双线性的:,。Attention score 对 分别线性,整体非线性来自 softmax。
双线性 pooling(早期 VQA):, 可学习——比纯点积 expressivity 强,但参数 。Transformer 用 multi-head 多个点积空间代替单一大 。
Kernel trick 视角:点积 是线性 kernel; 大则内积空间「相似」。RBF kernel 可 infinite-dim 内积展开——SVM 时代经典;深度网络学 feature 使点积有效。
Cosine vs dot 选型:OpenAI embedding API 文档常建议 normalize 后用内积;未 normalize 时内积偏向长文档。工程 checklist:检索 pipeline 统一度量。
Self-attention 的 矩阵 rank ( 小时低秩)——长序列 大时 矩阵仍满 rank 最多 ,但有效信息常低秩;LoRA on attention 利用此结构。
在 Attention 公式里的位置
。 的 元:第 个 query 与第 个 key 的点积。mask 把非法 的 score 置 ,softmax 后权重为 0——不参与加权和。
Multi-head: 组独立的 ,每组 。head 数翻倍 → QK^T FLOPs 翻倍(每 head 维度减半,对消一半;总 不变),但投影 GEMM 随 结构变化——读 config 时 num_attention_heads 与 head_dim 要一起算。
读者备忘
点积 = 同行列对应相乘再求和 = 。 Attention score 是 scaled dot-product。每次 FLOPs;全长 attention 总 FLOPs 。检索用归一化 embedding + 内积 ≈ 余弦相似度。矩阵乘 即第 行与第 列的点积——点积是 GEMM 的原子操作。
本章内容面向程序员:公式可手推,数字可心算,代码可运行。遇到符号不熟时,先查本篇定义表,再查总结篇速查表,不必一次背熟全部细节。
复习建议:先通读直觉与定义,再跑代码块验证数字,最后看读者备忘与小结。与第一章的 float 数组、SIMD、GPU 并行对照阅读,印象更深。后续章节会在 Transformer、训练、推理中反复调用本章符号,值得在笔记里自建一张 shape/FLOPs 速查表。
动手练习:把本篇公式抄进 Jupyter,换三组数字复算;与 PyTorch 张量运算对照 shape 与数值。本章目标是建立可计算的数学直觉,而非完成证明。每篇至少两个数值例子,建议你都亲自算一遍或跑一遍代码。
量化检查清单:写出符号定义、至少一个带具体数字的例子、一个 FLOPs 或字节数估算、一个常见误区。对照写作规范,缺一项就补笔记。链接下一篇前,用一句话复述本篇核心定理或公式。
下一篇链接见文末箭头;全章顺序见 meta.json 与本章 index。建议按顺序阅读,勿跳过向量与矩阵两篇基础即可继续。
小结
点积 衡量向量对齐程度;矩阵乘、attention 得分皆由此构成。Scaled dot-product 除以 稳定 softmax。复杂度 每次,attention 中 。下一篇:范数与距离——模长、余弦、欧氏距离,与点积共同构成向量几何工具箱。
→ 下一篇:范数与距离