数学基础

矩阵乘法(matrix multiplication)

/ MAY-triks mul-tih-plih-KAY-shun /

把两个矩阵相乘,其实就是一口气做许多个点积,再把答案摆进一张新的网格里。要算出结果中第 i 行、第 j 列该填的那个数,你就取第一个矩阵的第 i 行、第二个矩阵的第 j 列,对齐、逐项相乘、再相加——这就是一个点积。把每一个 (i, j) 格子都这样填满,你就得到了乘积矩阵。

有一条不能破的规矩:内侧的维度必须相等。一个 A×B 的矩阵乘以一个 B×C 的矩阵是行得通的(两个 B 在中间相接),结果是 A×C;其它情形干脆就没有定义。还有一个意外:顺序很重要。普通数字里 3×4 等于 4×3,矩阵乘法却通常不满足交换律——把两个矩阵对调,结果一般会不一样,甚至根本算不出来。

这是现代 AI 里跑得最频繁的一项计算。神经网络的一层,靠把输入乘以一个权重矩阵来做变换;层层堆叠,就是把矩阵乘法层层堆叠。正因为这些运算如此规整、重复,GPU、TPU 这类专用芯片才被造出来,以惊人的速度横扫它们——这在很大程度上正是深度学习得以变得实用的原因。人们谈论训练一个巨型模型的开销时,谈的多半就是堆积如山的矩阵乘法的代价。

[ [1, 2], [3, 4]] 乘以 [ [5, 6], [7, 8]]:结果的左上角是行 [1, 2] 与列 [5, 7] 的点积 = 1×5 + 2×7 = 19。把四个格子都算完,得到 [ [19, 22], [43, 50]]。把顺序对调,得到的却是 [ [23, 34], [31, 46]]——一个不同的矩阵,足见顺序不是白给的。

每个输出格子,都是某一行与某一列的一个点积;而且 A×B 与 B×A 并不相同。

矩阵乘法不是逐元素相乘——那种不同而更简单的运算叫逐元素积(哈达玛积)。而且既然顺序重要,就要随时留意哪个矩阵在左边;把它们对调,可能会悄无声息地把模型弄坏。

又称
矩阵乘法矩陣乘法matmulmatrix product