1. 程式人生 > >機器學習的分類與主要演算法對比

機器學習的分類與主要演算法對比

重要引用:Andrew Ng Courera Machine Learning從機器學習談起關於機器學習的討論機器學習常見演算法分類彙總LeNet Homepagepluskid svm

  首先讓我們瞻仰一下當今機器學習領域的執牛耳者:

這裡寫圖片描述

  這幅圖上的三人是當今機器學習界的執牛耳者。中間的是Geoffrey Hinton, 加拿大多倫多大學的教授,如今被聘為“Google大腦”的負責人。右邊的是Yann LeCun, 紐約大學教授,如今是Facebook人工智慧實驗室的主任。而左邊的大家都很熟悉,Andrew Ng,中文名吳恩達,斯坦福大學副教授,如今也是“百度大腦”的負責人與百度首席科學家。這三位都是目前業界炙手可熱的大牛,被網際網路界大鱷求賢若渴的聘請,足見他們的重要性。而他們的研究方向,則全部都是機器學習的子類–深度學習。

  從廣義上來說,機器學習是一種能夠賦予機器學習的能力以此讓它完成直接程式設計無法完成的功能的方法。但從實踐的意義上來說,機器學習是一種通過利用資料,訓練出模型,然後使用模型預測的一種方法。

這裡寫圖片描述

  機器學習無疑是當前資料分析領域的一個熱點內容。很多人在平時的工作中都或多或少會用到機器學習的演算法。從範圍上來說,機器學習跟模式識別,統計學習,資料探勘是類似的,同時,機器學習與其他領域的處理技術的結合,形成了計算機視覺、語音識別、自然語言處理等交叉學科。因此,一般說資料探勘時,可以等同於說機器學習。同時,我們平常所說的機器學習應用,應該是通用的,不僅僅侷限在結構化資料,還有影象,音訊等應用。

  機器學習的演算法很多。很多時候困惑人們都是,很多演算法是一類演算法,而有些演算法又是從其他演算法中延伸出來的。這裡,我們從兩個方面來給大家介紹,第一個方面是學習的方式,第二個方面是演算法的類似性。

一、機器學習方式

  根據資料型別的不同,對一個問題的建模有不同的方式。在機器學習或者人工智慧領域,人們首先會考慮演算法的學習方式。在機器學習領域,有幾種主要的學習方式。將演算法按照學習方式分類是一個不錯的想法,這樣可以讓人們在建模和演算法選擇的時候考慮能根據輸入資料來選擇最合適的演算法來獲得最好的結果。

1.1 監督學習

這裡寫圖片描述

  在監督式學習下,輸入資料被稱為“訓練資料”,每組訓練資料有一個明確的標識或結果,如對防垃圾郵件系統中“垃圾郵件”“非垃圾郵件”,對手寫數字識別中的“1“,”2“,”3“,”4“等。在建立預測模型的時候,監督式學習建立一個學習過程,將預測結果與“訓練資料”的實際結果進行比較,不斷的調整預測模型,直到模型的預測結果達到一個預期的準確率。監督式學習的常見應用場景如分類問題和迴歸問題。常見演算法有邏輯迴歸(Logistic Regression)和反向傳遞神經網路(Back Propagation Neural Network)

1.2 無監督學習

這裡寫圖片描述

  在非監督式學習中,資料並不被特別標識,學習模型是為了推斷出資料的一些內在結構。常見的應用場景包括關聯規則的學習以及聚類等。常見演算法包括Apriori演算法以及k-Means演算法。

1.3 半監督學習

這裡寫圖片描述

  在此學習方式下,輸入資料部分被標識,部分沒有被標識,這種學習模型可以用來進行預測,但是模型首先需要學習資料的內在結構以便合理的組織資料來進行預測。應用場景包括分類和迴歸,演算法包括一些對常用監督式學習演算法的延伸,這些演算法首先試圖對未標識資料進行建模,在此基礎上再對標識的資料進行預測。如圖論推理演算法(Graph Inference)或者拉普拉斯支援向量機(Laplacian SVM.)等。

1.4 強化學習

這裡寫圖片描述

  在這種學習模式下,輸入資料作為對模型的反饋,不像監督模型那樣,輸入資料僅僅是作為一個檢查模型對錯的方式,在強化學習下,輸入資料直接反饋到模型,模型必須對此立刻作出調整。常見的應用場景包括動態系統以及機器人控制等。常見演算法包括Q-Learning以及時間差學習(Temporal difference learning)


二、機器學習常用演算法

  根據演算法的功能和形式的類似性,我們可以把演算法分類,比如說基於樹的演算法,基於神經網路的演算法等等。當然,機器學習的範圍非常龐大,有些演算法很難明確歸類到某一類。而對於有些分類來說,同一分類的演算法可以針對不同型別的問題。這裡,我們儘量把常用的演算法按照最容易理解的方式進行分類。

2.1 迴歸演算法(有監督學習)

這裡寫圖片描述

  在大部分機器學習課程中,迴歸演算法都是介紹的第一個演算法。原因有兩個:一.迴歸演算法比較簡單,介紹它可以讓人平滑地從統計學遷移到機器學習中。二.迴歸演算法是後面若干強大演算法的基石,如果不理解迴歸演算法,無法學習那些強大的演算法。迴歸演算法有兩個重要的子類:即線性迴歸和邏輯迴歸。

  迴歸演算法是試圖採用對誤差的衡量來探索變數之間的關係的一類演算法。迴歸演算法是統計機器學習的利器。在機器學習領域,人們說起迴歸,有時候是指一類問題,有時候是指一類演算法,這一點常常會使初學者有所困惑。常見的迴歸演算法包括:最小二乘法(Ordinary Least Square),邏輯迴歸(Logistic Regression),逐步式迴歸(Stepwise Regression),多元自適應迴歸樣條(Multivariate Adaptive Regression Splines)以及本地散點平滑估計(Locally Estimated Scatterplot Smoothing)

  • 線性迴歸就是如何擬合出一條直線最佳匹配我所有的資料?一般使用“最小二乘法”來求解。“最小二乘法”的思想是這樣的,假設我們擬合出的直線代表資料的真實值,而觀測到的資料代表擁有誤差的值。為了儘可能減小誤差的影響,需要求解一條直線使所有誤差的平方和最小。最小二乘法將最優問題轉化為求函式極值問題。函式極值在數學上我們一般會採用求導數為0的方法。但這種做法並不適合計算機,可能求解不出來,也可能計算量太大。

  • 邏輯迴歸是一種與線性迴歸非常類似的演算法,但是,從本質上講,線型迴歸處理的問題型別與邏輯迴歸不一致。線性迴歸處理的是數值問題,也就是最後預測出的結果是數字,例如房價。而邏輯迴歸屬於分類演算法,也就是說,邏輯迴歸預測結果是離散的分類,例如判斷這封郵件是否是垃圾郵件,以及使用者是否會點選此廣告等等。

    實現方面的話,邏輯迴歸只是對對線性迴歸的計算結果加上了一個Sigmoid函式,將數值結果轉化為了0到1之間的概率(Sigmoid函式的影象一般來說並不直觀,你只需要理解對數值越大,函式越逼近1,數值越小,函式越逼近0),接著我們根據這個概率可以做預測,例如概率大於0.5,則這封郵件就是垃圾郵件,或者腫瘤是否是惡性的等等。從直觀上來說,邏輯迴歸是畫出了一條分類線,邏輯迴歸演算法劃出的分類線基本都是線性的(也有劃出非線性分類線的邏輯迴歸,不過那樣的模型在處理資料量較大的時候效率會很低)。

2.2 正則化方法

這裡寫圖片描述

  正則化方法是其他演算法(通常是迴歸演算法)的延伸,根據演算法的複雜度對演算法進行調整。正則化方法通常對簡單模型予以獎勵而對複雜演算法予以懲罰。常見的演算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator(LASSO),以及彈性網路(Elastic Net)。

2.3 基於例項的演算法

這裡寫圖片描述

  基於例項的演算法常常用來對決策問題建立模型,這樣的模型常常先選取一批樣本資料,然後根據某些近似性把新資料與樣本資料進行比較。通過這種方式來尋找最佳的匹配。因此,基於例項的演算法常常也被稱為“贏家通吃”學習或者“基於記憶的學習”。常見的演算法包括 k-Nearest Neighbor(KNN), 學習向量量化(Learning Vector Quantization, LVQ),以及自組織對映演算法(Self-Organizing Map , SOM)

2.4 決策樹演算法

  決策樹演算法根據資料的屬性採用樹狀結構建立決策模型, 決策樹模型常常用來解決分類和迴歸問題。常見的演算法包括:分類及迴歸樹(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 隨機森林(Random Forest), 多元自適應迴歸樣條(MARS)以及梯度推進機(Gradient Boosting Machine, GBM)

  一般的機器學習模型至少考慮兩個量:一個是因變數,也就是我們希望預測的結果,在這個例子裡就是小Y遲到與否的判斷。另一個是自變數,也就是用來預測小Y是否遲到的量。假設我把時間作為自變數,譬如我發現小Y所有遲到的日子基本都是星期五,而在非星期五情況下他基本不遲到。於是我可以建立一個模型,來模擬小Y遲到與否跟日子是否是星期五的概率。見下圖:

這裡寫圖片描述

  這樣的圖就是一個最簡單的機器學習模型,稱之為決策樹。

  當我們考慮的自變數只有一個時,情況較為簡單。如果把我們的自變數再增加一個。例如小Y遲到的部分情況時是在他開車過來的時候(你可以理解為他開車水平較臭,或者路較堵)。於是我可以關聯考慮這些資訊。建立一個更復雜的模型,這個模型包含兩個自變數與一個因變數。再更復雜一點,小Y的遲到跟天氣也有一定的原因,例如下雨的時候,這時候我需要考慮三個自變數。

  如果我希望能夠預測小Y遲到的具體時間,我可以把他每次遲到的時間跟雨量的大小以及前面考慮的自變數統一建立一個模型。於是我的模型可以預測值,例如他大概會遲到幾分鐘。這樣可以幫助我更好的規劃我出門的時間。在這樣的情況下,決策樹就無法很好地支撐了,因為決策樹只能預測離散值。我們可以用線型迴歸方法建立這個模型。

  如果我把這些建立模型的過程交給電腦。比如把所有的自變數和因變數輸入,然後讓計算機幫我生成一個模型,同時讓計算機根據我當前的情況,給出我是否需要遲出門,需要遲幾分鐘的建議。那麼計算機執行這些輔助決策的過程就是機器學習的過程。

2.5 貝葉斯方法

這裡寫圖片描述

  貝葉斯方法演算法是基於貝葉斯定理的一類演算法,主要用來解決分類和迴歸問題。常見演算法包括:樸素貝葉斯演算法,平均單依賴估計(Averaged One-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN)。

2.6 基於核的演算法(有監督學習)

這裡寫圖片描述

  基於核的演算法中最著名的莫過於支援向量機(SVM)了。 基於核的演算法把輸入資料對映到一個高階的向量空間, 在這些高階向量空間裡, 有些分類或者回歸問題能夠更容易的解決。 常見的基於核的演算法包括:支援向量機(Support Vector Machine, SVM), 徑向基函式(Radial Basis Function ,RBF), 以及線性判別分析(Linear Discriminate Analysis ,LDA)等。接下來將重點介紹一下SVM

· 支援向量機 SVM

  支援向量機演算法是誕生於統計學習界,同時在機器學習界大放光彩的經典演算法。

  支援向量機演算法從某種意義上來說是邏輯迴歸演算法的強化:通過給予邏輯迴歸演算法更嚴格的優化條件,支援向量機演算法可以獲得比邏輯迴歸更好的分類界線。但是如果沒有某類函式技術,則支援向量機演算法最多算是一種更好的線性分類技術。

  但是,通過跟高斯“核”的結合,支援向量機可以表達出非常複雜的分類界線,從而達成很好的的分類效果。“核”事實上就是一種特殊的函式,最典型的特徵就是可以將低維的空間對映到高維的空間。

  SVM方法是通過一個非線性對映p,把樣本空間對映到一個高維乃至無窮維的特徵空間中(Hilber空間),使得在原來的樣本空間中非線性可分的問題轉化為在特徵空間中的線性可分的問題。升維,就是把樣本向高維空間做對映,一般情況下這會增加計算的複雜性,甚至會引起“維數災難”,因而人們很少問津。但是作為分類、迴歸等問題來說,很可能在低維樣本空間無法線性處理的樣本集,在高維特徵空間中卻可以通過一個線性超平面實現線性劃分(或迴歸)。一般的升維都會帶來計算的複雜化,SVM方法巧妙地解決了這個難題:應用核函式的展開定理,就不需要知道非線性對映的顯式表示式;由於是在高維特徵 空間中建立線性學習機,所以與線性模型相比,不但幾乎不增加計算的複雜性,而且在某種程度上避免了“維數災難”.這一切要歸功於核函式的展開和計算理論。

  選擇不同的核函式,可以生成不同的SVM,常用的核函式有以下4種:
  - 性核函式K(x,y)=x·y
  - 多項式核函式K(x,y)=[(x·y)+1]d
  - 向基函式K(x,y)=exp(-|x-y|^2/d^2)
  - 層神經網路核函式K(x,y)=tanh(a(x·y)+b)

  如下圖所示,我們如何在二維平面劃分出一個圓形的分類界線?在二維平面可能會很困難,但是通過“核”可以將二維空間對映到三維空間,然後使用一個線性平面就可以達成類似效果。也就是說,二維平面劃分出的非線性分類界線可以等價於三維平面的線性分類界線。於是,我們可以通過在三維空間中進行簡單的線性劃分就可以達到在二維平面中的非線性劃分效果。

待分類資料

已分類資料

  支援向量機是一種數學成分很濃的機器學習演算法(相對的,神經網路則有生物科學成分)。在演算法的核心步驟中,有一步證明,即將資料從低維對映到高維不會帶來最後計算複雜性的提升。於是,通過支援向量機演算法,既可以保持計算效率,又可以獲得非常好的分類效果。因此支援向量機在90年代後期一直佔據著機器學習中最核心的地位,基本取代了神經網路演算法。直到現在神經網路藉著深度學習重新興起,兩者之間才又發生了微妙的平衡轉變。

2.7 聚類演算法(無監督學習)

這裡寫圖片描述

  聚類,就像迴歸一樣,有時候人們描述的是一類問題,有時候描述的是一類演算法。聚類演算法通常按照中心點或者分層的方式對輸入資料進行歸併。簡單來說,聚類演算法就是計算種群中的距離,根據距離的遠近將資料劃分為多個族群,所以的聚類演算法都試圖找到資料的內在結構,以便按照最大的共同點將資料進行歸類。常見的聚類演算法包括 k-Means演算法以及期望最大化演算法(Expectation Maximization, EM)。

2.8 關聯規則學習

這裡寫圖片描述

  關聯規則學習通過尋找最能夠解釋資料變數之間關係的規則,來找出大量多元資料集中有用的關聯規則。常見演算法包括 Apriori演算法和Eclat演算法等。

2.9 人工神經網路 ANN(有監督學習)

  神經網路(也稱之為人工神經網路,ANN)演算法是80年代機器學習界非常流行的演算法,不過在90年代中途衰落。現在,攜著“深度學習”之勢,神經網路重灌歸來,重新成為最強大的機器學習演算法之一。

  神經網路的誕生起源於對大腦工作機理的研究。早期生物界學者們使用神經網路來模擬大腦。機器學習的學者們使用神經網路進行機器學習的實驗,發現在視覺與語音的識別上效果都相當好。在BP演算法(加速神經網路訓練過程的數值演算法)誕生以後,神經網路的發展進入了一個熱潮。BP演算法的發明人之一是前面介紹的機器學習大牛Geoffrey Hinton。

  人工神經網路是機器學習的一個龐大的分支,有幾百種不同的演算法,通常用於解決分類和迴歸問題。(其中深度學習就是其中的一類演算法,我們會單獨討論),重要的人工神經網路演算法包括:感知器神經網路(Perceptron Neural Network), 反向傳遞(Back Propagation),Hopfield網路,自組織對映(Self-Organizing Map, SOM)。學習向量量化(Learning Vector Quantization, LVQ)

  具體說來,神經網路的學習機理是什麼?簡單來說,就是分解與整合。在著名的Hubel-Wiesel試驗中,學者們研究貓的視覺分析機理是這樣的。

這裡寫圖片描述

  比方說,一個正方形,分解為四個折線進入視覺處理的下一層中。四個神經元分別處理一個折線。每個折線再繼續被分解為兩條直線,每條直線再被分解為黑白兩個面。於是,一個複雜的影象變成了大量的細節進入神經元,神經元處理以後再進行整合,最後得出了看到的是正方形的結論。這就是大腦視覺識別的機理,也是神經網路工作的機理。

  讓我們看一個簡單的神經網路的邏輯架構。在這個網路中,分成輸入層,隱藏層,和輸出層。輸入層負責接收訊號,隱藏層負責對資料的分解與處理,最後的結果被整合到輸出層。每層中的一個圓代表一個處理單元,可以認為是模擬了一個神經元,若干個處理單元組成了一個層,若干個層再組成了一個網路,也就是”神經網路”。

這裡寫圖片描述

  上圖描述的是一個目前研究最為成熟Shallow 結構的神經網路(只含有單層隱藏層神經元的結構)。第一層為輸入層 (input layer ),第二層稱為隱藏層 ( hidden layer ),最後一層為輸出層( output layer )。神經元之間都是由低層出發,終止於高層神經元的一條有向邊進行連線,每條邊都有自己的權重。每個神經元都是一個計算單元,如在Feed-forward neural network 中,除輸入層神經元外,每個神經元為一個計算單元,可以通過一個計算函式 f() 來表示,函式的具體形式可以自己定義,現在用的較多的是 感知器計算神經元,如果你對感知器有所瞭解的話,理解起來會容易很多。 可以計算此時神經元所具有的能量值,當該值超過一定閥值的時候神經元的狀態就會發生改變,神經元只有兩種狀態,啟用或未啟用。在實際的人工神經網路中,一般是用一種概率的方式去表示神經元是否處於啟用狀態,可以用 h(f) 來表示,f 代表神經元的能量值,h(f) 代表該能量值使得神經元的狀態發生改變的概率有多大,能量值越大,處於啟用狀態的概率就越高。到這部分你已經接觸到了關於神經網路的幾個基本術語,下面用更加規範的符號來表示,神經元的啟用值(activations) f() ,表示計算神經元的能量值, 神經元的啟用狀態 h(f) ,h 表示啟用函式。


在神經網路中,每個處理單元事實上就是一個邏輯迴歸模型,邏輯迴歸模型接收上層的輸入,把模型的預測結果作為輸出傳輸到下一個層次。通過這樣的過程,神經網路可以完成非常複雜的非線性分類。

  下圖會演示神經網路在影象識別領域的一個著名應用,這個程式叫做LeNet,是一個基於多個隱層構建的神經網路。通過LeNet可以識別多種手寫數字,並且達到很高的識別精度與擁有較好的魯棒性。

這裡寫圖片描述

  右下方的方形中顯示的是輸入計算機的影象,方形上方的紅色字樣“answer”後面顯示的是計算機的輸出。左邊的三條豎直的影象列顯示的是神經網路中三個隱藏層的輸出,可以看出,隨著層次的不斷深入,越深的層次處理的細節越低,例如層3基本處理的都已經是線的細節了。LeNet的發明人就是前文介紹過的機器學習的大牛Yann LeCun。

  大約二三十年前,Neural Network曾經是ML領域特別火熱的一個方向,但是後來確慢慢淡出了,進入90年代,神經網路的發展進入了一個瓶頸期。其主要原因是儘管有BP演算法的加速,神經網路的訓練過程仍然很困難。因此90年代後期支援向量機(SVM)演算法取代了神經網路的地位。
  
  原因包括以下幾個方面:
  1. 比較容易過訓練,引數比較難確定;
  2. 訓練速度比較慢,在層次比較少(小於等於3)的情況下效果並不比其它方法更優;

  所以中間有大約20多年的時間,神經網路被關注很少,這段時間基本上由SVM和Boosting演算法主導。但是,Hinton堅持下來並最終(和Bengio、Yann.lecun等)提成了一個實際可行的Deep Learning框架。

2.10 深度學習

這裡寫圖片描述

  雖然深度學習這四字聽起來頗為高大上,但其理念卻非常簡單,就是傳統的神經網路發展到了多隱藏層的情況。

  在上文介紹過,自從90年代以後,神經網路已經消寂了一段時間。但是BP演算法的發明人Geoffrey Hinton一直沒有放棄對神經網路的研究。由於神經網路在隱藏層擴大到兩個以上,其訓練速度就會非常慢,因此實用性一直低於支援向量機。2006年,Geoffrey Hinton在科學雜誌《Science》上發表了一篇文章,論證了兩個觀點:

  1.多隱層的神經網路具有優異的特徵學習能力,學習得到的特徵對資料有更本質的刻畫,從而有利於視覺化或分類;
  2.深度神經網路在訓練上的難度,可以通過“逐層初始化” 來有效克服。

  通過這樣的發現,不僅解決了神經網路在計算上的難度,同時也說明了深層神經網路在學習上的優異性。從此,神經網路重新成為了機器學習界中的主流強大學習技術。同時,具有多個隱藏層的神經網路被稱為深度神經網路,基於深度神經網路的學習研究稱之為深度學習。

  由於深度學習的重要性質,在各方面都取得極大的關注,按照時間軸排序,有以下四個標誌性事件值得一說:

  1. 2012年6月,《紐約時報》披露了Google Brain專案,這個專案是由Andrew Ng和Map-Reduce發明人Jeff Dean共同主導,用16000個CPU Core的平行計算平臺訓練一種稱為“深層神經網路”的機器學習模型,在語音識別和影象識別等領域獲得了巨大的成功。Andrew Ng就是文章開始所介紹的機器學習的大牛。
  2. 2012年11月,微軟在中國天津的一次活動上公開演示了一個全自動的同聲傳譯系統,講演者用英文演講,後臺的計算機一氣呵成自動完成語音識別、英中機器翻譯,以及中文語音合成,效果非常流暢,其中支撐的關鍵技術是深度學習;
  3. 2013年1月,在百度的年會上,創始人兼CEO李彥巨集高調宣佈要成立百度研究院,其中第一個重點方向就是深度學習,併為此而成立深度學習研究院(IDL)。
  4. 2013年4月,《麻省理工學院技術評論》雜誌將深度學習列為2013年十大突破性技術(Breakthrough Technology)之首。

深度學習的發展熱潮

  神經網路研究領域領軍者Hinton在2006年提出了神經網路Deep Learning演算法,使神經網路的能力大大提高,向支援向量機發出挑戰。Deep Learning假設神經網路是多層的,首先用RestrictedBoltzmann Machine(非監督學習)學習網路的結構,然後再通過Back Propagation(監督學習)學習網路的權值。

  深度學習演算法是對人工神經網路的發展。 在近期贏得了很多關注, 深度學習試圖建立大得多也複雜得多的神經網路。很多深度學習的演算法是半監督式學習演算法,用來處理存在少量未標識資料的大資料集。常見的深度學習演算法包括:受限波爾茲曼機(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷積網路(Convolutional Network), 堆疊式自動編碼器(Stacked Auto-encoders)。

  總之,deep learning能夠得到更好地表示資料的feature,同時由於模型的層次、引數很多,capacity足夠,因此,模型有能力表示大規模資料,所以對於影象、語音這種特徵不明顯(需要手工設計且很多沒有直觀物理含義)的問題,能夠在大規模訓練資料上取得更好的效果。此外,從模式識別特徵和分類器的角 度,deep learning框架將feature和分類器結合到一個框架中,用資料去學習feature,在使用中減少了手工設計feature的巨大工作量(這是目前工業界工程師付出努力最多的方面),因此,不僅僅效果可以更好,而且,使用起來也有很多方便之處。


Deep Learning與傳統的神經網路異同:

  • 相同點: Deep Learning採用了神經網路相似的分層結構,系統由包括輸入層、隱層(多層)、輸出層組成的多層網路,只有相鄰層節點之間有連線,同一層以及跨層節點之間相互無連線,每一層可以看作是一個Logistic Regression模型;這種分層結構,是比較接近人類大腦的結構的。

  • 不同點:而為了克服神經網路訓練中的問題,DL採用了與神經網路很不同的訓練機制。傳統神經網路中,採用的是Back Propagation的方式進行,簡單來講就是採用迭代的演算法來訓練整個網路,隨機設定初值,計算當前網路的輸出,然後根據當前輸出和label之間的 差去改變前面各層的引數,直到收斂(整體是一個梯度下降法)。而DeepLearning整體上是一個Layer-Wise的訓練機制。這樣做的原因是因為,如果採用Back Propagation的機制,對於一個Deep Network(7層以上),殘差傳播到最前面的層已經變得太小,出現所謂的Gradient Diffusion。

2.11 降低維度演算法(無監督學習)

這裡寫圖片描述

  像聚類演算法一樣,降低維度演算法試圖分析資料的內在結構,不過降低維度演算法是以非監督學習的方式試圖利用較少的資訊來歸納或者解釋資料。這類演算法可以用於高維資料的視覺化或者用來簡化資料以便監督式學習使用。常見的演算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘迴歸(Partial Least Square Regression,PLS), Sammon對映,多維尺度(Multi-Dimensional Scaling, MDS), 投影追蹤(Projection Pursuit)等。

  其主要特徵是將資料從高維降低到低維層次。在這裡,維度其實表示的是資料的特徵量的大小,例如,房價包含房子的長、寬、面積與房間數量四個特徵,也就是維度為4維的資料。可以看出來,長與寬事實上與面積表示的資訊重疊了,例如面積=長 × 寬。通過降維演算法我們就可以去除冗餘資訊,將特徵減少為面積與房間數量兩個特徵,即從4維的資料壓縮到2維。於是我們將資料從高維降低到低維,不僅利於表示,同時在計算上也能帶來加速。

  剛才說的降維過程中減少的維度屬於肉眼可視的層次,同時壓縮也不會帶來資訊的損失(因為資訊冗餘了)。如果肉眼不可視,或者沒有冗餘的特徵,降維演算法也能工作,不過這樣會帶來一些資訊的損失。但是,降維演算法可以從數學上證明,從高維壓縮到的低維中最大程度地保留了資料的資訊。因此,使用降維演算法仍然有很多的好處。

  降維演算法的主要作用是壓縮資料與提升機器學習其他演算法的效率。通過降維演算法,可以將具有幾千個特徵的資料壓縮至若干個特徵。另外,降維演算法的另一個好處是資料的視覺化,例如將5維的資料壓縮至2維,然後可以用二維平面來可視。降維演算法的主要代表是PCA演算法(即主成分分析演算法)。

2.12 整合演算法

這裡寫圖片描述

  整合演算法用一些相對較弱的學習模型獨立地就同樣的樣本進行訓練,然後把結果整合起來進行整體預測。整合演算法的主要難點在於究竟整合哪些獨立的較弱的學習模型以及如何把學習結果整合起來。這是一類非常強大的演算法,同時也非常流行。常見的演算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆疊泛化(Stacked Generalization, Blending),梯度推進機(Gradient Boosting Machine, GBM),隨機森林(Random Forest)。