數學基礎

矩陣乘法(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