【導讀】線性代數是一種連續的、非離散的數學形式,許多計算機科學家對此缺乏應用經驗,掌握線性代數對理解深度學習算法至關重要。今天AI科技大本營就為大家整理了學習過程中需要必備的線性代數知識,并附上代碼實現,幫助大家加深理解。
為什么數學是必要的?
線性代數、概率論和微積分都是機器學習的“語言”。學習這些科目將有助于深入了解底層的算法機制和開發新的算法。從較低的層級來看,深度學習背后的一切都是以數學為基礎的。因此,理解基礎的線性代數對于探索深度學習和上手與深度學習相關的編程來說是必要的。
深度學習中的核心數據結構由標量、向量、矩陣和張量組成。從編程的角度來說,我們只需運用這些知識就能解決所有基本的線性代數問題。
參考閱讀:
https://hadrienj.github.io/posts/Deep-Learning-Book-Series-2.1-Scalars-Vectors-Matrices-and-Tensors/
標量
標量僅用于表達值的大小,也是零階張量的一個例子。符號 x ∈ ? 表示標量 x 屬于實數值數組“ ? ”。
在深度學習中我們比較關注以下幾個數集,?、?和?。? 表示正整數集(1,2,3,...)。 ? 表示整數集,它包含了正值、負值和零值。 ? 表示可以由兩個整數所構成的分數進行表達的有理數數集。
Python 中內置了少數幾種標量類型,如 int,float,complex,bytes,Unicode。而在 Python 庫 NumPy中,有 24 種新的基本數據類型來描述不同類型的標量。
參考閱讀:
https://docs.scipy.org/doc/numpy-1.14.0/reference/arrays.scalars.html
如何在Python中定義和運算標量?
以下代碼片段解釋了基礎的標量(Scalars)運算。
參考閱讀:
https://gist.github.com/vihar/fbd3406bd9ba2402465fb1c8f3d8b3a6#file-scalars-py
返回如下:
以下代碼片段用于檢驗所給的變量類型是否為標量。
參考閱讀:
https://gist.github.com/vihar/b9ef648d47c1cb3db977f13fd3071dc6#file-is_scalar-py
返回如下:
向量
向量是由多個單個數字組成的有序數組,也是一階張量的一個例子。向量是向量空間中的片段。向量空間則可以被認為是在特定長度(或維度)中所有可能存在的向量集合。我們通常說的現實世界中的三維空間,在數學里可以用向量空間表達為 ? ^ 3。
為了清晰明確地標示向量中的必要成分,向量中的第 i 個標量元素被記做 x[i] 。
在深度學習中,向量通常表示特征向量,它的原始成分則表示特定特征的相關程度。這些元素可以包括如二維圖像中一組像素的強度的相關重要性,或是金融工具的橫截面的歷史價格值。
如何在 Python 中定義和運算向量?
參考閱讀:
https://gist.github.com/vihar/7ede36aa2f5ba5e7f70960225a2d351e#file-vectors-py
返回如下:
矩陣
矩陣是由數字構成的矩形陣列,是二階張量的一個例子。若 m 和 n 為正整數( m,n ∈ N ),則 m × n的矩陣中包含 m * n 個元素,由m 行和 n 列構成。
完整的 m × n 矩陣可寫做:
我們通常會將上面的矩陣縮寫為以下的表達式:
在 Python 里,我們會使用 numpy 庫來幫助我們創建 n 維的數組,這基本上可以被認作為矩陣。我們將列表傳入名為 matrix 方法來定義一個矩陣。
如何在 Python 中定義和運算矩陣?
▌矩陣加法
矩陣可以與標量、向量或其他的矩陣進行相加。每一種加法都有一個精確的定義。這些技巧在機習和深度學習有著非常廣泛而頻繁的使用,所以它們值得你去熟悉。
參考閱讀:
https://gist.github.com/vihar/1bdc39d126b4772f5a8e9d0b5185625f#file-matrix_addition-py
▌矩陣與矩陣的加法
C = A + B( A 和 B 的形狀應當一致)
方法 shape 能夠返回矩陣的形狀,方法 add 會將傳入的兩個作為參數的矩陣相加,并返回相加的總和。若兩個作為參數的矩陣的形狀不一致,該方法則會提示存在“不能相加”的錯誤。
參考閱讀:
https://gist.github.com/vihar/b25716665d72d5e6b50c9149718df076#file-m_m_addition-py
▌矩陣與標量的加法
將給定矩陣中的各個元素都與給定的標量進行相加
參考閱讀:
https://gist.github.com/vihar/ba689ec9a07b1c50f69269454373359a#file-matrix_s_addition-py
▌矩陣與標量的乘法
將給定矩陣中的各個元素都與給定的標量進行相乘
參考閱讀:
https://gist.github.com/vihar/5dcc0beeb7e48f0f271a75108401d34c#file-m_s_multiplication-py
▌矩陣之間的乘法
形狀為 m x n 的矩陣 A 與形狀為 n x p 的矩陣 B 相乘則會得到 形狀為 m x p 的矩陣 C
參考閱讀:
https://hadrienj.github.io/posts/Deep-Learning-Book-Series-2.2-Multiplying-Matrices-and-Vectors/
參考閱讀:
https://gist.github.com/vihar/1510e248a117f0af6a3843a4307de7b2#file-matrix_mul-py
▌矩陣的轉置
矩陣的轉置可以使一個行向量變成一個列向量,或反方向操作亦成立作亦成立:
A = [aij]m x n
AT = [aji]n × m
參考閱讀:
https://gist.github.com/vihar/3f2091377b3a1f36c402a203f25ffe33#file-martix_transpose-py
張量
籠統的來講,張量包含了標量,向量,矩陣。有些時候,例如在物理及機器學習中,使用超過二階的張量是非常必要的。
參考閱讀:
https://refactored.ai/track/python-for-machine-learning/courses/linear-algebra.ipynb
我們通常不會將矩陣進行嵌套來表示張量,而是會使用像 tensoTflow 或者 PyTorch 這樣的 Python 庫來對張量進行表示張量 PyTorche 中定義一個簡單的張量
參考閱讀:
https://gist.github.com/vihar/eb78a6171de9740b128cbff21fc0b6ea#file-tensors-py
一些在 Python 中其他的張量的運算操作
src:
https://gist.github.com/vihar/7b03ca54e4fe811e1053e09bdc1278b5#file-tensor_operations-py
-
機器學習
+關注
關注
66文章
8377瀏覽量
132409 -
python
+關注
關注
56文章
4782瀏覽量
84453 -
深度學習
+關注
關注
73文章
5492瀏覽量
120977
原文標題:深度學習必備數學知識之線性代數篇(附代碼實現)
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論