當前位置:
首頁 > 知識 > 「Deep Learning」讀書系列分享第二章:線性代數

「Deep Learning」讀書系列分享第二章:線性代數

「Deep Learning」這本書是機器學習領域的重磅書籍,三位作者分別是機器學習界名人、GAN 的提出者、谷歌大腦研究科學家 Ian Goodfellow,神經網路領域創始三位創始人之一的蒙特利爾大學教授 Yoshua Bengio(也是 Ian Goodfellow 的老師)、同在蒙特利爾大學的神經網路與數據挖掘教授 Aaron Courville。只看作者陣容就知道這本書肯定能夠從深度學習的基礎知識和原理一直講到最新的方法,而且在技術的應用方面也有許多具體介紹。這本書面向的對象也不僅是學習相關專業的高校學生,還能夠為研究人員和業界的技術人員提供穩妥的指導意見、提供解決問題的新鮮思路。

面對著這樣一本內容精彩的好書,不管你有沒有入手開始閱讀,AI 研習社都希望藉此給大家提供一個共同討論、共同提高的機會。所以我們請來了曾在百度和阿里工作過的資深演算法工程師王奇文與大家一起分享他的讀書感受。

分享人:王奇文,資深演算法工程師,曾在百度和阿里工作,先後做過推薦系統、分散式、數據挖掘、用戶建模、聊天機器人。「演算法路上,砥礪前行」。

「Deep learning」讀書分享(二) —— 第二章 線性代數

我們上次講的是「深度學習」第一章:簡介,今天分享的是第二章:線性代數。右上角是這一章的目錄,從 27 頁到 42 頁,內容不多,基本都是傳統形式上的概念。同樣,我只講直觀思路,儘可能的少用公式,畢竟好多人見著數學公式就頭疼,更不用說在 PPT 上看了,效果不好,容易催眠,看著看著就身在朝野心在漢了。

左側是基本框架,剛開始會有一些基本介紹,比如標量、向量、矩陣、張量;然後詳細講解下向量、矩陣,和矩陣分解。矩陣分解裡面要特彆強調:一個 「特徵值分解」,還有一個 「奇異值分解」;接著,向量和矩陣之間什麼關係;最後是應用案例。這部分對機器學習和深度學習來說是非常重要的,如果想從事機器學習方面的研究或者是工作,必須掌握。而且今天講的線性代數是所有數學基礎裡面最簡單的。

我會分成兩部分來講,第一部分是非常傳統的方法,就是講向量是什麼、標量是什麼等等一些常規的定義、概念,比較枯燥,我會講得快一些,幫大家快速回顧下曾經學過的《線性代數》或《高等代數》(數學系教材),把還給老師的知識一點點拿回來!(不能白交學費是吧?)所以請大家集中注意力。

第二部分我會換一種方式,從直觀感覺上重新理解線性代數的本質,這部分是精華,一般人都沒見過,保證讓你醍醐灌頂。

第一部分:傳統方法

幾種類型:

標量,簡單來說就是一個數字,像 X=3,它就是一個數值;而向量就是一列數或者一堆數,把它排成一行或者一列,然後就對應到線性空間里的一個點或者一個矢量(也就是帶方向的線段)。這個線性空間可以是多維的,具體二維還是三維就看這裡面堆了幾個數。像 x=(1,3,6),對應的是三個坐標,就是三維空間裡面的一個點;而三維空間的原點到這個點有向線段就是一個向量。

接著是矩陣。矩陣是把向量按照行方向或者是列方向排列起來,變成一個二維數組。像右側矩陣 A 裡面這樣排列。

張量是矩陣基礎上更高維度的抽象,它的維度可能比前面還要高,主要對應於包含若干坐標軸的規則網格。

從剛才的那些講解上可以發現:

標量相當於一維向量(暫時忽略方向,嚴格來說是向量單個維度的大小)

而向量是只有一維矩陣

矩陣是張量的一個切片

從上到下是維度的逐漸提升。反過來從下往上,張量、矩陣、向量、標量,是不斷降維的過程。所以前面的類型只是後面的一個特殊形式,比如說任意一個向量,是張量的一種特殊形式。簡而言之,張量囊括一切

向量一般分成方向和長度兩部分。像這個 x 是一個單位向量,它的特點是長度是 1 個單位。

關於向量,有這兩種理解:

把它當做線性空間裡面一個點

把它當做帶有方向一個線段

這兩種都可以。

跟向量有關的兩種運算,一種是內積,第二種是外積。根據定義,內積會生成一個數,外積會生成一個向量;需要根據右手坐標系來定方向,保持手掌、四指與大拇指相互垂直,將手掌與四指分別對應兩個向量,一比劃,就得到大拇指的方向,大小就按照 sin 這個公式算出來。

有些特殊的向量,比如零向量就對應線性空間裡面的原點;單位向量就是長度是一。還有概念叫正交,簡單理解就是空間中兩個向量相互垂直。垂直怎麼判斷?就是兩個向量作內積,公式里有個 cosθ,θ如果等於 90 度,結果就是零;這就是正交。

關於向量長度,有個度量方法:範數。向量長度按照範數來度量,分別對應不同的表達式。

L1 範數,它會取每一個元素的絕對值,然後求和;

L2 範數,L1 的絕對值變成平方,外層開方;

還有 P 範數,這裡面的 P 數值是自己指定的;

F 範數一般只適用於矩陣,裡面每一個元素取平方,然後再求和。

可見,P 範數是一般形式,p=1 或 2 分別對應 L1 和 L2(對應於機器學習里的 L1、L2 正則)

矩陣相關概念。

同型,如果兩個矩陣 A 和 B 同型,那麼 A 和 B 的維度是一樣的,比如說 A 是 M×N,B 是 X×Y,那麼 M 等於 X,N 等於 Y,這是關鍵;

方陣就是,對於一個 M×N 的矩陣,M 等於 N 就是個方陣。

單位矩陣,對角線全部都是 1;

對稱,轉置後矩陣不變;

秩和跡。秩對應的一個概念叫線性表出,也就是矩陣裡面的每一行或者是每一列,選定一個方向(要麼是行要麼是列),取其中一列,跟其他的列做加減和數乘(只能是這兩種操作),其中任意一列要不能由其他列的線性表出。現在聽起來可能不太好理解,可以暫時放放。

行列式,就是在矩陣外面,比如說這個 3×3 的矩陣,在外面取兩邊各加一條豎線,這就表示行列式;怎麼算呢,每一行、每一列分別取一個數,相當於這裡面三個元素全排列,之後再乘上一個逆序數(逆序數是指每組元素原始下標順序,如果是逆序,就乘 - 1,把這所有的逆序數乘上去,最後就得到了一個方向,也就是行列式裡面是正號還是負號)。

逆矩陣,就是矩陣 A 乘以某個矩陣後得到單位陣,這個矩陣就是逆矩陣;

偽逆矩陣是逆矩陣的一種擴展;

正交矩陣就是每行每列都是單位向量,特性是 AAt=I。

剛才的內容,可能不好理解,不過大家都學過線性代數的基本課程,還是能夠回憶起來的。後面第二部分再給大家解釋一下為什麼會有這些東西。

矩陣運算,除了傳統的矩陣乘法,還有一種特殊的乘積,這個就是對應元素乘積,它的表示方法是不一樣,中間加個圓圈;兩個矩陣(必須同型)對應元素相乘,得到一個新的矩陣,也是同型的。

我們看一下矩陣乘法。從右往左看,這個是作者(Ian Goodfellow)PPT 里的一張圖,老外的思維是從右往左看。這裡是 3×2 的一個矩陣,和 2×4 的一個矩陣,兩個矩陣相乘,就是兩個矩陣中分別取一行和一列依次相乘,得到左邊的矩陣。

範數的目標就是衡量矩陣的大小。有很多種類別,但不是什麼函數都能當做範數的,有些基本的要求:比如必須要保證有一個零值,然後還要滿足三角形不等式,也就是三角形兩邊之和大於第三邊,還有數乘,對應的是等比例縮放。縮放就是一個函數乘以一個實數,這是一個線性空間里的基本運算。

這是 P 範數的表達式。其實 P 範數具有一種泛化的表達式,是一種通用的方式,可以包含 L1、L2,還有無窮範式,這些都是由 P 的取值決定的,可以等於 1、等於 2、等於無窮。

行列式的計算方法比較複雜,公式我就不列了。直接給出直觀理解:衡量一個向量在經過矩陣運算後會變成什麼樣子,即線性空間上進行了某种放縮,可能是放大或者縮小,縮放的倍率就是行列式值;行列式的符號(正或負),代表著矩陣變換之後坐標系的變化。

矩陣變換裡面有這麼幾種,平移、縮放等等。這個後面再說,免得重複。

矩陣分解:

(1)特徵值分解,是我們常規見到的。有一個定義,比如我們定義一個矩陣 A,乘以一個向量得到的等於另外一個數字乘以同一個向量,Av=λv。滿足這個表達式,就叫做矩陣的特徵值分解,這是矩陣分解典型的形式。這個 v 就是一個特徵向量,而這個λ就是特徵值,它們是一一對應的(出生入死的一對好基友)。符合表達式可能還有其他取值,每一個矩陣 A 會對應多組特徵向量和特徵值;矩陣 A 的所有特徵向量和特徵值都是一一對應的。

如果矩陣是一個方陣(不只 M 等於 N,還需要保證這個矩陣裡面每一行、每一列線性無關),可以做這樣的特徵分解,把 A 分成了一個正交矩陣乘對角陣乘同一個正交矩陣的逆。對角陣是把每一個特徵向量一個個排下來。

還有個概念叫正定,是對任意實數,滿足 xAxt>0,就叫正定;類似的還有半正定,大於等於 0 是半正定;負定就是小於零。

(2)奇異值分解,是矩陣特徵分解的一種擴展,由於特徵分解有個很強的約束——A 必須是一個方陣。如果不是方陣怎麼辦呢,就沒有辦法了嗎?有的,就是用 SVD 奇異值分解,這個在推薦系統用的比較多。

這是特徵分解的示意圖。從直觀上理解,這個圓上面的兩個向量 V1、V2,經過矩陣變換之後在兩個特徵方向上進行縮放:在 V1 方向上面縮放λ1 倍,變成了新的 V1;V2 在 V2 的方向做了λ2 倍的縮放,變成新的 V2。這兩個特徵,構成了完整的矩陣分解,也就是經過一個線性變換之後得到的效果——在特徵向量方向上分別縮放特徵值倍。

SVD 分解就是一個擴展形式,表達方式就這樣,不細說了。

向量和矩陣這兩個組合起來就可以解決常見的線性方程組求解問題。

這裡有幾個概念,一個叫線性組合,就是一個矩陣,裡面的一行或者一列,實際上就是多個向量,通過簡單的加減還有數乘,組合出來一個新的向量,這叫線性組合。如果用基向量 X1、X2 執行加法和數乘操作,得到的是 x3=k1*x1+k2*x2,一組向量組成的線性空間,即由 X1、X2 組合成的向量空間,就叫生成子空間。

如果對兩個向量 X 和 Y,可以按照α和 1-α這兩個數乘組合起來生成一個新的向量,這個叫線性表出,就是 Z 向量由 X 和 Y 進行線性表出,然後α和 1-α都是一個數值,滿足這個關係就叫線性相關。這就是說 Z 和 X、Y 是線性相關的,如果不滿足,如果 Z 這個向量不能這樣表出,就叫線性無關。

這是矩陣對應的一個線性方程組。這是一個矩陣,現在像右邊這樣把它展開,就是矩陣和線性方程組是對應的。這個挺常見的我不就不多說了。

矩陣方程組的求解是,把方程組每一個係數組成矩陣 A,根據 A 這個矩陣本身的特性就可以直接判斷這個方程組有沒有解、有多少解。還有無解的情況。

這是矩陣方程組的一些求解,比較常規的,像 AX=b 這個線性方程組一般怎麼解呢?常規方法:兩邊直接乘 A 的逆矩陣。它有個前提:A 的逆必須存在,也就是說 A 里每一行、每一列不能線性相關。這種方法一般用於演示,比如算一些小型的矩陣,實際情況下,A 的規模會非常大,按照這種方法算,代價非常大。

再看下什麼矩陣不可逆。一個矩陣 M×N,按照 M、N 的大小可以做這樣的分類:如果行大於列,通常叫做長矩陣,反之叫寬矩陣;行大於列,而且線性無關,就是無解的情形。寬矩陣有無數個解,其中,每一列代表一個因變數,每一行代表一個方程式。

偽逆是逆的一種擴展,逆必須要求 A 這個矩陣式滿秩,就是沒有線性表出的部分。如果不滿足,那麼就得用偽逆來計算,這只是一種近似方法。SVD 這種方法比較厲害,因為支持偽逆操作。

應用案例里,書裡面只提到一個 PCA,線性降維,也沒有詳細的展開。其實書里很多章節都提到了 PCA,所以我也給大家普及一下基本概念。

這個是 PCA 在圖像上面的應用。這張圖非常經典,凡是學過數字圖像處理的都知道她——Lenna(提示:別去搜 lena 的全身圖,~~~~(>_

看一下 PCA 的基本過程。PCA 的思想是,原來一個矩陣有很多列,這些列里可能存在一些線性關係,如何把它降成更小的維度,比如說兩三維,而且降維之後信息又能夠得到很大程度的保留。怎麼定義這個程度呢?一般是累計貢獻率大概 85% 以上,這些主成份才有保留意義。這個累計貢獻率是通過方差來體現的,樣本分布帶有一定的噪音或者隨機分布,如果是在均值的左和右兩個方向進行偏移的話,不會影響方差。方差等效於信息量。

這張圖解釋主成分分析的過程,用的是特徵值分解,一個 X 的轉置乘以 X,然後對它做各種複雜的變換,大家看看就行了,想了解細節的話自己去找資料,具體過程一時半會兒講不清楚。PCA 最後有什麼效果呢?看中間的坐標系給出示意圖,原來的矩陣取了 X1 和 X2 兩個維度,把樣本點打出來能看到近似橢圓分布,而 PCA 的效果就是得到一組新的坐標系,分別在長軸和短軸方向,互相正交,一個方向對應一個主成分。實際上,數據特徵多於兩維,圖裡只是為了方便觀察,這樣就完成了一個降維的過程。

右上是一個示例,有一些動物樣本,狗、小貓,還有個氣墊船(非動物)。在特徵空間裡面顯示成這樣,理論上,動物會靠得比較近,非動物會遠離。如果用 PCA 來做,可能得到的結果是這個樣子,動物跟非動物區分的不是很明顯。所以,PCA 實際上只能解決一些線性問題,非線性情況下,解決的效果不太好。

怎麼辦呢?用非線性降維方法。典型的方法比如說 t-SNE(t 分布 - 隨機近鄰嵌入),流形學方法。

流形簡單來說就是很多面片疊加形成的幾何圖形。基本假設是,同一個數據集中每個樣本會近似服從一定的內在分布,比如說空間幾何體里的圓形或球面,甚至正方形,都本身有一定內在結構。流形就是試圖用非線性的方法找到內在結構,然後把它映射到低維的空間裡面去。這個好像要講深了,我先不做擴展(涉及拓撲幾何)。後面好幾個章節要提到流形,流形這個概念是需要了解的,後面自編碼器章節還會提到。

這是一個複合、螺旋形的數據集,在空間裡面顯示出來是這個樣子,用線性方法是不可能分開的。流形怎麼辦呢?近似於找到一種非線性的方法,假設這兩個小人,把它拉伸,拉開之後,不同的類別就能夠分開了。流行學習就相當於這兩個小人把二維流形拉平了,從非線性的變成線性的。

這個圖說的是 PCA,2006 年之前這種方法是非常實用的,一旦提到降維首選是 PCA。基本思想就是在數據集裡面方差變化最大的方向和垂直的方向選了兩個主成分,就是 V1 和 V2 這兩個主成分,然後對數據集做些變換,它是線性的。

非線性分布的情況,PCA 是不行的,其他的線性方法也是不行的,必須用非線性。

這裡要提到降維方法,降維其實用到的相關方案是非常多的,主要分成兩類,一類是人工的方法,像資訊理論裡面有一個霍夫曼編碼,霍夫曼編碼也算是一種降維,它是一種可逆的方法;然後還有其他的自動化方法,因為人工畢竟是代價比較大的,所以需要找自動化方案,比如 PCA,非線性的 t-SNE,還有後面的自編碼器等等。

下面這張圖概括了常用的數據降維方法,線性方法有 PCA、LDA,非線性的方法又分成保留局部特徵和保留全局特徵,再往下有很多很多,大家去自己去了解。

不過,圖裡沒有提到 t-SNE,因為 t-SNE 是新出來的,2012 年左右開始流行起來的,它其實是 Geoffery Hinton 團隊發明的,現在的用途主要在高維數據的可視化上。

像這樣一個數據集,在三維空間裡面,它是一個服從球面分布的一個數據集,然後用不同的非線性方法進行降維,總體上還分的還是不錯的。不同的顏色它分得比較清,沒有大的混雜,基本上可以的。

再看一個,這是 S 型的結構,經過這幾種非線性的方法進行降維之後,也分得比較清楚。

拿 MNIST 數據集來說明。MNIST 是手寫數字的一些圖片,按照行方向拉伸成一維向量。因為這個圖片是 28×28 的,所以拉伸成的一維向量是 784 維。由於維度比較高,人能直觀看到的基本是二維或者三維的,所以這裡面取兩個像素點,比如圖像裡面第 18 行第 15 列這一個像素點,還有第 7 行、第 12 列這個像素點。然後一個 X 軸、一個 Y 軸可視化一下,看它的區分度怎麼樣。顯然從這個結果上看不怎麼樣,不同的顏色都分的比較零散;所以直接取其中的幾個像素來分,分不清。

那麼看一下 PCA 是什麼樣的效果。它會把裡面 784 維做一個降維,然後取了兩個主成分,X 軸 Y 軸是兩個主成份。跟上面一張圖相比,效果還是挺顯著的,周圍顏色已經比較靠近。但是中間一坨就不行了,這是它的局限性,部分的分割效果還行。

看著好一點的是 t-SNE,明顯跟上面不是一個量級的,不同的顏色聚合的比較緊,而且不同顏色之間還有一些分隔線,這些區域還非常清晰,這就是它厲害的地方。t-SNE 在非線性降維裡面絕對是排名第一的。

剛才講的是第一部分,多而雜、淺顯、不好懂,實際上這本書也是按照這個傳統思路來講的。數學本身就很抽象,但是,能不能變得更加形象一點呢?可以的。

第二部分:直觀理解

傳統的教學方法,從初高中到大學,不少老師拿著書上的概念,堆公式、只灌輸、不解釋,也不會告訴你這個運算到底有什麼幾何意義,看完之後記不住。這就是為什麼很多人覺得以前都學過,甚至拿了高分,但是現在好像都還給老師了。沒有從感性上去理解透的知識點,背的再多,隨著時間推移,也都會忘記。

所以接下來換一種方式。進入第二個環節。

我就參考一些資料,比如說第一個是 Essence of Linear Algebra,這是國外高手(3Blue1Brown,非盈利,接受捐助)製作的教學視頻,可以去 YouTube 上看,bilibili 上也有中文的翻譯版(http://t.cn/R0OcAlH),優酷也有了。這個教程非常好,全部用視頻可視化方法直觀講解線性代數。第二個是馬同學高等數學(http://t.cn/R0OIH2u),幾篇公眾號文章也很好,跟 3Blue1Brown 不謀而合。毫不誇張的說,看完這兩個教程後,你會有一種相見恨晚、醍醐灌頂、重新做人的感覺。下面是視頻里的幾個觀點:

事實上,國內外傳統教學裡一直把人當機器用,各種花式算行列式,不勝枚舉,然而沒有告訴你是什麼,為什麼?

很多人對數學有種與生俱來的恐懼感,不怪你,是某些老師把簡單問題教複雜了,讓你開始懷疑自己的智商,認定自己不是學數學的料,於是,見到數學就避而遠之。

對於初學者來說,良好的解釋比證明重要得多

下面切換我的有道筆記:《線性代數筆記》。

剛才說的有矩陣是吧?我們來看一下矩陣到底在幹嘛。這個 (x y z) 這是一個向量,一個矩陣對它進行變換之後變成了 (ax by cz),對應的就是把原來的 X、Y、Z 三個方向分別作 a、b、c 放大。

在圖上面怎麼理解呢?看這個,這是一個矩陣,來看著坐標系的變化。這個是在 X 軸方向做 1.5 倍的放大,這是在 Y 軸的方向上做縮小到一半,效果就是這樣子。X 軸 Y 軸都做了一個縮放動作,對應的軸上面的坐標和點也要做這樣的縮放,整個空間都被拉伸了,X 軸方向被拉伸,Y 軸方向被壓縮。

假設取這些二維平面上的樣本點,變化完之後就成這樣的。X 的範圍從 - 1 到 1,變成了 - 1.2 到 + 1.2,也就是在 X 方向做 1.2 倍的放縮,Y 軸方向 1.3 倍的放縮(樣本點之間距離拉開了)。

如果這裡面有一個負值又是什麼概念呢?就是軸方向的變化(術語:手性變化,比如左手變右手)

比如這個 Y 軸的有一個負號,剛才是 0.5,現在是 - 0.5,那就是把 Y 軸往下翻,負號就是反向,類似一個鏡面反射。如果 X 也是負的話,就是相對於坐標原點的中心對稱。

這裡面放一個圖形,看起來會更加直觀一些。M 這個形狀的數據集,經過這個變換之後成這樣。對角線的第一個元素是作用在 X 軸上面的,X 軸沿著 Y 軸作了一個對摺,也就是鏡面反射,原來 M 在這兒,翻過來到這,就是這個矩陣的作用;Y 軸上沒有任何變化,因為是 1,不放大也不縮小。第二個里 Y 軸是負數,那麼反過來就是沿著 X 軸翻一下。

如果兩個都是負,那就是中心對稱,從第一象限翻到了第三象限。

如果裡面有這樣情況,這就是矩陣不可逆的情況,它的行列式是 0。0 的話會有什麼變化?原來這是一個坐標系,到這裡變成一條線了,這就是做了一個降維操作,把兩維的變成一位了。那一位能返回去嗎?不可能的,所以這叫不可逆。

這個跟剛才相比的話,多了右上角一個元素 0.3,這是一個上三角矩陣,是什麼意思呢?看一下圖的結果,沿著 Y 軸方向是不變的,X 方向就做了一種錯切,也叫推移。形象理解就是站在上面,然後把箱子往這邊推,底部是不動的,那麼就有一個推移的動作。為什麼會這樣?大家可以拿這個矩陣,隨機取一個點去感受一下。

第一行始終作用在 X 軸方向上,它跟原來相比加了一項。說明 X 軸方向做了追加,把 Y 軸的信息拿過來追加延長 X 軸,而 Y 軸沒有變化,所以 Y 是不變的,X 是要做拉伸的。

紅色的這個矩陣變到藍色就有一種錯切,有一股力從左邊往右推。

這也是推移以後的效果。

剛才說的是上三角,然後變成下三角怎麼樣?那就是反過來,X 軸不變,沿著 Y 軸方向推移,到這兒。

好,這一部分講的是旋轉。M 通過這個矩陣就進行了旋轉,這是個正交矩陣,正交就是矩陣行列式的值為 1,意思是說是 X 和 Y 軸是不做任何縮放的,只做以原點為中心的旋轉。這就是做一個旋轉,按照π/4 的角度做旋轉。

剛才說了幾種變化,第一個旋轉,第二個錯切,第三個平移,加上縮放。線性變換里不包含平移;線性變換加上平移的話,那就是仿射變化。

那麼到底什麼是線性變換?線性空間的任意點在變化前後一直保持等距分布!

下面不是線性變換,因為距離不等。

矩陣分解是說,每一個矩陣都是由這幾種基礎的變化組合而成的。這部分過了,有點難度。數學分析里這門課講到矩陣的話,運算代價非常大的,怎麼讓計算機跑起來更快呢,就做矩陣分解,把一個大矩陣分成幾個小矩陣,算起來更快。矩陣分解的一個基本目的就是提高計算效率

接下來講矩陣的特徵值和特徵向量。先有直觀概念,特徵向量反映的是經過這次變換之後它的變化方向;特徵值反映的是變換的幅度。為什麼會這樣?往下看。

這是一個坐標系 X 和 Y,上面有一個向量,或者說二維平面上的一個點,乘以一個矩陣之後變成這樣了。

再乘以另外一個矩陣可能變成這樣。看看圖像區別的話,v 乘它之後仍然在這個方向上;變換前後的差別就是方向不變,只是大小做了拉伸。如果符合這樣的情形的話,那麼λ就是 A 的一個特徵值,v 就是 A 的一個特徵向量。A 矩陣可能還有其他的情形,可能還有其他一些特徵值和特徵向量。矩陣特徵值分解的效果,就是對一個矩陣 A,在平面上找到所有滿足這種關係的向量集合。

這就是特徵值表示的一些傳統公式,A 矩陣乘以一個向量,得到一個特徵值乘一個向量,反映的就是在 v 的方向上面拉伸了多少倍。這就是通過特徵值分解揭示矩陣本身的特性。

剛才提到一個特徵向量和一個特徵值,還有沒有其他的?有的,這個也是,這個 V 就是它的一個特徵向量,長度也對應一個特徵值,這是 A 矩陣的兩個特徵值。

A 矩陣對應的兩個特徵向量和兩個特徵值,如果對特徵向量做數乘,比如拿這個 V1 乘以 2、乘以 3;每一個特徵向量經過數乘操作組成的空間叫做特徵空間

這裡有一種近似的、形象的表述,就是矩陣是一種運動。運動在物理裡面運動就有兩個概念,第一個往哪走,第二個走多少,對應的是速度加上方向

運動是動態的,點表示瞬時的狀態。站哪個位置是靜態的,要觀察到運動必須要藉助一種實體,比如說要觀察跑步現象,總得要找個實物,比如看人跑、還是看豬跑、看老虎跑,你總要找個物體附上去才能夠看到它的變化過程。

對同一種運動,A 代表這種運動,如果應用到一個向量上面多次,它會產生什麼樣的變化?像 A 這個矩陣是一種變換,作用到 V 這個特徵向量上,一次得到的點是在這兒,兩次到這,三次四次跑到這邊來了。7 次就沿著這個方向,然後如果 8 次、9 次仍然這個方向。這裡有種奇怪的現象,就是對一個向量做線性變換,N 次以後它會趨近於一個方向走,就不會再繼續變方向了。

這個方向實際上是有一定的意義的,這個方向就是矩陣分解的最大特徵值對應的方向。簡單說就是反覆利用矩陣乘法都會有一個最明顯的特徵,就是整個運動方向會朝著矩陣的最大的特徵向量方向走,這是它的幾何解釋。在一般的代數裡面,可能你根本想不到這一點。

補充:這是我自己補充的,一開始向量往這個方向走,變化特別大,這都反映的是矩陣本身的特徵值,貧富懸殊非常大。兩個不同方向上的特徵值,一個是另一個的很多倍,它們的懸殊非常大。這種情況叫有一種術語叫病態,它的衡量是通過條件數,條件數的概念就是一個矩陣的最大特徵值與最小的特徵值之間的倍數。最大特徵值除以最小特徵值得到的倍率比如是 3,還可以是 10,肯定是 10 的時候病態更嚴重,已經病得無藥可救了。

對這種矩陣做變換的話,你就要特別小心。在梯度下降裡面如果碰到這種矩陣的話,很容易在整個優化空間里不停地震蕩,很難收斂。

接下來看特徵分解。這一個矩陣分解完之後,中間是個對角陣,對應的就是每一個特徵值。像 A 這個矩陣,做一個特徵分解之後,兩個特徵值是 3 和 1,然後左邊右邊對應的就是一個特徵向量。比如說左邊矩陣的第一個列向量就是 3 這個特徵值對應的特徵向量,不信你可以試一下。

同理,左邊矩陣的第二個列向量就是 1 對應的特徵向量. 這就是一一對應的特徵向量。左右兩個矩陣相比就是做了個轉置而已。另外矩陣里是正交向量,左右的矩陣只會做旋轉,不會做縮放;中間的對角矩陣有縮放。所以整個 A 矩陣的作用既有旋轉又有縮放。

所以特徵值是一種拉伸,衡量沿著特徵向量的方向拉伸多少;然後特徵向量就是拉伸的方向。所以到現在應該比較好理解我們上來就說的那句話,叫特徵值和特徵向量就對應運動的速度和方向

這個部分是講矩陣的秩和線性方程組之間的關係。Ax=b 這樣一個線性方程組,它有唯一解的充要條件是矩陣的秩,等於它的增廣矩陣的秩,等於 N。這也就是說滿秩,滿秩的方程才有解;無解的條件就是它的矩陣的秩小於增廣矩陣,簡單說就是 A 不是滿秩的,或者它是不可逆的;如果有多種解呢,像這樣加上增廣矩陣之後仍然小於 N。這是數學上的表達,但還是不夠形象。

那麼現在形象理解一下,我把線性方程組做下簡化,變成二元線性方程組。方程組畫在空間裡面就是兩條直線,同時滿足這兩個方程組的解,就是兩條直線的交叉。只有這一個點同時滿足這兩個方程,直觀地看出來這是唯一解。所以這麼理解的話,唯一解就是有且只有一個交點;無解的話,把一條直線變得和另一條平行,兩條直線根本就沒有交點,就是無解;有很多解呢,就把平行的直線往一起靠,疊加在一起,完全重合了,那麼解就可以很多很多,因為直線可以包含任意無窮多的點。

看一下,矩陣解線性方程的幾何意義。這個空間上面 X 軸 Y 軸,取了一組正交基 i=(1,0) 和 j=(0,1),然後空間里的點就可以 ai+bi 來表示,a、b 是任意實數,這就是 i 和 j 張成的線性空間。

這個如果 i 和 j 共線,就是說 i 和 j 可以通過 i=kj 這個方式表達的話,就是共線。共線就相當於是一個降維操作,把原來的二維空間變成了一維的,這是不可逆的。

A 是這個矩陣在對整個的方程的線性空間做變換,就是旋轉。整個變換過程里,X 點相對於變換後的這個坐標系是沒有變化的,相對位置沒有變化,但是相對於原來那個坐標系就發生了變化。

用形象的方法理解,好比我們去坐公交車,車在動,我們也在動;我們相對於車是靜止的,但是我們相對地面是運動的。我們相對與地面運動的過程就是一個矩陣對一個向量做變化之後的效果,像這樣。

地球坐標系就相當於地面,上車,再返回地球,就發生了位移。這個變換對空間裡面每一個點都發生了變換。

回到線性方程組。Ax=b 是線性方程的一種表示,它的形象解釋就是找到這樣一個向量,它在線性變換之後變到了 B 點,我們要找到 x,就是 b 原來的樣子,是一個可逆的操作。這就是線性方程組的含義。

這一部分是我自己補充的。

比如剛才說從 x 到 b,能不能從 b 回到 x 呢?如果可以,那就是可逆,對應的 A 這個變化是可逆的;如果不能,那就是不可逆。

這個不可逆,又是怎麼理解?這就是一種降維打擊,比如說把一個立方體拍成一個平面,像一張紙;然後把紙揉成一個團,然後再直接打到十八層地獄。這些就是降維打擊,是不可恢復的。

不可逆的時候怎麼辦,想儘可能回去,有點偏差也行。偽逆就是這樣的時光隧道(變成冤魂野鬼,回到當初的地點),對逆做一個擴展。一般的線性方程組裡面有很多樣本,點非常多;矩陣是不可逆的,那就求他的最小二乘解,讓這條直線儘可能靠近所有點,這就是一種近似的方法,也就是不可逆,但是我們儘可能讓他回去(中國人深入骨髓的思想:落葉歸根)。

還有個概念,既然有降維,那就有升維。升維該怎麼理解呢?假設從北京到西藏,要坐火車,時間很長,可能兩天三夜,很累。但是有錢人,直接坐飛機嗖的一下就到了,這就是升維。飛機飛行的路線在垂直高度上是有差別的,火車的高度全程差別不大。(不同維度下的生活方式不同,有個笑話:「等我富了,天天吃包子!」,富豪的世界你不懂,乞丐的世界,你也不懂)

特徵分解怎麼理解呢?公交車沿著既定路線走,先往東兩千米,再往西三千米,然後再往東北五千米,然後就到家了。這裡的方向就是特徵向量,走的幅度兩千米、三千米、五千米就是特徵值。行列式是什麼意思?就是這個路線的長度。這樣理解應該就直觀得多了吧。

行列式大於零有放大的作用;行列式等於 0 是降維的作用,不可逆的;行列式小於零,是在坐標繫上面做了一個反射。註:行列式和特徵值與坐標系無關,反應的是矩陣本身的特質

GIF/206K

這是 2×2 的一個矩陣,我們看一下改變行列式的大小會有什麼效果。當行列式是大於 1 的,就有一個放大作用;如果我調小行列式的值,就縮小,然後到 1 是不變的;在 0 到 1 這個範圍內就縮小;注意看這一點,如果等於 0 的話就降維了,變成一個點了;再往右邊,行列式是負數,A 和 B 翻過來了,沿著 Y 軸把 X 軸往這邊反射;然後縮放的情況跟正像方向是一樣的。這個過程就好理解,這叫行列式的幾何意義。

最後以一張圖結束:

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據,教程,論文】

Deep Learning 第一章:前言


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 唯物 的精彩文章:

是時候回顧一下這些經典paper了
Deep Learning讀書分享——深度網路的正則化
如何用 3 個月零基礎入門機器學習?
微軟 Ignite2017 大會探秘,Azure 機器學習三大工具正式發布
TTIC Ph.D:PyTorch簡介 學術青年分享會

TAG:唯物 |