一、人工智慧與機器學習
說到人工智慧,就不得不提圖靈測試。圖靈測試是阿蘭圖靈在1950年提出的一個關於機器是否能夠思考的著名實驗,測試某機器是否能表現出與人等價或無法區分的智慧。主要內容是:測試者與被測試者(一個人和一臺機器)隔開的情況下,通過一些裝置(如鍵盤)向被測試者隨意提問。 進行多次測試後,如果測試者不能確定出被測試者是人還是機器,那麼這臺機器就通過了測試,並被認為具有人類智慧。
通常我們認為一個智慧系統需要具有以下幾個能力:
- 語言能力–自然語言處理:能成功地用自然語言交流
- 記憶能力–知識表示:儲存它知道的或聽到的資訊
- 推理能力–自動推理:運用儲存的資訊來回答問題並推出新結論
- 學習能力–機器學習:適應新情況並檢測和預測模式
- 感知能力–計算機視覺:感知物體
- 規劃能力–自動規劃:根據資源制定執行策略
由此我們可以看出,機器學習是人工智慧的一個分支,它是人工智慧研究發展到一定階段的必然產物。
二、機器學習的發展
二十世紀五十年代到七十年代初,人工智慧研究處於”推理期“,人們認為只要能賦予機器邏輯推理能力,機器就具有智慧。
隨著研究向前發展,人們逐漸認識到,僅僅具有邏輯推理能力是遠遠實現不了人工智慧的。要使機器具有智慧,必須設法使機器擁有知識。
二十世紀七十年代中期開始,人工智慧研究進入了“知識期”,但人們又認識到,由人來把知識總結出來再教給計算機是非常困難的。有人想到,如果機器能夠自己學習知識就好了。
二十世紀八十年代是機器學習成為一個獨立的學科領域、各種機器學習技術百花初綻的時期。(實際上最早圖靈在1950年圖靈測試的文章中就曾提到機器學習的可能,五十年代到七十年代有一些機器學習的研究如基於神經網路的連線主義學習、感知機、基於邏輯表示的符號主義學習、以決策理論為基礎的學習技術、強化學習等。但機器學習獨立成為一個學科領域是在八十年代。)
這時候,人們把機器學習劃分為“機械學習”,“示教學習”,“類比學習”,“歸納學習”。
機械學習
死記硬背式學習,把外界輸入的資訊全部記錄下來,需要時原封不動地取出來使用,實際上沒有真正的學習,僅僅在進行資訊儲存與檢索。
示教學習
從指令中學習。
類比學習
通過觀察和發現學習。
歸納學習
從樣例中學習,即從訓練樣例中歸納出學習結果。歸納學習是被研究最多,應用最廣的,涵蓋了監督學習、無監督學習等。
二十世紀八十年代,歸納學習的主流是符號主義學習,其代表包括決策樹學習和基於邏輯的學習。典型的決策樹學習以資訊理論為基礎,以資訊熵的最小化為目標,直接模擬了人類對概念進行判定的樹形流程。基於邏輯的學習的著名代表是歸納邏輯程式設計,可以看作機器學習與邏輯程式設計的交叉,使用一階邏輯來進行知識表示,通過修改和擴充邏輯表示式來完成對資料的歸納。
二十世紀九十年代,歸納學習的主流是基於神經網路的連線主義學習。
二十世紀九十年代中期,歸納學習的主流是統計學習,其代表是支援向量機(SVM)以及更一般的“核方法(kernel methods)”。
二十一世紀初,連線主義學習又捲土重來,掀起以“深度學習”為名的熱潮。深度學習是指深層神經網路,它在語音、影像等複雜物件的應用中表現很好,效能優越。深度學習的流行一是因為大資料的發展,資料多了;二是因為計算機硬體的發展,計算能力強了。
三、機器學習的分類
機器學習中,有個定理叫“沒有免費午餐“定理(No Free Lunch Theorem,簡稱NFL定理)。內容是無論學習演算法a多聰明,學習演算法b多笨拙,它們的期望效能是相同的。簡而言之,就是沒有一個通用演算法可以完美解決所有問題,我們要根據具體問題來選擇合適的演算法。
根據訓練資料是否帶有標籤(label)資訊,把訓練資料中帶有標籤資訊的學習演算法稱為監督學習,訓練資料中不帶標籤資訊的學習演算法稱為無監督學習。
監督學習的代表是分類和迴歸,常見演算法有線性迴歸、logistic迴歸、決策樹、貝葉斯分類、支援向量機、神經網路等。
無監督學習的代表是聚類,常見演算法有主成分分析(PCA)、K均值聚類(K-Means)等。
在後面的文章中會一一介紹這些演算法和它們的程式碼實現,儘量給出不調包只用python程式碼實現和使用流行的機器學習框架實現兩種實現方案。因為前者可以更好地理解演算法,後者可以更快更方便地使用演算法。 當然除了這些演算法,還有資料預處理、模型的效能度量、超引數的調整等等。