每個深度學(xué)習(xí)項目背后的數(shù)學(xué)知識。 深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個子領(lǐng)域,涉及一些模仿人腦結(jié)構(gòu)和功能的人工神經(jīng)網(wǎng)絡(luò)算法。 線性代數(shù)是一種連續(xù)的而非離散的數(shù)學(xué)形式,許多計算機(jī)科學(xué)家對它幾乎沒有經(jīng)驗。對于理解和使用許多機(jī)器學(xué)習(xí)算法,特別是深度學(xué)習(xí)算法,理解線性代數(shù)是非常重要的。 為什么是數(shù)學(xué)? 線性代數(shù),概率論和微積分是組成機(jī)器學(xué)習(xí)的三種“語言”。學(xué)習(xí)這些數(shù)學(xué)知識將有助于深入理解底層算法機(jī)制,并且開發(fā)新的算法。 當(dāng)我們深入到底層時,深度學(xué)習(xí)背后的一切都是數(shù)學(xué)。因此在學(xué)習(xí)深度學(xué)習(xí)和編程之前,理解基本的線性代數(shù)知識是至關(guān)重要的。 來源 深度學(xué)習(xí)背后的核心數(shù)據(jù)結(jié)構(gòu)是標(biāo)量,矢量,矩陣和張量。讓我們使用這些數(shù)據(jù)結(jié)構(gòu),通過編程的方式來解決所有基本的線性代數(shù)問題。 標(biāo)量 標(biāo)量是單個數(shù)字,也可以視為 0 階張量。符號 x∈? 表示 x 是一個標(biāo)量,屬于一組實數(shù)值 ?。 以下是深度學(xué)習(xí)中不同數(shù)集的表示。? 表示正整數(shù)集合 (1,2,3,…)。? 表示結(jié)合了正值,負(fù)值和零值的整數(shù)集合。? 表示有理數(shù)集合。 在 Python 中有一些內(nèi)置的標(biāo)量類型,int、float、complex、bytes and Unicode。在 Numpy(一個 Python 庫)中,有 24 種新的基本數(shù)據(jù)類型來描述不同類型的標(biāo)量。有關(guān)數(shù)據(jù)類型的信息,請參閱 文檔。 在 Python 中定義標(biāo)量和相關(guān)操作: 下面的代碼段解釋了一些運(yùn)算運(yùn)算符在標(biāo)量中的應(yīng)用。 # 內(nèi)置標(biāo)量a = 5b = 7.5print(type(a))print(type(b))print(a + b)print(a - b)print(a * b)print(a / b)復(fù)制代碼<class 'int'><class 'float'>12.5-2.537.50.6666666666666666復(fù)制代碼 下面的代碼段可以檢查給出的變量是否為標(biāo)量。 import numpy as np# 判斷是否為標(biāo)量的函數(shù)def isscalar(num): if isinstance(num, generic): return True else: return Falseprint(np.isscalar(3.1))print(np.isscalar([3.1]))print(np.isscalar(False))復(fù)制代碼TrueFalseTrue復(fù)制代碼 向量 向量是單數(shù)的有序數(shù)組,是一階張量的例子。向量是被稱為矢量空間的對象的片段。向量空間可以被認(rèn)為是特定長度(或維度)的所有可能向量的整個集合。用 ?^3 表示的三維實值向量空間,通常用于從數(shù)學(xué)角度表示我們對三維空間的現(xiàn)實世界概念。 為了明確地定位到矢量的某個分量,矢量的第 i 個標(biāo)量元素被寫為 x[i]。 在深度學(xué)習(xí)中,向量通常代表特征向量,其原始組成部分定義了具體特征的相關(guān)性。這些元素可以包括二維圖像中一組像素的強(qiáng)度的相關(guān)重要性或者各種金融工具的歷史價格值。 在 Python 中定義向量和相關(guān)操作: import numpy as np# 定義向量x = [1, 2, 3]y = [4, 5, 6]print(type(x))# 這樣做不會得到向量和print(x + y)# 使用 Numpy 進(jìn)行向量相加z = np.add(x, y)print(z)print(type(z))# 向量叉乘mul = np.cross(x, y)print(mul)復(fù)制代碼<class 'list'>[1, 2, 3, 4, 5, 6][5 7 9]<class 'numpy.ndarray'>[-3 6 -3]復(fù)制代碼 矩陣 矩陣是由數(shù)字組成的矩形陣列,是 2 階張量的一個例子。如果 m 和 n 是正整數(shù),即 m,n∈?,則 m×n 矩陣包含 m*n 個數(shù)字,m 行 n 列。 完整的 m×n 矩陣可寫為: 將全矩陣顯示簡寫為以下表達(dá)式通常很有用: 在 Python 中,我們使用 Numpy 庫來幫助我們創(chuàng)建 N 維數(shù)組。數(shù)組基本上可看做矩陣,我們使用矩陣方法,并通過列表來構(gòu)造一個矩陣。 $python >>> import numpy as np>>> x = np.matrix([[1,2],[2,3]])>>> xmatrix([[1, 2], [2, 3]])>>> a = x.mean(0)>>> amatrix([[1.5, 2.5]])>>> # 對矩陣求均值。(其中 axis 不設(shè)置值,對 m*n 個數(shù)求均值,返回一個實數(shù);axis = 0:壓縮行,對各列求均值,返回 1* n 矩陣;axis =1 :壓縮列,對各行求均值,返回 m *1 矩陣)。>>> z = x.mean(1)>>> zmatrix([[1.5], [2.5]])>>> z.shape(2, 1)>>> y = x - zmatrix([[-0.5, 0.5], [-0.5, 0.5]])>>> print(type(z))<class 'numpy.matrixlib.defmatrix.matrix'>復(fù)制代碼 在 Python 中定義矩陣和相關(guān)操作: 矩陣加法 矩陣可以與標(biāo)量、向量和其他矩陣進(jìn)行加法運(yùn)算。每個操作都有精確的定義。這些技術(shù)經(jīng)常用于機(jī)器學(xué)習(xí)和深度學(xué)習(xí),所以值得花時間去熟悉它們。 # 矩陣加法import numpy as npx = np.matrix([[1, 2], [4, 3]])sum = x.sum()print(sum)# Output: 10復(fù)制代碼 矩陣與矩陣相加 C = A + B (**A 與 B 的維度需要相同 **) shape 方法返回矩陣的維度,add 方法接受兩個矩陣參數(shù)并返回這兩個矩陣的和。如果兩個矩陣的維度不一致 add 方法將會拋出一個異常,說無法將其相加。 # 矩陣與矩陣相加import numpy as npx = np.matrix([[1, 2], [4, 3]])y = np.matrix([[3, 4], [3, 10]])print(x.shape)# (2, 2)print(y.shape)# (2, 2)m_sum = np.add(x, y)print(m_sum)print(m_sum.shape)'''Output :[[4 6] [7 13]](2, 2)'''復(fù)制代碼 矩陣與標(biāo)量相加 將給定的標(biāo)量添加到給定矩陣中的所有元素。 # 矩陣與標(biāo)量相加import numpy as npx = np.matrix([[1, 2], [4, 3]])s_sum = x + 1print(s_sum)'''Output:[[2 3] [5 4]]'''復(fù)制代碼 矩陣與標(biāo)量的乘法 將給定的標(biāo)量乘以給定矩陣中的所有元素。 # 矩陣與標(biāo)量的乘法import numpy as npx = np.matrix([[1, 2], [4, 3]])s_mul = x * 3print(s_mul)'''[[3 6] [12 9]]'''復(fù)制代碼 矩陣乘法 維度為(m x n)的矩陣 A 和維度為(n x p)的矩陣 B 相乘,最終得到維度為(m x p)的矩陣 C。 來源 # 矩陣乘法import numpy as npa = [[1, 0], [0, 1]]b = [1, 2]np.matmul(a, b)# Output: array([1, 2])complex_mul = np.matmul([2j, 3j], [2j, 3j])print(complex_mul)# Output: (-13+0j)復(fù)制代碼 矩陣轉(zhuǎn)置 通過轉(zhuǎn)置,您可以將行向量轉(zhuǎn)換為列向量,反之亦然: A=[a_ij_]mxn AT=[a_ji_]n×m # 矩陣轉(zhuǎn)置import numpy as npa = np.array([[1, 2], [3, 4]])print(a)'''[[1 2] [3 4]]'''a.transpose()print(a)'''array([[1, 3], [2, 4]])'''復(fù)制代碼 張量 更加泛化的實體 —— 張量,封裝了標(biāo)量、矢量和矩陣。在物理科學(xué)和機(jī)器學(xué)習(xí)中,有時需要使用超過兩個順序的張量。 來源 我們使用像 TensorFlow 或 PyTorch 這樣的 Python 庫來聲明張量,而不是使用嵌套矩陣來表示。 在 PyTorch 中定義一個簡單的張量: import torcha = torch.Tensor([26])print(type(a))# <class 'torch.FloatTensor'>print(a.shape)# torch.Size([1])# 創(chuàng)建一個 5*3 的隨機(jī) torch 變量。t = torch.Tensor(5, 3)print(t)''' 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 7.0065e-45 1.1614e-41 0.0000e+00 2.2369e+08 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 nan nan -1.4469e+35[torch.FloatTensor of size 5x3]'''print(t.shape)# torch.Size([5, 3])復(fù)制代碼 Python 中張量的運(yùn)算操作: import torch# 創(chuàng)建張量p = torch.Tensor(4,4)q = torch.Tensor(4,4)ones = torch.ones(4,4)print(p, q, ones)'''Output: 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 1.6009e-19 4.4721e+21 6.2625e+22 4.7428e+30 3.1921e-09 8.0221e+17 5.1019e-08 8.1121e+17 8.1631e-07 8.2022e+17 1.1703e-19 1.5637e-01[torch.FloatTensor of size 4x4] 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 1.8217e-44 1.1614e-41 0.0000e+00 2.2369e+08 0.0000e+00 0.0000e+00 2.0376e-40 2.0376e-40 nan nan -5.3105e+37 nan[torch.FloatTensor of size 4x4] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1[torch.FloatTensor of size 4x4]'''print('Addition:{}'.format(p + q))print('Subtraction:{}'.format(p - ones))print('Multiplication:{}'.format(p * ones))print('Division:{}'.format(q / ones))'''Addition: 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 1.6009e-19 4.4721e+21 6.2625e+22 4.7428e+30 3.1921e-09 8.0221e+17 5.1019e-08 8.1121e+17 nan nan -5.3105e+37 nan[torch.FloatTensor of size 4x4]Subtraction:-1.0000e+00 -1.0000e+00 -1.0000e+00 -1.0000e+00-1.0000e+00 4.4721e+21 6.2625e+22 4.7428e+30-1.0000e+00 8.0221e+17 -1.0000e+00 8.1121e+17-1.0000e+00 8.2022e+17 -1.0000e+00 -8.4363e-01[torch.FloatTensor of size 4x4]Multiplication: 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 1.6009e-19 4.4721e+21 6.2625e+22 4.7428e+30 3.1921e-09 8.0221e+17 5.1019e-08 8.1121e+17 8.1631e-07 8.2022e+17 1.1703e-19 1.5637e-01[torch.FloatTensor of size 4x4]Division: 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 1.8217e-44 1.1614e-41 0.0000e+00 2.2369e+08 0.0000e+00 0.0000e+00 2.0376e-40 2.0376e-40 nan nan -5.3105e+37 nan[torch.FloatTensor of size 4x4]'''復(fù)制代碼結(jié)束語 感謝閱讀。如果你發(fā)現(xiàn)這個故事很有用,請點(diǎn)擊下面的 來傳播愛心。 特別鳴謝 Samhita Alla 對本文的貢獻(xiàn)。
|
|
|
來自: taotao_2016 > 《AI》