當前位置:
首頁 > 最新 > 深度學習線性代數簡明教程

深度學習線性代數簡明教程

作者:Vihar Kurama

編譯:weakish

編者按:Python軟體基金會成員(Contibuting Member)Vihar Kurama簡要介紹了深度學習演算法背後的數學。

深度學習(Deep Learning)是機器學習的子領域。而線性代數(linear algebra)是有關連續值的數學。許多計算機科學家在此方面經驗不足(傳統上計算機科學更偏重離散數學)。想要理解和使用許多機器學習演算法,特別是深度學習演算法,對線性代數的良好理解是不可或缺的。

為什麼要學數學?

線性代數、概率論和微積分是確切地表達機器學習的「語言」。學習這些主題有助於形成對機器學習演算法底層機制的深入理解,也有助於開發新的演算法。

如果我們查看的尺度足夠小,那麼深度學習背後的一切都是數學。所以在開始深度學習之前,有必要理解基本的線性代數。

深度學習背後的核心數據結構是標量(Scalar)向量(Vector)矩陣(Matrix)張量(Tensor)。讓我們通過編程,使用這些數據結構求解基本的線性代數問題。

標量

標量是單個數字,或者說,0階(0th-order)張量。x ∈ ?表示x是一個屬於實數集?的標量。

在深度學習中,有不同的數字集合。?表示正整數集(1,2,3,…)。?表示整數集,包括正數、負數和零。?表示有理數集(可以表達為兩個整數之比的數)。

在Python中有幾個內置的標量類型:intfloatcomplexbytesUnicode。Numpy又增加了二十多個新的標量類型。

返回:

其中,以下劃線(_)結尾的數據類型和對應的Python內置類型基本上是等價的。

在Python中定義標量和一些運算

下面的代碼演示了一些張量的算術運算。

輸出:

下面的代碼段檢查給定的變數是否是標量:

輸出:

向量

向量是由單個數字組成的有序數組,或者說,1階張量。向量是向量空間這一對象的組成部分。向量空間是特定長度(又叫維度)的所有可能的向量的整個集合。三維實數向量空間(?3)常用於表示現實世界中的三維空間。

為了指明向量的分量(component),向量的第i個標量元素記為。

在深度學習中,向量通常用來表示特徵向量。

在Python中定義向量和一些運算

聲明向量:

輸出:

+並不表示向量的加法,而是列表的連接:

輸出:

需要使用Numpy進行向量加法:

輸出:

向量的叉積(cross product)

兩個向量的叉積向量,大小等於以這兩個向量為鄰邊的平行四邊形面積,方向與這兩個向量所在平面垂直:

圖片來源:維基百科

返回:

向量的點積(dot product)

向量的點積為標量,對於給定長度但方向不同的兩個向量而言,方向差異越大,點積越小。

圖片來源:betterexplained.com

返回:

矩陣

矩陣是由數字組成的矩形數組,或者說,2階張量。如果m和n為正整數,即,m, n ∈ ?,那麼,一個m x n矩陣包含m * n個數字,m行n列。

m x n可表示為以下形式:

有時簡寫為:

在Python中定義矩陣和一些運算

在Python中,我們使用numpy庫創建n維數組,也就是矩陣。我們將列表傳入matrix方法,以定義矩陣。

返回:

矩陣第0軸的元素均值:

返回:

矩陣第1軸的元素均值:

返回:

返回:

shape屬性返回矩陣的形狀:

返回:

所以,矩陣z有2行1列。

順便提下,向量的shape屬性返回由單個數字(向量的長度)組成的元組:

返回:

而標量的shape屬性返回一個空元祖:

返回:

矩陣加法和乘法

矩陣可以和標量及其他矩陣相加、相乘。這些運算在數學上都有精確的定義。機器學習和深度學習經常使用這些運算,所以有必要熟悉這些運算。

對矩陣求和:

返回:

矩陣-標量加法

在矩陣的每個元素上加上給定標量:

返回:

矩陣-標量乘法

類似地,矩陣-標量乘法就是在矩陣的每個元素上乘以給定標量:

返回:

矩陣-矩陣加法

形狀相同的矩陣才能相加。兩個矩陣對應位置的元素之和作為新矩陣的元素,而新矩陣的形狀和原本兩個矩陣一樣。

x和y的形狀均為(2, 2)。

返回:

矩陣-矩陣乘法

形狀為m x n的矩陣與形狀為n x p的矩陣相乘,得到形狀為m x p的矩陣。

從編程的角度,矩陣乘法的一個直觀解釋是,一個矩陣是數據,另一個矩陣是即將應用於數據的函數(操作):

圖片來源:betterexplained.com

返回:

上面的代碼中,矩陣x的形狀為,矩陣y的形狀為,故所得矩陣的形狀為。如果x的列數不等於y的行數,則x和y不能相乘,強行相乘會報錯。

矩陣轉置

矩陣轉置交換原矩陣的行和列(行變為列,列變為行),即:

返回:

使用numpy提供的方法轉置矩陣:

返回:

張量

比標量、向量、矩陣更通用的是張量概念。在物理科學和機器學習中,有時有必要使用超過二階的張量(還記得嗎?標量、向量、矩陣分別可以視為0、1、2階張量。)

圖片來源:refactored.ai

在Python中定義張量和一些運算

張量當然也可以用numpy表示(超過二階的張量不過是超過二維的數組):

返回:

張量加法

返回:

張量乘法

得到的是阿達馬乘積(Hadamard Product),也就是分素相乘(element-wise multiplication),將張量s和t中的每個元素相乘,所得乘積為結果張量對應位置的元素。

張量積(Tensor Product)需要使用numpy的方法計算。

圖片來源:維基百科

計算s ? t:

返回:

其中,最後一個參數0表示求張量積。當該參數為1時,表示求張量的點積(tensor dot product),這一運算可以視為向量點積概念的推廣;當該參數為2時,表示求張量的縮並(tensor double contraction),這一運算可以視為矩陣乘法概念的推廣。

當然,由於張量常用於深度學習,因此我們也經常直接使用深度學習框架表達張量。比如,在PyTorch中,創建一個形狀為(5, 5)的張量,然後用浮點數1填充該張量:

返回:


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 論智 的精彩文章:

利用深度學習幫助科學圖像分析
高維空間最近鄰逼近搜索演算法評測

TAG:論智 |