【LLM】从零开始学大语言模型 | SSM篇 | 3.5 | 数学知识前置讲解
数学知识前置讲解:后续优化篇中一定会用到的数学工具 在接下来的 SSM 优化系列文章中,我们会频繁用到一些超出本科线性代数和高等数学范畴的数学知识和算法思想。本文集中讲解这些前置知识,让读者在后续阅读中不会因为数学工具的陌生而阻碍对核心思想的理解。 本文假设读者已具备线性代数基础(矩阵运算、特征值、矩阵指数)、高等数学基础(微分方程、积分)以及生成函数的基本概念。在此基础上,本文重点讲解两个读者可能尚未接触的领域:矩阵运算的计算复杂度分析和快速傅里叶变换(FFT)。同时也会简要介绍 Cauchy 矩阵和递推与卷积的联系。 一、矩阵运算的计算复杂度 SSM 优化的核心目标之一,就是把 $O(N^3)$ 的密集矩阵运算降到 $O(N)$。要理解为什么这是可能的,我们需要先理解:不同矩阵运算的复杂度分别是多少,以及为什么是这个数量级。 1. 为什么需要关心复杂度 在深度学习中,“一个算法能不能用"不仅取决于它在数学上是否正确,还取决于它在工程上是否可行。HiPPO 给出了理论上最优的 $\mathbf{A}$ 矩阵,但由于密集矩阵运算的复杂度过高,直到 S4 通过 DPLR 结构将其优化到可接受的范围,这个理论优势才真正落地。 这里还有一个常被跳过的小票据:S4 在效果上的表现,最早是靠 Long Range Arena(LRA)这类长序列基准里的显著结果让大家信服的。比如在 LRA 六项任务里,S4 的算术平均约为 81.84%,而标准 Transformer 约为 45.32%;到了最长的 Path-X(长度 16000)任务上,Performer、BigBird 这些高效注意力方法也和标准 Transformer 一样崩溃至 0%,S4 仍然达到 86.73%。有的总结材料里会把 S4 的平均写成约 86.1%,这个数和从六项明细算出的 81.84% 并不完全一致,可能来源于不同报告版本或平均方式的差异,所以引用时最好还是以逐任务明细为准。 2. 矩阵-向量乘法:$O(N)$ 与 $O(N^2)$ 的区别 一般矩阵乘向量: 设 $\mathbf{A} \in \mathbb{R}^{N \times N}$,$\mathbf{h} \in \mathbb{R}^N$,计算 $\mathbf{y} = \mathbf{A}\mathbf{h}$。矩阵 $\mathbf{A}$ 有 $N^2$ 个元素,每个输出分量 $y_i = \sum_{j=1}^{N} A_{ij} h_j$ 需要 $N$ 次乘法和 $N-1$ 次加法。总共 $N$ 个分量,总计算量为 $N \times N = N^2$ 次乘法,即 $O(N^2)$。 ...