<div id="cnblogs_post_body" class="blogpost-body"><h1 id="機器學習的分類與主要算法對比">機器學習的分類與主要算法對比</h1> <p>http://blog.csdn.net/sinat_27554409/article/details/72823984</p> <p>重要引用:<a href="https://www.coursera.org/learn/machine-learning" target="_blank">Andrew Ng Courera Machine Learning</a>;<a href="http://www.cnblogs.com/subconscious/p/4107357.html" target="_blank">從機器學習談起</a>;<a href="https://wenku.baidu.com/view/999fa58c4431b90d6d85c727.html" target="_blank">關於機器學習的討論</a>;<a href="http://www.ctocio.com/hotnews/15919.html" target="_blank">機器學習常見算法分類彙總</a>;<a href="http://yann.lecun.com/exdb/lenet/" target="_blank">LeNet Homepage</a>;<a href="http://blog.pluskid.org/?page_id=683" target="_blank">pluskid svm</a></p> <p> 首先讓咱們瞻仰一下當今機器學習領域的執牛耳者:</p> <p><img title="" src="http://img.blog.csdn.net/20170531220003913?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 這幅圖上的三人是當今機器學習界的執牛耳者。中間的是Geoffrey Hinton, 加拿大多倫多大學的教授,現在被聘爲「Google大腦」的負責人。右邊的是Yann LeCun, 紐約大學教授,現在是Facebook人工智能實驗室的主任。而左邊的你們都很熟悉,Andrew Ng,中文名吳恩達,斯坦福大學副教授,現在也是「百度大腦」的負責人與百度首席科學家。這三位都是目前業界煊赫一時的大牛,被互聯網界大鱷求賢若渴的聘請,足見他們的重要性。而他們的研究方向,則所有都是機器學習的子類–深度學習。</p> <p> 從廣義上來講,機器學習是一種可以賦予機器學習的能力以此讓它完成直接編程沒法完成的功能的方法。但從實踐的意義上來講,機器學習是一種經過利用數據,訓練出模型,而後使用模型預測的一種方法。</p> <p><img title="" src="http://img.blog.csdn.net/20170531213805461?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 機器學習無疑是當前數據分析領域的一個熱點內容。不少人在平時的工做中都或多或少會用到機器學習的算法。從範圍上來講,機器學習跟模式識別,統計學習,數據挖掘是相似的,同時,機器學習與其餘領域的處理技術的結合,造成了計算機視覺、語音識別、天然語言處理等交叉學科。所以,通常說數據挖掘時,能夠等同於說機器學習。同時,咱們日常所說的機器學習應用,應該是通用的,不只僅侷限在結構化數據,還有圖像,音頻等應用。</p> <p> 機器學習的算法不少。不少時候困惑人們都是,不少算法是一類算法,而有些算法又是從其餘算法中延伸出來的。這裏,咱們從兩個方面來給你們介紹,第一個方面是學習的方式,第二個方面是算法的相似性。</p> <h2 id="一機器學習方式"><a name="t1"></a>1、機器學習方式</h2> <p> 根據數據類型的不一樣,對一個問題的建模有不一樣的方式。在機器學習或者人工智能領域,人們首先會考慮算法的學習方式。在機器學習領域,有幾種主要的學習方式。將算法按照學習方式分類是一個不錯的想法,這樣可讓人們在建模和算法選擇的時候考慮能根據輸入數據來選擇最合適的算法來得到最好的結果。</p> <h3 id="11-監督學習"><a name="t2"></a>1.1 監督學習</h3> <p><img title="" src="http://img.blog.csdn.net/20170531204235682?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 在監督式學習下,輸入數據被稱爲「訓練數據」,每組訓練數據有一個明確的標識或結果,如對防垃圾郵件系統中「垃圾郵件」「非垃圾郵件」,對手寫數字識別中的「1「,」2「,」3「,」4「等。在創建預測模型的時候,監督式學習創建一個學習過程,將預測結果與「訓練數據」的實際結果進行比較,不斷的調整預測模型,直到模型的預測結果達到一個預期的準確率。監督式學習的常見應用場景如分類問題和迴歸問題。常見算法有邏輯迴歸(Logistic Regression)和反向傳遞神經網絡(Back Propagation Neural Network)</p> <h3 id="12-無監督學習"><a name="t3"></a>1.2 無監督學習</h3> <p><img title="" src="http://img.blog.csdn.net/20170531204318011?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 在非監督式學習中,數據並不被特別標識,學習模型是爲了推斷出數據的一些內在結構。常見的應用場景包括關聯規則的學習以及聚類等。常見算法包括Apriori算法以及k-Means算法。</p> <h3 id="13-半監督學習"><a name="t4"></a>1.3 半監督學習</h3> <p><img title="" src="http://img.blog.csdn.net/20170531204408246?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 在此學習方式下,輸入數據部分被標識,部分沒有被標識,這種學習模型能夠用來進行預測,可是模型首先須要學習數據的內在結構以便合理的組織數據來進行預測。應用場景包括分類和迴歸,算法包括一些對經常使用監督式學習算法的延伸,這些算法首先試圖對未標識數據進行建模,在此基礎上再對標識的數據進行預測。如圖論推理算法(Graph Inference)或者拉普拉斯支持向量機(Laplacian SVM.)等。</p> <h3 id="14-強化學習"><a name="t5"></a>1.4 強化學習</h3> <p><img title="" src="http://img.blog.csdn.net/20170531204855013?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 在這種學習模式下,輸入數據做爲對模型的反饋,不像監督模型那樣,輸入數據僅僅是做爲一個檢查模型對錯的方式,在強化學習下,輸入數據直接反饋到模型,模型必須對此馬上做出調整。常見的應用場景包括動態系統以及機器人控制等。常見算法包括Q-Learning以及時間差學習(Temporal difference learning)</p> <hr> <h2 id="二機器學習經常使用算法"><a name="t6"></a>2、機器學習經常使用算法</h2> <p> 根據算法的功能和形式的相似性,咱們能夠把算法分類,好比說基於樹的算法,基於神經網絡的算法等等。固然,機器學習的範圍很是龐大,有些算法很難明確歸類到某一類。而對於有些分類來講,同一分類的算法能夠針對不一樣類型的問題。這裏,咱們儘可能把經常使用的算法按照最容易理解的方式進行分類。</p> <h3 id="21-迴歸算法有監督學習"><a name="t7"></a>2.1 迴歸算法(有監督學習)</h3> <p><img title="" src="http://img.blog.csdn.net/20170531205907749?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 在大部分機器學習課程中,迴歸算法都是介紹的第一個算法。緣由有兩個:一.迴歸算法比較簡單,介紹它可讓人平滑地從統計學遷移到機器學習中。二.迴歸算法是後面若干強大算法的基石,若是不理解迴歸算法,沒法學習那些強大的算法。迴歸算法有兩個重要的子類:即線性迴歸和邏輯迴歸。</p> <p> 迴歸算法是試圖採用對偏差的衡量來探索變量之間的關係的一類算法。迴歸算法是統計機器學習的利器。在機器學習領域,人們提及迴歸,有時候是指一類問題,有時候是指一類算法,這一點經常會使初學者有所困惑。常見的迴歸算法包括:最小二乘法(Ordinary Least Square),邏輯迴歸(Logistic Regression),逐步式迴歸(Stepwise Regression),多元自適應迴歸樣條(Multivariate Adaptive Regression Splines)以及本地散點平滑估計(Locally Estimated Scatterplot Smoothing)</p> <ul> <li> <p>線性迴歸就是如何擬合出一條直線最佳匹配我全部的數據?通常使用「最小二乘法」來求解。「最小二乘法」的思想是這樣的,假設咱們擬合出的直線表明數據的真實值,而觀測到的數據表明擁有偏差的值。爲了儘量減少偏差的影響,須要求解一條直線使全部偏差的平方和最小。最小二乘法將最優問題轉化爲求函數極值問題。函數極值在數學上咱們通常會採用求導數爲0的方法。但這種作法並不適合計算機,可能求解不出來,也可能計算量太大。</p> </li> <li> <p>邏輯迴歸是一種與線性迴歸很是相似的算法,可是,從本質上講,線型迴歸處理的問題類型與邏輯迴歸不一致。線性迴歸處理的是數值問題,也就是最後預測出的結果是數字,例如房價。而邏輯迴歸屬於分類算法,也就是說,邏輯迴歸預測結果是離散的分類,例如判斷這封郵件是不是垃圾郵件,以及用戶是否會點擊此廣告等等。</p> <p>實現方面的話,邏輯迴歸只是對對線性迴歸的計算結果加上了一個Sigmoid函數,將數值結果轉化爲了0到1之間的機率(Sigmoid函數的圖像通常來講並不直觀,你只須要理解對數值越大,函數越逼近1,數值越小,函數越逼近0),接着咱們根據這個機率能夠作預測,例如機率大於0.5,則這封郵件就是垃圾郵件,或者腫瘤是不是惡性的等等。從直觀上來講,邏輯迴歸是畫出了一條分類線,邏輯迴歸算法劃出的分類線基本都是線性的(也有劃出非線性分類線的邏輯迴歸,不過那樣的模型在處理數據量較大的時候效率會很低)。</p> </li> </ul> <h3 id="22-正則化方法"><a name="t8"></a>2.2 正則化方法</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210242051?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 正則化方法是其餘算法(一般是迴歸算法)的延伸,根據算法的複雜度對算法進行調整。正則化方法一般對簡單模型予以獎勵而對複雜算法予以懲罰。常見的算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator(LASSO),以及彈性網絡(Elastic Net)。</p> <h3 id="23-基於實例的算法"><a name="t9"></a>2.3 基於實例的算法</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210107595?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 基於實例的算法經常用來對決策問題創建模型,這樣的模型經常先選取一批樣本數據,而後根據某些近似性把新數據與樣本數據進行比較。經過這種方式來尋找最佳的匹配。所以,基於實例的算法經常也被稱爲「贏家通吃」學習或者「基於記憶的學習」。常見的算法包括 k-Nearest Neighbor(KNN), 學習矢量量化(Learning Vector Quantization, LVQ),以及自組織映射算法(Self-Organizing Map , SOM)</p> <h3 id="24-決策樹算法"><a name="t10"></a>2.4 決策樹算法</h3> <p> 決策樹算法根據數據的屬性採用樹狀結構創建決策模型, 決策樹模型經常用來解決分類和迴歸問題。常見的算法包括:分類及迴歸樹(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)</p> <p> 通常的機器學習模型至少考慮兩個量:一個是因變量,也就是咱們但願預測的結果,在這個例子裏就是小Y遲到與否的判斷。另外一個是自變量,也就是用來預測小Y是否遲到的量。假設我把時間做爲自變量,譬如我發現小Y全部遲到的日子基本都是星期五,而在非星期五狀況下他基本不遲到。因而我能夠創建一個模型,來模擬小Y遲到與否跟日子是不是星期五的機率。見下圖:</p> <p><img title="" src="http://img.blog.csdn.net/20170531224754213?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 這樣的圖就是一個最簡單的機器學習模型,稱之爲決策樹。</p> <p> 當咱們考慮的自變量只有一個時,狀況較爲簡單。若是把咱們的自變量再增長一個。例如小Y遲到的部分狀況時是在他開車過來的時候(你能夠理解爲他開車水平較臭,或者路較堵)。因而我能夠關聯考慮這些信息。創建一個更復雜的模型,這個模型包含兩個自變量與一個因變量。再更復雜一點,小Y的遲到跟天氣也有必定的緣由,例以下雨的時候,這時候我須要考慮三個自變量。</p> <p> 若是我但願可以預測小Y遲到的具體時間,我能夠把他每次遲到的時間跟雨量的大小以及前面考慮的自變量統一創建一個模型。因而個人模型能夠預測值,例如他大概會遲到幾分鐘。這樣能夠幫助我更好的規劃我出門的時間。在這樣的狀況下,決策樹就沒法很好地支撐了,由於決策樹只能預測離散值。咱們能夠用線型迴歸方法創建這個模型。</p> <p> 若是我把這些創建模型的過程交給電腦。好比把全部的自變量和因變量輸入,而後讓計算機幫我生成一個模型,同時讓計算機根據我當前的狀況,給出我是否須要遲出門,須要遲幾分鐘的建議。那麼計算機執行這些輔助決策的過程就是機器學習的過程。</p> <h3 id="25-貝葉斯方法"><a name="t11"></a>2.5 貝葉斯方法</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210514445?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 貝葉斯方法算法是基於貝葉斯定理的一類算法,主要用來解決分類和迴歸問題。常見算法包括:樸素貝葉斯算法,平均單依賴估計(Averaged One-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN)。</p> <h3 id="26-基於核的算法有監督學習"><a name="t12"></a>2.6 基於核的算法(有監督學習)</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210602803?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 基於核的算法中最著名的莫過於支持向量機(SVM)了。 基於核的算法把輸入數據映射到一個高階的向量空間, 在這些高階向量空間裏, 有些分類或者回歸問題可以更容易的解決。 常見的基於核的算法包括:支持向量機(Support Vector Machine, SVM), 徑向基函數(Radial Basis Function ,RBF), 以及線性判別分析(Linear Discriminate Analysis ,LDA)等。接下來將重點介紹一下SVM</p> <p><span style="color: #0099ff; font-family: 黑體; font-size: x-large">· 支持向量機 SVM</span></p> <p> 支持向量機算法是誕生於統計學習界,同時在機器學習界大放光彩的經典算法。</p> <p> 支持向量機算法從某種意義上來講是邏輯迴歸算法的強化:經過給予邏輯迴歸算法更嚴格的優化條件,支持向量機算法能夠得到比邏輯迴歸更好的分類界線。可是若是沒有某類函數技術,則支持向量機算法最多算是一種更好的線性分類技術。</p> <p> 可是,經過跟高斯「核」的結合,支持向量機能夠表達出很是複雜的分類界線,從而達成很好的的分類效果。「核」事實上就是一種特殊的函數,最典型的特徵就是能夠將低維的空間映射到高維的空間。</p> <p> SVM方法是經過一個非線性映射p,把樣本空間映射到一個高維乃至無窮維的特徵空間中(Hilber空間),使得在原來的樣本空間中非線性可分的問題轉化爲在特徵空間中的線性可分的問題。升維,就是把樣本向高維空間作映射,通常狀況下這會增長計算的複雜性,甚至會引發「維數災難」,於是人們不多問津。可是做爲分類、迴歸等問題來講,極可能在低維樣本空間沒法線性處理的樣本集,在高維特徵空間中卻能夠經過一個線性超平面實現線性劃分(或迴歸)。通常的升維都會帶來計算的複雜化,SVM方法巧妙地解決了這個難題:應用核函數的展開定理,就不須要知道非線性映射的顯式表達式;因爲是在高維特徵 空間中創建線性學習機,因此與線性模型相比,不但幾乎不增長計算的複雜性,並且在某種程度上避免了「維數災難」.這一切要歸功於核函數的展開和計算理論。</p> <p> 選擇不一樣的核函數,能夠生成不一樣的SVM,經常使用的核函數有如下4種: <br> - 性核函數K(x,y)=x·y <br> - 多項式核函數K(x,y)=[(x·y)+1]d <br> - 向基函數K(x,y)=exp(-|x-y|^2/d^2) <br> - 層神經網絡核函數K(x,y)=tanh(a(x·y)+b)</p> <p> 以下圖所示,咱們如何在二維平面劃分出一個圓形的分類界線?在二維平面可能會很困難,可是經過「核」能夠將二維空間映射到三維空間,而後使用一個線性平面就能夠達成相似效果。也就是說,二維平面劃分出的非線性分類界線能夠等價於三維平面的線性分類界線。因而,咱們能夠經過在三維空間中進行簡單的線性劃分就能夠達到在二維平面中的非線性劃分效果。</p> <p><img title="" src="http://img.blog.csdn.net/20170531221859939?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="待分類數據"></p> <p><img title="" src="http://img.blog.csdn.net/20170531222127285?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="已分類數據"></p> <p> 支持向量機是一種數學成分很濃的機器學習算法(相對的,神經網絡則有生物科學成分)。在算法的核心步驟中,有一步證實,即將數據從低維映射到高維不會帶來最後計算複雜性的提高。因而,經過支持向量機算法,既能夠保持計算效率,又能夠得到很是好的分類效果。所以支持向量機在90年代後期一直佔據着機器學習中最核心的地位,基本取代了神經網絡算法。直到如今神經網絡藉着深度學習從新興起,二者之間才又發生了微妙的平衡轉變。</p> <h3 id="27-聚類算法無監督學習"><a name="t13"></a>2.7 聚類算法(無監督學習)</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210708835?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 聚類,就像迴歸同樣,有時候人們描述的是一類問題,有時候描述的是一類算法。聚類算法一般按照中心點或者分層的方式對輸入數據進行歸併。簡單來講,聚類算法就是計算種羣中的距離,根據距離的遠近將數據劃分爲多個族羣,因此的聚類算法都試圖找到數據的內在結構,以便按照最大的共同點將數據進行歸類。常見的聚類算法包括 k-Means算法以及指望最大化算法(Expectation Maximization, EM)。</p> <h3 id="28-關聯規則學習"><a name="t14"></a>2.8 關聯規則學習</h3> <p><img title="" src="http://img.blog.csdn.net/20170531210806554?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 關聯規則學習經過尋找最可以解釋數據變量之間關係的規則,來找出大量多元數據集中有用的關聯規則。常見算法包括 Apriori算法和Eclat算法等。</p> <h3 id="29-人工神經網絡-ann有監督學習"><a name="t15"></a>2.9 人工神經網絡 ANN(有監督學習)</h3> <p> 神經網絡(也稱之爲人工神經網絡,ANN)算法是80年代機器學習界很是流行的算法,不過在90年代中途衰落。如今,攜着「深度學習」之勢,神經網絡重裝歸來,從新成爲最強大的機器學習算法之一。</p> <p> 神經網絡的誕生起源於對大腦工做機理的研究。早期生物界學者們使用神經網絡來模擬大腦。機器學習的學者們使用神經網絡進行機器學習的實驗,發如今視覺與語音的識別上效果都至關好。在BP算法(加速神經網絡訓練過程的數值算法)誕生之後,神經網絡的發展進入了一個熱潮。BP算法的發明人之一是前面介紹的機器學習大牛Geoffrey Hinton。</p> <p> 人工神經網絡是機器學習的一個龐大的分支,有幾百種不一樣的算法,一般用於解決分類和迴歸問題。(其中深度學習就是其中的一類算法,咱們會單獨討論),重要的人工神經網絡算法包括:感知器神經網絡(Perceptron Neural Network), 反向傳遞(Back Propagation),Hopfield網絡,自組織映射(Self-Organizing Map, SOM)。學習矢量量化(Learning Vector Quantization, LVQ)</p> <p> 具體說來,神經網絡的學習機理是什麼?簡單來講,就是分解與整合。在著名的Hubel-Wiesel試驗中,學者們研究貓的視覺分析機理是這樣的。</p> <p><img title="" src="http://img.blog.csdn.net/20170531220319660?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 比方說,一個正方形,分解爲四個折線進入視覺處理的下一層中。四個神經元分別處理一個折線。每一個折線再繼續被分解爲兩條直線,每條直線再被分解爲黑白兩個面。因而,一個複雜的圖像變成了大量的細節進入神經元,神經元處理之後再進行整合,最後得出了看到的是正方形的結論。這就是大腦視覺識別的機理,也是神經網絡工做的機理。</p> <p> 讓咱們看一個簡單的神經網絡的邏輯架構。在這個網絡中,分紅輸入層,隱藏層,和輸出層。輸入層負責接收信號,隱藏層負責對數據的分解與處理,最後的結果被整合到輸出層。每層中的一個圓表明一個處理單元,能夠認爲是模擬了一個神經元,若干個處理單元組成了一個層,若干個層再組成了一個網絡,也就是」神經網絡」。</p> <p><img title="" src="http://img.blog.csdn.net/20170531220613672?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 上圖描述的是一個目前研究最爲成熟Shallow 結構的神經網絡(只含有單層隱藏層神經元的結構)。第一層爲輸入層 (input layer ),第二層稱爲隱藏層 ( hidden layer ),最後一層爲輸出層( output layer )。神經元之間都是由低層出發,終止於高層神經元的一條有向邊進行鏈接,每條邊都有本身的權重。每一個神經元都是一個計算單元,如在Feed-forward neural network 中,除輸入層神經元外,每一個神經元爲一個計算單元,能夠經過一個計算函數 f() 來表示,函數的具體形式能夠本身定義,如今用的較多的是 感知器計算神經元,若是你對感知器有所瞭解的話,理解起來會容易不少。 能夠計算此時神經元所具備的能量值,當該值超過必定閥值的時候神經元的狀態就會發生改變,神經元只有兩種狀態,激活或未激活。在實際的人工神經網絡中,通常是用一種機率的方式去表示神經元是否處於激活狀態,能夠用 h(f) 來表示,f 表明神經元的能量值,h(f) 表明該能量值使得神經元的狀態發生改變的機率有多大,能量值越大,處於激活狀態的機率就越高。到這部分你已經接觸到了關於神經網絡的幾個基本術語,下面用更加規範的符號來表示,神經元的激活值(activations) f() ,表示計算神經元的能量值, 神經元的激活狀態 h(f) ,h 表示激活函數。</p> <p><span style="color: #0099ff; font-family: 黑體; font-size: medium"><br>在神經網絡中,每一個處理單元事實上就是一個邏輯迴歸模型,邏輯迴歸模型接收上層的輸入,把模型的預測結果做爲輸出傳輸到下一個層次。經過這樣的過程,神經網絡能夠完成很是複雜的非線性分類。</span></p> <p> 下圖會演示神經網絡在圖像識別領域的一個著名應用,這個程序叫作LeNet,是一個基於多個隱層構建的神經網絡。經過LeNet能夠識別多種手寫數字,而且達到很高的識別精度與擁有較好的魯棒性。</p> <p><img title="" src="http://img.blog.csdn.net/20170531221222695?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 右下方的方形中顯示的是輸入計算機的圖像,方形上方的紅色字樣「answer」後面顯示的是計算機的輸出。左邊的三條豎直的圖像列顯示的是神經網絡中三個隱藏層的輸出,能夠看出,隨着層次的不斷深刻,越深的層次處理的細節越低,例如層3基本處理的都已是線的細節了。LeNet的發明人就是前文介紹過的機器學習的大牛Yann LeCun。</p> <p> 大約二三十年前,Neural Network曾經是ML領域特別火熱的一個方向,可是後來確慢慢淡出了,進入90年代,神經網絡的發展進入了一個瓶頸期。其主要緣由是儘管有BP算法的加速,神經網絡的訓練過程仍然很困難。所以90年代後期支持向量機(SVM)算法取代了神經網絡的地位。 <br> <br> 緣由包括如下幾個方面: <br> 1. 比較容易過訓練,參數比較難肯定; <br> 2. 訓練速度比較慢,在層次比較少(小於等於3)的狀況下效果並不比其它方法更優;</p> <p> 因此中間有大約20多年的時間,神經網絡被關注不多,這段時間基本上由SVM和Boosting算法主導。可是,Hinton堅持下來並最終(和Bengio、Yann.lecun等)提成了一個實際可行的Deep Learning框架。</p> <h3 id="210-深度學習"><a name="t16"></a>2.10 深度學習</h3> <p><img title="" src="http://img.blog.csdn.net/20170531211026235?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 雖然深度學習這四字聽起來頗爲高大上,但其理念卻很是簡單,就是傳統的神經網絡發展到了多隱藏層的狀況。</p> <p> 在上文介紹過,自從90年代之後,神經網絡已經消寂了一段時間。可是BP算法的發明人Geoffrey Hinton一直沒有放棄對神經網絡的研究。因爲神經網絡在隱藏層擴大到兩個以上,其訓練速度就會很是慢,所以實用性一直低於支持向量機。2006年,Geoffrey Hinton在科學雜誌《Science》上發表了一篇文章,論證了兩個觀點:</p> <p> 1.多隱層的神經網絡具備優異的特徵學習能力,學習獲得的特徵對數據有更本質的刻畫,從而有利於可視化或分類; <br> 2.深度神經網絡在訓練上的難度,能夠經過「逐層初始化」 來有效克服。</p> <p> 經過這樣的發現,不只解決了神經網絡在計算上的難度,同時也說明了深層神經網絡在學習上的優異性。今後,神經網絡從新成爲了機器學習界中的主流強大學習技術。同時,具備多個隱藏層的神經網絡被稱爲深度神經網絡,基於深度神經網絡的學習研究稱之爲深度學習。</p> <p> 因爲深度學習的重要性質,在各方面都取得極大的關注,按照時間軸排序,有如下四個標誌性事件值得一說:</p> <p> 1. 2012年6月,《紐約時報》披露了Google Brain項目,這個項目是由Andrew Ng和Map-Reduce發明人Jeff Dean共同主導,用16000個CPU Core的並行計算平臺訓練一種稱爲「深層神經網絡」的機器學習模型,在語音識別和圖像識別等領域得到了巨大的成功。Andrew Ng就是文章開始所介紹的機器學習的大牛。 <br> 2. 2012年11月,微軟在中國天津的一次活動上公開演示了一個全自動的同聲傳譯系統,講演者用英文演講,後臺的計算機一鼓作氣自動完成語音識別、英中機器翻譯,以及中文語音合成,效果很是流暢,其中支撐的關鍵技術是深度學習; <br> 3. 2013年1月,在百度的年會上,創始人兼CEO李彥宏高調宣佈要成立百度研究院,其中第一個重點方向就是深度學習,併爲此而成立深度學習研究院(IDL)。 <br> 4. 2013年4月,《麻省理工學院技術評論》雜誌將深度學習列爲2013年十大突破性技術(Breakthrough Technology)之首。</p> <p><img title="" src="http://img.blog.csdn.net/20170531224014225?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="深度學習的發展熱潮"></p> <p> 神經網絡研究領域領軍者Hinton在2006年提出了神經網絡Deep Learning算法,使神經網絡的能力大大提升,向支持向量機發出挑戰。Deep Learning假設神經網絡是多層的,首先用RestrictedBoltzmann Machine(非監督學習)學習網絡的結構,而後再經過Back Propagation(監督學習)學習網絡的權值。</p> <p> 深度學習算法是對人工神經網絡的發展。 在近期贏得了不少關注, 深度學習試圖創建大得多也複雜得多的神經網絡。不少深度學習的算法是半監督式學習算法,用來處理存在少許未標識數據的大數據集。常見的深度學習算法包括:受限波爾茲曼機(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷積網絡(Convolutional Network), 堆棧式自動編碼器(Stacked Auto-encoders)。</p> <p> 總之,deep learning可以獲得更好地表示數據的feature,同時因爲模型的層次、參數不少,capacity足夠,所以,模型有能力表示大規模數據,因此對於圖像、語音這種特徵不明顯(須要手工設計且不少沒有直觀物理含義)的問題,可以在大規模訓練數據上取得更好的效果。此外,從模式識別特徵和分類器的角 度,deep learning框架將feature和分類器結合到一個框架中,用數據去學習feature,在使用中減小了手工設計feature的巨大工做量(這是目前工業界工程師付出努力最多的方面),所以,不只僅效果能夠更好,並且,使用起來也有不少方便之處。</p> <p><span style="color: #0099ff; font-family: 黑體; font-size: x-large"><br>Deep Learning與傳統的神經網絡異同:</span></p> <ul> <li> <p>相同點: Deep Learning採用了神經網絡類似的分層結構,系統由包括輸入層、隱層(多層)、輸出層組成的多層網絡,只有相鄰層節點之間有鏈接,同一層以及跨層節點之間相互無鏈接,每一層能夠看做是一個Logistic Regression模型;這種分層結構,是比較接近人類大腦的結構的。</p>html
</li> <li> <p>不一樣點:而爲了克服神經網絡訓練中的問題,DL採用了與神經網絡很不一樣的訓練機制。傳統神經網絡中,採用的是Back Propagation的方式進行,簡單來說就是採用迭代的算法來訓練整個網絡,隨機設定初值,計算當前網絡的輸出,而後根據當前輸出和label之間的 差去改變前面各層的參數,直到收斂(總體是一個梯度降低法)。而DeepLearning總體上是一個Layer-Wise的訓練機制。這樣作的緣由是由於,若是採用Back Propagation的機制,對於一個Deep Network(7層以上),殘差傳播到最前面的層已經變得過小,出現所謂的Gradient Diffusion。</p>算法
</li>編程
</ul> <h3 id="211-下降維度算法無監督學習"><a name="t17"></a>2.11 下降維度算法(無監督學習)</h3> <p><img title="" src="http://img.blog.csdn.net/20170531211135236?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 像聚類算法同樣,下降維度算法試圖分析數據的內在結構,不過下降維度算法是以非監督學習的方式試圖利用較少的信息來概括或者解釋數據。這類算法能夠用於高維數據的可視化或者用來簡化數據以便監督式學習使用。常見的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘迴歸(Partial Least Square Regression,PLS), Sammon映射,多維尺度(Multi-Dimensional Scaling, MDS), 投影追蹤(Projection Pursuit)等。</p> <p> 其主要特徵是將數據從高維下降到低維層次。在這裏,維度其實表示的是數據的特徵量的大小,例如,房價包含房子的長、寬、面積與房間數量四個特徵,也就是維度爲4維的數據。能夠看出來,長與寬事實上與面積表示的信息重疊了,例如面積=長 × 寬。經過降維算法咱們就能夠去除冗餘信息,將特徵減小爲面積與房間數量兩個特徵,即從4維的數據壓縮到2維。因而咱們將數據從高維下降到低維,不只利於表示,同時在計算上也能帶來加速。</p> <p> 剛纔說的降維過程當中減小的維度屬於肉眼可視的層次,同時壓縮也不會帶來信息的損失(由於信息冗餘了)。若是肉眼不可視,或者沒有冗餘的特徵,降維算法也能工做,不過這樣會帶來一些信息的損失。可是,降維算法能夠從數學上證實,從高維壓縮到的低維中最大程度地保留了數據的信息。所以,使用降維算法仍然有不少的好處。</p> <p> 降維算法的主要做用是壓縮數據與提高機器學習其餘算法的效率。經過降維算法,能夠將具備幾千個特徵的數據壓縮至若干個特徵。另外,降維算法的另外一個好處是數據的可視化,例如將5維的數據壓縮至2維,而後能夠用二維平面來可視。降維算法的主要表明是PCA算法(即主成分分析算法)。</p> <h3 id="212-集成算法"><a name="t18"></a>2.12 集成算法</h3> <p><img title="" src="http://img.blog.csdn.net/20170531211220055?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjc1NTQ0MDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="這裏寫圖片描述"></p> <p> 集成算法用一些相對較弱的學習模型獨立地就一樣的樣本進行訓練,而後把結果整合起來進行總體預測。集成算法的主要難點在於究竟集成哪些獨立的較弱的學習模型以及如何把學習結果整合起來。這是一類很是強大的算法,同時也很是流行。常見的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆疊泛化(Stacked Generalization, Blending),梯度推動機(Gradient Boosting Machine, GBM),隨機森林(Random Forest)。</p></div>網絡