线性代数总结
1、標量、向量、矩陣和張量
1.1、標量(scalar)
標量就是一個數,它不同于線性代數中的其他大部分研究對象(通常是多個數的數組)。標量一般用斜體的小寫字母表示,當介紹標量時,我們會明確它是哪種類型的數,如 s ∈\(\mathbb{R}\)表示一條線的斜率。
1.2、向量(vector)
向量是由一列數組成的一維數組,向量中的數是有序排列的,向量中的每個值被稱為一個元素,可以通過索引來確定向量中的每個元素(就像使用數組下標訪問數組中的元素一樣)。若向量中有n個元素,則該向量被稱為n維向量。向量一般使用粗體的小寫字母表示,如 x。當指明一個向量時,我們也會指出其中的元素類型,如果要明確表示向量中的元素時,我們會將其元素排列為一個縱列,并用方括號包圍,如下:
我們可以把向量看做是空間中的坐標,每個元素為不同坐標軸的值。當沒有特殊說明的時候,向量x一般指列向量。
有時我們需要索引向量中的部分元素,假如有一個下標集合S={1, 3, 6},則xS = {x1,x3,x6}。我們還用-來表示集合的補集,如x-1表示向量 x 中除x1外的剩余元素構成的向量,x-s表示向量 x 中除x1、x3、x6外的剩余元素構成的向量。
1.3、矩陣(matrix)
矩陣為二維數組,其中每一個元素被兩個索引(行索引和列索引)所指定。矩陣通常由粗體的大寫名稱表示,如 A。假如矩陣A有m行n列,則可以表示為 A∈\(\mathbb{R}\)mxn。矩陣中的元素通常以不加粗的斜體表示,如\(A_{i,j}\)表示矩陣 A 的第i行第j列的元素,i和j從1開始。也可以使用切片的方式來訪問A中的元素,如\(A_{i,:}\)表示A的第i行的所有元素,\(A_{,:j}\)表示A的第j列的所有元素。
1.4、張量(tensor)
張量為超過兩維的數組,比如有三維的張量除了行和列外還有另一維。由Google開發的機器學習框架TensorFlow中的Tensor就是張量的意思。
2、矩陣的常用操作
2.1、轉置
矩陣的左上角到右下角的連線叫做主對角線,將矩陣主對角線兩側的元素互換稱為矩陣的轉置(其實就是行列互換)。矩陣A的轉置記為\(A^T\),有\((A^T)_{i,j}\) = \(A_{j,i}\) 。
標量的轉置等于自身。
2.2、矩陣相加
如果兩個矩陣形狀相同(行列數相同),則兩個矩陣可以相加。矩陣相加即將兩個矩陣對應位置上的元素分別相加,得到一個新的矩陣。如C=A+B,有\(C_{i,j}\)=\(A_{i,j}\)+\(B_{i,j}\) 。
同樣的,矩陣也可以相減。
2.3、標量與矩陣運算
當標量與矩陣相加或相乘時,相當于矩陣中的每個元素與該標量相加或相乘。
2.4、廣播
我們允許矩陣和向量相加。當一個矩陣和向量相加時,相當于該向量與矩陣的每一行相加,并產生一個新的矩陣。
這種方式無需將b復制到一個矩陣中后再相加,這種隱式地復制向量b到很多位置的方式叫做廣播。
2.5、矩陣與向量或矩陣相乘
兩個矩陣A和B的矩陣乘積 (matrix product)是第三個矩陣C,記為 C=AB。并不是任意兩個矩陣都能相乘,在前面的例子中,只有當第一個矩陣A的列數等于第二個矩陣B的行數時才能相乘,相乘后的矩陣C的行數等于A的行數,列數等于B的列數,也就是
在python中,可以使用庫numpy中的dot(A, B),來對兩個矩陣A,B進行乘法。 import numpy as npA = np.array([[1,2], [3, 4]]) B = np.array([[5,6], [7, 8]]) C = np.dot(A, B) print A print '-'*10 print B print '-'*10 print C
輸出:
[[1 2][3 4]] ---------- [[5 6][7 8]] ---------- [[19 22][43 50]]矩陣乘積滿足分配率:\(A(B + C) = AB + AC\),也滿足結合律:\((AB)C = A(BC)\),但不總滿足交換律:\(AB ≠ BA\)。兩個矩陣乘積的轉置滿足如下性質:\((AB)^T = B^TA^T\) 。
如果是矩陣對應元素相乘,則這種乘積被稱為元素對應乘積或者Hadamard 乘積,記為A\(\bigodot\)B 。
對應元素乘積在numpy中可以使用multiply(A, B),或者*。
輸出:
[[1 2][3 4]] ---------- [[5 6][7 8]] ---------- [[ 5 12][21 32]] ---------- [[ 5 12][21 32]]2.6、點積(內積)
兩個向量的點積(又稱內積)即兩個向量對應位置元素的乘積之和,點積得到的為一個標量,可以使用numpy中的dot(x,y)或者vdot(x,y)來計算兩個向量的點積。
x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) print np.dot(x, y) print np.vdot(x, y)輸出:
32 32兩個相同維數的向量 x 和 y 的點積(dot product)可看作是矩陣乘積 \(x^?y\)。我 們可以把矩陣乘積 C = AB 中計算 \(C_{i,j}\) 的步驟看作是 A 的第 i 行和 B 的第 j 列之間的點積。
由于向量點積就是對應元素乘積之和,所以點積滿足交換律,也就是\(x^Ty=y^Tx\) 。
3、線性方程組
以下方程組:
被稱作線性方程組,其中\(A_{i,j}\)為矩陣A第i行第j列的元素,同時也是第i個方程的第j個未知數的系數,\(b_i\)為第i個方程的常數項,i=1,2,...,m; j=1,2,...,n。當\(b_1,b_2,...,b_n\)不全為0時,該方程被稱為n元非齊次線性方程組,當\(b_1,b_2,...,b_n\)全為0時,該方程被稱為n元齊次線性方程組。
我們可以利用矩陣切片的方式將上式重寫為:
還可以進一步的簡寫為:
其中\(A∈\mathbb{R}^{m×n}\)被稱為系數矩陣,\(x ∈\mathbb{R}^n\)使我們要求解的向量,被稱為未知數矩陣,\(b ∈\mathbb{R}^m\),是一個已知向量,被稱為常數項矩陣。
4、單位矩陣和逆矩陣
4.1、單位矩陣
單位矩陣類似于常數四則運算中的數1,任何矩陣和單位矩陣相乘都等于該矩陣。我們將n維向量不變的單位矩陣記為\(I_n\),則有:\[?x∈\mathbb{R}^n,I_nx=xI_n=x\]
在形式上,\(I_n\)為一個n行n列的方陣(行列數相同的矩陣),也就是\(I∈\mathbb{R}^{n×n}\),其主對角線上元素全為1,其余位置元素全為0。\(I_3\)表示為如下形式:
4.2、逆矩陣
逆矩陣則類似于倒數,求矩陣的逆矩陣相當于求一個數的倒數。矩陣\(A\)的逆矩陣記為\(A^{-1}\),有\[AA^{-1}=A^{-1}A=I_n\]
我們可以使用逆矩陣來求解上一節中的線性方程組\(Ax=b\),步驟如下:
并不是所有矩陣都有逆矩陣。當矩陣A對應的行列式|A|的值不等于0時,矩陣A才存在可逆矩陣。
對于線性方程組\(Ax=b\)來說,要么有唯一解,要么無解,要么有無限多個解,不可能存在多于一個解但少于無限多解的情況,因為如果x,y都是該方程組的解,則\(z=αx+(1-α)y\)(其中α為任意實數)也是該方程的解(將z代入方程即可證明)。
5、線性組合、線性相關和生成子空間
5.1、線性組合
繼續考慮求線性方程組\(Ax=b\)解的問題,為了分析該方程有多少個解,我們可以把A的列向量看作從原點(origin)(元素都是零的向量)出發的不同方向(每個列向量都有一個方向),確定有多少種方法可以到達向量 b。在這個觀點下,向量x中的每個元素表示我們應該沿著這些方向走多遠,即\(x_i\)表示我們需要沿著第i個向量的方向走多遠(考慮只有一個未知量x的線型方程組,這樣A、x、b都變成了一維向量,更容易理解“方向”,“沿著方向走多遠”等詞匯):
一般而言,上式中的操作被稱為線型組合。形式上,一組向量的線性組合,是指每個向量乘以對應標量系數之后的和,即:
更通俗一點的講法是:給定一個向量組A:\(a_1, a_2,...,a_n\),對于任意一組實數\(k_1,k_2,...,k_n\),表達式\[k_1a_1+k_2a_2+...+k_na_n\]被稱為向量組A的一個線性組合。
5.2、生成子空間
一組向量的生成子空間(span)是原始向量線性組合后所能抵達的點的集合。 繼續考慮求線性方程組\(Ax=b\)解的問題,確定\(Ax = b\)是否有解相當于確定向量b是否在A列向量的生成子空間中。這個特殊的生成子空間被稱為A的列空間(column space)或者A的值域range)。
為了使方程\(Ax = b\)對于任意向量\(b∈\mathbb{R}^{m}\)都存在解,我們要求A的列空間構成整個\(\mathbb{R}^{m}\)。如果\(\mathbb{R}^{m}\)中的某個點不在A的列空間中,那么該點對應的b會使得該方程沒有解。矩陣A 的列空間是整個\(\mathbb{R}^{m}\)的要求,意味著A至少有 m 列,即 n ≥ m。否則,A 列空間的維數會小于 m(考慮在三維空間下(m=3),一個向量(n=1)只能表示一條線上的點;兩個向量(n=2)只能表示一個面上的點;三個向量才能表示整個3維空間上的點)。例如,假設 A 是一個 3×2 的矩陣。目標 b 是 3 維的,但是 x 只有 2 維。所以無論如何修改 x 的值,也只能描繪出 \(\mathbb{R}^{3}\) 空間中的二維平面。當且僅當向量 b 在該二維平面中時,該方程有解。
不等式 n ≥ m 僅是方程對每一點都有解的必要條件。這不是一個充分條件,因為有些列向量可能是冗余的。假設有一個\(\mathbb{R}^{2×2}\)中的矩陣,它的兩個列向量是相同的。那么它的列空間和它的一個列向量作為矩陣的列空間是一樣的。換言之,雖然該矩陣有2列,但是它的列空間仍然只是一條線,不能涵蓋整個\(\mathbb{R}^{2}\)空間。
正式地說,這種冗余被稱為線性相關。
5.3、線性相關
對于一個向量組\(a_1, a_2,...,a_n\)來說,如果存在不全為0的數\(k_1,k_2,...,k_n\),使得\[k_1a_1+k_2a_2+...+k_na_n=0\]那我們說這個向量組是線性相關的。一組向量線性相關,也就是說在該向量組中至少存在一個向量能用其他向量線性表示。否則則稱該向量組線性無關。
如果某個向量是一組向量中某些向量的線性組合,那么我們將這個向量加入這組向量后不會增加這組向量的生成子空間。這意味著,如果一 個矩陣的列空間涵蓋整個\(\mathbb{R}^{m}\),那么該矩陣必須包含至少一組m個線性無關的向量, 這是式\(Ax=b\)對于每一個向量 b 的取值都有解的充分必要條件。值得注意的是,這個條件是說該向量集恰好有m個線性無關的列向量,而不是至少m個。不存在一個m維向量的集合具有多于 m 個彼此線性不相關的列向量,但是一個有多于 m 個 列向量的矩陣有可能擁有不止一個大小為 m 的線性無關向量集。
要想使矩陣可逆,我們還需要保證式\(Ax=b\)對于每一個 b值至多有一個解。為此,我們需要確保該矩陣至多有 m 個列向量。否則,該方程會有不止一個解。
綜上所述,這意味著該矩陣必須是一個方陣(square),即 m = n,并且所有列向量都是線性無關的。一個列向量線性相關的方陣被稱為奇異的(singular)。
5.4、秩
矩陣A的秩為A中線性無關的列向量的最大個數,記為R(A)。通過秩可以確定n元線性方程組\(Ax=b\)解的情況:
(i)無解的充分必要條件是R(A)<R(A,b);
(ii)有唯一解的充分必要條件是R(A)=R(A,b)=0;
(iii)有無限多解的的充分必要條件是R(A)=R(A,b)<n;
通過numpy可以方便的求解矩陣的秩,從而判斷解的情況:
輸出:
[[ 1 -2 3 -1 1][ 3 -1 5 -3 2][ 2 1 2 -2 3]] 2 3 True根據(i),該方程組無解。
6、范數(norm)
范數用來衡量向量的大小(長度)。形式上,\(L^p\)范數定義如下:
其中p∈\(\mathbb{R}\),p≥1。
范數是將向量映射到非負值的函數。直觀上來說,向量x的范數衡量原點到點x的距離。更嚴格地說,范數是滿足下列性質的任意函數:
6.1、\(L^2\)范數
當p=2時,\(L^2\)范數被稱為歐幾里得范數,因為此時\(L^2=\sqrt(x_1^2+x_2^2+...+x_n^2)\),為空間上點x到原點的距離。平方\(L^2\)范數在數學和計算上都比\(L^2\)范數更方便,例如,平方\(L^2\)范數對x中每個元素的導數只取決于對應的元素,而\(L^2\)范數對每個元素的導數卻和整個向量相關。但是在很多情況下,平方\(L^2\)范數也可能不受歡迎,因為它在原點附近增長得十分緩慢。
6.2、\(L^1\)范數
當機器學習問題中零和非零元素之間的差異非常重要時,通常會使用\(L^1\)范數。每當 x 中某個元素從 0 增加 ?,對應的\(L^1\)范數也會增加 ?。 有時候我們會統計向量中非零元素的個數來衡量向量的大小。有些作者將這種函數稱為 “\(L^0\)范數’’,但是這個術語在數學意義上是不對的。向量的非零元素的數目不是范數,因為對向量縮放 α 倍不會改變該向量非零元素的數目。因此,\(L^1\)范數經常作為表示非零元素數目的替代函數。
6.3、\(L^∞\)范數
\(L^∞\)范數也被成為最大范數,這個范數用來表示向量中具有最大幅值元素的絕對值:
6.4、Frobenius范數
上面的范數都是用來衡量向量的大小,而Frobenius范數用來衡量矩陣的大小。矩陣A的Frobenius范數定義為
其類似于向量的\(L^2\)范數。
6.5、向量點積
兩個向量的點積(內積)的通常求法是將兩個向量對應位置元素的乘積求和,除此之外也可以使用范數來求:
Θ為向量x和y之間的夾角。
7、特殊的矩陣和向量
7.1、對角矩陣
對角矩陣只在主對角線上含有非零元素,其余位置元素全為零。當主對角線上的元素全為1時,該對角矩陣為單位矩陣。形式上,對矩陣D時對角矩陣,當且僅當對任意的\(i≠j\),\(D_{i,j}=0\)。我們用diag(v)來表示對角元素由向量v中的元素指定的對角矩陣。
對角矩陣之所以受到關注是因為它的乘法計算很高效。計算\(diag(v)x\),我們只需要將向量x中的每個元素\(x_i\)放大\(v_i\)倍,也就是\(diag(v)x=v\bigodot x\),\(\bigodot\)為上面提到的對應元素乘積。
計算對角矩陣的逆矩陣也很高效。對角矩陣的逆矩陣存在,當且僅當對角元素都是非零值。在這種情況下,有:
在很多情況下,我們可以根據任意矩陣導出一些通用的機器學習算法;但通過將一 些矩陣限制為對角矩陣,我們可以得到計算代價較低的(并且簡明扼要的)算法。
需要注意的是,對角矩陣不一定是方陣,長方形的矩陣也可能是對角矩陣,但非方陣的對角矩陣沒有逆矩陣,但我們仍然可以高效地計算它們的乘法。對于一個長方形對角矩陣D而言,乘法 \(Dx\) 會涉及到 x中每個元素的縮放,如果D是瘦長型矩陣, 那么在縮放后的末尾添加一些零;如果D是胖寬型矩陣,那么在縮放后去掉最后一些元素。
7.2、對稱矩陣
對稱矩陣是轉置和自己相等的矩陣,也就是:\[A = A^T\]
7.3、單位向量
單位向量是具有單位范數的向量(單位向量到原點的距離為1),向量x是單位向量,則有:
如果\(x^Ty=0\),則向量x與y相互正交。如果兩個向量都有非零范數,那么這兩個向量之間的夾角是 90 度。在 \(\mathbb{R}^{n}\) 中,至多有 n 個范數非零向量互相正交。如果這些向量不僅互相正交,并且范數都為 1,那么我們稱它們是標準正交(orthonormal)。
7.4、正交矩陣
正交矩陣(orthogonal matrix)是指行向量和列向量是分別標準正交的方陣:
這意味著:
也就是正交矩陣的逆矩陣等于該正交矩陣的轉置。正交矩陣受到關注是因為求逆計算代價小。我們需要注意正交矩陣的定義。違反直覺的是,正交矩陣的行向量不僅是正交的,還是標準正交的。對于行向量或列向量互相正交但不是標準正交的矩陣,沒有對應的專有術語。
8、特征分解
8.1、特征值和特征向量
許多數學對象可以通過一定的方法將它們分解為多個部分或找到一些屬性從而更好地理解這些數學對象。這些屬性是通用的,而不是由我們選擇表示它們的方式產生的。例如,整數可以分解為質因數。我們可以用十進制或二進制等不同方式表示整數12,但是12 = 2×2×3 永遠是對的。從這個表示中我們可以獲得一些有用的信 息,比如 12 不能被 5 整除,或者 12 的倍數可以被 3 整除。
同樣地,矩陣也可以通過一些方法來分解。特征分解是使用最廣的矩陣分解之一,通過特征分解可以將矩陣分解成一組特征向量和特征值。
設A是一個方陣,如果存在數λ和非零列向量 v,使得:\[Av=λv\]成立,則非零列向量v成為方陣A的特征值,標量λ稱為特征向量v對應的特征值。從另一個角度理解,方陣A的特征向量是指與A相乘后相當于對該向量進行縮放的列向量(類似的,左特征向量定義為\(v^TA=λv^T\),但我們更關注右特征向量),如下圖:
如果v是A的特征向量,則v縮放過后的向量λv(λ≠0,λ∈\(\mathbb{R}\))也是A的特征向量,且v和λv的特征值相同。通常我們只考慮單位特征向量v。
8.2、特征分解
假設矩陣A有n個線型無關的特征向量\({v_1,v_2,...,v_n}\),對應n個特征值\({λ_1,λ_2,...,λ_n}\)。我們將特征向量組成一個矩陣V,使得每一列為一個特征向量,則\(V=[v_1,v_2,...,v_n]\),類似地,將特征值連接成一個列向量λ=\([λ_1,λ_2,...,λ_n]^T\),則矩陣A的特征分解可以記為:
需要注意的是,不是每一個矩陣都可以分解成特征值和特征向量。具體來講,每個實對稱矩陣都可以分解成實特征向量和實特征值:
其中 Q 是 A 的特征向量組成的正交矩陣,Λ 是特征值組成的對角矩陣。特征值 \(Λ_{i,i}\) 對應的特征向量是矩陣 Q 的第 i 列,記作 \(Q_{:,i}\)。因為 Q 是正交矩陣,我們可以將 A 看作沿方向 \(v_i\) 延展 \(λ_i\)倍的空間(上面的圖2.3)。
雖然任意一個實對稱矩陣 A 都有特征分解,但是特征分解可能并不唯一。按照慣例,我們通常按降序排列 Λ 的元素。在該約定下,特征分解唯一當且僅當所有的特征值都是唯一的。
矩陣的特征分解給了我們很多關于矩陣的有用信息。矩陣是奇異的(矩陣的列向量線性相關)當且僅當含有零特征值。實對稱矩陣的特征分解也可以用于優化二次方程\(f(x) = x^?Ax\),其中 限制 \(∥x∥_2 = 1\)。當 x 等于 A 的某個特征向量時,f 將返回對應的特征值。在限制條件下,函數 f 的最大值是最大特征值,最小值是最小特征值。
8.3、正定、半正定和負定、半負定
所有特征值都是正數的矩陣被稱為正定(positive de?nite);所有特征值都是非負數的矩陣被稱為半正定(positive semide?nite)。同樣地,所有特征值都是負數的矩陣被稱為負定(negative de?nite);所有特征值都是非正數的矩陣被稱為半負定 (negative semide?nite)。
9、奇異值分解
除了特征分解外,另一種分解矩陣的方法為奇異值分解(SVD)。通過奇異值分解,可以把矩陣分為奇異向量和奇異值。每個實數矩陣都有一個奇異值分解,但不一定都有特征分解。例如,非方陣的矩陣沒有特征分解,這時我們只能使用奇異值分解。
我們可以將矩陣A分為3個矩陣的乘積:
其中A是一個mxn的矩陣(不一定是方陣),U是一個mxm的正交矩陣,D是一個mxn的對角矩陣,V是一個nxn的正交矩陣。
對角矩陣 D 對角線上的元素被稱為矩陣 A 的奇異值(singular value)。矩陣 U 的列向量被稱為左奇異向量(left singular vector),矩陣 V 的列向量被稱右奇異向量(right singular vector)。
事實上,我們可以用與 A 相關的特征分解去解釋 A 的奇異值分解。A 的左奇異向量(leftsingularvector)是 \(AA^T\) 的特征向量。A 的右奇異向量(rightsingular vector)是 \(AA^T\) 的特征向量。A 的非零奇異值是 \(AA^T\) 特征值的平方根,同時也是 \(AA^T\) 特征值的平方根。
特征值分解最有用的一個性質可能是拓展矩陣求逆到非方矩陣上。
10、Moore-Penrose 偽逆
矩陣 A 的偽逆定義為:
實際上計算偽逆使用的是下面的公式:
其中,矩陣 U,D 和 V 是矩陣A奇異值分解后得到的矩陣。對角矩陣 D 的偽逆 \(D^+\) 是其非零元素取倒數之后再轉置得到的。
11、跡運算
跡運算返回的是矩陣對角元素的和:
跡運算提供了另一種描述矩陣Frobenius 范數的方式:
矩陣交換位置之后的乘積的跡依然相同:\[Tr(AB)=Tr(BA)\] \[Tr(ABC)=Tr(CAB)=Tr(BCA)\]
另一個有用的事實是標量在跡運算后仍然是它自己:a = Tr(a)。
12、參考
12.1、《深度學習》中文版;
12.2、同濟大學《線性代數》第六版。
轉載于:https://www.cnblogs.com/sench/p/9461262.html
總結
- 上一篇: Quartz框架学习(1)—核心层次结构
- 下一篇: [图文] Fedora 28 使用 Vi