乾貨 深度學習中的線性代數 簡明教程

2021-08-21 02:31:18 字數 3430 閱讀 3650

linear algebra for deep learning

深度學習(deep learning)是機器學習的乙個子領域,涉及的演算法模仿大腦的功能和結構,稱為人工神經網路。

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

為什麼要學習數學?

線性代數、概率論和微積分是用來表達機器學習的「語言」。學習這些內容將有助於深入理解底層的演算法機制,也有助於開發新的演算法。

當被限制在足夠小的尺度上,深度學習背後的一切都是數學。所以在開始深度學習之前,了解基本的線性代數是非常重要的。

深度學習背後的核心資料結構是標量(scalar)、向量(vector)、矩陣(matrix)、張量(tensor)。在程式設計中,讓我們使用這些資料結構求解基本的線性代數問題。

標量(scalars)

標量是乙個數字,或者說,是乙個0階張量。符號表示是乙個屬於實數集的標量。

深度學習中有著不同的數字集合。表示正整數集。表示整數集,包括正整數,負整數和零。表示有理數集,可以表達兩個整數之比的數。

在python中有幾個內建的標量型別:int、float、complex、bytes、unicode。numpy又增加了二十多種新的標量型別。有關資料型別的更多資訊,請參閱文件。

在python中定義標量和一些運算: 下面的**片段展示了對標量的幾個運算操作。

# in-built scalars

a = 

5b = 

7.5print(type(a))

print(type(b))

print(a + b)

print(a - b)

print(a * b)

print(a / b)

輸出結果:

<

class 

'int'

>

<

class 

'float'

>

12.5

-2.5

37.5

0.6666666666666666

下面的**片段用來檢查給定的變數是否是標量。

import 

numpy 

as np

# is scalar function

def 

isscalar(num):

if isinstance(num

, generic):

return true

else

: return false

print(np.isscalar(

3.1))print(np.isscalar([

3.1]))print(np.isscalar(

false

))輸出結果:

true

false

true

向量(vectors)

向量是由單個數字組成的有序陣列,或者說,1階張量。向量是向量空間這一物件的組成部分。乙個向量空間可以看作是乙個特定長度(或維度)的所有可能向量的集合。三維實數向量空間()常用於表示現實世界中的三維空間

在深度學習中,向量通常表示特徵向量,其原始分量定義了特定特徵的相關性。這些元素可以是二維影象中一組畫素的強度的相關性或者是金融工具截面的歷史**值。

在python中定義向量和一些運算:

import 

numpy 

as np

# 宣告向量

x = [

1, 2, 

3]y = [

4, 5, 

6]print(type(x))

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

print(x + y)

# 需要使用numpy進行向量加法:

z = np.add(x

, y)

print(z)

print(type(z))

# 向量的叉積(cross product):兩個向量的叉積向量,

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

mul = np.cross(x

, y)

print(mul)

輸出結果:

<

class 

'list'

>[1

, 2, 3

, 4, 5

, 6][

5 7 9

]<

class 

'numpy.ndarray'

>

[-3 6 -3

]矩陣(matrices)

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

>>> 

import 

numpy 

as np

>>> x = np.matrix([[1,

2],[

2,3]])

>>> x

matrix([[1, 

2],[

2, 3]])

>>> a = x.mean( 0)

>>> a

matrix([[

1.5, 2.5

]])>>> 

# finding the mean with 1 with the matrix x.

>>> z = x.mean( 1)

>>> z

matrix([[ 

1.5] ,

[  2.5

]])>>> z.shape( 2

, 1)>>> y = x - z

matrix([[-

0.5, 0.5] ,

[- 0.5

, 0.5

]])>>> 

print

( type

(z))

<

class 

'numpy.matrixlib.defmatrix.matrix'

>

在python中定義矩陣和一些運算:

矩陣可以與標量、向量和其他矩陣相加。每個操作都有乙個精確的定義。這些技術在機器學習和深度學習中經常被使用,所以你需要熟悉它們。

閱讀全文

線性代數的學習

最近在學習鞏固視覺slam的時候,突然發現對線性代數中有一些知識點有盲點,於是重新看了一下湯神的線性代數講解 有考研的同學極力推薦湯神的課程,有湯神保駕護航,數學不會低於120!整理了一下 a 0 時,則存在唯一解 1 a 使得 x b 1 a a 0 時,當 b 0 則表示無解,當 b 0 時,則...

深度學習數學基礎之線性代數

深度學習中的基本資料結構,基本上都是用向量或矩陣表示的,因此 深度學習的基礎學科之一 就是線性代數。深度學習中的線性代數知識主要包括以下部分 1 標量 向量 矩陣和張量 這4個變數很好理解 分別表示 乙個數 一維空間 一條線 二維 乙個平面 多於二維 立體或超立體等 2 矩陣的乘法和內積 這個在深度...

深度學習日記(二) 線性代數二

七 特徵分解 將矩陣分解為一組特徵向量和特徵值 從幾何上理解特徵值和特徵向量 特徵值 運動的速度 特徵向量 運動的方向 向量v在矩陣a的作用下,保持方向不變,進行比例為 lanmeta 的伸縮 特徵向量 eigenvector v 矩陣 a 特徵值 標量 滿足 特徵分解 以上鏈結為特徵分解的人話講解...