機(jī)器學(xué)習(xí)簡(jiǎn)史和常用算法的梳理

原文:https://maoli.blog.csdn.net/article/details/115803729
符號(hào)主義學(xué)習(xí)
連接主義學(xué)習(xí)
貝葉斯算法
線性回歸與邏輯回歸
決策樹
SVM 支持向量機(jī)
KNN(K 近鄰算法)
聚類算法
隨機(jī)森林
Adaboost
神經(jīng)網(wǎng)絡(luò)
機(jī)器學(xué)習(xí)簡(jiǎn)史
機(jī)器學(xué)習(xí)是人工智能研究發(fā)展到一定階段的必然產(chǎn)物,本章僅從筆者的視角對(duì)機(jī)器學(xué)習(xí)這五十年來的發(fā)展進(jìn)行一個(gè)略述,疏漏錯(cuò)誤之處煩請(qǐng)指正。下面這幅漫畫中就展示了一個(gè)無(wú)奈的問題,三歲幼童可以輕松解決的問題卻需要最頂尖的科學(xué)家花費(fèi)數(shù)十年的光陰,或許機(jī)器學(xué)習(xí)離我們?cè)陔娪袄锟吹降哪菢舆€有很長(zhǎng)一段路要走。
知識(shí)來源于哪里?知識(shí)來源于進(jìn)化、經(jīng)驗(yàn)、文化和計(jì)算機(jī)。對(duì)于知識(shí)和計(jì)算機(jī)的關(guān)系,可以引用 Facebook 人工智能實(shí)驗(yàn)室負(fù)責(zé)人 Yann LeCun 的一段話:將來,世界上的大部分知識(shí)將由機(jī)器提取出來,并且將長(zhǎng)駐與機(jī)器中。而幫助計(jì)算機(jī)獲取新知識(shí),可以通過以下五種方法來實(shí)現(xiàn):
填充現(xiàn)存知識(shí)的空白
對(duì)大腦進(jìn)行仿真
對(duì)進(jìn)化進(jìn)行模擬
系統(tǒng)性的減少不確定性
注意新舊知識(shí)之間的相似點(diǎn)
對(duì)應(yīng)以上這幾種知識(shí)獲取的途徑,我們可以認(rèn)為常見的人工智能的方向有:
| 派別 | 起源 | 擅長(zhǎng)算法 |
|---|---|---|
| 符號(hào)主義(Symbolists) | 邏輯學(xué)、哲學(xué) | 逆演繹算法(Inverse deduction) |
| 聯(lián)結(jié)主義(Connectionists) | 神經(jīng)科學(xué) | 反向傳播算法(Backpropagation) |
| 進(jìn)化主義(Evolutionaries) | 進(jìn)化生物學(xué) | 基因編程(Genetic programming) |
| 貝葉斯派(Bayesians) | 統(tǒng)計(jì)學(xué) | 概率推理(Probabilistic inference) |
| Analogizer | 心理學(xué) | 核機(jī)器(Kernel machines) |
二十世紀(jì)五十年代:推理期
二十世紀(jì)五十年代到七十年代初,人工智能研究處于”推理期“,彼時(shí)人們以為只要能賦予機(jī)器邏輯推理的能力,機(jī)器就能具有智能。這一階段的代表性作品有 A. Newell 和 H. Simon 的“邏輯理論家”程序,該程序于 1952 年證明了羅素和懷特海的名著《數(shù)學(xué)原理》中的 38 條定理,在 1963 年證明了全部的 52 條定理。不過隨著時(shí)間的發(fā)展,人們漸漸發(fā)現(xiàn)僅具有邏輯推理能力是遠(yuǎn)遠(yuǎn)實(shí)現(xiàn)不了人工智能的。
二十世紀(jì)七十年代中期:知識(shí)期
從二十世紀(jì)七十年代中期開始,人工智能研究進(jìn)入了“知識(shí)期”,在這一時(shí)期,大量的專家系統(tǒng)問世,在很多應(yīng)用領(lǐng)域取得了大量成果。在本階段誕生的技術(shù)的一個(gè)鮮明的代表就是模式識(shí)別,它強(qiáng)調(diào)的是如何讓一個(gè)計(jì)算機(jī)程序去做一些看起來很“智能”的事情,例如識(shí)別“3”這個(gè)數(shù)字。而且在融入了很多的智慧和直覺后,人們也的確構(gòu)建了這樣的一個(gè)程序。從這個(gè)時(shí)代誕生的模式識(shí)別領(lǐng)域最著名的書之一是由 Duda & Hart 執(zhí)筆的“模式識(shí)別(Pattern Classification)”。對(duì)基礎(chǔ)的研究者來說,仍然是一本不錯(cuò)的入門教材。不過對(duì)于里面的一些詞匯就不要太糾結(jié)了,因?yàn)檫@本書已經(jīng)有一定的年代了,詞匯會(huì)有點(diǎn)過時(shí)。自定義規(guī)則、自定義決策,以及自定義“智能”程序在這個(gè)任務(wù)上,曾經(jīng)都風(fēng)靡一時(shí)。有趣的是筆者在下文中也會(huì)介紹如何用深度學(xué)習(xí)網(wǎng)絡(luò)去識(shí)別手寫的數(shù)字,有興趣的朋友可以去探究下使用模式識(shí)別與深度學(xué)習(xí)相比,同樣是識(shí)別手寫數(shù)字上的差異。
不過,專家系統(tǒng)面臨“知識(shí)工程瓶頸”,即由人來把知識(shí)總結(jié)出來再教給計(jì)算機(jī)是相當(dāng)困難的,于是人們開始考慮如果機(jī)器能夠自己學(xué)習(xí)知識(shí),該是一件多么美妙的事。
二十世紀(jì)八十年代:從樣例中學(xué)習(xí)
R.S.Michalski 等人將機(jī)器學(xué)習(xí)分為了“從樣例中學(xué)習(xí)”、“在問題求解和規(guī)劃中學(xué)習(xí)”、“通過觀察和發(fā)現(xiàn)學(xué)習(xí)”、“從指令中學(xué)習(xí)”等類別;E.A.Feigenbaum 等人在著作《人工智能手冊(cè)》中,則把機(jī)器學(xué)習(xí)劃分為了“機(jī)械學(xué)習(xí)”、“示教學(xué)習(xí)”、“類比學(xué)習(xí)”和“歸納學(xué)習(xí)”。機(jī)械學(xué)習(xí)又被稱為死記硬背式學(xué)習(xí),即把外界輸入的信息全部記錄下來,在需要時(shí)原封不動(dòng)地取出來使用,這實(shí)際上沒有進(jìn)行真正的學(xué)習(xí),僅僅是在進(jìn)行信息存儲(chǔ)和檢索;示教學(xué)習(xí)和類比學(xué)習(xí)類似于 R.S.Michalski 等人所說的從指令中學(xué)習(xí)和通過觀察和發(fā)現(xiàn)學(xué)習(xí)。歸納學(xué)習(xí)則相當(dāng)于從樣例中學(xué)習(xí),即從訓(xùn)練樣本中歸納出學(xué)習(xí)結(jié)果。二十世紀(jì)八十年代以來,被研究最多、應(yīng)用最廣的是“從樣例中學(xué)習(xí)”,也就是廣泛的歸納學(xué)習(xí),它涵蓋了監(jiān)督學(xué)習(xí)、無(wú)監(jiān)督學(xué)習(xí)等。
符號(hào)主義學(xué)習(xí)
在二十世紀(jì)八十年代,從樣例中學(xué)習(xí)的一大主流就是符號(hào)主義學(xué)習(xí),其代表包括決策樹和基于邏輯的學(xué)習(xí)。符號(hào)學(xué)習(xí)一個(gè)直觀的流程可以參考下圖:
典型的決策樹學(xué)習(xí)以信息論為基礎(chǔ),以信息熵的最小化為目標(biāo),直接模擬了人類對(duì)概念進(jìn)行判定的樹形流程?;谶壿嫷膶W(xué)習(xí)的著名代表是歸納邏輯程序設(shè)計(jì) Inductive Logic Programming,簡(jiǎn)稱 ILP,可以看做機(jī)器學(xué)習(xí)與邏輯程序設(shè)計(jì)的交叉。它使用一階邏輯,即謂詞邏輯來進(jìn)行知識(shí)表示,通過修改和擴(kuò)充邏輯表達(dá)式來完成對(duì)于數(shù)據(jù)的歸納。符號(hào)主義學(xué)習(xí)占據(jù)主流地位與前幾十年人工智能經(jīng)歷的推理期和知識(shí)期密切相關(guān),最后,可以來認(rèn)識(shí)幾位符號(hào)主義的代表人物:
連接主義學(xué)習(xí)
二十世紀(jì)九十年代中期之前,從樣例中學(xué)習(xí)的另一主流技術(shù)是基于神經(jīng)網(wǎng)絡(luò)的連接主義學(xué)習(xí)。下圖就是典型的神經(jīng)元、神經(jīng)網(wǎng)絡(luò)與著名的 BP 算法的示例。
與符號(hào)主義學(xué)習(xí)能產(chǎn)生明確的概念表示不同,連接主義學(xué)習(xí)產(chǎn)生的是黑箱模型,因此從知識(shí)獲取的角度來看,連接主義學(xué)習(xí)技術(shù)有明顯弱點(diǎn)。然而,BP 一直是被應(yīng)用的最廣泛的機(jī)器學(xué)習(xí)算法之一,在很多現(xiàn)實(shí)問題上發(fā)揮作用。連接主義學(xué)習(xí)的最大局限是其試錯(cuò)性。簡(jiǎn)單來說,其學(xué)習(xí)過程設(shè)計(jì)大量的參數(shù),而參數(shù)的設(shè)置缺乏理論指導(dǎo),主要靠手工調(diào)參;夸張一點(diǎn)來說,參數(shù)調(diào)節(jié)上失之毫厘,學(xué)習(xí)結(jié)果可能謬以千里。
二十世紀(jì)九十年代中期:統(tǒng)計(jì)學(xué)習(xí)
二十世紀(jì)九十年代中期,統(tǒng)計(jì)學(xué)習(xí)閃亮登場(chǎng)并且迅速占據(jù)主流舞臺(tái),代表性技術(shù)是支持向量機(jī)(Support Vector Machine)以及更一般的核方法(Kernel Methods)。正是由于連接主義學(xué)習(xí)技術(shù)的局限性凸顯,人們才把目光轉(zhuǎn)向以統(tǒng)計(jì)學(xué)習(xí)理論為直接支撐的統(tǒng)計(jì)學(xué)習(xí)技術(shù)。
二十一世紀(jì):深度學(xué)習(xí)
深度學(xué)習(xí)掀起的熱潮也許大過它本身真正的貢獻(xiàn),在理論和技術(shù)上并沒有太多的創(chuàng)新,只不過是由于硬件技術(shù)的革命,計(jì)算機(jī)的速度大大提高了,使得人們有可能采用原來復(fù)雜度很高的算法,從而得到比過去更精細(xì)的結(jié)果。
二十一世紀(jì)初,連接主義學(xué)習(xí)又卷土重來,掀起了以深度學(xué)習(xí)為名的熱潮。所謂深度學(xué)習(xí),狹義的說就是“很多層”的神經(jīng)網(wǎng)絡(luò)。在若干測(cè)試和競(jìng)賽上,尤其是涉及語(yǔ)音、圖像等復(fù)雜對(duì)象的應(yīng)用中,深度學(xué)習(xí)技術(shù)取得了優(yōu)越性能。之前的機(jī)器學(xué)習(xí)技術(shù)在應(yīng)用中要取得好的性能,對(duì)于使用者的要求較高。而深度學(xué)習(xí)技術(shù)涉及的模型復(fù)雜度非常高,以至于只要下功夫“調(diào)參”,把參數(shù)調(diào)節(jié)好,性能往往就好。深度學(xué)習(xí)雖然缺乏嚴(yán)格的理論基礎(chǔ),但是顯著降低了機(jī)器學(xué)習(xí)應(yīng)用者的門檻,為機(jī)器學(xué)習(xí)走向工程實(shí)踐帶來了便利。深度學(xué)習(xí)火熱的原因有:
數(shù)據(jù)大了,計(jì)算能力搶了,深度學(xué)習(xí)模型擁有大量參數(shù),若數(shù)據(jù)樣本少,則很容易過擬合。
由于人類進(jìn)入了大數(shù)據(jù)時(shí)代,數(shù)據(jù)儲(chǔ)量與計(jì)算設(shè)備都有了大發(fā)展,才使得連接主義學(xué)習(xí)技術(shù)煥發(fā)了又一春。
機(jī)器學(xué)習(xí)算法
算法基本上從功能或者形式上來分類。比如,基于樹的算法,神經(jīng)網(wǎng)絡(luò)算法。這是一個(gè)很有用的分類方式,但并不完美。因?yàn)橛性S多算法可以輕易地被分到兩類中去,比如說 Learning Vector Quantization 就同時(shí)是神經(jīng)網(wǎng)絡(luò)類的算法和基于實(shí)例的方法。正如機(jī)器學(xué)習(xí)算法本身沒有完美的模型一樣,算法的分類方法也沒有完美的。
常用算法
下面我們對(duì)機(jī)器學(xué)習(xí)中常見的算法及其特征與使用場(chǎng)景進(jìn)行簡(jiǎn)單梳理。
貝葉斯算法
貝葉斯算法是給予貝葉斯定理與特征條件獨(dú)立假設(shè)的監(jiān)督型分類方法,典型的算法有樸素貝葉斯、高斯樸素貝葉斯、多種名義樸素貝葉斯、平均單依賴估計(jì)、BBN、BN 等。該算法要求各特征間相互獨(dú)立,對(duì)于給出的待分類項(xiàng),求解在此項(xiàng)出現(xiàn)的條件下各個(gè)類別出現(xiàn)的概率,哪個(gè)最大,就認(rèn)為此待分類項(xiàng)屬于哪個(gè)類別。其典型的運(yùn)用場(chǎng)景包括了:
文本分類 疾病預(yù)測(cè) 檢測(cè) SNS 社區(qū)中不真實(shí)賬號(hào) 垃圾郵件過濾
線性回歸與邏輯回歸
線性回歸的目的在于找出某一變量與其他多個(gè)變量之間的定量關(guān)系,并且是線性關(guān)系;邏輯回歸則是將數(shù)據(jù)擬合到一個(gè) logit 函數(shù)(或者叫做 logistic 函數(shù))中,從而能夠完成對(duì)事件發(fā)生的概率進(jìn)行預(yù)測(cè)。線性回歸模型太簡(jiǎn)單,如果數(shù)據(jù)呈線性關(guān)系可采用;邏輯回歸相對(duì)來說模型更簡(jiǎn)單,好理解,實(shí)現(xiàn)起來,特別是大規(guī)模線性分類時(shí)比較方便。同樣的線性分類情況下,如果異常點(diǎn)較多的話,無(wú)法剔除,首先 LR,LR 中每個(gè)樣本都是有貢獻(xiàn)的,最大似然后會(huì)自動(dòng)壓制異常的貢獻(xiàn)。
決策樹
決策樹是利用訓(xùn)練數(shù)據(jù)集來構(gòu)造決策樹,用構(gòu)造好的決策樹對(duì)將來的新數(shù)據(jù)進(jìn)行分類的監(jiān)督型算法,典型的算法有 ID3、ID4、ID5、C4.0、C4.5、C5.0、CART 等,其常用于二元或者多元分類。該算法要求變量只能數(shù)值型、名稱型,其核心概念中涉及信息熵、信息增益,在構(gòu)造決策樹時(shí),實(shí)際上是選擇信息增益 Max 的屬性作為決策節(jié)點(diǎn);算法 C4.5 引入來信息增益率的概念。決策樹常用于以下場(chǎng)景:
金融行業(yè)用決策樹做貸款風(fēng)險(xiǎn)評(píng)估 保險(xiǎn)行業(yè)用決策樹做推廣預(yù)測(cè) 醫(yī)療行業(yè)用決策樹生成輔助診斷處置模型 用戶分級(jí)評(píng)估 分析對(duì)某種響應(yīng)可能性影響最大的因素,比如判斷具有什么特征的客戶流失概率更高 為其他模型篩選變量。決策數(shù)找到的變量是對(duì)目標(biāo)變量影響很大的變量。所以可以作為篩選變量的手段。
SVM 支持向量機(jī)
SVM 同樣是監(jiān)督型分類算法,基本想法就是求解能正確劃分訓(xùn)練樣本并且其幾何間隔最大化的超平面。線性支持向量機(jī)既可以解決線性可分問題,又可以解決線性不可分問題。其構(gòu)建過程如下:獲取訓(xùn)練輸入,將其映射至多維空間,使用回歸算法找到可最佳分離兩類輸入數(shù)據(jù)的超平面(超平面是一個(gè)在 n 維空間中將空間劃分為兩個(gè)半空間的一個(gè)平面)。一旦支持向量機(jī)完成了受訓(xùn),它就可以評(píng)估有關(guān)劃分超平面的新輸入數(shù)據(jù),并將劃分為其中一類,在 SVM 分類決策中起決定作用的是支持向量。
SVM 常用于模式識(shí)別領(lǐng)域中的文本識(shí)別,中文分類,人臉識(shí)別等;工程技術(shù)和信息過濾。
KNN(K 近鄰算法)
KNN 是監(jiān)督型分類算法,通過測(cè)量不同特征值之間的距離進(jìn)行分類。它的的思路是:如果一個(gè)樣本在特征空間中的 K 個(gè)最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個(gè)類別,則該樣本也屬于這個(gè)類別。K 通常是不大于 20 的整數(shù)。KNN 算法中,所選擇的鄰居都是已經(jīng)正確分類的對(duì)象。該方法在定類決策上只依據(jù)最鄰近的一個(gè)或者幾個(gè)樣本的類別來決定待分樣本所屬的類別。
KNN 要求事先要有正確樣本,算法比較簡(jiǎn)單,完全依賴于數(shù)據(jù),沒有數(shù)學(xué)模型,所以應(yīng)用在很簡(jiǎn)單的模型。其易于理解,易于實(shí)現(xiàn),無(wú)需估計(jì)參數(shù),無(wú)需訓(xùn)練;適合對(duì)稀有事件進(jìn)行分類,特別適合于多分類問題(multi-modal,對(duì)象具有多個(gè)類別標(biāo)簽),KNN 比 SVM 的表現(xiàn)要好。不過當(dāng)樣本不平衡時(shí),抗造能力差,并且計(jì)算量大。
KNN 的典型應(yīng)用場(chǎng)景譬如約會(huì)網(wǎng)站的數(shù)據(jù)分類,或者手寫數(shù)字識(shí)別。
聚類算法
聚類將數(shù)據(jù)集中的樣本劃分為若干個(gè)不相交的子集,每個(gè)子集可能對(duì)應(yīng)一個(gè)潛在的類別,這些類別對(duì)聚類算法是未知的。其典型算法有 K-means,LVQ,高斯混合聚類,密度聚類,層次聚類等。聚類算法不需要訓(xùn)練集。
隨機(jī)森林
隨機(jī)森林是監(jiān)督型分類算法,顧名思義,是用隨機(jī)的方式建立一個(gè)森林,森林里面有很多的決策樹組成,隨機(jī)森林的每一棵決策樹之間是沒有關(guān)聯(lián)的。在得到森林之后,當(dāng)有一個(gè)新的輸入樣本進(jìn)入的時(shí)候,就讓森林中的每一棵決策樹分別進(jìn)行一下判斷,看看這個(gè)樣本應(yīng)該屬于哪一類(對(duì)于分類算法),然后看看哪一類被選擇最多,就預(yù)測(cè)這個(gè)樣本為那一類。
隨機(jī)森林主要包含了采樣(有放回的采樣)與完全分裂(葉子節(jié)點(diǎn)要么無(wú)法再分裂,要么要么里面的所有樣本的都是指向的同一個(gè)分類)等步驟。隨機(jī)森林對(duì)多元公線性不敏感,結(jié)果對(duì)缺失數(shù)據(jù)和非平衡的數(shù)據(jù)比較穩(wěn)健,可以很好地預(yù)測(cè)多達(dá)幾千個(gè)解釋變量的作用;在數(shù)據(jù)集上表現(xiàn)良好,兩個(gè)隨機(jī)性的引入,使得隨機(jī)森林不容易陷入過擬合。
在當(dāng)前的很多數(shù)據(jù)集上,相對(duì)其他算法有著很大的優(yōu)勢(shì),兩個(gè)隨機(jī)性的引入,使得隨機(jī)森林具有很好的抗噪聲能力。它能夠處理很高維度(feature 很多)的數(shù)據(jù),并且不用做特征選擇,對(duì)數(shù)據(jù)集的適應(yīng)能力強(qiáng):既能處理離散型數(shù)據(jù),也能處理連續(xù)型數(shù)據(jù),數(shù)據(jù)集無(wú)需規(guī)范化。可生成一個(gè) Proximities=(pij)矩陣,用于度量樣本之間的相似性:, aij 表示樣本 i 和 j 出現(xiàn)在隨機(jī)森林中同一個(gè)葉子結(jié)點(diǎn)的次數(shù),N 隨機(jī)森林中樹的顆數(shù)。
在創(chuàng)建隨機(jī)森林的時(shí)候,對(duì) generlization error 使用的是無(wú)偏估計(jì),訓(xùn)練速度快,可以得到變量重要性排序(兩種:基于 OOB 誤分率的增加量和基于分裂時(shí)的 GINI 下降量,在訓(xùn)練過程中,能夠檢測(cè)到 feature 間的互相影響,容易做成并行化方法,實(shí)現(xiàn)比較簡(jiǎn)單。
Adaboost
Adaboost 是監(jiān)督型聚合式分類算法,和隨機(jī)森林有點(diǎn)像,區(qū)別在于隨機(jī)森林是并行,Adaboost 是串行,上一個(gè)分類器的結(jié)果放入下一個(gè)分類器。Adaboost 最后的分類器 YM 是由數(shù)個(gè)弱分類器(weak classifier)組合而成的,相當(dāng)于最后 m 個(gè)弱分類器來投票決定分類,而且每個(gè)弱分類器的話語(yǔ)權(quán) α 不一樣。
Adaboost 常用于二分類或多分類的應(yīng)用場(chǎng)景,用于做分類任務(wù)的 baseline 無(wú)腦化,簡(jiǎn)單,不會(huì) overfitting,不用調(diào)分類器。還可以用于特征選擇(feature selection)。并且 Boosting 框架用于對(duì) badcase 的修正,只需要增加新的分類器,不需要變動(dòng)原有分類器。
神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)算法模擬生物神經(jīng)網(wǎng)絡(luò),是一類模式匹配算法。一般分為輸入層、隱藏層、輸出層,隱藏層的層數(shù)根據(jù)算法需要來定,層數(shù)越多,模型越復(fù)雜,計(jì)算能力要求越高。對(duì)于輸入層和隱藏層,每一個(gè)神經(jīng)元代表輸入,經(jīng)過一系列計(jì)算得到輸出,將輸出作為下一層神經(jīng)元的輸入,以此類推,直到傳遞到輸出層。
神經(jīng)網(wǎng)絡(luò)可以充分逼近任意復(fù)雜的非線性關(guān)系;所有定量或定性的信息都等勢(shì)分布貯存于網(wǎng)絡(luò)內(nèi)的各神經(jīng)元,故有很強(qiáng)的魯棒性和容錯(cuò)性;采用并行分布處理方法,使得快速進(jìn)行大量運(yùn)算成為可能;可學(xué)習(xí)和自適應(yīng)不知道或不確定的系統(tǒng)。


Python“寶藏級(jí)”公眾號(hào)【Python之王】專注于Python領(lǐng)域,會(huì)爬蟲,數(shù)分,C++,tensorflow和Pytorch等等。
近 2年共原創(chuàng) 100+ 篇技術(shù)文章。創(chuàng)作的精品文章系列有:
日常收集整理了一批不錯(cuò)的?Python?學(xué)習(xí)資料,有需要的小伙可以自行免費(fèi)領(lǐng)取。
獲取方式如下:公眾號(hào)回復(fù)資料。領(lǐng)取Python等系列筆記,項(xiàng)目,書籍,直接套上模板就可以用了。資料包含算法、python、算法小抄、力扣刷題手冊(cè)和 C++ 等學(xué)習(xí)資料!
