课程/M00/数学语言:集合、映射与求和符号
M00 · 准备:数学语言核心约 35 分钟

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. 的指标、上下限,分别对应代码里的什么?
  2. 为什么哑指标写错一个字母,两个完全不同的信道会算出相同输出?
  3. 看到一行三重求和的公式,你怎么判断哪一重能变成矩阵乘?

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. 常见误区

  1. 误区: 里的 是一个具体数字。 纠正: 是哑指标,只在求和内部有意义;求和结束后结果与 无关。

  2. 误区:。 纠正:那是逐元素积 。矩阵乘法的 要对中间维度 求和,混合了整行与整列。

  3. 误区: 和 是一回事。 纠正:前者是元素属于集合,后者是集合包含集合。 是错的, 才对。

  4. 误区:公式里没写形状,所以形状不重要。 纠正:论文常省略形状,但每个运算都隐含形状约束。读公式时应在心里补上 。

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. 练习

  1. 概念:把「 可逆当且仅当 」翻译成不含逻辑符号的中文,并说明它等价于「 只有零解」。
  2. 计算:展开 。
  3. 计算:设 ,,用指标公式求 与 。
  4. 场景:把 展开成求和形式,并指出每一项对应什么。
参考答案
  1. 矩阵 可逆,当且仅当它的行列式不为零;这等价于齐次方程 只有零解(没有非零向量被压成零)。
  2. :;:;:;总和 15。
  3. ;。
  4. 设残差 ,则 ;每一项是第 个输出分量的平方误差。

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 标量、向量、矩阵、张量:按轴理解

返回 M00 导览去练习场

随堂测 · 4 题

数值难度 1第 1 / 4 题
展开并计算 。

源文件:00-准备/02-数学语言-集合映射与求和.md

输入关键词开始搜索