機器/深度學習-基礎數學篇(一)
這篇比較基礎
要講的是機器/深度學習可能會用到的數學和數學符號,應該是線性代數前一兩章的東西。
架構是:
1. 純量(scalar)和向量(vector)
2. 矩陣(Matrix)
3. 矩陣運算
4. 逆矩陣(Inverse matrix)
5. 矩陣轉置(Transpose)
6.在機器學習上的哪邊有用到
1. 純量(scalar)和向量(vector)
這兩個是機器/深度學習最基礎的原件,除了加減乘除之外,最重要的元素。 這邊介紹我盡量白話一點。
純量: 通常我們知道的數字0,1,2,3或是-0.1, 0.1,0.5,0.99都稱為純量,純量只有大小區分,也就是1>0,0.9<1.1,0=0。
向量: 又稱為矢量,向量通常用陣列或矩陣方式呈現,在空間上有大小也有方向。向量表示形式為
這個向量表示式的解讀方式為向量x為一個d個實數維度的向量,向量x內的每一個元素(element)都是一個維度(通常是純量)。
機器學習通常都在實數空間處理問題,少遇到複數空間??這邊我也不是很確定,我自己做這麼久的機器學習,我也少遇到複數情形,在推導有指數的數學比較有可能會遇到複數情形,和在訊號處理比較會遇到複數問題。
Note: 機器學習推導我們習慣把每個樣本寫成d×1的向量,在寫公式也會先定義好。但在程式撰寫時我們會把每個樣本變成1×d的陣列下去寫程式,所以程式跟公式基本上都有一點點差異。
通常為了區隔向量和純量的差異,向量如果用變數表示都會加上粗體,此例x,純量就不會加上粗體,如果是矩陣會用別的方式表示,等會會介紹。
向量表示式都是以原點當作出發點,向量內的元素當作終點,方向性就是從原點到元素值的方向。
在機器/深度學習/資料科學的維度等於「特徵數」。
這邊我舉一個2維度的圖,因為一般視覺化的圖最多畫到3維度,在更高維度基本上只能用想像的,圖是畫不出來的。
從上圖可以得知,向量的方向性,向量的長度就是向量大小(眼睛看的出長度,但真正的大小必須算出歐基里德距離才是向量的大小,也就是向量點和原點的距離)。數學表示式為:
Note: ||x||_2 就是2-norm,也可以說2-norm就是算和原點的歐基里德距離。
這邊用x=[-3,3]當例子去計算向量大小
2. 矩陣(Matrix)
矩陣為多個向量的擴充,矩陣的數學表示形式為
這個矩陣表示式的解讀方式為矩陣X為一個d列(row)×m行(column)的實數矩陣,矩陣的每個行(column)都是一個向量(xi),向量每個列(row)都是一個元素(xji),i=1,..,m; j=1,..,d。
Note: 剛剛有提到通常為了區隔向量和純量的差異,向量如果用變數表示都會加上粗體,此例x,純量就不會加上粗體,如果是矩陣會通常用大寫英文、斜體和粗體。
3. 矩陣運算
小學學的加減乘除都是在純量上計算,但矩陣之間計算方式跟純量不太一樣。這邊我們分成
純量和矩陣運算
這邊的a就是純量。
假設為a=2,就是將矩陣放大2倍,假設a=0.1,就是將矩陣縮小10倍(等於除的概念)。
矩陣和矩陣運算
矩陣和矩陣之間的運算和純量相比就有一些限制,比如說矩陣和矩陣運算沒有除的概念,矩陣和矩陣運算必須元素數可以對上。
矩陣相加減
假設有兩個矩陣相乘(X和Y),矩陣相加減等於矩陣內的元素作pairwise的相加減,但矩陣大小必須一致
假設
矩陣相乘
假設有兩個矩陣相乘(X和Y),X和Y矩陣大小有可能會不一樣,因為矩陣相乘之間的關係如下(相乘後的新矩陣為C):
note: X的第2個維度數(行數column)必須等於Y的第1個維度數(列數row)
矩陣相乘計算方式如下:
從矩陣計算的公式來看,可以得知新矩陣C的第i列第j行的元素等於矩陣X第i列和矩陣Y第j行作pair-wise的相乘總和,下圖舉一個c21的計算方式,
剛有提到矩陣可以相乘,但矩陣不能相除,那有沒有辦法達到矩陣的相除? 答案是用矩陣取逆矩陣(inverse)後在相乘。
4. 逆矩陣(Inverse matrix)
逆矩陣會有很多限制,第一個一般會算逆矩陣,這個矩陣必須是方陣,也就是矩陣的行跟列的數量要一樣,第二矩陣不能是奇異矩陣(singular)。
假設X是d維的方陣,數學表示會寫
因為是方陣,所以就不會完整寫d×d了,這邊是舉實數,當然也可以是複數。
判斷矩陣可不可逆,最簡單的方式就是取它的行列式值(Determinant),如果行列式值不等於0,則此矩陣可逆。
線性代數我記得我以前上課時有一堆式子可以去推矩陣是不是奇異矩陣,比如是不是full rank什麼的,但我最常用行列式值判斷,主要是程式好做。
假設X是d維方陣,如果存在一個d維方陣Y,使得
X就是可逆矩陣或稱為非奇異方陣,Y就是X的逆矩陣,
這邊的I是d維的單位矩陣,單位矩陣是一個對角線元素都為1,其他都為0的矩陣。
Note: 矩陣不可逆情況,這時候矩陣不能取inverse,當然有其他手法可以達到不可逆狀況下還是取它的逆矩陣,比如用pseudo inverse或是 singular value decomposition (SVD)。感謝Poem哥的提醒,當矩陣是不可逆時,SVD找出來的逆矩陣也是pseudo inverse。
5. 矩陣轉置(Transpose)
假設有一個矩陣為X,矩陣的轉置在數學上會寫成XT
矩陣轉置有一些性質在機器學習上比較需要被特別注意,假設有矩陣X和矩陣Y和純量c;
6. 在機器學習上的哪邊有用到
前面部份介紹純量、向量、矩陣、矩陣計算、逆矩陣和矩陣轉置,這邊稍微講一下實際在機器學習上用到的部份。
最直接用到的部份就是高斯分佈(Gaussian distribution),這邊不熟可以回顧一下之前寫的「機器學習: LDA分類演算法」,
單變量高斯分佈:
單變量高斯分佈內的x、μ和б就是純量,所以可以直接加減乘除。
多變量高斯分佈:
多變量高斯分佈內的x、μ和Σ就是向量和矩陣,所以在運算過程中就要符合向量和矩陣的計算方式。
我們將多變量高斯分佈拆成三塊去看,
下面我將矩陣大小也標記出來,這樣能比較清楚為什麼輸出是純量,
這邊也可以拆成細一點去看,順便看看矩陣怎麼運算,結果就是三個純量加減乘的結果,一樣是一個純量(廢話當然會一樣,不一樣就神了)。
但這邊展開是為了在做理論推導時後會用到偏微分,所以展開後在去做偏微分會比直接偏微分簡單,機器學習: LDA分類演算法這邊有用到,有興趣可以去看看。
所以單變量高斯分佈(純量計算)和多變量高斯分佈(向量計算)將隨機變數帶入公式後其實際算出的結果都是純量。
這也是機器學習test部份在計算的東西,因為我們最後在實現演算法時,training phase只是將參數部份(μ和Σ)依據training data學出來。在testing或是在現實生活中實現演算法,只需要特徵向量(x)的值帶入公式算出一個output value(純量),然後針對output value去做判斷。
比如貓狗分類系統,我們訓練了一個LDA分類去,output value≥0.5,就是狗,output value<0.5,就是貓。