官术网_书友最值得收藏!

第2章 線性代數

線性代數作為數學的一個分支,廣泛應用于科學和工程中。然而,因為線性代數主要是面向連續數學,而非離散數學,所以很多計算機科學家很少接觸它。掌握好線性代數對于理解和從事機器學習算法相關工作是很有必要的,尤其對于深度學習算法而言。因此,在開始介紹深度學習之前,我們集中探討一些必備的線性代數知識。

如果你已經很熟悉線性代數,那么可以輕松地跳過本章。如果你已經了解這些概念,但是需要一份索引表來回顧一些重要公式,那么我們推薦The Matrix Cookbook(Petersen and Pedersen, 2006)。如果你沒有接觸過線性代數,那么本章將告訴你本書所需的線性代數知識,不過我們仍然強烈建議你參考其他專門講解線性代數的文獻,例如Shilov(1977)。最后,本章略去了很多重要但是對于理解深度學習非必需的線性代數知識。

2.1 標量、向量、矩陣和張量

學習線性代數,會涉及以下幾個數學概念:

?標量(scalar):一個標量就是一個單獨的數,它不同于線性代數中研究的其他大部分對象(通常是多個數的數組)。我們用斜體表示標量。標量通常被賦予小寫的變量名稱。在介紹標量時,我們會明確它們是哪種類型的數。比如,在定義實數標量時,我們可能會說“令表示一條線的斜率”;在定義自然數標量時,我們可能會說“令表示元素的數目”。

?向量(vector):一個向量是一列數。這些數是有序排列的。通過次序中的索引,我們可以確定每個單獨的數。通常我們賦予向量粗體的小寫變量名稱,比如x。向量中的元素可以通過帶腳標的斜體表示。向量x的第一個元素是x1,第二個元素是x2,等等。我們也會注明存儲在向量中的元素是什么類型的。如果每個元素都屬于R,并且該向量有n個元素,那么該向量屬于實數集R的n次笛卡兒乘積構成的集合,記為Rn。當需要明確表示向量中的元素時,我們會將元素排列成一個方括號包圍的縱列:

我們可以把向量看作空間中的點,每個元素是不同坐標軸上的坐標。

有時我們需要索引向量中的一些元素。在這種情況下,我們定義一個包含這些元素索引的集合,然后將該集合寫在腳標處。比如,指定x1x3x6,我們定義集合S={1,3,6},然后寫作xS。我們用符號-表示集合的補集中的索引。比如x-1表示x中除x1外的所有元素,x-S表示x中除x1x3x6外所有元素構成的向量。

?矩陣(matrix):矩陣是一個二維數組,其中的每一個元素由兩個索引(而非一個)所確定。我們通常會賦予矩陣粗體的大寫變量名稱,比如A。如果一個實數矩陣高度為m,寬度為n,那么我們說A∈Rm×n。我們在表示矩陣中的元素時,通常以不加粗的斜體形式使用其名稱,索引用逗號間隔。比如,A1,1表示A左上的元素,Am,n表示A右下的元素。我們通過用“:”表示水平坐標,以表示垂直坐標i中的所有元素。比如,Ai, :表示A中垂直坐標i上的一橫排元素。這也被稱為A的第i(row)。同樣地,A:,i表示A的第i(column)。當需要明確表示矩陣中的元素時,我們將它們寫在用方括號括起來的數組中:

有時我們需要矩陣值表達式的索引,而不是單個元素。在這種情況下,我們在表達式后面接下標,但不必將矩陣的變量名稱小寫化。比如,fAi, j表示函數f作用在A上輸出的矩陣的第i行第j列元素。

?張量(tensor):在某些情況下,我們會討論坐標超過兩維的數組。一般的,一個數組中的元素分布在若干維坐標的規則網格中,我們稱之為張量。我們使用字體A來表示張量“A”。張量A中坐標為(i,j,k)的元素記作Ai,j,k。

轉置(transpose)是矩陣的重要操作之一。矩陣的轉置是以對角線為軸的鏡像,這條從左上角到右下角的對角線被稱為主對角線(main diagonal)。圖2.1顯示了這個操作。我們將矩陣A的轉置表示為,定義如下

向量可以看作只有一列的矩陣。對應地,向量的轉置可以看作只有一行的矩陣。有時,我們通過將向量元素作為行矩陣寫在文本行中,然后使用轉置操作將其變為標準的列向量,來定義一個向量,比如

標量可以看作只有一個元素的矩陣。因此,標量的轉置等于它本身,。

圖2.1 矩陣的轉置可以看作以主對角線為軸的一個鏡像

只要矩陣的形狀一樣,我們可以把兩個矩陣相加。兩個矩陣相加是指對應位置的元素相加,比如C=A+B,其中Ci,j=Ai,j+Bi,j。

標量和矩陣相乘,或是和矩陣相加時,我們只需將其與矩陣的每個元素相乘或相加,比如D=a·B+c,其中Di,j=a·Bi,j+c。

在深度學習中,我們也使用一些不那么常規的符號。我們允許矩陣和向量相加,產生另一個矩陣:C=A+b,其中Ci,j=Ai,j+bj。換言之,向量b和矩陣A的每一行相加。這個簡寫方法使我們無須在加法操作前定義一個將向量b復制到每一行而生成的矩陣。這種隱式地復制向量b到很多位置的方式,稱為廣播(broadcasting)。

2.2 矩陣和向量相乘

矩陣乘法是矩陣運算中最重要的操作之一。兩個矩陣AB矩陣乘積(matrix product)是第三個矩陣C。為了使乘法可被定義,矩陣A的列數必須和矩陣B的行數相等。如果矩陣A的形狀是m×n,矩陣B的形狀是n×p,那么矩陣C的形狀是m×p。我們可以通過將兩個或多個矩陣并列放置以書寫矩陣乘法,例如

具體地,該乘法操作定義為

需要注意的是,兩個矩陣的標準乘積不是指兩個矩陣中對應元素的乘積。不過,那樣的矩陣操作確實是存在的,稱為元素對應乘積(element-wise product)或者Hadamard乘積(Hadamard product),記為A⊙B

兩個相同維數的向量xy點積(dot product)可看作矩陣乘積。我們可以把矩陣乘積C=AB中計算Ci,j的步驟看作A的第i行和B的第j列之間的點積。

矩陣乘積運算有許多有用的性質,從而使矩陣的數學分析更加方便。比如,矩陣乘積服從分配律:

矩陣乘積也服從結合律:

不同于標量乘積,矩陣乘積并不滿足交換律(AB=BA的情況并非總是滿足)。然而,兩個向量的點積滿足交換律:

矩陣乘積的轉置有著簡單的形式:

利用兩個向量點積的結果是標量、標量轉置是自身的事實,我們可以證明式(2.8):

由于本書的重點不是線性代數,我們并不想展示矩陣乘積的所有重要性質,但讀者應該知道矩陣乘積還有很多有用的性質。

現在我們已經知道了足夠多的線性代數符號,可以表達下列線性方程組:

其中是一個已知矩陣,是一個已知向量,是一個我們要求解的未知向量。向量x的每一個元素xi都是未知的。矩陣A的每一行和b中對應的元素構成一個約束。我們可以把式(2.11)重寫為

或者,更明確地,寫作

矩陣向量乘積符號為這種形式的方程提供了更緊湊的表示。

2.3 單位矩陣和逆矩陣

線性代數提供了稱為矩陣逆(matrix inversion)的強大工具。對于大多數矩陣A,我們都能通過矩陣逆解析地求解式(2.11)。

為了描述矩陣逆,我們首先需要定義單位矩陣(identity matrix)的概念。任意向量和單位矩陣相乘,都不會改變。我們將保持n維向量不變的單位矩陣記作In。形式上,

單位矩陣的結構很簡單:所有沿主對角線的元素都是1,而其他位置的所有元素都是0,如圖2.2所示。

圖2.2 單位矩陣的一個樣例:這是I3

矩陣A矩陣逆記作A-1,其定義的矩陣滿足如下條件:

現在我們可以通過以下步驟求解式(2.11):

當然,這取決于我們能否找到一個逆矩陣A-1。在接下來的章節中,我們會討論逆矩陣A-1存在的條件。

當逆矩陣A-1存在時,有幾種不同的算法都能找到它的閉解形式。理論上,相同的逆矩陣可用于多次求解不同向量b的方程。然而,逆矩陣A-1主要是作為理論工具使用的,并不會在大多數軟件應用程序中實際使用。這是因為逆矩陣A-1在數字計算機上只能表現出有限的精度,有效使用向量b的算法通??梢缘玫礁_的x。

2.4 線性相關和生成子空間

如果逆矩陣A-1存在,那么式(2.11)肯定對于每一個向量b恰好存在一個解。但是,對于方程組而言,對于向量b的某些值,有可能不存在解,或者存在無限多個解。存在多于一個解但是少于無限多個解的情況是不可能發生的;因為如果xy都是某方程組的解,則

(其中α取任意實數)也是該方程組的解。

為了分析方程有多少個解,我們可以將A的列向量看作從原點(origin)(元素都是零的向量)出發的不同方向,確定有多少種方法可以到達向量b。在這個觀點下,向量x中的每個元素表示我們應該沿著這些方向走多遠,即xi表示我們需要沿著第i個向量的方向走多遠:

一般而言,這種操作稱為線性組合(linear combination)。形式上,一組向量的線性組合,是指每個向量乘以對應標量系數之后的和,即

一組向量的生成子空間(span)是原始向量線性組合后所能抵達的點的集合。

確定Ax=b是否有解,相當于確定向量b是否在A列向量的生成子空間中。這個特殊的生成子空間被稱為A列空間(column space)或者A值域(range)。

為了使方程Ax=b對于任意向量都存在解,我們要求A的列空間構成整個。如果中的某個點不在A的列空間中,那么該點對應的b會使得該方程沒有解。矩陣A的列空間是整個的要求,意味著A至少有m列,即nm。否則,A列空間的維數會小于m。例如,假設A是一個3×2的矩陣。目標b是3維的,但是x只有2維。所以無論如何修改x的值,也只能描繪出空間中的二維平面。當且僅當向量b在該二維平面中時,該方程有解。

不等式nm僅是方程對每一點都有解的必要條件。這不是一個充分條件,因為有些列向量可能是冗余的。假設有一個中的矩陣,它的兩個列向量是相同的。那么它的列空間和它的一個列向量作為矩陣的列空間是一樣的。換言之,雖然該矩陣有2列,但是它的列空間仍然只是一條線,不能涵蓋整個空間。

正式地說,這種冗余稱為線性相關(linear dependence)。如果一組向量中的任意一個向量都不能表示成其他向量的線性組合,那么這組向量稱為線性無關(linearly independent)。如果某個向量是一組向量中某些向量的線性組合,那么我們將這個向量加入這組向量后不會增加這組向量的生成子空間。這意味著,如果一個矩陣的列空間涵蓋整個,那么該矩陣必須包含至少一組m個線性無關的向量。這是式(2.11)對于每一個向量b的取值都有解的充分必要條件。值得注意的是,這個條件是說該向量集恰好有m個線性無關的列向量,而不是至少m個。不存在一個m維向量的集合具有多于m個彼此線性不相關的列向量,但是一個有多于m個列向量的矩陣有可能擁有不止一個大小為m的線性無關向量集。

要想使矩陣可逆,我們還需要保證式(2.11)對于每一個b值至多有一個解。為此,我們需要確保該矩陣至多有m個列向量。否則,該方程會有不止一個解。

綜上所述,這意味著該矩陣必須是一個方陣(square),即m=n,并且所有列向量都是線性無關的。一個列向量線性相關的方陣被稱為奇異的(singular)。

如果矩陣A不是一個方陣或者是一個奇異的方陣,該方程仍然可能有解。但是我們不能使用矩陣逆去求解。

目前為止,我們已經討論了逆矩陣左乘。我們也可以定義逆矩陣右乘:

對于方陣而言,它的左逆和右逆是相等的。

2.5 范數

有時我們需要衡量一個向量的大小。在機器學習中,我們經常使用稱為范數(norm)的函數來衡量向量大小。形式上,Lp范數定義如下

其中,p≥1。

范數(包括Lp范數)是將向量映射到非負值的函數。直觀上來說,向量x的范數衡量從原點到點x的距離。更嚴格地說,范數是滿足下列性質的任意函數:

?fx)=0?x=0;

?fx+y)≤fx)+fy)(三角不等式(triangle inequality));

?,fαx)=|α|fx)。

p=2時,L2范數稱為歐幾里得范數(Euclidean norm)。它表示從原點出發到向量x確定的點的歐幾里得距離。L2范數在機器學習中出現得十分頻繁,經常簡化表示為‖x‖,略去了下標2。平方L2范數也經常用來衡量向量的大小,可以簡單地通過點積計算。

平方L2范數在數學和計算上都比L2范數本身更方便。例如,平方L2范數對x中每個元素的導數只取決于對應的元素,而L2范數對每個元素的導數和整個向量相關。但是在很多情況下,平方L2范數也可能不受歡迎,因為它在原點附近增長得十分緩慢。在某些機器學習應用中,區分恰好是零的元素和非零但值很小的元素是很重要的。在這些情況下,我們轉而使用在各個位置斜率相同,同時保持簡單的數學形式的函數:L1范數。L1范數可以簡化如下

當機器學習問題中零和非零元素之間的差異非常重要時,通常會使用L1范數。每當x中某個元素從0增加,對應的L1范數也會增加。

有時候我們會統計向量中非零元素的個數來衡量向量的大小。有些作者將這種函數稱為“L0范數”,但是這個術語在數學意義上是不對的。向量的非零元素的數目不是范數,因為對向量縮放α倍不會改變該向量非零元素的數目。因此,L1范數經常作為表示非零元素數目的替代函數。

另外一個經常在機器學習中出現的范數是L范數,也被稱為最大范數(max norm)。這個范數表示向量中具有最大幅值的元素的絕對值:

有時候我們可能也希望衡量矩陣的大小。在深度學習中,最常見的做法是使用Frobenius范數(Frobenius norm),即

其類似于向量的L2范數。

兩個向量的點積可以用范數來表示,具體如下

其中θ表示xy之間的夾角。

2.6 特殊類型的矩陣和向量

有些特殊類型的矩陣和向量是特別有用的。

對角矩陣(diagonal matrix)只在主對角線上含有非零元素,其他位置都是零。形式上,矩陣D是對角矩陣,當且僅當對于所有的i=j,Di,j=0。我們已經看到過一個對角矩陣:單位矩陣,其對角元素全部是1。我們用diag(v)表示對角元素由向量v中元素給定的一個對角方陣。對角矩陣受到關注的部分原因是對角矩陣的乘法計算很高效。計算乘法diag(vx,我們只需要將x中的每個元素xi放大vi倍。換言之,diag(vx=vx。計算對角方陣的逆矩陣也很高效。對角方陣的逆矩陣存在,當且僅當對角元素都是非零值,在這種情況下,。在很多情況下,我們可以根據任意矩陣導出一些通用的機器學習算法,但通過將一些矩陣限制為對角矩陣,我們可以得到計算代價較低的(并且簡明扼要的)算法。

并非所有的對角矩陣都是方陣。長方形的矩陣也有可能是對角矩陣。非方陣的對角矩陣沒有逆矩陣,但我們仍然可以高效地計算它們的乘法。對于一個長方形對角矩陣D而言,乘法Dx會涉及x中每個元素的縮放,如果D是瘦長型矩陣,那么在縮放后的末尾添加一些零;如果D是胖寬型矩陣,那么在縮放后去掉最后一些元素。

對稱(symmetric)矩陣是轉置和自己相等的矩陣,即

當某些不依賴參數順序的雙參數函數生成元素時,對稱矩陣經常會出現。例如,如果A是一個距離度量矩陣,Ai,j表示點i到點j的距離,那么Ai,j=Aj,i,因為距離函數是對稱的。

單位向量(unit vector)是具有單位范數(unit norm)的向量,即

如果=0,那么向量x和向量y互相正交(orthogonal)。如果兩個向量都有非零范數,那么這兩個向量之間的夾角是90?。在Rn中,至多有n個范數非零向量互相正交。如果這些向量不但互相正交,而且范數都為1,那么我們稱它們是標準正交(orthonormal)。

正交矩陣(orthogonal matrix)指行向量和列向量是分別標準正交的方陣,即

這意味著

正交矩陣受到關注是因為求逆計算代價小。我們需要注意正交矩陣的定義。違反直覺的是,正交矩陣的行向量不僅是正交的,還是標準正交的。對于行向量或列向量互相正交但不是標準正交的矩陣,沒有對應的專有術語。

2.7 特征分解

許多數學對象可以通過將它們分解成多個組成部分或者找到它們的一些屬性來更好地理解。這些屬性是通用的,而不是由我們選擇表示它們的方式所產生的。

例如,整數可以分解為質因數。我們可以用十進制或二進制等不同方式表示整數12,但是12=2×3×3永遠是對的。從這個表示中我們可以獲得一些有用的信息,比如12不能被5整除,或者12的倍數可以被3整除。

正如我們可以通過分解質因數來發現整數的一些內在性質,我們也可以通過分解矩陣來發現矩陣表示成數組元素時不明顯的函數性質。

特征分解(eigendecomposition)是使用最廣的矩陣分解之一,即我們將矩陣分解成一組特征向量和特征值。

方陣A特征向量(eigenvector)是指與A相乘后相當于對該向量進行縮放的非零向量v

其中標量λ稱為這個特征向量對應的特征值(eigenvalue)。(類似地,我們也可以定義左特征向量(left eigenvector),但是通常我們更關注右特征向量(right eigenvector))。

如果vA的特征向量,那么任何縮放后的向量,s=0)也是A的特征向量。此外,svv有相同的特征值?;谶@個原因,通常我們只考慮單位特征向量。

假設矩陣An個線性無關的特征向量{v(1),···,v(n)},對應著特征值1,···,λn}。我們將特征向量連接成一個矩陣,使得每一列是一個特征向量:V=[v(1),···,v(n)]。類似地,我們也可以將特征值連接成一個向量。因此A特征分解(eigendecomposition)可以記作

我們已經看到了構建具有特定特征值和特征向量的矩陣,能夠使我們在目標方向上延伸空間。然而,我們也常常希望將矩陣分解(decompose)成特征值和特征向量。這樣可以幫助我們分析矩陣的特定性質,就像質因數分解有助于我們理解整數。

不是每一個矩陣都可以分解成特征值和特征向量。在某些情況下,特征分解存在,但是會涉及復數而非實數。幸運的是,在本書中,我們通常只需要分解一類有簡單分解的矩陣。具體來講,每個實對稱矩陣都可以分解成實特征向量和實特征值:

其中QA的特征向量組成的正交矩陣,Λ是對角矩陣。特征值Λi,i對應的特征向量是矩陣Q的第i列,記作Q:,i。因為Q是正交矩陣,我們可以將A看作沿方向v(i)延展λi倍的空間,如圖2.3所示。

圖2.3 特征向量和特征值的作用效果。特征向量和特征值的作用效果的一個實例。在這里,矩陣A有兩個標準正交的特征向量,對應特征值為λ1v(1)以及對應特征值為λ2v(2)。()我們畫出了所有單位向量的集合,構成一個單位圓。()我們畫出了所有Au點的集合。通過觀察A拉伸單位圓的方式,我們可以看到它將v(i)方向的空間拉伸了λi

雖然任意一個實對稱矩陣A都有特征分解,但是特征分解可能并不唯一。如果兩個或多個特征向量擁有相同的特征值,那么在由這些特征向量產生的生成子空間中,任意一組正交向量都是該特征值對應的特征向量。因此,我們可以等價地從這些特征向量中構成Q作為替代。按照慣例,我們通常按降序排列Λ的元素。在該約定下,特征分解唯一,當且僅當所有的特征值都是唯一的。

矩陣的特征分解給了我們很多關于矩陣的有用信息。矩陣是奇異的,當且僅當含有零特征值。實對稱矩陣的特征分解也可以用于優化二次方程,其中限制x‖2=1。當x等于A的某個特征向量時,f將返回對應的特征值。在限制條件下,函數f的最大值是最大特征值,最小值是最小特征值。

所有特征值都是正數的矩陣稱為正定(positive definite);所有特征值都是非負數的矩陣稱為半正定(positive semidefinite)。同樣地,所有特征值都是負數的矩陣稱為負定(negative definite);所有特征值都是非正數的矩陣稱為半負定(negative semidefinite)。半正定矩陣受到關注是因為它們保證。此外,正定矩陣還保證。

2.8 奇異值分解

在第2.7節,我們探討了如何將矩陣分解成特征向量和特征值。還有另一種分解矩陣的方法,稱為奇異值分解(singular value decomposition, SVD),是將矩陣分解為奇異向量(singular vector)和奇異值(singular value)。通過奇異值分解,我們會得到一些與特征分解相同類型的信息。然而,奇異值分解有更廣泛的應用。每個實數矩陣都有一個奇異值分解,但不一定都有特征分解。例如,非方陣的矩陣沒有特征分解,這時我們只能使用奇異值分解。

回想一下,我們使用特征分解去分析矩陣A時,得到特征向量構成的矩陣V和特征值構成的向量λ,我們可以重新將A寫作

奇異值分解是類似的,只不過這回我們將矩陣A分解成三個矩陣的乘積:

假設A是一個m×n的矩陣,那么U是一個m×m的矩陣,D是一個m×n的矩陣,V是一個n×n矩陣。

這些矩陣中的每一個經定義后都擁有特殊的結構。矩陣UV都定義為正交矩陣,而矩陣D定義為對角矩陣。注意,矩陣D不一定是方陣。

對角矩陣D對角線上的元素稱為矩陣A奇異值(singular value)。矩陣U的列向量稱為左奇異向量(left singular vector),矩陣V的列向量稱右奇異向量(right singular vector)。事實上,我們可以用與A相關的特征分解去解釋A的奇異值分解。A左奇異向量(left singular vector)是的特征向量。A右奇異向量(right singular vector)是的特征向量。A的非零奇異值是特征值的平方根,同時也是特征值的平方根。

SVD最有用的一個性質可能是拓展矩陣求逆到非方矩陣上。我們將在下一節中探討。

2.9 Moore-Penrose偽逆

對于非方矩陣而言,其逆矩陣沒有定義。假設在下面的問題中,我們希望通過矩陣A的左逆B來求解線性方程:

等式兩邊左乘左逆B后,我們得到

取決于問題的形式,我們可能無法設計一個唯一的映射將A映射到B。

如果矩陣A的行數大于列數,那么上述方程可能沒有解。如果矩陣A的行數小于列數,那么上述矩陣可能有多個解。

Moore-Penrose偽逆(Moore-Penrose pseudoinverse)使我們在這類問題上取得了一定的進展。矩陣A的偽逆定義為

計算偽逆的實際算法沒有基于這個定義,而是使用下面的公式

其中,矩陣U、DV是矩陣A奇異值分解后得到的矩陣。對角矩陣D的偽逆D+是其非零元素取倒數之后再轉置得到的。

當矩陣A的列數多于行數時,使用偽逆求解線性方程是眾多可能解法中的一種。特別地,x=A+y是方程所有可行解中歐幾里得范數x‖2最小的一個。

當矩陣A的行數多于列數時,可能沒有解。在這種情況下,通過偽逆得到的x使得Axy的歐幾里得距離Ax-y‖2最小。

2.10 跡運算

跡運算返回的是矩陣對角元素的和:

跡運算因為很多原因而有用。若不使用求和符號,有些矩陣運算很難描述,而通過矩陣乘法和跡運算符號可以清楚地表示。例如,跡運算提供了另一種描述矩陣Frobenius范數的方式:

用跡運算表示表達式,我們可以使用很多有用的等式巧妙地處理表達式。例如,跡運算在轉置運算下是不變的:

多個矩陣相乘得到的方陣的跡,和將這些矩陣中的最后一個挪到最前面之后相乘的跡是相同的。當然,我們需要考慮挪動之后矩陣乘積依然定義良好:

或者更一般地,

即使循環置換后矩陣乘積得到的矩陣形狀變了,跡運算的結果依然不變。例如,假設矩陣,矩陣,我們可以得到

盡管。

另一個有用的事實是標量在跡運算后仍然是它自己:a=Tr(a)。

2.11 行列式

行列式,記作det(A),是一個將方陣A映射到實數的函數。行列式等于矩陣特征值的乘積。行列式的絕對值可以用來衡量矩陣參與矩陣乘法后空間擴大或者縮小了多少。如果行列式是0,那么空間至少沿著某一維完全收縮了,使其失去了所有的體積;如果行列式是1,那么這個轉換保持空間體積不變。

2.12 實例:主成分分析

主成分分析(principal components analysis, PCA)是一個簡單的機器學習算法,可以通過基礎的線性代數知識推導。

假設在空間中有m個點{x(1), ···,x(m)},我們希望對這些點進行有損壓縮。有損壓縮表示我們使用更少的內存,但損失一些精度去存儲這些點。我們希望損失的精度盡可能少。

編碼這些點的一種方式是用低維表示。對于每個點,會有一個對應的編碼向量。如果ln小,那么我們便使用了更少的內存來存儲原來的數據。我們希望找到一個編碼函數,根據輸入返回編碼,fx)=c;我們也希望找到一個解碼函數,給定編碼重構輸入,x ≈gfx))。

PCA由我們選擇的解碼函數而定。具體來講,為了簡化解碼器,我們使用矩陣乘法將編碼映射回,即gc)=Dc,其中是定義解碼的矩陣。

到目前為止,所描述的問題可能會有多個解。因為如果我們按比例地縮小所有點對應的編碼向量ci,那么只需按比例放大D:,i,即可保持結果不變。為了使問題有唯一解,我們限制D中所有列向量都有單位范數。

計算這個解碼器的最優編碼可能是一個困難的問題。為了使編碼問題簡單一些,PCA限制D的列向量彼此正交(注意,除非l=n,否則嚴格意義上D不是一個正交矩陣)。

為了將這個基本想法變為我們能夠實現的算法,首先我們需要明確如何根據每一個輸入x得到一個最優編碼c?。一種方法是最小化原始輸入向量x和重構向量gc?)之間的距離。我們使用范數來衡量它們之間的距離。在PCA算法中,我們使用L2范數

我們可以用平方L2范數替代L2范數,因為兩者在相同的值c上取得最小值。這是因為L2范數是非負的,并且平方運算在非負值上是單調遞增的。

該最小化函數可以簡化成

(式(2.30)中L2范數的定義)

(分配律)

(因為標量的轉置等于自己)。

因為第一項不依賴于c,所以我們可以忽略它,得到如下的優化目標:

更進一步,代入gc)的定義:

(矩陣D的正交性和單位范數約束)

我們可以通過向量微積分來求解這個最優化問題(如果你不清楚怎么做,請參考第4.3節)。

這使得算法很高效:最優編碼x只需要一個矩陣-向量乘法操作。為了編碼向量,我們使用編碼函數

進一步使用矩陣乘法,我們也可以定義PCA重構操作:

接下來,我們需要挑選編碼矩陣D。要做到這一點,先來回顧最小化輸入和重構之間L2距離的這個想法。因為用相同的矩陣D對所有點進行解碼,我們不能再孤立地看待每個點。反之,我們必須最小化所有維數和所有點上的誤差矩陣的Frobenius范數:

為了推導用于尋求D?的算法,我們首先考慮l=1的情況。在這種情況下,D是一個單一向量d。將式(2.67)代入式(2.68),簡化Dd,問題簡化為

上述公式是直接代入得到的,但不是表述上最美觀的方式。在上述公式中,我們將標量放在向量d的右邊。將該標量放在左邊的寫法更為傳統。于是我們通常寫作

或者,考慮到標量的轉置和自身相等,我們也可以寫作

讀者應該對這些重排寫法慢慢熟悉起來。

此時,使用單一矩陣來重述問題,比將問題寫成求和形式更有幫助。這有助于我們使用更緊湊的符號。將表示各點的向量堆疊成一個矩陣,記為,其中。原問題可以重新表述為

暫時不考慮約束,我們可以將Frobenius范數簡化成下面的形式:

(式(2.49))

(因為與d無關的項不影響arg min)

(因為循環改變跡運算中相乘矩陣的順序不影響結果,如式(2.52)所示)

(再次使用上述性質)。

此時,我們再來考慮約束條件

(因為約束條件)

這個優化問題可以通過特征分解來求解。具體來講,最優的d最大特征值對應的特征向量。

以上推導特定于l=1的情況,僅得到了第一個主成分。更一般地,當我們希望得到主成分的基時,矩陣D由前l個最大的特征值對應的特征向量組成。這個結論可以通過歸納法證明,我們建議將此證明作為練習。

線性代數是理解深度學習所必須掌握的基礎數學學科之一。另一門在機器學習中無處不在的重要數學學科是概率論,我們將在下一章探討。

主站蜘蛛池模板: 汉寿县| 辽阳市| 施秉县| 昆山市| 汨罗市| 宜州市| 甘洛县| 乡城县| 贡觉县| 金川县| 宝鸡市| 青铜峡市| 喀喇沁旗| 读书| 桐梓县| 南木林县| 六枝特区| 肥东县| 莱州市| 阿图什市| 孟州市| 虹口区| 佛学| 郯城县| 泊头市| 红原县| 卓资县| 江永县| 全南县| 城市| 建湖县| 泾源县| 时尚| 安陆市| 都江堰市| 库尔勒市| 吉林省| 汉川市| 台中市| 酉阳| 清远市|