0.2 数学语言:集合、映射与求和符号
本节位置:模块 0 · 准备 | 前置:0.1 | 预计:35 分钟
一句话:数学符号不是装饰,它把「对谁、做什么、做几次」压缩成一行;学会展开它,就学会了读论文。
0. 场景引入
凌晨 1 点,一座 5G 基站的基带板还在跑压力测试。板子上 64 根天线、16 层空间复用、3276 个子载波;子载波间隔 30 kHz,意味着每个 OFDM 符号只有 33.3 微秒的时间预算。
物理层规范把接收信号写成一行:
你要把它变成能在 DSP 上跑的代码。逐子载波算: 次复数乘加;乘上 3276 个子载波、每秒 3 万个符号,约 FLOP/s——806 GFLOP/s,而一块基带 DSP 大约只有 100 GFLOP/s。
于是真正的决定是:哪几个指标能塞进矩阵乘的批量维一次算完,哪一个必须留在循环里。把 16 层放在列维,3276 个子载波放在批量维,一次调用就能算完,但要求 在内存里连续;拆成 3276 次调用则每次都有固定开销。押错了,一个符号要算 27 毫秒,比 33.3 微秒的预算慢约 800 倍,用户看到的是掉线。
读完本节,你应该能回答三个问题:
- 的指标、上下限,分别对应代码里的什么?
- 为什么哑指标写错一个字母,两个完全不同的信道会算出相同输出?
- 看到一行三重求和的公式,你怎么判断哪一重能变成矩阵乘?
1. 直觉
把数学表达式想成一份浓缩咖啡:一个 背后可能是一万次加法。读公式要做的是「加水还原」:
符号形式: Σ_{i=1}^{N} x_i
还原后: x_1 + x_2 + x_3 + ... + x_N
💡 一句话直觉:下标是循环变量, 是循环,集合是类型声明,映射是函数签名。
这个类比在哪里失效?数学符号允许同时有多个指标、允许无穷和、允许「对所有」这类逻辑量词;它们不总是能直接翻译成一段 for 循环。
1.1 它在现实世界里对应什么
符号系统像一张工单:集合是物料清单(有哪些东西可用),映射是工序说明(输入什么、产出什么), 是「同一道工序重复 遍」的盖章,哑指标是那道工序的工位号。
量级:一个 4096 维点积里的 就是 4096 次乘加。一层注意力里, 个 token 两两打分,每一对背后是一个长度 的 :
读一行公式时,你其实在数「这台机器要转多少圈」。
这个类比在哪里失效?工单上的工序是串行执行的,而公式里同时出现的多个指标没有规定顺序:编译器、GPU 可以重排、并行、融合它们。同一个 在不同实现里能差 100 倍速度——数学只约束结果,不约束过程。
2. 定义
2.1 集合与元素
- : 是集合 的元素。
- : 的每个元素都在 里(子集)。
- :全体实数;: 个实数组成的有序组;: 行 列实矩阵。
- :空集。
- :满足条件 的所有 组成的集合。
例:,就是平面上的所有点。
这套「元素—集合—子集」的写法沿用朴素集合论(naive set theory)的传统;哈尔莫斯 的小册子是这方面最常被引用的入门书,本节的 、 与 都按它的写法。
2.2 映射
映射(map / function) 给每个 指定唯一的 。
- 叫定义域(domain), 叫陪域(codomain);
- 所有实际输出组成的集合叫像(image):;
- 复合:,先 后 。
线性代数里的主角是线性映射 ,写成 。
2.3 逻辑量词
- :对所有(for all);
- :存在(there exists);
- :推出;:等价;
- 「 可逆 」读作: 可逆当且仅当行列式不为零。
2.4 求和与求积
- 是哑指标(dummy index),换成 不改变结果:。
- 双重求和: 先固定 ,把第 行的 项加起来,再把 行加起来。
- 常数的求和:。
- 线性性:。
- 交换次序:在有限项时,。
同一指标在一项里出现两次就默认对它求和、不再写 ,这是爱因斯坦在广义相对论里引入的省略约定。本课程为初学者仍显式写 ,但论文里你会大量看到省略形式:矩阵乘法的 ,常被直接写成 。
一个嵌套求和的例子:训练损失
读作:对 个样本,各自算一次预测误差的平方和(内层 藏在范数里),再取平均(外层的 )。两层嵌套就是两个循环:外层过样本,内层过输出维度。
2.5 指标记号与矩阵
矩阵 的元素记作 : 是行, 是列。
矩阵乘法用指标写出来只有一行:
读法: 的第 行第 列,等于「 第 行」与「 第 列」逐项相乘再求和。这就是「行乘列」规则的来源(第 3.3 节从四个角度解释它)。
2.6 分段函数与常用函数
的下标 表示「输出向量的第 个分量」;分母对所有分量求和,保证输出非负且和为 1。
3. 为什么这样定义
如果不用指标和 ,矩阵乘法要写成:
「结果的第 1 行第 1 列是 ,第 1 行第 2 列是……」
这会随维度增长爆炸。指标记号把「位置」参数化, 把「重复」参数化,于是任意维度的规则都能用同一行写完。这是数学符号的核心价值:用结构代替枚举。
映射的写法 则强制你声明「输入是什么类型、输出是什么类型」。在写代码时,这等价于函数签名;在推形状时,这能避免把 和 搞混。
3.1 反事实:换一种聚合/指标会坏在哪
反事实 A:用 代替求和。 训练损失本来是 个样本损失的平均,若改成 ,取三个样本的损失 :
看起来只是「更保守」?把第 1 个样本的损失从 改成 , 仍然是 ,该样本的梯度为 0——它无论错成什么样,都不会让模型改动一个参数。模型可以把 99% 的输入答错,而损失函数毫无反应。
反事实 B:把哑指标写成自由指标。 规范写 ,手滑写成 (对 求和),取两个信道
两者的列和都是 。按错误公式,对任意输入 ,这两个完全不同的信道给出完全相同的输出。「收发全错位」的信道会被当成正常信道,解出的符号全是噪声——而代码一行错都不报。
4. 性质与推导
4.1 矩阵乘法的指标推导
设 ,,则 ,且
为什么是 项? 因为 的列数等于 的行数,中间维度 必须匹配,否则乘法无定义。这也解释了形状规则:,中间两个 抵消。
4.2 二次型的指标写法
对 、:
读法:把 的每个元素乘以对应的两个坐标,再全部加起来。这个式子在第 6.5 节(二次型)会反复出现。
4.3 常用求和恒等式
第一条说明「离均差之和为零」,是方差与 PCA 的基础;第三条是等比数列,在分析迭代算法收敛时有用。
5. 例子
5.1 手算:展开双重求和
先固定 :。 再固定 :。 总和 。
也可以交换次序:。结果相同。
5.2 手算:矩阵乘法的一个元素
继续算完:。注意 是 , 是 ,结果是 。
5.3 场景:读一条 softmax 公式
- :模型对词表中 个词的打分(logits);
- 分子 :把第 个打分变成正数;
- 分母:所有词的正数之和,充当归一化常数;
- 输出:第 个词的概率。
这条式子在第 11.11 节会结合「温度」再讲一次。
5.4 场景闭环:一个 OFDM 符号的 33 微秒
输入:一个符号的接收数据,形状 的复数矩阵(每个子载波 64 根天线的观测),complex64 约 ;信道估计 形状 ,约 26.8 MB。
计算:把子载波当作批量维,一次批量矩阵乘
复数乘加共 次;按一次复数乘加约 8 FLOP 估算, FLOP/符号,除以 得 806 GFLOP/s。
输出:64 根天线的合并信号 → 检测出 16 层符号 → 送 LDPC 解码。
成本:按 100 GFLOP/s 的 DSP 估算,需要 8 个核并行;若写成 3276 次 Python 循环,单核 1 GFLOP/s 要 27 ms,慢约 800 倍。更贵的其实不是 FLOP:26.8 MB 的 要在 33.3 μs 内喂进计算单元,折合 805 GB/s,已经超过片外内存带宽。
失败条件:
- 指标顺序错:把 与 相乘时广播成 ,中间张量 26.8 MB,每个符号都写一遍,带宽被打满、吞吐掉一个数量级。兜底:形状里显式写批量维,用
einsum标注指标名。 - 哑指标重名:同一层里两个 都用 ,实现时复用同一个循环变量,结果与公式不符但不报错。兜底:两个不同的手算例子交叉验证。
- 复数当实数:漏掉虚部,误码率上升几个数量级,用户看到的是视频卡顿、通话断续。
6. 常见误区
-
误区: 里的 是一个具体数字。 纠正: 是哑指标,只在求和内部有意义;求和结束后结果与 无关。
-
误区:。 纠正:那是逐元素积 。矩阵乘法的 要对中间维度 求和,混合了整行与整列。
-
误区: 和 是一回事。 纠正:前者是元素属于集合,后者是集合包含集合。 是错的, 才对。
-
误区:公式里没写形状,所以形状不重要。 纠正:论文常省略形状,但每个运算都隐含形状约束。读公式时应在心里补上 。
7. 概念网络
- 前置:0.1 为什么是线性代数 —— 知道矩阵是线性映射。
- 后续:0.3 张量 —— 把指标推广到多个轴。
- 后续:3.3 矩阵乘法 —— 用指标推导四种视角。
- 关联:8.5 矩阵求导 —— 指标记号让求导可机械执行。
8. 通往大模型:用指标读懂 attention
把 attention 写成指标形式(省略 batch 与头,只看单个头):
- :当前 token 的位置;:被关注的 token 位置;
- :第 个 query 与第 个 key 的点积(第 1.3 节);
- :softmax 后的注意力权重,对每个 满足 ;
- 输出是 个 value 向量的加权平均。
这行指标写法就是 Vaswani 等(2017)注意力公式的逐项展开:把矩阵形式 按 写开,就能看出每个 作用在哪个 上。
形状:,,,乘以 得 。
可检验结论:因为 softmax 对每个 query 行归一化,所以 attention 权重矩阵的每一行和为 1。跑 lab11 可以验证。
如果这一步算错,用户会看到什么:把 的归一化方向写反(本该对 求和,却对 求和),每一列和为 1 而每行和为 。此时输出不再是 个 value 的凸组合,而是一个长度随 增长的向量;它进入残差流后范数逐层放大,用户看到的是「越写越长、最后开始复读」。这类 bug 不会让 loss 立刻变成 NaN,只会让它「有点高」,所以最难查。
9. 练习
- 概念:把「 可逆当且仅当 」翻译成不含逻辑符号的中文,并说明它等价于「 只有零解」。
- 计算:展开 。
- 计算:设 ,,用指标公式求 与 。
- 场景:把 展开成求和形式,并指出每一项对应什么。
参考答案
- 矩阵 可逆,当且仅当它的行列式不为零;这等价于齐次方程 只有零解(没有非零向量被压成零)。
- :;:;:;总和 15。
- ;。
- 设残差 ,则 ;每一项是第 个输出分量的平方误差。
10. 一页速记
- 是元素属于, 是集合包含; 是 行 列矩阵。
- 映射 先声明输入输出类型;复合 从右往左算。
- 是把同类项压缩;哑指标可换名。
- :行乘列,中间维度必须相等。
- 读公式三步:谁是指标、谁在求和、每个符号什么形状。
- 物理意义 / 现实对应:一张工单——集合是物料清单,映射是工序, 是「重复 N 遍」的盖章;数学只约束结果,不约束执行顺序。
11. 参考文献与致谢
这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。
- 哈尔莫斯(Paul R. Halmos, 1960):Naive Set Theory。本页 §2.1–2.2 的 、、定义域/陪域/像,都按这本小册子的朴素集合论写法;它用最少的符号把「元素—集合—映射」讲清楚。Springer 1974 重印
- 爱因斯坦(Albert Einstein, 1916):Die Grundlage der allgemeinen Relativitätstheorie。引入「同一指标重复出现即求和」的省略约定,也就是本页 §2.4 里那套可以不写 的写法。Annalen der Physik 49
- Vaswani 等(2017):Attention Is All You Need。本页 §8 用指标展开的 attention 公式,其矩阵形式 出自这篇论文。arXiv:1706.03762
下一篇 → 0.3 标量、向量、矩阵、张量:按轴理解
随堂测 · 4 题
源文件:00-准备/02-数学语言-集合映射与求和.md