AI 科技評論按:「Deep Learning」這本書是機器學習領(lǐng)域的重磅書籍,三位作者分別是機器學習界名人、GAN的提出者、谷歌大腦研究科學家 Ian Goodfellow,神經(jīng)網(wǎng)絡(luò)領(lǐng)域創(chuàng)始三位創(chuàng)始人之一的蒙特利爾大學教授 Yoshua Bengio(也是 Ian Goodfellow的老師)、同在蒙特利爾大學的神經(jīng)網(wǎng)絡(luò)與數(shù)據(jù)挖掘教授 Aaron Courville。只看作者陣容就知道這本書肯定能夠從深度學習的基礎(chǔ)知識和原理一直講到最新的方法,而且在技術(shù)的應用方面也有許多具體介紹。這本書面向的對象也不僅是學習相關(guān)專業(yè)的高校學生,還能夠為研究人員和業(yè)界的技術(shù)人員提供穩(wěn)妥的指導意見、提供解決問題的新鮮思路。
面對著這樣一本內(nèi)容精彩的好書,不管你有沒有入手開始閱讀,AI 科技評論都希望借此給大家提供一個共同討論、共同提高的機會。所以我們請來了曾在百度和阿里工作過的資深算法工程師王奇文與大家一起分享他的讀書感受。
分享人:王奇文,資深算法工程師,曾在百度和阿里工作,先后做過推薦系統(tǒng)、分布式、數(shù)據(jù)挖掘、用戶建模、聊天機器人?!八惴飞希频Z前行”。
「Deep learning」讀書分享(二) —— 第二章 線性代數(shù)
我們上次講的是「深度學習」第一章:簡介,今天分享的是第二章:線性代數(shù)。右上角是這一章的目錄,從27頁到42頁,內(nèi)容不多,基本都是傳統(tǒng)形式上的概念。同樣,我只講直觀思路,盡可能的少用公式,畢竟好多人見著數(shù)學公式就頭疼,更不用說在PPT上看了,效果不好,容易催眠,看著看著就身在朝野心在漢了。
左側(cè)是基本框架,剛開始會有一些基本介紹,比如標量、向量、矩陣、張量;然后詳細講解下向量、矩陣,和矩陣分解。矩陣分解里面要特別強調(diào):一個“特征值分解”,還有一個“奇異值分解”;接著,向量和矩陣之間什么關(guān)系;最后是應用案例。這部分對機器學習和深度學習來說是非常重要的,如果想從事機器學習方面的研究或者是工作,必須掌握。而且今天講的線性代數(shù)是所有數(shù)學基礎(chǔ)里面最簡單的。
我會分成兩部分來講,第一部分是非常傳統(tǒng)的方法,就是講向量是什么、標量是什么等等一些常規(guī)的定義、概念,比較枯燥,我會講得快一些,幫大家快速回顧下曾經(jīng)學過的《線性代數(shù)》或《高等代數(shù)》(數(shù)學系教材),把還給老師的知識一點點拿回來?。ú荒馨捉粚W費是吧?)所以請大家集中注意力。
第二部分我會換一種方式,從直觀感覺上重新理解線性代數(shù)的本質(zhì),這部分是精華,一般人都沒見過,保證讓你醍醐灌頂。
幾種類型:
標量,簡單來說就是一個數(shù)字,像X=3,它就是一個數(shù)值;而向量就是一列數(shù)或者一堆數(shù),把它排成一行或者一列,然后就對應到線性空間里的一個點或者一個矢量(也就是帶方向的線段)。這個線性空間可以是多維的,具體二維還是三維就看這里面堆了幾個數(shù)。像x=(1,3,6),對應的是三個坐標,就是三維空間里面的一個點;而三維空間的原點到這個點有向線段就是一個向量。
接著是矩陣。矩陣是把向量按照行方向或者是列方向排列起來,變成一個二維數(shù)組。像右側(cè)矩陣A里面這樣排列。
張量是矩陣基礎(chǔ)上更高維度的抽象,它的維度可能比前面還要高,主要對應于包含若干坐標軸的規(guī)則網(wǎng)格。
從剛才的那些講解上可以發(fā)現(xiàn):
標量相當于一維向量(暫時忽略方向,嚴格來說是向量單個維度的大?。?/span>
而向量是只有一維矩陣
矩陣是張量的一個切片
從上到下是維度的逐漸提升。反過來從下往上,張量、矩陣、向量、標量,是不斷降維的過程。所以前面的類型只是后面的一個特殊形式,比如說任意一個向量,是張量的一種特殊形式。簡而言之,張量囊括一切。
向量一般分成方向和長度兩部分。像這個x是一個單位向量,它的特點是長度是1個單位。
關(guān)于向量,有這兩種理解:
把它當做線性空間里面一個點
把它當做帶有方向一個線段
這兩種都可以。
跟向量有關(guān)的兩種運算,一種是內(nèi)積,第二種是外積。根據(jù)定義,內(nèi)積會生成一個數(shù),外積會生成一個向量;需要根據(jù)右手坐標系來定方向,保持手掌、四指與大拇指相互垂直,將手掌與四指分別對應兩個向量,一比劃,就得到大拇指的方向,大小就按照sin這個公式算出來。
有些特殊的向量,比如零向量就對應線性空間里面的原點;單位向量就是長度是一。還有概念叫正交,簡單理解就是空間中兩個向量相互垂直。垂直怎么判斷?就是兩個向量作內(nèi)積,公式里有個cosθ,θ如果等于90度,結(jié)果就是零;這就是正交。
關(guān)于向量長度,有個度量方法:范數(shù)。向量長度按照范數(shù)來度量,分別對應不同的表達式。
L1范數(shù),它會取每一個元素的絕對值,然后求和;
L2范數(shù),L1的絕對值變成平方,外層開方;
還有P范數(shù),這里面的P數(shù)值是自己指定的;
F范數(shù)一般只適用于矩陣,里面每一個元素取平方,然后再求和。
可見,P范數(shù)是一般形式,p=1或2分別對應L1和L2(對應于機器學習里的L1、L2正則)
矩陣相關(guān)概念。
同型,如果兩個矩陣A和B同型,那么A和B的維度是一樣的,比如說A是M×N,B是X×Y,那么M等于X,N等于Y,這是關(guān)鍵;
方陣就是,對于一個M×N的矩陣,M等于N就是個方陣。
單位矩陣,對角線全部都是1;
對稱,轉(zhuǎn)置后矩陣不變;
秩和跡。秩對應的一個概念叫線性表出,也就是矩陣里面的每一行或者是每一列,選定一個方向(要么是行要么是列),取其中一列,跟其他的列做加減和數(shù)乘(只能是這兩種操作),其中任意一列要不能由其他列的線性表出?,F(xiàn)在聽起來可能不太好理解,可以暫時放放。
行列式,就是在矩陣外面,比如說這個3×3的矩陣,在外面取兩邊各加一條豎線,這就表示行列式;怎么算呢,每一行、每一列分別取一個數(shù),相當于這里面三個元素全排列,之后再乘上一個逆序數(shù)(逆序數(shù)是指每組元素原始下標順序,如果是逆序,就乘-1,把這所有的逆序數(shù)乘上去,最后就得到了一個方向,也就是行列式里面是正號還是負號)。
逆矩陣,就是矩陣A乘以某個矩陣后得到單位陣,這個矩陣就是逆矩陣;
偽逆矩陣是逆矩陣的一種擴展;
正交矩陣就是每行每列都是單位向量,特性是AAt=I。
剛才的內(nèi)容,可能不好理解,不過大家都學過線性代數(shù)的基本課程,還是能夠回憶起來的。后面第二部分再給大家解釋一下為什么會有這些東西。
矩陣運算,除了傳統(tǒng)的矩陣乘法,還有一種特殊的乘積,這個就是對應元素乘積,它的表示方法是不一樣,中間加個圓圈;兩個矩陣(必須同型)對應元素相乘,得到一個新的矩陣,也是同型的。
我們看一下矩陣乘法。從右往左看,這個是作者(Ian Goodfellow)PPT里的一張圖,老外的思維是從右往左看。這里是3×2的一個矩陣,和2×4的一個矩陣,兩個矩陣相乘,就是兩個矩陣中分別取一行和一列依次相乘,得到左邊的矩陣。
范數(shù)的目標就是衡量矩陣的大小。有很多種類別,但不是什么函數(shù)都能當做范數(shù)的,有些基本的要求:比如必須要保證有一個零值,然后還要滿足三角形不等式,也就是三角形兩邊之和大于第三邊,還有數(shù)乘,對應的是等比例縮放??s放就是一個函數(shù)乘以一個實數(shù),這是一個線性空間里的基本運算。
這是P范數(shù)的表達式。其實P范數(shù)具有一種泛化的表達式,是一種通用的方式,可以包含L1、L2,還有無窮范式,這些都是由P的取值決定的,可以等于1、等于2、等于無窮。
行列式的計算方法比較復雜,公式我就不列了。直接給出直觀理解:衡量一個向量在經(jīng)過矩陣運算后會變成什么樣子,即線性空間上進行了某種放縮,可能是放大或者縮小,縮放的倍率就是行列式值;行列式的符號(正或負),代表著矩陣變換之后坐標系的變化。
矩陣變換里面有這么幾種,平移、縮放等等。這個后面再說,免得重復。
矩陣分解:
(1)特征值分解,是我們常規(guī)見到的。有一個定義,比如我們定義一個矩陣A,乘以一個向量得到的等于另外一個數(shù)字乘以同一個向量,Av=λv。滿足這個表達式,就叫做矩陣的特征值分解,這是矩陣分解典型的形式。這個v就是一個特征向量,而這個λ就是特征值,它們是一一對應的(出生入死的一對好基友)。符合表達式可能還有其他取值,每一個矩陣A會對應多組特征向量和特征值;矩陣A的所有特征向量和特征值都是一一對應的。
如果矩陣是一個方陣(不只M等于N,還需要保證這個矩陣里面每一行、每一列線性無關(guān)),可以做這樣的特征分解,把A分成了一個正交矩陣乘對角陣乘同一個正交矩陣的逆。對角陣是把每一個特征向量一個個排下來。
還有個概念叫正定,是對任意實數(shù),滿足xAxt>0,就叫正定;類似的還有半正定,大于等于0是半正定;負定就是小于零。
(2)奇異值分解,是矩陣特征分解的一種擴展,由于特征分解有個很強的約束——A必須是一個方陣。如果不是方陣怎么辦呢,就沒有辦法了嗎?有的,就是用SVD奇異值分解,這個在推薦系統(tǒng)用的比較多。
這是特征分解的示意圖。從直觀上理解,這個圓上面的兩個向量V1、V2,經(jīng)過矩陣變換之后在兩個特征方向上進行縮放:在V1方向上面縮放λ1倍,變成了新的V1;V2在V2的方向做了λ2倍的縮放,變成新的V2。這兩個特征,構(gòu)成了完整的矩陣分解,也就是經(jīng)過一個線性變換之后得到的效果——在特征向量方向上分別縮放特征值倍。
SVD分解就是一個擴展形式,表達方式就這樣,不細說了。
向量和矩陣這兩個組合起來就可以解決常見的線性方程組求解問題。
這里有幾個概念,一個叫線性組合,就是一個矩陣,里面的一行或者一列,實際上就是多個向量,通過簡單的加減還有數(shù)乘,組合出來一個新的向量,這叫線性組合。如果用基向量X1、X2執(zhí)行加法和數(shù)乘操作,得到的是x3=k1*x1+k2*x2,一組向量組成的線性空間,即由X1、X2組合成的向量空間,就叫生成子空間。
如果對兩個向量X和Y,可以按照α和1-α這兩個數(shù)乘組合起來生成一個新的向量,這個叫線性表出,就是Z向量由X和Y進行線性表出,然后α和1-α都是一個數(shù)值,滿足這個關(guān)系就叫線性相關(guān)。這就是說Z和X、Y是線性相關(guān)的,如果不滿足,如果Z這個向量不能這樣表出,就叫線性無關(guān)。
這是矩陣對應的一個線性方程組。這是一個矩陣,現(xiàn)在像右邊這樣把它展開,就是矩陣和線性方程組是對應的。這個挺常見的我不就不多說了。
矩陣方程組的求解是,把方程組每一個系數(shù)組成矩陣A,根據(jù)A這個矩陣本身的特性就可以直接判斷這個方程組有沒有解、有多少解。還有無解的情況。
這是矩陣方程組的一些求解,比較常規(guī)的,像AX=b這個線性方程組一般怎么解呢?常規(guī)方法:兩邊直接乘A的逆矩陣。它有個前提:A的逆必須存在,也就是說A里每一行、每一列不能線性相關(guān)。這種方法一般用于演示,比如算一些小型的矩陣,實際情況下,A的規(guī)模會非常大,按照這種方法算,代價非常大。
再看下什么矩陣不可逆。一個矩陣M×N,按照M、N的大小可以做這樣的分類:如果行大于列,通常叫做長矩陣,反之叫寬矩陣;行大于列,而且線性無關(guān),就是無解的情形。寬矩陣有無數(shù)個解,其中,每一列代表一個因變量,每一行代表一個方程式。
偽逆是逆的一種擴展,逆必須要求A這個矩陣式滿秩,就是沒有線性表出的部分。如果不滿足,那么就得用偽逆來計算,這只是一種近似方法。SVD這種方法比較厲害,因為支持偽逆操作。
應用案例里,書里面只提到一個PCA,線性降維,也沒有詳細的展開。其實書里很多章節(jié)都提到了PCA,所以我也給大家普及一下基本概念。
這個是PCA在圖像上面的應用。這張圖非常經(jīng)典,凡是學過數(shù)字圖像處理的都知道她——Lenna(提示:別去搜lena的全身圖,~~~~(>_<>The Lenna Story」)。原圖像經(jīng)過主成分分析降維之后就變成右邊的圖,可以看到大部分信息都都還在,只是有些模糊。這個過程叫降維,術(shù)語是圖像壓縮。
看一下PCA的基本過程。PCA的思想是,原來一個矩陣有很多列,這些列里可能存在一些線性關(guān)系,如何把它降成更小的維度,比如說兩三維,而且降維之后信息又能夠得到很大程度的保留。怎么定義這個程度呢?一般是累計貢獻率大概85%以上,這些主成份才有保留意義。這個累計貢獻率是通過方差來體現(xiàn)的,樣本分布帶有一定的噪音或者隨機分布,如果是在均值的左和右兩個方向進行偏移的話,不會影響方差。方差等效于信息量。
這張圖解釋主成分分析的過程,用的是特征值分解,一個X的轉(zhuǎn)置乘以X,然后對它做各種復雜的變換,大家看看就行了,想了解細節(jié)的話自己去找資料,具體過程一時半會兒講不清楚。PCA最后有什么效果呢?看中間的坐標系給出示意圖,原來的矩陣取了X1和X2兩個維度,把樣本點打出來能看到近似橢圓分布,而PCA的效果就是得到一組新的坐標系,分別在長軸和短軸方向,互相正交,一個方向?qū)粋€主成分。實際上,數(shù)據(jù)特征多于兩維,圖里只是為了方便觀察,這樣就完成了一個降維的過程。
右上是一個示例,有一些動物樣本,狗、小貓,還有個氣墊船(非動物)。在特征空間里面顯示成這樣,理論上,動物會靠得比較近,非動物會遠離。如果用PCA來做,可能得到的結(jié)果是這個樣子,動物跟非動物區(qū)分的不是很明顯。所以,PCA實際上只能解決一些線性問題,非線性情況下,解決的效果不太好。
怎么辦呢?用非線性降維方法。典型的方法比如說t-SNE(t分布-隨機近鄰嵌入),流形學方法。
流形簡單來說就是很多面片疊加形成的幾何圖形?;炯僭O(shè)是,同一個數(shù)據(jù)集中每個樣本會近似服從一定的內(nèi)在分布,比如說空間幾何體里的圓形或球面,甚至正方形,都本身有一定內(nèi)在結(jié)構(gòu)。流形就是試圖用非線性的方法找到內(nèi)在結(jié)構(gòu),然后把它映射到低維的空間里面去。這個好像要講深了,我先不做擴展(涉及拓撲幾何)。后面好幾個章節(jié)要提到流形,流形這個概念是需要了解的,后面自編碼器章節(jié)還會提到。
這是一個復合、螺旋形的數(shù)據(jù)集,在空間里面顯示出來是這個樣子,用線性方法是不可能分開的。流形怎么辦呢?近似于找到一種非線性的方法,假設(shè)這兩個小人,把它拉伸,拉開之后,不同的類別就能夠分開了。流行學習就相當于這兩個小人把二維流形拉平了,從非線性的變成線性的。
這個圖說的是PCA,2006年之前這種方法是非常實用的,一旦提到降維首選是PCA?;舅枷刖褪窃跀?shù)據(jù)集里面方差變化最大的方向和垂直的方向選了兩個主成分,就是V1和V2這兩個主成分,然后對數(shù)據(jù)集做些變換,它是線性的。
非線性分布的情況,PCA是不行的,其他的線性方法也是不行的,必須用非線性。
這里要提到降維方法,降維其實用到的相關(guān)方案是非常多的,主要分成兩類,一類是人工的方法,像信息論里面有一個霍夫曼編碼,霍夫曼編碼也算是一種降維,它是一種可逆的方法;然后還有其他的自動化方法,因為人工畢竟是代價比較大的,所以需要找自動化方案,比如PCA,非線性的t-SNE,還有后面的自編碼器等等。
下面這張圖概括了常用的數(shù)據(jù)降維方法,線性方法有PCA、LDA,非線性的方法又分成保留局部特征和保留全局特征,再往下有很多很多,大家去自己去了解。
不過,圖里沒有提到t-SNE,因為t-SNE是新出來的,2012年左右開始流行起來的,它其實是Geoffery Hinton團隊發(fā)明的,現(xiàn)在的用途主要在高維數(shù)據(jù)的可視化上。
像這樣一個數(shù)據(jù)集,在三維空間里面,它是一個服從球面分布的一個數(shù)據(jù)集,然后用不同的非線性方法進行降維,總體上還分的還是不錯的。不同的顏色它分得比較清,沒有大的混雜,基本上可以的。
再看一個,這是S型的結(jié)構(gòu),經(jīng)過這幾種非線性的方法進行降維之后,也分得比較清楚。
拿MNIST數(shù)據(jù)集來說明。MNIST是手寫數(shù)字的一些圖片,按照行方向拉伸成一維向量。因為這個圖片是28×28的,所以拉伸成的一維向量是784維。由于維度比較高,人能直觀看到的基本是二維或者三維的,所以這里面取兩個像素點,比如圖像里面第18行第15列這一個像素點,還有第7行、第12列這個像素點。然后一個X軸、一個Y軸可視化一下,看它的區(qū)分度怎么樣。顯然從這個結(jié)果上看不怎么樣,不同的顏色都分的比較零散;所以直接取其中的幾個像素來分,分不清。
那么看一下PCA是什么樣的效果。它會把里面784維做一個降維,然后取了兩個主成分,X軸Y軸是兩個主成份。跟上面一張圖相比,效果還是挺顯著的,周圍顏色已經(jīng)比較靠近。但是中間一坨就不行了,這是它的局限性,部分的分割效果還行。
看著好一點的是t-SNE,明顯跟上面不是一個量級的,不同的顏色聚合的比較緊,而且不同顏色之間還有一些分隔線,這些區(qū)域還非常清晰,這就是它厲害的地方。t-SNE在非線性降維里面絕對是排名第一的。
剛才講的是第一部分,多而雜、淺顯、不好懂,實際上這本書也是按照這個傳統(tǒng)思路來講的。數(shù)學本身就很抽象,但是,能不能變得更加形象一點呢?可以的。
傳統(tǒng)的教學方法,從初高中到大學,不少老師拿著書上的概念,堆公式、只灌輸、不解釋,也不會告訴你這個運算到底有什么幾何意義,看完之后記不住。這就是為什么很多人覺得以前都學過,甚至拿了高分,但是現(xiàn)在好像都還給老師了。沒有從感性上去理解透的知識點,背的再多,隨著時間推移,也都會忘記。
所以接下來換一種方式。進入第二個環(huán)節(jié)。
我就參考一些資料,比如說第一個是Essence of Linear Algebra,這是國外高手(3Blue1Brown,非盈利,接受捐助)制作的教學視頻,可以去YouTube上看,bilibili上也有中文的翻譯版,優(yōu)酷也有了。這個教程非常好,全部用視頻可視化方法直觀講解線性代數(shù)。第二個是馬同學高等數(shù)學,幾篇公眾號文章也很好,跟3Blue1Brown不謀而合。毫不夸張的說,看完這兩個教程后,你會有一種相見恨晚、醍醐灌頂、重新做人的感覺。下面是視頻里的幾個觀點:
事實上,國內(nèi)外傳統(tǒng)教學里一直把人當機器用,各種花式算行列式,不勝枚舉,然而沒有告訴你是什么,為什么?
很多人對數(shù)學有種與生俱來的恐懼感,不怪你,是某些老師把簡單問題教復雜了,讓你開始懷疑自己的智商,認定自己不是學數(shù)學的料,于是,見到數(shù)學就避而遠之。
對于初學者來說,良好的解釋比證明重要得多。
下面切換我的有道筆記:《線性代數(shù)筆記》。http://note.youdao.com/noteshare?id=2dd5b67042a5a49bd81a450c0a7490be
剛才說的有矩陣是吧?我們來看一下矩陣到底在干嘛。這個(x y z)這是一個向量,一個矩陣對它進行變換之后變成了(ax by cz),對應的就是把原來的X、Y、Z三個方向分別作a、b、c放大。
在圖上面怎么理解呢?看這個,這是一個矩陣,來看著坐標系的變化。這個是在X軸方向做1.5倍的放大,這是在Y軸的方向上做縮小到一半,效果就是這樣子。X軸Y軸都做了一個縮放動作,對應的軸上面的坐標和點也要做這樣的縮放,整個空間都被拉伸了,X軸方向被拉伸,Y軸方向被壓縮。
假設(shè)取這些二維平面上的樣本點,變化完之后就成這樣的。X的范圍從-1到1,變成了-1.2到+1.2,也就是在X方向做1.2倍的放縮,Y軸方向1.3倍的放縮(樣本點之間距離拉開了)。
如果這里面有一個負值又是什么概念呢?就是軸方向的變化(術(shù)語:手性變化,比如左手變右手)
比如這個Y軸的有一個負號,剛才是0.5,現(xiàn)在是-0.5,那就是把Y軸往下翻,負號就是反向,類似一個鏡面反射。如果X也是負的話,就是相對于坐標原點的中心對稱。
這里面放一個圖形,看起來會更加直觀一些。M這個形狀的數(shù)據(jù)集,經(jīng)過這個變換之后成這樣。對角線的第一個元素是作用在X軸上面的,X軸沿著Y軸作了一個對折,也就是鏡面反射,原來M在這兒,翻過來到這,就是這個矩陣的作用;Y軸上沒有任何變化,因為是1,不放大也不縮小。第二個里Y軸是負數(shù),那么反過來就是沿著X軸翻一下。
如果兩個都是負,那就是中心對稱,從第一象限翻到了第三象限。
如果里面有這樣情況,這就是矩陣不可逆的情況,它的行列式是0。0的話會有什么變化?原來這是一個坐標系,到這里變成一條線了,這就是做了一個降維操作,把兩維的變成一位了。那一位能返回去嗎?不可能的,所以這叫不可逆。
這個跟剛才相比的話,多了右上角一個元素0.3,這是一個上三角矩陣,是什么意思呢?看一下圖的結(jié)果,沿著Y軸方向是不變的,X方向就做了一種錯切,也叫推移。形象理解就是站在上面,然后把箱子往這邊推,底部是不動的,那么就有一個推移的動作。為什么會這樣?大家可以拿這個矩陣,隨機取一個點去感受一下。
第一行始終作用在X軸方向上,它跟原來相比加了一項。說明X軸方向做了追加,把Y軸的信息拿過來追加延長X軸,而Y軸沒有變化,所以Y是不變的,X是要做拉伸的。
紅色的這個矩陣變到藍色就有一種錯切,有一股力從左邊往右推。
這也是推移以后的效果。
剛才說的是上三角,然后變成下三角怎么樣?那就是反過來,X軸不變,沿著Y軸方向推移,到這兒。
好,這一部分講的是旋轉(zhuǎn)。M通過這個矩陣就進行了旋轉(zhuǎn),這是個正交矩陣,正交就是矩陣行列式的值為1,意思是說是X和Y軸是不做任何縮放的,只做以原點為中心的旋轉(zhuǎn)。這就是做一個旋轉(zhuǎn),按照π/4的角度做旋轉(zhuǎn)。
剛才說了幾種變化,第一個旋轉(zhuǎn),第二個錯切,第三個平移,加上縮放。線性變換里不包含平移;線性變換加上平移的話,那就是仿射變化。
那么到底什么是線性變換?線性空間的任意點在變化前后一直保持等距分布!
下面不是線性變換,因為距離不等。
矩陣分解是說,每一個矩陣都是由這幾種基礎(chǔ)的變化組合而成的。這部分過了,有點難度。數(shù)學分析里這門課講到矩陣的話,運算代價非常大的,怎么讓計算機跑起來更快呢,就做矩陣分解,把一個大矩陣分成幾個小矩陣,算起來更快。矩陣分解的一個基本目的就是提高計算效率。
接下來講矩陣的特征值和特征向量。先有直觀概念,特征向量反映的是經(jīng)過這次變換之后它的變化方向;特征值反映的是變換的幅度。為什么會這樣?往下看。
這是一個坐標系X和Y,上面有一個向量,或者說二維平面上的一個點,乘以一個矩陣之后變成這樣了。
再乘以另外一個矩陣可能變成這樣。看看圖像區(qū)別的話,v乘它之后仍然在這個方向上;變換前后的差別就是方向不變,只是大小做了拉伸。如果符合這樣的情形的話,那么λ就是A的一個特征值,v就是A的一個特征向量。A矩陣可能還有其他的情形,可能還有其他一些特征值和特征向量。矩陣特征值分解的效果,就是對一個矩陣A,在平面上找到所有滿足這種關(guān)系的向量集合。
這就是特征值表示的一些傳統(tǒng)公式,A矩陣乘以一個向量,得到一個特征值乘一個向量,反映的就是在v的方向上面拉伸了多少倍。這就是通過特征值分解揭示矩陣本身的特性。
剛才提到一個特征向量和一個特征值,還有沒有其他的?有的,這個也是,這個V就是它的一個特征向量,長度也對應一個特征值,這是A矩陣的兩個特征值。
A矩陣對應的兩個特征向量和兩個特征值,如果對特征向量做數(shù)乘,比如拿這個V1乘以2、乘以3;每一個特征向量經(jīng)過數(shù)乘操作組成的空間叫做特征空間。
這里有一種近似的、形象的表述,就是矩陣是一種運動。運動在物理里面運動就有兩個概念,第一個往哪走,第二個走多少,對應的是速度加上方向。
運動是動態(tài)的,點表示瞬時的狀態(tài)。站哪個位置是靜態(tài)的,要觀察到運動必須要借助一種實體,比如說要觀察跑步現(xiàn)象,總得要找個實物,比如看人跑、還是看豬跑、看老虎跑,你總要找個物體附上去才能夠看到它的變化過程。
對同一種運動,A代表這種運動,如果應用到一個向量上面多次,它會產(chǎn)生什么樣的變化?像A這個矩陣是一種變換,作用到V這個特征向量上,一次得到的點是在這兒,兩次到這,三次四次跑到這邊來了。7次就沿著這個方向,然后如果8次、9次仍然這個方向。這里有種奇怪的現(xiàn)象,就是對一個向量做線性變換,N次以后它會趨近于一個方向走,就不會再繼續(xù)變方向了。
這個方向?qū)嶋H上是有一定的意義的,這個方向就是矩陣分解的最大特征值對應的方向。簡單說就是反復利用矩陣乘法都會有一個最明顯的特征,就是整個運動方向會朝著矩陣的最大的特征向量方向走,這是它的幾何解釋。在一般的代數(shù)里面,可能你根本想不到這一點。
補充:這是我自己補充的,一開始向量往這個方向走,變化特別大,這都反映的是矩陣本身的特征值,貧富懸殊非常大。兩個不同方向上的特征值,一個是另一個的很多倍,它們的懸殊非常大。這種情況叫有一種術(shù)語叫病態(tài),它的衡量是通過條件數(shù),條件數(shù)的概念就是一個矩陣的最大特征值與最小的特征值之間的倍數(shù)。最大特征值除以最小特征值得到的倍率比如是3,還可以是10,肯定是10的時候病態(tài)更嚴重,已經(jīng)病得無藥可救了。
對這種矩陣做變換的話,你就要特別小心。在梯度下降里面如果碰到這種矩陣的話,很容易在整個優(yōu)化空間里不停地震蕩,很難收斂。
接下來看特征分解。這一個矩陣分解完之后,中間是個對角陣,對應的就是每一個特征值。像A這個矩陣,做一個特征分解之后,兩個特征值是3和1,然后左邊右邊對應的就是一個特征向量。比如說左邊矩陣的第一個列向量就是3這個特征值對應的特征向量,不信你可以試一下。
同理,左邊矩陣的第二個列向量就是1對應的特征向量.這就是一一對應的特征向量。左右兩個矩陣相比就是做了個轉(zhuǎn)置而已。另外矩陣里是正交向量,左右的矩陣只會做旋轉(zhuǎn),不會做縮放;中間的對角矩陣有縮放。所以整個A矩陣的作用既有旋轉(zhuǎn)又有縮放。
所以特征值是一種拉伸,衡量沿著特征向量的方向拉伸多少;然后特征向量就是拉伸的方向。所以到現(xiàn)在應該比較好理解我們上來就說的那句話,叫特征值和特征向量就對應運動的速度和方向。
這個部分是講矩陣的秩和線性方程組之間的關(guān)系。Ax=b這樣一個線性方程組,它有唯一解的充要條件是矩陣的秩,等于它的增廣矩陣的秩,等于N。這也就是說滿秩,滿秩的方程才有解;無解的條件就是它的矩陣的秩小于增廣矩陣,簡單說就是A不是滿秩的,或者它是不可逆的;如果有多種解呢,像這樣加上增廣矩陣之后仍然小于N。這是數(shù)學上的表達,但還是不夠形象。
那么現(xiàn)在形象理解一下,我把線性方程組做下簡化,變成二元線性方程組。方程組畫在空間里面就是兩條直線,同時滿足這兩個方程組的解,就是兩條直線的交叉。只有這一個點同時滿足這兩個方程,直觀地看出來這是唯一解。所以這么理解的話,唯一解就是有且只有一個交點;無解的話,把一條直線變得和另一條平行,兩條直線根本就沒有交點,就是無解;有很多解呢,就把平行的直線往一起靠,疊加在一起,完全重合了,那么解就可以很多很多,因為直線可以包含任意無窮多的點。
看一下,矩陣解線性方程的幾何意義。這個空間上面X軸Y軸,取了一組正交基i=(1,0)和j=(0,1),然后空間里的點就可以ai+bi來表示,a、b是任意實數(shù),這就是i和j張成的線性空間。
這個如果i和j共線,就是說i和j可以通過i=kj這個方式表達的話,就是共線。共線就相當于是一個降維操作,把原來的二維空間變成了一維的,這是不可逆的。
A是這個矩陣在對整個的方程的線性空間做變換,就是旋轉(zhuǎn)。整個變換過程里,X點相對于變換后的這個坐標系是沒有變化的,相對位置沒有變化,但是相對于原來那個坐標系就發(fā)生了變化。
用形象的方法理解,好比我們?nèi)プ卉?,車在動,我們也在動;我們相對于車是靜止的,但是我們相對地面是運動的。我們相對與地面運動的過程就是一個矩陣對一個向量做變化之后的效果,像這樣。
地球坐標系就相當于地面,上車,再返回地球,就發(fā)生了位移。這個變換對空間里面每一個點都發(fā)生了變換。
回到線性方程組。Ax=b是線性方程的一種表示,它的形象解釋就是找到這樣一個向量,它在線性變換之后變到了B點,我們要找到x,就是b原來的樣子,是一個可逆的操作。這就是線性方程組的含義。
這一部分是我自己補充的。
比如剛才說從x到b,能不能從b回到x呢?如果可以,那就是可逆,對應的A這個變化是可逆的;如果不能,那就是不可逆。
這個不可逆,又是怎么理解?這就是一種降維打擊,比如說把一個立方體拍成一個平面,像一張紙;然后把紙揉成一個團,然后再直接打到十八層地獄。這些就是降維打擊,是不可恢復的。
不可逆的時候怎么辦,想盡可能回去,有點偏差也行。偽逆就是這樣的時光隧道(變成冤魂野鬼,回到當初的地點),對逆做一個擴展。一般的線性方程組里面有很多樣本,點非常多;矩陣是不可逆的,那就求他的最小二乘解,讓這條直線盡可能靠近所有點,這就是一種近似的方法,也就是不可逆,但是我們盡可能讓他回去(中國人深入骨髓的思想:落葉歸根)。
還有個概念,既然有降維,那就有升維。升維該怎么理解呢?假設(shè)從北京到西藏,要坐火車,時間很長,可能兩天三夜,很累。但是有錢人,直接坐飛機嗖的一下就到了,這就是升維。飛機飛行的路線在垂直高度上是有差別的,火車的高度全程差別不大。(不同維度下的生活方式不同,有個笑話:“等我富了,天天吃包子!”,富豪的世界你不懂,乞丐的世界,你也不懂)
特征分解怎么理解呢?公交車沿著既定路線走,先往東兩千米,再往西三千米,然后再往東北五千米,然后就到家了。這里的方向就是特征向量,走的幅度兩千米、三千米、五千米就是特征值。行列式是什么意思?就是這個路線的長度。這樣理解應該就直觀得多了吧。
行列式大于零有放大的作用;行列式等于0是降維的作用,不可逆的;行列式小于零,是在坐標系上面做了一個反射。注:行列式和特征值與坐標系無關(guān),反應的是矩陣本身的特質(zhì)。
這是2×2的一個矩陣,我們看一下改變行列式的大小會有什么效果。當行列式是大于1的,就有一個放大作用;如果我調(diào)小行列式的值,就縮小,然后到1是不變的;在0到1這個范圍內(nèi)就縮小;注意看這一點,如果等于0的話就降維了,變成一個點了;再往右邊,行列式是負數(shù),A和B翻過來了,沿著Y軸把X軸往這邊反射;然后縮放的情況跟正像方向是一樣的。這個過程就好理解,這叫行列式的幾何意義。
最后以一張圖結(jié)束:
AI 科技評論整理。感謝王奇文嘉賓的分享以及幫忙補充校對本文。
————— 給愛學習的你的福利 —————