原文鏈接:Github-Funny_Mr_Zhi GNN_playground
參考:麻省理工公開課 線性代數 MIT Linear Algebra
Chapter1
可以帶著問題去讀,線性代數到底是什么,矩陣又是什么。盡管深入學習數學需要一種抽離出現實和直觀理解的高度抽象思維,前期利用一些具體的現實映射示例有助于更好地理解和接受一套理論。
最終結論:矩陣分解A=LU是高斯消元求解n元方程組的抽象表示,高斯消元求解也是矩陣分解的一種具體現實映射,它幫助我們初步了解矩陣的妙用與可能的理解方式,為后續更廣泛而奇妙的應用打下基礎!(看到第一章最后就可以理解這句話,理解了這句話這一章也就學會了)
需要重點理解的用紅色大字體標出
Class 1
Class 1:Explanation of the geometic equation system 方程組的幾何解釋
基本問題:N linear equations , n unknowns. 求解N個線性等式的n個未知數
三種視角
- Row picture
- column picture
- matrix from
以二元一次方程組為例
2x?y=0?x+2y=3\begin{align} 2x - y = 0\\ -x+2y = 3 \end{align}2x?y=0?x+2y=3??
用線性代數表示
[2?1?12][xy]=[03]\left[ \begin{array}{ccc} 2 & -1 \\ -1 & 2 \end{array} \right] \left[ \begin{array}{ccc} x\\y \end{array} \right] = \left[ \begin{array}{ccc} 0\\3 \end{array} \right][2?1??12?][xy?]=[03?]
- 從
Row picture
看,是二維空間的兩條直線,交點即為解 - 從
column picture
看,是二維空間的兩個向量,通過linear combination
線性組合合成(0, 3)
- 從
Matrix form
看,計算左側結構,可以當成矩陣乘法,也可以分解為column picture
求解
具體解法中,圖解只能在低維度使用,高維度不夠直觀,會用系統性的消元法解。這里重點關注線性組合
,也就是理解列視角的看問題的方式。
一個常見的基本問題:
- Can I solve Ax = b for every b
- or say: Do the linear combinations of the columns fill N-D space
- 這個問題的答案與奇異\非奇異,可逆\非可逆有關
Class 2
elimination消元法解方程組
以三元一次方程組為例,一個自然的想法是利用消元法求解。
對應到矩陣上Ax=bAx = bAx=b,對角線上的元素稱為主元,消元最終目的是主元下方的元素全部為0,且主元不為零。滿足條件后,說明求解成功,通過回代可以求出所有變量的解。
- 從第一行開始,若當前主元行的主元不為零,則講該行整體疊加到下面的行,確保主元下方元素都為0
- 若當前行主元為零,則可以交換主元行和其它行的位置,再次嘗試第一步
- 逐行處理,若對角線主元全部非零且主元下方全部為零(上三角矩陣),則求解成功
- 回代:在所有過程中間矩陣右側補充b列,稱為argumented matrix增廣矩陣
- b同步疊加操作,結果從最后一行開始向上逐行解出變量值
- 若無法滿足上一步的要求,求解失敗
該處理步驟可以和直接在方程組上進行消元的操作一一對應,直接目的就是消元。
從另一個角度理解:如何看待矩陣運算(一種行列變換)
|a b c| |x| |a| |b| |c|
|d e f| |y| = x |d| + y |e| + z |f| //右側列分解列疊加
|g h i| |z| |g| |h| |i||a b c|
|x y z| |d e f| = x |a b c| + y |d e f| + z |g h i| //左側行分解行疊加|g h i||a b| |0 1|
|c d| |1 0| 等效于對左側矩陣進行列置換,右側變換矩陣進行列變換|0 1| |a b|
|1 0| |c d| 等效于對右側矩陣進行行置換,左側變換矩陣進行行變換|1 0| |a b| |a b|
|2 1| |-2a d| = |0 d+2b|
等效于對右側矩陣進行行變換,第一行不變,第二行為二倍第一行疊加過來
深入理解矩陣乘與行列變換的對應關系!
有了上面的理解,消元無非是行變換,也就是在A左側不斷乘上新的矩陣達到消元的目的。即消元過程可表示為Ex…(E1A)=UE_{x}\dots(E_{1}A) = UEx?…(E1?A)=U 其中U為上三角矩陣。(這里注意,矩陣乘法有結合律,但沒有交換律)
進一步可以思考逆矩陣的概念,從上面的理解角度,就是通過逆變換消除原來變換的影響
|1 0| |1 0| |a b|
|3 1| |-3 1| |c d|
以上兩個左側矩陣為逆變換,先是R2 = R2 - 3R1再是R2 = R2 + 3R1,還原回A
Class 3
- Matrix mutiplication
- Inverse of A
- Gauss-Jordan find A?1A^{-1}A?1
首先學習矩陣乘法的四種計算方式,結果是一樣的,四種方式事實上從四個角度理解矩陣乘法
矩陣乘法
對于矩陣乘法AB=CAB = CAB=C
- 方式一: Cij=(RowjofA)?(ColiofB)C_{ij} = (Row_j\quad of\quad A)\quad ·\quad ( Col_i\quad of\quad B)Cij?=(Rowj?ofA)?(Coli?ofB)
Cij=∑k=1naikbkjC_{ij} = \sum_{k=1}^n a_{ik}b_{kj}Cij?=k=1∑n?aik?bkj?
- 方式二:C的每一列由A的列的線性組合得到,C的第k列由B的第K列與A矩陣定義的線性組合得到
- 方式三:C的每一行由B的行的線性組合得到,C的第k行由A的第K行與B矩陣定義的線性組合得到
- 方式四:C=∑k=1n((ColkofA)?(RowkofB))C = \sum_{k=1}^{n}((Col_k\quad of \quad A) · (Row_k\quad of\quad B))C=∑k=1n?((Colk?ofA)?(Rowk?ofB))
這種理解方式是從多個視角觀察矩陣乘法時到底發生了什么。
從AB角度看,可以拆分為行列乘、矩陣與列乘、行與矩陣乘、列行乘
。
從C角度看,可以認為是一次計算一個元素、一次計算一列,一次計算一行,一次計算整個矩陣的部分分量
矩陣的逆與Gauss-Jordan
對于一個矩陣A,定義A的逆為A?1A^{-1}A?1
A?1A=I=AA?1A^{-1}A = I = AA^{-1}A?1A=I=AA?1
關注兩個問題:A的逆是否存在,以及如何求A的逆(此時可以與解方程組聯系起來)
定理:若能找到非零向量x
使得,Ax=0Ax=0Ax=0,則A不可逆
反正法解釋:若存在A的逆,Ax=0Ax=0Ax=0說明Ix=A?10=0Ix = A^{-1}0 = 0Ix=A?10=0,若
x
非零顯然矛盾,單位矩陣乘非零向量不可能為零。
Gauss-Jordan
目的是一次解多個N元方程組
|1 3| |a c| = |x y|
|2 7| |b d| |i j| 可以理解為解兩組方程第一組是:
|1 3| |a| = |x|
|2 7| |b| |i| 第二組由B和C的另外一列構成,省略解法為將原A和C拼接,寫成增廣矩陣|A C|
|1 3 x y|
|2 7 i j|
然后對左側A部分進行消元
|1 3 x y |
|0 1 i-2x j-2y|
以上是Guass做法,Jordan繼續消除A對角線以外其它元素(矩陣內運算替代回代過程)
|1 0 -3i+7x -3j+7y|
|0 1 i-2x j-2y |
這樣就解出a, b和c, d了求逆是可以利用Gauss-jordan,令右側C=I
|A I|進行Gauss-jordan計算求解
得到|I E|這里,由于EA=I,則可以得出E即為要求解的A的逆
到這里為止,線性代數可以看作對于AB=CAB = CAB=C中,知道任意兩個矩陣,求另一個矩陣的范疇。
對于AB = Col of C,可以等效為求解一個N元方程。這是矩陣乘法和多元方程求解的對應關系。
通過矩陣分塊和矩陣運算在等式兩側同時乘上一個矩陣,等式仍成立(以及矩陣運算分配律、結合律)可以通過一些有趣的方法實現系統性的計算過程。
理解Gauss-Jordan算法中用到的矩陣運算技巧,以及每一個運算過程對應的實際含義
Class4
- 矩陣求逆和轉置的公式
- 矩陣分解 A = LU
- 矩陣分解復雜度
- 矩陣置換的組合與群
矩陣求逆和
(AB)?1=B?1A?1(1)(AB)^{-1} = B^{-1}A^{-1}\quad (1)(AB)?1=B?1A?1(1)
前提是在A,B有逆。該公式較為容易理解,(AB)的逆應該與(AB)左乘右乘都為I, B?1A?1B^{-1}A^{-1}B?1A?1顯然滿足
(AT)?1=(A?1)T(2)(A^T)^{-1} = (A^{-1})^T\quad (2)(AT)?1=(A?1)T(2)
以式子(AB)T=BTAT(AB)^T = B^TA^T(AB)T=BTAT為基礎,(A?1)TAT=(AA?1)T=I(A^{-1})^TA^T = (AA^{-1})^T = I(A?1)TAT=(AA?1)T=I,即ATA^{T}AT的逆為(A?1)T(A^{-1})^T(A?1)T
矩陣分解
一種較為基礎的分解:將A分解為L和上三角矩陣U
- 在高斯消元法中,為了得到上三角矩陣UUU,使用E與A相乘得到U。
- 通常,E可以表示為若干步驟的行變換(若A可解的話)
- e.g.對3x3矩陣,E可分解為E32E31E21E_{32}E_{31}E_{21}E32?E31?E21?,其中EijE_{ij}Eij?表示E為在I的基礎上,第i行j列非零的矩陣,即將j行疊加到i行以消除A中主元下方i行的元素的變換
- 對于EA=UEA = UEA=U可以寫成A=E?1UA = E^{-1}UA=E?1U,這里E?1E^{-1}E?1就是我們要求的L
- 通常E?1E^{-1}E?1寫成若干(Eij)?1(E_{ij})^{-1}(Eij?)?1相乘的形式,若采用這種分開寫的形式和行變換視角理解矩陣乘和求逆計算,求解L的整個過程不需要任何演算,全部心算即可完成。
以下為示例
以3x3矩陣為例
假設E = E32 E21 (A31天然為0, 簡化說明過程)
不妨令|1 0 0| |1 0 0|
E = |0 1 0|*|4 1 0||0 3 1| |0 0 1|
則L = E32的逆 * E21的逆|1 0 0| |1 0 0|
L = |-4 1 0|*|0 1 0||0 1 1| |0 -3 1| 利用行變換思路理解求逆,直接加負號就行|1 0 0|
L = |-4 1 0||0 -3 1| 利用行變換思路求矩陣乘,很快
對于求L的過程,如果嚴格按照分解E的過程來寫,并從行變換角度理解矩陣求逆和矩陣乘法。整個過程會很簡單。因為過程中出現的所有矩陣求逆和矩陣乘法的結果從行變換的角度來看都可以一眼看出結果
由此再觀察矩陣分解式子:A=LUA = LUA=LU。我們關注的就只是E代表的矩陣列表,得到這個列表后只需求逆,然后逆序相乘即可。
矩陣分解復雜度分析
每一次求加法或減法視為一次計算
對于n*n的矩陣
- 第一次講(1, 1)主元下的元素全部消為0,涉及下面(n-1)行的疊加計算,共(n*n-1)次計算,近似為n2n^2n2
- 第二次為(n?1)2(n-1)^2(n?1)2,后續以此類推
- 總共需要n2+(n?1)2+…12n^2 + (n-1)^2 + \dots 1^2n2+(n?1)2+…12次計算,利用微積分知識可近似為1/3n31/3n^31/3n3
該矩陣分解的過程事實上是在模擬高斯消元的過程,對于右側b的變化其復雜度可以近似為n2n^2n2
矩陣置換的組合與群
對于一個n*n的矩陣,行(列)置換共有n(n-1)種可能
由于置換組合已經覆蓋了所有可能的置換方式,所有置換組合相乘或取逆,其結果仍是一種置換,也就仍是置換的一種。這種不論如何計算結果仍在原先集合內的性質,比較類似群的概念。
第一章小結
至此第一章完結,從最開始的解n元方程組入手,逐步引入了矩陣的概念
認識矩陣有多種方式,矩陣也有很多奇妙的性質。通過矩陣的運算,也可以理解為矩陣的變換,我們從一個完全不同的角度嘗試了n原方程組的求解。基本的矩陣分解的一種形式(A = LU)事實上模擬了高斯消元的過程,但整個過程種只包含非常簡單的矩陣運算(或者更直觀一點說是變換)。
本質上我們做的事還是求解n元方程組,但是矩陣用一種高度概括和抽象的視角抽離出問題求解的關鍵所在,并用優雅且簡單的抽象變換完成了問題的求解。
矩陣的變換和直接在n原方程上進行加減疊加消元的每一步操作是可以完全對應上的。就是對問題本質的高度抽象。然而這是n元方程求解的全部,但不是線性代數的全部,矩陣的應用遠不止這些。后續章節應該會更深入的理解線性代數及其用途。
矩陣分解A=LU是高斯消元求解n元方程組的抽象表示,高斯消元求解也是矩陣分解的一種具體現實映射,它幫助我們初步了解矩陣的妙用與可能的理解方式,為后續更廣泛而奇妙的應用打下基礎!