AI人工智能時代,機器學習,深度學習作為其核心,本文主要介紹機器學習的基礎算法,以詳細線介紹
線性回歸算法
及其
數學原理
探究,做到知其然知其所以然,打好理論基礎。
目錄
機器學習及人工智能
機器學習分類
有監督學習
無監督學習
線性回歸算法
線性回歸
代價函數
數學模型
最小二乘法
算法介紹
數學原理
高斯分布
算法局限性
梯度下降算法
方向導數
梯度
數學原理
單元算法實現
多元算法實現
矩陣跡算法
隨機梯度下降算法
高斯-牛頓法
泰勒級數展開
Hesse矩陣
數學原理
算法局限性
總結
1機器學習及人工智能
開門見山,上圖簡單而直觀的表明了人工智能,機器學習,深度學習的關系及區別,人工智能范疇最廣,機器學習,深度學習逐步縮小;其實機器學習與深度學習可以看作人工智能的內部模型提煉過程,人工智能則是對外部的智能反應。
人工智能
人工智能(Artificial Intelligence),學術定義為用于研究,模擬及擴展人的智能應用科學;AI在計算機領域研究涉及機器人,語言識別,圖像識別,自然語言處理等。AI的研究會橫跨多門學科,如計算機,數學,生物,語言,聲音,視覺甚至心理學和哲學。
其中AI的核心是做到感知,推斷,行動及根據經驗值進行調整,即類似人類的智慧體智能學習提升。
深度學習
深度學習則泛指深度神經網絡學習,如卷積神經網絡(Convolutional?Neural?Nets,CNN),把普通神經網絡從3-4層升華到8-10層從而獲取更精準模型,其應用如圖像視頻識別等。
人工智能,神經網絡并非什么新鮮事物,早在20-30年前就已經誕生,而深度學習則借助因互聯網而誕生的大數據,及近些年發展的強大運算能力(圖形處理GPU)而大放光彩,甚至推動引爆了新一代的人工智能。
機器學習
機器學習的學究的定義為“計算機程序如何隨著經驗積累自動提高性能”,經典英文定義為
“A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.”,即“對于某類任務T和性能度量P,如果一個計算機程序在T上以P衡量的性能隨著經驗E而自我完善,那么我們稱這個計算機程序在從經驗E學習”, 通俗點說既是讓機器來模擬人類來學習新的知識與技能,重點是不是通過某精妙算法而達成,而是讓程序去通過學習發現提高,舉一反三, 正所謂授之以魚不如授之以漁。
2?機器學習分類
機器學習在學習的方法廣義上分為有監督學習與無監督學習。
有監督學習(Supervised Learning)
監督學習,通常對具有標記分類的訓練樣本特征進行學習,標記即已經知道其對應正確分類答案;而學習則本質是找到特征與標簽(正確答案)之間的關系(函數),從而當訓練結束,輸入無標簽的數據時,可以利用已經找出的關系方法進行分析得出數據標簽。
監督學習類似我們在學校的學習,通常的題目都會有“正確答案”,以便于我們每學期學習結束(訓練),參加未知的考試作為檢驗。
上圖為監督學習的模型及流程:
獲取數據并確定所處理數據類型
確定并提取訓練數據集的特征(feature)
選擇機器學習方法如向量機或決策樹
獲取最終機器模型
對機器學習模型進行評估
監督學習方法及用途
常用的監督機器學習方法有如人工神經網絡,決策樹,傳統貝葉斯分類器,支撐向量機(SVM)等。
監督學習的主要用途通常用來進行樣本分類與回歸(找到最為接近的函數用于預測),而又根據其輸出結果連續還是離散分為回歸分析(Regression)與分類(Classification)。
無監督學習(Unsupervised Learning)
反之,無監督學習則通常學習數據只有特征向量,沒有標簽(答案),學習模型通過學習特征向量發現其內部規律與性質,從而把數據分組聚類(Clustering)。
無監督學習更類似我們的真實世界,去探索發現一些規律及分類。
舉個例子,如果把監督學習看作未成年時在家長及老師的“監督”下做告知正確的事,則無監督學習就是成年后踏入社會,自己去探索,發現,適應社會了。
無監督學習方法及用途
常用的無監督學習方法有: K-Means, 層次化聚類(Hierarchical Clustering),社交網絡分析,一些數據挖掘算法等。
無監督學習的用途則主要用來在未知(無標簽)數據中發現相似或者隱藏結構并進行聚類(Clustering),或者發現數據對應輸入空間的分布之密度估計等。
當然對于數據樣本介于無標記及部分標記之間,這種機器學習則被稱為半監督學習(semi-supervised learning),我們暫不介紹。
3線性回歸算法
上文提到了一些常用的機器學習算法,我們來看一下學習算法的概覽分類圖:
總體來說,機器學習中的回歸算法的本質是通過對樣本數據的收集,給出假設的函數模型,而此函數包含未知參數,機器學習的過程就是解方程或者找到最優解,當驗證通過后,從而可以用該函數去預測測試新數據。
線性回歸
回歸,統計學術語,表示變量之間的某種數量依存關系,并由此引出回歸方程,回歸系數。
線性回歸(Linear Regression),數理統計中回歸分析,用來確定兩種或兩種以上變量間相互依賴的定量關系的一種統計分析方法,其表達形式為y = w'x+e,e為誤差服從均值為0的正態分布,其中只有一個自變量的情況稱為簡單回歸,多個自變量的情況叫多元回歸。
??注意,統計學中的回歸并如線性回歸非與嚴格直線函數完全能擬合,所以我們統計中稱之為回歸用以與其直線函數區別。
舉個Andrew Ng機器學習講義中美國俄亥俄州Portland Oregon城市房屋價格為例:
這個例子中近簡化使用房屋面積一個因子作為自變量,y軸對應其因變量房屋價格。所以我們機器學習的線性回歸就變為對于給定有限的數據集,進行一元線性回歸,即找到一個一次函數y=y(x) + e,使得y滿足
當x={2104, 1600, 2400, 1416, 3000, ... }, y={400, 330, 369, 232, 540, ... } 如下圖所示:
對于線性方程的求解,是屬于線性代數的范疇。
首先要判斷是否有解及是否有唯一解;其次具體求解方法則有矩陣消元法,克萊姆法則,逆矩陣及增廣矩陣法等等。
對于大多數給定數據集,線性方程有唯一解的概率比較小,多數都是解不存在的超定方程組。
對于這種問題,在計算數學中通常將參數求解問題退化為求最小誤差問題,找到一個最接近的解,即術語松弛求解。
回到上述Ng的房價問題,我們先簡化給出假設函數(Hypothesis Function)即我們目標的近似函數或者需要擬合的直線記為:
其中
為我們需要求的參數,而參數的改變將會導致假設函數的變化,如:
在求解上述參數之前,我們有必要找到一種方法來衡量我們找到的函數是否為最優解,即代價函數。
代價函數(Cost Function)
對于回歸問題,常用的用于衡量最優解的代價函數為平方誤差。
平方誤差的思想就是將實際樣本數據值與我們擬合出的線做對應差值,即計算差距。
而為了減少由于極端數據的影響而造成的巨大波動,通常采用類似方差來減少個別數據影響,至于選擇平方和作為估計函數,則需從概率分布角度了解其公式來源(統計學中,殘差平方和函數可以看成n倍的均方誤差),除以m則計算平均值,系數1/2則是純數學簡化(最小值的1/2仍然是最小值,不改變整體性質),其目的是當求導后相乘則消去系數,由此導出以下代價函數:
有了代價函數,從數學上來看,我們求解最優解的問題繼而轉而變成如何求函數的最小值:
即cost函數J是基于theta的函數,用來檢測我們的theta參數從而得到我們的假設函數。
最小值
簡化令之只有theta-1
上圖是當對假設函數進行簡化,使得theta-0 = 0,即只有一個參數theta-1,并假設給定樣本數據為y ={(1,1), (2,2),(3,3)}; 當我們不斷嘗試給定theta-1,如0,0.5, 1時也得到J={(0, 2.3),(0.5, 0.58),(1,0)} 等等數據,其連線圖形為右邊的圖形,可以看到對于當前案例,圖形其J代價當theta = 1時有極小值。
其實大家可以看出,從數學角度,上述簡化后的代價函數為一元二次方程,其在theta=1可導,并且導數為0,并且在theta=1處二階可導,二階導數大于0,所以在theta=1處取得極小值。
其數學原理見如下定理:
theta-0,theta-1
我們可以采用上述一個theta-1的方法對其代價函數求導得出其極值。
將?J(θ1,θ0)?分別對?θ1?和?θ0?求導,得
我們令上式等于零,從而可以得到θ1?和?θ0?的閉式closed-form(解析解,顯性表達式;顯式解)解:
其中,
是x的均值。
實際上,對于兩個參數θ1,θ0的代價函數,其圖形J(θ1,θ0)?為一個曲面:
而我們上述求導過程,即試圖找到曲面的最低點。
4?最小二乘法
最小二乘法
上述代價函數中使用的均方誤差,其實對應了我們常用的歐幾里得的距離(歐式距離,Euclidean Distance), 基于均方誤差最小化進行模型求解的方法稱為“最小二乘法”(least square method),即通過最小化誤差的平方和尋找數據的最佳函數匹配;
當函數子變量為一維時,最小二乘法就蛻變成尋找一條直線;
推廣到n個變量(n維),Hypothesis Function為:
其對應均方誤差表示為如下矩陣:
之中:
對?θ?求導得:
即結果為:
根據微積分定理,令上式等于零,可以得到?θ?最優的閉式解。當
為滿秩矩陣或正定矩陣時,可解得
上式對于矩陣的求導,我們可以用以下圖表簡單展示:
數學原理
微積分角度來講,最小二乘法是采用非迭代法,針對代價函數求導數而得出全局極值,進而對所給定參數進行估算。
計算數學角度來講,最小二乘法的本質上是一個線性優化問題,試圖找到一個最優解。
線性代數角度來講,最小二乘法是求解線性方程組,當方程個數大于未知量個數,其方程本身 無解,而最小二乘法則試圖找到最優殘差。
幾何角度來講,最小二乘法中的幾何意義是高維空間中的一個向量在低維子空間的投影。
概率論角度來講,如果數據的觀測誤差是/或者滿足高斯分布,則最小二乘解就是使得觀測數據出現概率最大的解,即最大似然估計-Maximum Likelihood Estimate,MLE(利用已知的樣本結果,反推最有可能(最大概率)導致這樣結果的參數值)。
對于誤差不符合高斯分布的,廣義誤差分布(廣義誤差用來描述一類中間高兩邊低連續且對稱的概率密度函數):
其中,當b=2時,退化為高斯分布;而當b=1時,則退化為拉普拉斯分布(最小一乘法),如一些長尾(long?tail)的數據,經常服從拉普拉斯分布,對他們來說最小一乘才是更好的解法。。
高斯分布
局限性
最小二乘法算法簡單,容易理解,而然在現實機器學習卻有其局限性:
并非所有函數都可以求出駐點,即導數為0的點,f(x)=0
求解方程困難,或求根公式復雜(引入泰勒公式展開?)
導數并無解析解,(多數函數無解析解)
最小二乘法的矩陣公式,計算一個矩陣的逆是相當耗費時間的, 而且求逆也會存在數值不穩定的情況 (比如對希爾伯特矩陣求逆就幾乎是不可能的)
5?梯度下降算法
梯度下降算法(Gradient Descent)
正是由于在實際中,最小二乘法遇到的困難和局限性,尤其是多數超定方程組不存在解,我們由求導轉向迭代逼近。
先看一下標準梯度的數學定義:
方向導數
普通的偏導數是多元函數沿坐標軸的變化率,方向導數則考慮多元函數沿任意方向的變化率。
如下圖考慮一個三維空間的方向導數:
簡單來說,方向導數即研究在某一點的任意方向的變化率,是偏導數的廣義擴展。
梯度
梯度則基于方向導數,是一個向量而非數,梯度代表了各個導數中,變化趨勢最大的那個方向。
來看一下數學的嚴謹定義:
定義?設函數z=f(x, y) 在平面區域D內具有一階連續偏導數,則對于每一點(x, y) 屬于D,都可定出一個向量
這向量稱為函數z= f(x, y) 在點P(x, y) 的梯度,記作grad f(x, y),即
根據數學知識,我們知道上述沿梯度方向的方向導數達最大值,即梯度的方向是函數f(x, y)或者我們關注的目標函數在這點P(x, y)增長最快,或者函數值變化最快的方向,負梯度方向是減小最快的方向,如下圖。
在機器學習中,上述的f(x, y)即是我們代價函數,如上圖,當我們目標求f(x, y)的極小值時,我們可以先任意選取一個初始點,如x0, 讓其沿著梯度負方向,依次走到x1,x2,x3,... xn,迭代n次,這樣可以最快到達極小值點xn。
舉個Ng中三維的例子,比如我們站在山上某一地點,梯度所指示的方向是高度變化最快的方向,你沿著這個方向走,可以最快的改變你所在位置的高度(增加或者減少),即如果你一直沿著梯度走,你可以最快到達某個頂峰或者谷底。
可以看出,初始點的選擇不同,所計算出的極小值也不盡相同。
數學原理
我們來看一下標準梯度下降定義:
梯度下降算法也是一種優化算法,是求解無約束多元函數極值最早的數值方法,通常也被稱作最速下降法。其目的是找到一個局部極小值點;其目標與最小二乘法相同,都是使得估算值與實際值的總平方差盡量小。
而其實現上,則采用計算數學,迭代法,先給定一初始點,然后向下降最快的方向調整,在若干次迭代之后找到局部最小。梯度下降法的缺點是到最小點的時候收斂速度變慢,并且對初始點的選擇極為敏感,梯度下降算法不可避免的會存在陷入局部極小值的情形,這也是梯度下降算法的重大缺陷,其改進大多是在這兩方面下功夫。
單元線性回歸梯度算法實現
給定一個初始的θ0,θ1(僅以2參數為例)
不斷改變θ0,θ1從而減少J(θ0,θ1)的值,具體做法是求導。直到最終收斂。
我們仍舊針對線性回歸模型,包含θ0,θ1兩個參數為例:
把假設函數h帶入代價函數J(θ0,θ1)中,并分別求偏導數:
至此,得到計算機容易迭代的算法,整個過程序算法概括如下:
批次梯度下降(Batch Gradient Descent)
可以看到上述每次迭代都需要計算所有樣本的殘差并加和,所以又稱作批次梯度下降(Batch Gradient Descent)。
學習率
上圖中的系數a,通常稱作學習率,用來控制下降的幅度。如果學習率太小,θ的值每次變化很小,梯度下降會很慢;
反之,如果學習率過大,θ的值每次變化也會很大,直接越過極小值,甚至無法收斂到達最低點。
多元線性回歸梯度算法實現
上述都是簡單的單元線性回歸-梯度下降,我們再繼續擴展至多元回歸的梯度下降。
對于多元來講(即由多個維度的樣本數據,比如房價數據除了房屋面積大小,還有房間數,樓層,房齡,朝向,地理位置等,增加到多維)。
其對應的假設函數為如下:
或者用代數的簡化記法:
θ,x都是向量。
其對應的多元代價函數:
所以對應的多元梯度算法如下:
對J(θ)求導:
多元矩陣跡求解法
對于多元函數的梯度下降通常引入矩陣算法來加速。
對于一個多元函數,用代數矩陣來表示,其對應的導數表示為如下:
定義矩陣的跡(Trace)
根據矩陣定理, 推導出如下:
對J(θ)求導:
令上式為0,即得到目標θ向量:
上述充分展現了數學的神奇,矩陣法的優點是不需要多次迭代,一次計算機可以得出精確結果,然而當數據量大,對于矩陣乘法,逆的計算復雜度也大大增加,所以更適用于小規模數據。
6?隨機梯度下降算法
我們在上文看到梯度下降算法中的學習率對收斂速度甚至能否收斂有至關重要的影響,另外在樣本數據集便成大規模海量時,簡單的梯度/批次下降算法并不太適合,在此引入隨機梯度下降算法。
隨機梯度下降算法的理念,其實是借鑒了隨機樣本抽樣的方式,并提供了一種動態步長的策略,希望做到又優化精度,同時又滿足必要的收斂速度。
隨機梯度下降算法(Stochastic Gradient Descent)
每次迭代并非計算訓練集中所有數據,而僅隨機抽取了訓練集中部分樣本數據進行梯度計算,從而可以有效避免陷入局部極小值情況(上文有提到)。
然而天下無免費的午餐,魚和熊掌無法兼得,同樣隨機梯度下降算法在平衡精度與迭代次數,犧牲了一部分精度,增加了一定數量的迭代次數(增加的迭代次數遠遠小于樣本總量),換取了整體的優化效率提升。
7?高斯-牛頓算法
高斯-牛頓法
高斯-牛頓法是另一種經常用來求解非線性最小二乘的迭代法,其原理是利用了泰勒展開公式,其最大優點是收斂速度快。
Taylor 級數求得原目標函數的二階近似:
把?x 看做自變量, 所有帶有 x^k 的項看做常量,令一階導數為 0 ,即可求近似函數的最小值:
Hesse矩陣
上邊的Hesse矩陣,是一個多元函數的二階偏導數構成的方陣,描述了函數的局部曲率。
算法原理
本質上來看,牛頓法是二階收斂,而梯度下降則為一階收斂,所以牛頓法更快。簡單來說,梯度下降是從所處位置選擇一個坡度最大的方向走一步,而牛頓法則在選擇方向時,不僅考慮坡度,還會考慮下一步的坡度是否會變得更大。
幾何意義:
幾何上來說,牛頓法是用一個二次曲面去擬合當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,如下圖:
通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。
對于二元的情況,根據上述泰勒展開公式及求導,取0,可以得到如下迭代公式:
這樣,我們就可以利用該迭代式依次產生的序列{x1,x2,x3,... xk}才逐漸逼近f(x)的極小值點了。
牛頓算法局限性
每種算法都有其適用性,牛頓算法主要局限性如下:
可以看出,因為我們需要求矩陣逆,當Hesse矩陣不可逆勢無法計算
矩陣的逆計算復雜度為n的立方,當規模很大時,計算量超大,通常改良做法是采用擬牛頓法如BFGS,L-BFGS等
如果初始值離局部極小值太遠,Taylor展開并不能對原函數進行良好的近似
8?總結
機器學習,算法涉及大量高等數學,線性代數,概率統計,計算數學等推論,論證,難度非常大。
本文陸陸續續寫了近1個月,最后終于在“永動機”的加速下,匆忙于1周內完工,內容也借鑒了很多資料,尤其是斯坦福大學Ng的教材,感謝!
寫作耗時耗力,希望有機會能繼續機器學習更多的算法學習介紹。
分享給所有極客的小伙伴。
公眾號:技術極客TechBooster
孿生公眾號:技術 + 金融 = 程序量化投資Venus