文科生都能看懂的【機器學習中的】線性代數

七月線上實驗室發表於2018-04-03

作者:Niklas Donges

機器之心編譯

參與:Tianci LIU、思源


線性代數的概念對於理解機器學習背後的原理非常重要,尤其是在深度學習領域中。它可以幫助我們更好地理解演算法內部到底是怎麼執行的,藉此,我們就能夠更好的做出決策。所以,如果你真的希望瞭解機器學習具體演算法,就不可避免需要精通這些線性代數的概念。這篇文章中,我們將向你介紹一些機器學習中涉及的關鍵線性代數知識。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

線性代數是一種連續形式的數學,被廣泛應用於理工類學科中;因為它可以幫助我們對自然現象建模,然後進行高效的計算。但是,由於線性代數是一種連續而非離散的數學,因此,很多電腦科學家都不太瞭解它。另外,線性代數還在幾乎所有的數學學科中都擁有著核心地位:例如幾何學和泛函分析。

線性代數中的概念是理解機器學習理論所必需的基礎知識,尤其是對那些處理深度學習演算法的人而言。在剛接觸機器學習時,你可以不需要掌握線性代數。但到了一定程度後,當你希望更好地理解不同機器學習演算法運作原理時,線性代數就很有用了,它可以幫助你在開發機器學習系統時更好地做決策。

線上性代數中,我們使用線性方程來表示資料,並把它們寫成矩陣或向量的形式。因此,基本上你都是在與矩陣和向量打交道,而不是標量(我們會在文章的稍後部分介紹這些概念)。如果你能夠想到使用一個合適的庫,比如 NumPy,你就可以通過簡短的幾行程式碼,輕鬆實現複雜的矩陣乘法。請注意,這篇文章忽略了那些對機器學習並不重要的線性代數概念。

數學物件

640?wx_fmt=png

標量

標量就是一個簡單的數,比如 24。

向量

640?wx_fmt=png

向量是一個有序陣列,能夠寫成一行或者一列的形式。向量只包含一個索引,用來表示向量中的某個特定元素。比如 V_2 表示向量中的第二個元素,在上面淡黃色的圖中是-8。

矩陣

矩陣是一個有序的二維陣列,有兩個索引。第一個索引表示行,第二個索引表示列。例如,M_23 表示的是第二行、第三列的元素,在上面淡黃色的圖中是 8。矩陣可以有多個行或者列,注意一個向量也是一個矩陣,但僅有一行或者一列。

淡黃色圖中有一個矩陣的例子:一個 2×3 的矩陣 (行數×列數)。下圖中是另一個矩陣和對應的表示形式。

640?wx_fmt=png

張量

三維張量是按照一定規律排列在方格中的陣列,其中一個變數數字表示軸。張量有三個索引,其中第一個索引表示行,第二個索引表示列,第三個索引表示軸。例如,V_232 指向第二行、第三列、第二軸的元素,在下圖右邊的張量中表示 5。

640?wx_fmt=png

張量是上面談到的概念中最常用的一個,因為張量是一個多維陣列,同時可以是一個向量或者一個矩陣,具體取決於它的索引數量。例如,一階張量可以表示向量(1 個索引),二階張量可以表示矩陣(2 個索引),三階就是張量(3 個索引),更高階的稱為高階張量(超過 3 個索引)。

運演算法則

矩陣和標量的計算

如果你在一個矩陣上加、減、乘、除一個標量,你所做的就是直接對矩陣的每個元素進行這些數學運算。下圖給出了矩陣數乘的一個很好的例子。

640?wx_fmt=png

矩陣和向量的運算

640?wx_fmt=png

對一個矩陣乘以一個向量,可以理解為對矩陣的每一行乘以向量的每一列,運算結果會是一個向量,它的行數和矩陣的行數一樣。下圖展示了這是如何計算的。

為了更好地理解這個概念,我們詳細講解一下第二張圖中的計算步驟。為了得到結果向量中的第一個元素 16,選擇拿來和矩陣相乘的向量中的元素 1 和 5,把它們與矩陣第一行中的元素 1 和 3 相乘,像這樣:1*1 + 3*5 = 16。對矩陣第二行的元素進行相同的計算:4*1 + 0*5 = 4。同樣,再計算矩陣第三行的元素:2*1 + 1*5 = 7。

這裡還有另一個例子:

640?wx_fmt=png

在這裡,我們給出一個備忘錄:

640?wx_fmt=png

矩陣間的加減法

矩陣間的加減法非常簡單直接。這裡要求,兩個矩陣需要維度相同,運算結果也會是一個相同維度的矩陣。你只需要將第一個矩陣中的每一個元素和第二個矩陣中對應位置的元素相加或者相減就可以了。如下圖所示: 

640?wx_fmt=png

矩陣間的乘法

如果你知道如何計算矩陣和向量間的乘法,矩陣間的乘法就也簡單了。注意,只有當第一個矩陣的列數和第二個矩陣的行數相等時,才能把它們兩個乘起來。運算結果會是一個矩陣,行數和第一個矩陣的行數相等,列數和第二個矩陣的列數相等。計算方法如下:

你只需要將第二個矩陣分成列向量,然後分別將第一個矩陣和每個列向量相乘。然後,將運算結果拼接成一個新的矩陣(不要把它們加起來!)。下圖逐步展示了計算過程:

640?wx_fmt=png

同樣,我們也給出一個備忘錄:

640?wx_fmt=png矩陣的乘法性質

矩陣乘法擁有一些性質,根據這些性質,我們可以將大量計算整合成一個矩陣乘法。在下面我們會依次討論這些性質。為了便於理解,我們會先用標量來解釋這些性質,然後再使用矩陣形式。

交換律

數乘滿足交換律,但矩陣乘法並不滿足。這意味著,當我們在將兩個標量乘在一起的時候:7×3 和 3×7 的結果是一樣的,但當我們將兩個矩陣相乘起來的時候:A×B 並不等於 B×A。

結合律

數乘和矩陣乘法都滿足結合律。這意味著,數乘 3×(5×3)等於(3×5)×3,同時矩陣乘法 A×(B×C)等於(A×B)×C。

分配律

數乘和矩陣乘法都滿足分配律。這表示,數乘 3×(5+3)等於 3×5+3×3,而矩陣乘法 A×(B+C)等於 A×B +A×C。

單位矩陣

單位矩陣是一種特殊的矩陣,不過首先,我們需要定義什麼是「單位」。數字 1 是一個「單位」,因為任何數乘以 1 都等於它自身。因此,任何矩陣乘以一個單位矩陣都應該等於它自己。例如,矩陣 A 乘以單位矩陣還等於矩陣 A。

單位矩陣的主對角線元素都是 1,其餘元素都是 0,你可以根據這個性質得到一個單位矩陣。同時它也是一個「方陣」,這表示它的行數和列數是相等的。

640?wx_fmt=png

我我們之前說,矩陣乘法不滿足交換律,但這裡有一個例外:將一個矩陣和一個單位矩陣相乘。因此,下式是成立的:A × I = I×A = A。

矩陣的逆和轉置

矩陣的逆和矩陣的轉置是兩種矩陣特有的性質。同樣的,我們首先在實數上討論這些性質,然後再使用在矩陣中。

1.逆運算

首先,什麼是逆(倒數)? 一個數乘以它的逆(倒數)等於 1。注意,任何非零的數都有倒數。如果將矩陣和它的逆矩陣相乘,結果就應該是單位矩陣。下面的例子展示了標量的逆(倒數):

640?wx_fmt=png

不過,並不是每個矩陣都有逆矩陣。如果一個矩陣是方陣,而且它可逆,就可以求出它的逆矩陣。很遺憾,討論什麼矩陣可逆超出了這篇文章的範圍。

我們為什麼需要逆矩陣呢?這是因為我們不能計算用矩陣相除,並沒有「除以矩陣」的定義,但我們可以用一個矩陣乘以一個逆矩陣,來達到相同的目的。

下圖展示了一個矩陣乘以它的逆矩陣,計算結果是一個 2×2 的單位矩陣。

640?wx_fmt=png

可以利用 NumPy 輕鬆計算出一個矩陣的逆矩陣(如果它可逆的話)。

2.轉置

最後,我們討論矩陣轉置的性質。這基本上就是將一個矩陣沿著 45 度軸線映象翻轉。計算矩陣的轉置非常簡單,原始矩陣的第一列就是轉置後矩陣的第一行,第二列則變成了轉置後矩陣的第二行。一個 m×n 的矩陣僅僅是轉成了 n×m 的矩陣。同時,矩陣 A 的元素 A_ij 等於轉置後矩陣的元素 A_ji。下圖展示了矩陣的轉置:

640?wx_fmt=png

總結

在這篇文章中,你接觸到了一些機器學習中使用到的線性代數概念。你學會如何對這些物件進行加、減、乘、「除」。另外,你還掌握了矩陣最重要的性質,以及它們為什麼可以幫我們得到更有效的計算。在這些知識的基礎上,你還學習了逆矩陣和轉置矩陣的概念,以及可以如何使用它們。雖然機器學習中還有很多線性代數知識,但這篇文章提供了關於最核心的概念的一些適當介紹。

原文地址:https://towardsdatascience.com/linear-algebra-for-deep-learning-f21d7e7d7f23


推薦閱讀

2018年最佳深度學習書單

如何六步教女朋友寫 Python ?

用Python實現圖片的清晰掃描

AI 學習路線:從Python開始機器學習

使用 Python 實現資料視覺化(完整程式碼)

640?wx_fmt=png

相關文章