線性代數源於解線性方程組,這是數學公式逆向的計算。在計算機時代之前,限於手工計算的能力,線性代數多是作為理論研究的基礎。到了現代,它已是理工科但凡涉及到統計和數值計算必備的工具了,最近更成為機器學習熱門的基礎課。
10.1 病態系統
數學的理論無論多麼漂亮,應用到實踐,總要落實到數值的計算。線性系統是最簡單實用的數學模型,理論上解線性方程組有非常確定的結果,但也可能有意外。讓我們看一個例子。
解線性方程組0.410x + 0.492y = 0.902,0.492x + 0.590y =1.082;得x=1,y=1. 若第一個方程右邊的0.902略有變動成為0.901,解就變成x= 4.5976,y= -2.000; 同樣第二個方程右邊的1.082的數值變成1.081后,解就變成x= -2.000,y= 3.500.
實踐中的數據總有些誤差,方程的參數微小的變動,竟讓計算結果面目全非,這確實讓人始料不及。這樣不穩定的計算結果在應用上毫無價值。問題在於,這個差異並非是計算誤差造成的,將它們代入方程驗證都精確無誤. 這就無從計算上來改善了。這種對參數微小變動敏感的系統稱為是病態的(ill-conditioned),這是數學模型的問題。這個例子,在幾何圖像上不難看到原因。每個方程在空間確定一條直線,方程的解是這兩條直線的交點。這兩個方程確定的直線近於平行,所以位置略有變化(紅線和綠線),它們的交點(紅點和綠點)的位置就差得很遠。
在MATLAB或Octave可以用cond(A)指令計算A的條件數。上面例子中κ(A) = 6099.6.
10.2支點對計算的影響
高斯消去法幾乎是線性代數各種計算的基本手段。它不僅用來化簡矩陣計算行列式。對線性方程組的求解,把方程右邊的列向量拼入左邊的矩陣,成為增廣矩陣(A,b),然後對它進行行間的變換,直至左上角部分變成三角陣,然後對照右邊最後一列,判斷方程是否無解,若有解則用右邊三角陣部分迭代求解,多解時則同樣可以迭代解出零空間的線性無關向量。
矩陣求逆,則把單位陣拼入左邊成為增廣矩陣(A,I),右邊部分記錄了所有的行變換,與解方程一樣,先從上到下,用支點(pivot)即主對角線上的元素,消去對角線下非零元素,把左邊部分變成上三角陣。然後從下到上消去對角線上非零元素。如果A是滿秩的,增廣陣終將成為(I,-1),右邊即是逆矩陣。在這從上到下,三角陣化的消去過程中,只要支點是非零的,我們不需要交換行來進行,這時增廣矩陣的右邊的子矩陣是個下三角矩陣U,而左邊是個上三角的子矩陣L,這時的增廣矩陣(U,L)實現了LU分解。理論上,只要這個過程中的支點是非零元,用消去法解方程、求逆和做LU分解都是可以的。實際上仍然會遇到問題。看下面用第一行消去第二行第一列,做的LU分解。
條件數κ(A)=2.6184尚屬於良態,而κ(L) =108,κ(U) =0.9999*108,都是非常病態了,用這個分解做計算會帶來很大的誤差。問題在於計算過程中支點的數值太小,解決的辦法是運用支點做消去法前,先搜尋支點所在位置及下面,從中選出最大元,交換這兩行使得最大元在支點位置。對這個矩陣A,是先交換上下兩行,然後再做消去法,這樣有:
這時κ(L) =1.0001,κ(U) =2.6182,都是良態的。所以在矩陣的計算中,為了減少誤差經常需要交換行或列,這個步驟可能隱含在演算法中,也可能需要表示在計算機函數的式子里。通常用置換矩陣P來表示這些行或列的交換,如在MATLAB或Octave中指令 [L U P]=lu(A),指的是 PA = LU的分解。為了減少誤差,分解指令[G U]=lu(A),如果需要交換行,則把P吸收在G中,G=PTL,A=GU,這時G不再能保持L的下三角陣的形式了。
10.3 機器學習
人們走向理性,依賴於在意識層次上的邏輯求證。不明因果機理的預測和難以追蹤判斷過程的結論,都被視為迷信而被科學排斥。算術曾經是解決實際問題計算唯一可靠的途徑,在那裡應用問題分門別類地歸納成不同的類型,諸如雞兔同籠、寶塔裝燈等等,每個計算步驟和所得的數量,都有直觀可以理解的含義。代數的方法偏離了直觀推理的途徑走向抽象,三個未知數的線性代數方程,已經難以用單向邏輯推理的路徑來追蹤它解法的含義。我們只能用嚴格的邏輯,來證明每一步的代數運算都是等價或蘊含原來問題的不同描述。由此,我們可以用簡化了問題的計算答案來回答原來的問題。在理性求證的過程中,我們把解方程的代數方法看成可以信賴的中間站,將現實問題的各種關係表示成方程后,放棄了對解法計算的每一步的追蹤判斷,直接承認它的結果。物理等科學研究沿用這種思想,把實際問題描述成數學模型后,直接依賴於數學的分析和計算。
機器學習將代數方法的啟示推向另一個高度。它不再依賴於人力把實踐中的預測和判斷問題描述成一個數學模型,而是運用一個帶有眾多可調參數的通用數學模型,直接利用擁有的數據來調節參數自行尋找適用於這一類數據的具體模型,以此應用解答預測和判斷問題。
與代數的方法取代算術方法的困惑一樣,機器學習的調整模型參數及應用模型的計算機制,在數學上都是精確有效的。但巨大數量的可變參數,難以把這簡單數學模型的一個具體的辨識判斷過程,解析成為像物理規律那樣單純過程的因果性機制,無法用簡單邏輯推演的跟蹤來獲得理解。機器學習的智能漸漸走離我們理性的監督,卻成為未來應用計算的利器。下面簡單對此作介紹。
機器學習與人類經驗公式和分類的基本計算是一樣的,都是用線性的方法計算參數,找出與實驗數據匹配最小誤差的數學模型,以此用來預測未知。對經驗公式,用的是線性回歸,找出那個線性函數,它是個與實驗數據誤差最小的的超平面;對模式識別的分類,用邏輯回歸,找出那個判別函數,它是個分隔兩類樣本的超平面,與實驗數據的誤差最小。最後它們都歸結為確定那個超平面的線性代數計算。(註:這裡的超平面,指n維幾何空間中的n-1維平面,它不是指那種過原點作為n-1維線性子空間的超平面。)
x=(1,zT)T,w=(-b,aT)T,這個內積可以表示為〈xw〉= 0.線性回歸(linear regression):在線性回歸的數學模型中,假定有足夠多描述事物的屬性,表示為函數的變數,歸納了經驗的數值公式是這些屬性變數的線性函數,我們儘可能應用大量的實驗數據,來統計出誤差最小的模型的係數。具體計算如下。
假設n維的屬性向量xi和公式結果標量yi,經驗公式有線性的關係〈xi, w〉= yi,其中w是待定的參數向量。我們有m組實驗數據,m >> n,希望對所有的實驗數據〈xi, w〉都非常靠近i. 在上一篇中提到,這是列滿秩矩陣解線性方程組的問題,可以用最小二乘法求解。xiT寫成m*n矩陣X,m個yi列成向量y。設誤差函數J(w) =1/2‖Xw - y‖^2 = ( Xw – y)T ( Xw – y)/2,計算問題是,求讓J(w)=( Xw – y)T ( Xw – y)/2取最小值的向量w0. T ( Xw – y) =0,這可以表示成正規方程X TXw =X Ty. 它有唯一解0 =(X TX)-1X Ty. 在大數據的情況下,這個公式解的計算量太大,我們可以採用迭代的方式求解,這通常從任何一個w的初值開始,沿著這個梯度 T ( Xw – y)下降的方向,迭代逼近這個極值點0.邏輯回歸(logistic regression):模式識別是進行邏輯分類,它假定在足夠多屬性為坐標的多維空間中,用一個超平面把空間分成兩半,分別對應著不同的邏輯值。邏輯回歸用來確定這個將實驗樣本中分類誤差最小的超平面。
在n維線性空間中,滿足內積〈z, a〉= b的向量x,在a方向上投影的長度都是b/‖a‖,這些x向量的端點構成的n-1維的平面,這超平面與原點的距離是b/‖a‖。空間上面的點依指向它的向量z在a上面的投影被這超平面分成兩個部分,依內積〈z, a〉是否大於b,確定它們屬於哪一類。這是模式辨識和機器學習中分類最為基本的直觀圖像。
xi和對應的0或1的分類值yi,來計算這個w。數學模型的預測值是由判斷函數g(〈xw〉)來確定,理論上g(〈xw〉) = (sign(〈xw〉)+1)/2,但為了便於計算梯度,多數取sigmoid 函數g(t)=1/(1+exp(-t)). ^2 = (g( Xw) – y)T (g( Xw) – y)/2 最小的方法,來得到極值點w0,用迭代的方法沿著梯度下降的方向,逼近這個極值點0.10.4世界是線性的嗎?
上一節說,機器學習的核心演算法線性回歸和邏輯回歸,應用的都是線性模型。這也是經驗公式和模式識別的基礎。我們的世界都是線性的嗎?
開篇時也說,令人感到幸運和疑惑的是,科學研究上凡是用到數學,有著漂亮定性和定量結果的,基本上可以變成一類線性系統,或者用它來逼近。為什麼?
世界是線性的嗎?其實不是,只是非線性的系統正向計算不難,但難以反向求解,更無法分部綜合。我們能用數學工具取得很好結果的,基本上是線性系統。力學是線性動態系統,絕大多數電路是線性系統;描述連續介質,能量和場的波動,傳導,穩定狀態的數理方程是線性系統。非線性系統可以用兩種方法將它應用線性系統的方法來處理。一是可以在足夠小誤差的鄰域看成是線性的;微分幾何用曲面上點的鄰域,投影到與之相切的線性空間來計算;非線性動態系統控制穩定或跟蹤已知軌跡時,可以用線性系統來近似。二是在應用上儘可能把系統處理成線性的,而把非線性部分局限在一小處或作為輸入,以便分析和綜合。難以照此辦理的許多非線性系統即使有精確簡單的方程描述,如混沌系統、聯結主義模型,無論在定量和定性上,都難以深入。科學和技術與一切在競爭博弈中的發展一樣,都是路徑依賴的。某一方向取得突破,人們蜂擁而至,用先創的概念作為後建的基石,建構我們理解的世界。科學發展至今,解釋事物的理論無所不在,我們似乎已經充分了解了這個世界,其實這不過是看見在科學這條高速公路旁的城鎮,公路不可達之處是不可知的荒野。但是無論如何,線性代數已是現代科學知識的基礎構件,我們必須能在頭腦中想象它。
機器學習的線性模型怎麼用在這個並非是線性的世界?線性回歸怎麼擬合一條曲線上的數據?怎麼用一個超平面分划由一個曲面界定的類別?答案在於增加維數。空間中任意的樣本點集,都可以看作是高維空間中點集的投影,它們可以在高維空間的一個超平面上,或被一個超平面分類。
例如,實驗數據(1,4), (2, 9), (3, 20), (4, 37), (5, 60) 是二維空間的曲線 y = 3x2– 4x + 5上的點,在實驗中增加一個屬性x2 = x12的測量,上面的樣本點便成為(1,1, 4), (2, 4, 9), (3, 9, 20), (4, 16, 37), (5, 25, 60) 它們在三維空間y =3x2 – 4x1 + 5 的平面上。增加幾個非線性函數作為新的屬性,任何曲面都可以用這些具有新屬性變數的線性函數來近似。模式識別中的超平面分類也是如此。這樣的處理早已在科研和工程上廣泛地應用,它類比於將非線性部分局限在一些部件中,在工程上把系統仍然作為一個線性系統來分析和綜合。10.5 結語
現代公理化的數學,要求盡量抽象,從基本定義出發,不藉助任何具象,純粹形式推理來得到結論。這是嚴謹化確認的要求,但這不是理解、記憶和運用之道。人腦是按聯想方式工作的,不能下意識地推及邏輯之遠。我們對世界的理解是用象徵符號,在頭腦中構建的想象。所謂的課程學習是通過語言,將別人的想象串列地傳遞給自己,在頭腦中重構自己的想象。嚴格數學的訓練沿用形式邏輯推理,只能保證這個傳遞沒有形式上的誤差,並不能保證能夠建構相同的想象。沒有想象就難以記憶和應用。所以學數學就像學劍一樣,必須首先心中有劍,從概念的定義開始就要有符合這語義的具象,然後沿著定理推論的展開,逐步剔除不合適的想象,構建符合邏輯的圖像。學習中的理解是將語言能指的符號串,與所指的想象對應的過程。形式推理永遠不能觸及所指的內容,所以形式推理的機器沒有理解力。能夠產生理解和靈感的,是在頭腦的想象世界中看到的內容。這需要擁有豐富的具體實例的素材才能構建。因此學習數學只記憶定義、證明和定理不能走遠,也沒有透視現象的直覺。嚴謹的數學證明當然很重要,但那只是用來一維地傳遞信息,和在邏輯上證實想象的真實性的必要手段。把握數學內容的,是能在想象中出現的圖像。練習和應用是學好一門課的不二途徑。。
(系列終)