- 機器學習編程:從編碼到深度學習
- (意)保羅·佩羅塔
- 1053字
- 2021-06-01 17:13:25
4.2.1 矩陣乘法
你有沒有思考過為什么機器學習程序通常需要在那些巨大的GPU計算架構上完成運行?這是因為機器學習系統的大部分時間都在做一種特定的運算,這種運算就是大規模的矩陣乘法運算,這種運算在GPU上的計算速度特別快。
為介紹矩陣乘法,我們先在這里給出一個“黃金法則”,即當且僅當第二個矩陣的行數與第一個矩陣的列數相同時,才可以將這兩個矩陣相乘,如下圖所示:

M1是(4,3)矩陣,M2是(3,2)矩陣。二者可以相乘嗎?要回答這個問題,我們列出如下矩陣乘法運算的形式:

請看乘法運算中兩個矩陣的內部維數。如果這兩個矩陣的內部維數相等,就可以把這兩個矩陣相乘,乘積的結果將是具有外部維數的矩陣,在本例中是(4,2):

下面讓我們來看看具體實例,從簡單的矩陣開始,即單行矩陣與單列矩陣的乘法,如下圖所示:

首先,檢查一下該矩陣乘法是否有效。第一個矩陣是(1,3),第二個矩陣是(3,1)。根據黃金法則,(1,3)乘(3,1)是成立的,并將返回矩陣(1,1)——一個只包含一個元素的矩陣。
要想計算這個元素,需要將M1中的每個元素乘以M2中的每個對應元素——第一個乘第一個,第二個乘第二個,以此類推。然后把它們加起來。

該矩陣乘法的結果如下所示:

劇透預警:聰明的讀者也許已經注意到了矩陣乘法與4.1節末尾內容的相似之處。你們可能已經猜到了,這種相似并非巧合。在我們介紹完矩陣乘法之后,將使用這種相似建立多重線性回歸模型。
當矩陣包含多個行和多個列的時候又會怎樣呢?在這種情況下,我們還是使用相同的行列計算方法,但是會將第一個矩陣的每一行與第二個矩陣的每一列進行運算。運算結果M3中的每個元素(i,j)是矩陣M1的第i行與矩陣M2的第j列的乘積:

具體實例如下所示:

現在我們來檢查一下M3中的元素,比如元素M3[0][1]為40。根據黃金法則,M3[0][1]應該是矩陣M1的第0行與矩陣M2的第1列相乘的結果,如下圖所示:

相應的行列乘積結果是2*-3+3*12+5*2=40,和我們預期的一樣。對矩陣M3中每個元素重復使用這個計算過程,就得到了矩陣乘法的運算規則。
注意,與常規的實數乘法運算不同的是,在矩陣乘法運算中運算對象的次序很重要。如果交換矩陣M1和M2在乘法運算中的次序,那么通常會得到一個不同的結果,而且在多數情況下根本無法進行乘法運算。例如,我們不能計算M2乘M1,因為(3,2)·(4,3)的兩個內部維數不相等。
本書會涉及大量的矩陣乘法運算,但是我們將使用工具NumPy獲得計算結果,而不是進行手工計算。如果你記住了黃金法則就會容易很多:對于矩陣乘法運算,內部維數必須相同,外部維數是運算結果矩陣的維數。對于我們給出的例子,矩陣(4,3)與矩陣(3,2)相乘,得到的乘積結果是一個(4,2)矩陣。
這就是矩陣乘法的原理。下面我們學習矩陣轉置運算。