线性代数应该这样讲(二)
在《...(一)》中,小夕從映射的角度講解了矩陣及矩陣運算,這也是機器學習中看待矩陣的非常重要的視角。
?
另一方面說,矩陣當然也是用于存儲數據的數據結構,這也是最好理解的形式。另外還可以看做是一個線性方程組(課本上講爛了的開頭),甚至可以將其僅僅看做一般化的張量(tensor)中的一個普通切片(slice),或者說其中一層。所以矩陣代表什么含義,要在不同的場景中靈活對待,不要局限在一種視角哦。
繼續從映射的視角來看。
小夕說,不同的矩陣就代表著不同的映射,就像上一篇文章講的,就可以表示“將輸入的空間的第一個維度的坐標軸縮短為原來的一半,將第二個維度的坐標軸拉伸為原來的兩倍”。這就是這個矩陣的含義。
?
例如,輸入一個二維空間里的多個樣本點:
?
比如
?
此時的矩陣就是存儲數據的視角啦。這里的矩陣就是每一行就是空間中的一個樣本點,所以這個矩陣就代表二維空間里的3個樣本點。
?
所以將A中這個空間的三個樣本丟給W這個映射,就得到了三個樣本在新的空間的鏡像點(跟高一時學的集合的映射是一個概念):
?
?
看,是不是新得到的三個樣本的第一維都被壓縮成了原來的一半,而第二維被拉伸成了原來的兩倍呢~
?
而神經網絡中,每一層的輸出經過權重矩陣,映射到下一層的輸入的過程,就是上述這個過程哦(沒有理解的再看看這篇文章《神經網絡激活函數》)
好啦。從映射的視角接著走。那么既然矩陣是描述映射的,那么肯定會有更嚴謹,更直觀的形式去描述一個矩陣背后所暗示的映射規則。這個更直觀的形式是什么呢?
?
好,然后我們將映射更加夸張一下,我們來看映射。顯然,按照小夕之前的講解,這個映射就代表將第一維度壓縮為原來的0.99倍(幾乎沒有變化!),將第二維度拉伸為原來的100倍(顯然變化十分極其非常的大)。這個映射的作用對象很明顯:
?
1、第一維度坐標軸。怎么描述這個作用對象呢?回顧一下中學數學,在二維空間中,第一維度坐標軸不就是(x,0)嘛~既然是描述坐標軸,我們不妨用一個單位為1的向量表示x軸,即(1,0).
?
2、第二維度坐標軸。同樣的道理,在二維空間中,第二維度坐標軸就是y軸,表示為(0,1)
?
這個映射對每個作用對象的作用程度也很明顯不一樣:
?
1、對第一維度坐標軸的作用程度就很小,對它幾乎沒有改變(改變成了原來的0.99倍),所以我們直接用0.99來表示作用程度(顯然,越接近1表示作用程度越小)。
?
2、同樣,這個映射對第二維度的坐標軸作用程度非常大。所以用100來表示。
?
好啦~小夕用“作用對象”和“對某作用對象的作用程度”是不是就已經非常清晰的描述清楚了矩陣的映射規則呢~所以理論上說,這兩者應該完全等價才對~
?
學過線代的你有沒有靈光一現呢~
沒!錯!小夕這里講的“作用對象”就是大學課本講成一坨的“特征向量”(eigenvector)!小夕這里講的“對某作用對象的作用程度”就是課本里的“特征值”(eigenvalue)!因此,一個矩陣,或者說一個線性映射,完全可以用它的全部特征向量及其對應的特征值去描述!(當然嚴謹的說是方陣,先接著開車,下一篇文章再解釋細節)
而將矩陣分解為它的特征值與特征向量的過程被稱為“特征分解”(Eigendecomposition),又稱"譜分解"(Spectral decomposition)。特征分解是眾多矩陣分解中的一種,因此當然原矩陣A會被分解成幾個目標矩陣啦~這里的目標矩陣當然就是兩個,一個由特征向量組成的,還有一個是由特征值組成的。
?
你可以試一下,將上面的兩個特征向量疊在一起(一列為一個特征向量):
?
然后每個特征向量對應的特征值依次放到一個對角矩陣的各位置上
?
然后由公式即可以恢復出原映射W。(注:是eVec的逆矩陣)
對于這個例子,一眼就能算出來肯定是對的~對于的證明,可以參考各種教材和博客,就不展開啦。(文章末尾有鏈接推薦)
有了對特征值和特征向量的這一層理解,我們當然很容易繼續聯想到:
?
當一個矩陣的特征值中包含0時,就表示要將一個“坐標軸”直接毀滅!(將一個坐標軸映射回原點。這個“坐標軸”就是這個0特征值所對應的特征向量(所描述的方向));
?
同理,負數特征值就表示將它所對應的特征向量所在的坐標軸反轉。因此,-1就表示將該坐標軸反轉,但是不拉伸也不壓縮。(-1,0)表示反轉且壓縮,(-∞,-1)表示反轉且拉伸。
?
這就是映射的視角下,矩陣的特征值與特征向量的含義。這也是升華對一些機器學習算法理解的必經之路。
?在數據存儲的視角下,矩陣的特征值與特征向量的含義更容易理解了,畢竟圖像就是最直觀的數據存儲的矩陣嘛~這方面的理解強烈推薦wiki,蒙娜麗莎的例子非常形象:
?
https://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%81%E5%80%BC%E5%92%8C%E7%89%B9%E5%BE%81%E5%90%91%E9%87%8F
?
當然需要翻墻。(都開始做機器學習了,翻墻這么簡單的事情就不用小夕教了吧。。。
想進一步加深對特征值與特征向量的理解的同學,尤其是想從數學形式上去理解的同學,更要看一下上面的Wiki啦~
而如何將矩陣分解出它的特征值與對應的特征向量呢?
API小王子/小公主可以在matlab中直接調用
[eVecs,eVal] = eig(A)
得到矩陣A的特征向量和特征值。python中的numpy和scipy庫中應該也有相應的API。
如果有同學對特征值分解算法細節感興趣,小夕推薦從QR算法入手~如果覺得不過癮,可以繼續嘗試Hessenburg-QR算法,還不過癮就再加上shift操作~不過一般來說,做機器學習的話沒大有必要對這些算法花太多精力~
?
QR分解有個好玩的帖子,講的很詳細(雖然排版不忍直視):
http://blog.csdn.net/cinmyheart/article/details/44086369
另外,不知道大家對SVD的細節有沒有興趣呢?因為網上講SVD的帖子很多啦,有很多講的很好的,小夕也不知道有沒有必要再講一下了QAQ,丟個投票器吧。
?再丟個小狐貍
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的线性代数应该这样讲(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud Stream如
- 下一篇: 基于Wi-Fi的室内定位在美团总部的实践