人工智慧的前世今生
By 肖睿
2016年10月23日
404個月的記憶
零導論人工智慧(AI:Artificial Intelligence)是一種能夠模擬人類智能行為和思維過程的系統,是基於數學、邏輯學、腦科學與神經科學、知識論和認知科學、心理學、控制理論、計算機科學的交叉學科和應用。1956年達特茅斯會議上,正式確定了「人工智慧」這個術語,並以1947年提出的圖靈實驗作為測試一個人工智慧系統是否具備智能的標準。
一發展歷史和脈絡人類的發展史就是不斷地用工具複製和拓展自身能力的歷史:用兵器拓展了武力、用機械拓展了體力、用汽車拓展了移動能力、用互聯網拓展了信息能力等等。自從70年前計算機誕生,人類就希望用計算機來拓展人類的智力,但直到目前為止,計算機仍舊被稱為「最聰明的傻瓜」,因為它具備強大的計算能力和記憶能力,但只能依照人類給出的演算法和指令來解決固定的問題。下面,我們從策略、原理、模型三個維度來看一下人工智慧的發展歷史。
1策略:確定型演算法---學習型演算法
人們認識世界的方式有兩種:一種是通過把感知到的東西一般化(抽象和歸納),形成知識(事物的本質、原理和模型),然後通過具體化(推理和演繹)的方式去解決具體的問題。另外一種是通過感知到的東西直接推導或理解將要發生的東西,不需要經過中間的理論抽象和原理分析過程,所謂熟能生巧、讀書破萬卷下筆如有神的玩法。前一種往往被歸於理性思維,要知其所以然,也是傳統科學思維的主流思考路徑,很多理工科出身的人也非常習慣於這種思維方式。後一種往往被歸於直覺思維,只需要知道可能的結果,不需要知道所以然,不需要知道背後的原理和機制,對很多人的思維方式都是一個非常大的挑戰。
與此對應,人們使用計算機解決問題或者完成任務的方式也有兩種:一種是人們知道解決問題或完成任務的方法或步驟,通過編程的方式形成應用軟體,並通過應用軟體讓計算機按照設計好的指令工作,或者讓計算機按照抽象好的規則和推理來工作(專家系統方法),使用的是確定型演算法。另外一種是人們不知道解決問題或完成任務的方法或步驟,通過提供數據讓計算機自己學習規律來解決問題或完成任務,即機器學習的方法,使用的是學習型演算法。
可以說,在機器學習演算法出現之前,人工智慧演算法的主要思路是確定型演算法,人類需要先用自己的知識和智能來抽象問題、形成模型、找到解決方案,之後讓計算機進行計算和搜索,尤其是在符號推理時代。隨著大數據、計算能力問題的解決,隨著機器學習演算法的成熟,人工智慧已經進入了學習型演算法的時代,讓機器去學習而不是讓人先去學習。
2原理:符號推理---數學模型---統計學習在早期階段,人工智慧的實現原理主要是使用知識的符號表達和規則推理,頂峰是知識工程、專家系統、定理機器證明,併產生了專用於符號推理的Lisp語言和Prolog語言。這個方向在上個世紀80年代走到了頂峰,主要基於知識庫、規則庫和搜索演算法,也被稱為知識工程,在很多應用領域開發了專家系統,部分專家系統也取得了商業上的實用效果。但由於過分依賴於領域專家知識的抽取和表達,解決問題的領域也很窄,所以在上個世紀末符號推理方法逐步沒落,同時也讓人工智慧領域進入了一段較長的黑暗時期。
數學模型的思路其實不是來自於人工智慧本身,而是來自於信號處理和控制領域的應用,其主要思路是:通過數據來估計出一個數學模型,作為智能的抽象表達方式,並通過該數學模型來發現系統內部的結構知識,同時預測系統的狀態。這種方法的主要成果是模式識別(PR,Pattern Recognition)和早期的機器學習系統(ML,Machine Learning)。這種方法嚴重依賴於數學的抽象和表達能力,基於統計分布假設形成抽象模型,適合相對簡單的系統的模擬。
統計學習(Statistic Learning)的理論奠基於50年前的蘇聯,是繼歐幾里得的簡單代數幾何,萊布尼茲和牛頓的微積分後的第三代數學理論。統計學習與其說是現代人工智慧的主要方法,不如說是人工智慧領域中新一代數學方法的應用。不同於統計推理(以數學模型為核心、依賴於分布假設),統計學習無需分布假設,而是以演算法為核心、依賴於大數據和計算能力的新一代機器學習方法。
簡單地說,在把世界抽象成符號或數字之後,符號推理試圖運用規則和推理的手段獲得認識世界和解決問題的智能,數學模型試圖運用計算和推理的手段獲得認識世界和解決問題的智能,統計學習試圖運用計算和感知的手段獲得認識世界和解決問題的智能。
3模型:單體---連接---深度神經網路人工智慧有許多中實現路徑,但人工神經網路(ANN:Artificial Neural Network)是目前為止歷史最悠久也最主流的實現方式。人工神經網路也簡稱神經網路,是一種基於對生物腦的結構和機制的簡單模擬而形成的一種方法和工具。在人工智慧60年的發展歷程中,神經網路經歷了從單體,到連接,到深度網路三次高潮。
第一次高潮是赫布神經元模型的提出(1949年,認為神經元的本質是有多個樹突和一個軸突的神經細胞,而智能就體現在神經細胞的自主連接及其可塑性中),並於1958年用計算機實現了一個人工神經元模型,該模型由多個輸入、一個輸出、一個計算和激活函數組成,稱為感知機(Perceptron)。感知機是需要用數據訓練的,訓練的結果就是輸入的權重參數、輸出的權重參數,以及計算函數和激活函數的類型。1963年,明斯基在《感知機》中證明了以感知機演算法為基礎的人工神經元模型無法解決XOR問題(實際就是非線性可分問題),表達能力有限。自此之後,人工神經元理論進入了近20年的低潮期。
第二次高潮出現在1985年反向傳播演算法(BP,Back Propagation)出現之後的10年(實際上,由多個人工神經元組成的人工神經網路,以及BP演算法在1974年就已經出現,但沒有引起重視)。在此期間,符號推理方法繼續得到發展和應用,同時發端於模式識別領域的基於統計推理的機器學習方法也取得了比較大的發展和成果。此時的人工神經網路已經出現了多層的概念(每一層的神經元互相不進行連接,每個神經元只連接臨近層的神經元),但受限於計算能力和演算法策略,多數都是2-3層的淺層神經網路。
第三次高潮出現在2006年的深度神經網路(一般在6層以上)DNN(Deep Neural Network)。Hinton在2006年提出了深度置信網路(DBN,Deep Belief Network),每個神經元是一個受限玻爾茲曼機RBM,可以利用非監督貪心逐層訓練演算法,解決了DNN中無法優化的問題。得益於機器學習演算法進入了以統計學習理論為基礎的時代,同時得益於以分散式雲計算和GPU計算為代表的計算能力大幅提升,也得益於大數據時代數據資源的極大豐富,使得基於深度神經網路的深度學習成為可能,並由此使得人工智慧進入了深度學習(DL,Deep Learning)時代。
二目前進展和應用目前人工智慧是一門交叉學科,其主要的理論基礎來自於三個領域:機器學習(基於概率論和統計學習(不是數理統計)、線性代數、微積分),腦神經科學,計算機科學和數據科學。目前人工智慧的主流技術是基於機器學習演算法和深度神經網路架構的深度學習技術。
人工智慧、機器學習、深度學習之間的關係,是一種近似包含的關係。用一個不嚴密的比喻就是:
1)、人工智慧是一類使用計算機實現智能系統的方案和技術支撐,如同可以進行內容發布的網站(使用互聯網技術解決內容發布問題)。
2)、機器學習是一類解決智能問題的演算法,如同實現內容發布網站的Linux系的程序語言、中間件、操作系統、網路和硬體設備,解決大小不一的內容發布網站遇到的各種問題。
3)、深度學習是用很多層神經元構成的神經網路達到機器學習的功能,主要解決了特徵標記的問題,是一種基於大數據和大計算能力的實用的智能系統解決方案,如同一種基於Hadoop生態圈的適合大訪問量的門戶網站的實現方案,並且已經產生了一些典型的商業應用。目前,深度學習更像一門實驗科學,在一定理論和經驗指導下,是否會得到好的結果,取決於經驗技巧、靈感和運氣。
下面,對機器學習技術、深度學習技術進行簡單的梳理。
1機器學習智能的核心是學習,機器學習脫胎於信號處理領域的模式識別,尤其是圖像識別問題。機器學習演算法主要解決兩個問題:發現規律、做出預測,解決的是如何從數據中發現知識的問題。
早期的機器學習採用了比較多的傳統數學方法,尤其是數理統計方法,通過數據分布假設和數據集來建立數學模型,其哲學思想是傳統的自然哲學(世界是簡單有規律的,我們可以也需要先理解這個世界),路徑是從現象歸納出一般規律,之後從一般規律演繹出預測。由於真實問題往往很難服從於簡單的數據分布,所以早期的機器學習對實際問題的解決能力十分有限,也很難利用高維大數據資源。
現在的機器學習主要基於統計學習方法,通過數據集和基於計算機的迭代演算法來做出規律發現、統計預測,其哲學思想是複雜世界哲學(世界是複雜的,我們無法理解,但可以良好行動),路徑是從現象通過演算法作出預測,對其機制和原理保持黑盒的狀態。
機器學習系統的作用是輸入數據,輸出信息和知識,一般流程是:
1)、根據問題設計元數據方案,確定採用哪些維度的數據,並將數據進行預處理(量化、正交化、標準化、格式化等)。
2)、確定目標結果的衡量標準,主要是計算量和預測精度。
3)、做特徵工程:人工設計特徵,或者自動抽取特徵
4)、減少特徵數量:做特徵選擇或特徵降維
5)、確定機器學習演算法。
6)、如果是監督學習或半監督學習,需要標註數據。
7)、生成訓練數據集、驗證數據集、測試數據集。
8)、通過學習,獲得演算法模型。
9)、評估演算法模型。
10)、應用演算法模型,進行發現和預測。
機器學習的演算法總體上可以分為三種模型思路,這三種思路不是互斥的,在很多演算法中是混合使用的。第一種是幾何模型,把訓練數據映射為幾何空間中的點,然後使用線性代數的方法做出各種度量、優化。第二種是概率模型,使用概率論的方法來估計模型參數。第三種是邏輯模型。其中,幾何模型中使用的演算法比較多,這類演算法有三個主要核心要素:度量函數,損失函數,優化方法。
總體來說,機器學習演算法主要解決的問題包括五大類:分類(Classification,包括二元分類和多元分類)、回歸(Regression)、聚類(Clustering)、排序(Ranking)、降維(Dimensionality Reduction),其中最成熟的是分類演算法、回歸演算法(可以近似為多元分類演算法)、聚類演算法。從廣義上來看,人工神經網路也是一種機器學習演算法。
分類是模式識別領域要解決的主要問題,實際上就是把高維的特徵空間映射到一個低維的結果空間中,主要的經典演算法有:感知機(Perceptron)、k-近鄰(k-NN,k-Nearest Neighbor)、樸素貝葉斯法(NB,Na?ve Bayes)、決策樹(DT,Decision Tree)、最大熵模型(主要是邏輯回歸,LR,Logistics Regression)、支持向量機(SVM,Support Vector Machine)、Boost提升法、隱馬爾科夫模型(HMM, Hidden Markov Model)、條件隨機場(CRF,Conditional Random Field)、以及比較通用的期望極大演算法(EM,Expectation Maximization)。分類演算法是機器學習中使用頻率最高的演算法,也是統計學習理論應用的主要領域,屬於一種監督學習方法。
聚類是為了發現數據的內在結構(數據模式),可用於對數據進行標註和預處理,也用於從一群無標註的生數據中發現概念,屬於一種非監督學習方法。主要的經典演算法有:k均值(k-means),高斯混合模型(GMM,Gaussian Mixture Model),k中值(k-medoids),分層聚類(Hierarchical clusting),譜聚類(Spectral Clusting),其中k均值演算法可以說是其他四類演算法的基礎。 另外,基於用戶行為的協同過濾演算法(CF,Collaborative Filtering)和協同排序演算法(CR,Collaborative Ranking)也經常用於推薦系統中(有時數據條件比較好的時候,為了獲得更好的效果,也會結合內容過濾演算法(CF,Content Filtering))。
機器學習演算法本身對於數據量和計算能力要求不高,但大數據、高性能計算的確有助於產生更複雜的參數模型,從而產生更好的發現和預測結果。在工程實踐中,機器學習演算法在很多領域中都有成熟的演算法庫和軟體包,機器學習領域常用的語言和庫有MATLAB、R、Python,也有Java、C++等其他語言的使用,包括Apache的Mahout機器學習演算法庫,甚至SPSS和SAS應用軟體中也加入了大量的機器學習演算法。
2深度學習深度學習是一種基於深度神經網路的機器學習方法,構成神經網路的基本單元是人工神經元,並採用了分層的網路連接方式和感知機演算法,也被稱為深度機器學習。傳統的數據標註和特徵提取都是由人工完成的(一般稱為特徵工程師,或者採用眾包的模式),這種情況對於大數據量以及一些特殊應用(如:圖像識別)並不現實。而深度學習可以從大量未標註或者簡單標註的數據中自動抽取特徵信息(即非監督的特徵提取),不需要特徵工程師的投入,這也是它能夠在實際應用領域取得突破的重要因素,尤其是在數據量很大,並持續增長,或者需要實時反應,無法大規模地使用人工標註的系統中。可以說,數據的預處理或特徵自動抽取能力,是深度學習的核心優勢和主要應用場景。
從Geoffrey Hinton 2006年的論文算起,這一波深度學習浪潮剛剛10年,從深度學習演算法在ImageNet比賽中一鳴驚人算起,深度學習的流行也不過4年,2016年隨著AlphaGO的廣告效應和Google Tensor Flow的高調推出,深度學習正在成為學術界和工業界的明星技術。深度學習非常適合處理數據中包含結構信息、容易特徵化、採用分層處理的問題,目前在圖像識別、語音識別、自然語言理解(採用了非搜索演算法)、自動駕駛、推薦系統、系統預警等領域取得了接近於商用的巨大進步。 深度學習目前的應用場景還十分有限,而且演算法模型對場景和數據的以來比較嚴重,許多調參過程缺乏理論支撐,變成了完全依靠經驗和運氣的「黑科技」,這些都是需要突破的問題。
依賴于海量大數據,以及基於GPU和雲計算的大計算能力,深度學習實際上如同密碼領域的暴力破解一樣,通過訓練出極其龐大的複雜連續函數,來獲得智能系統。目前常用的深度學習的訓練策略包括監督學習、非監督學習、半監督學習、強化學習,前三種主要取決於訓練數據集的標註程度,也是主要的機器學習策略,而強化學習是一種依靠行為和環境之間的反饋結果自我循環學習的手段,也是深度學習常用的訓練策略。
目前深度學習使用的主要深度神經網路模型有三種,包括最常用的卷積神經網路(CNN,Conventional Neural Network)、遞歸神經網路(RNN,Recursive Neural Network),以及剛剛起步的脈衝神經網路(SNN,Spiking Neural Network,不同於感知機模型,其神經元是基於1952年提出的脈衝神經元模型)。
CNN採用了共享感受區域和權值的方式極大減少了需要選臉的參數個數,非常適合圖像、語音的應用領域。RNN引入了序列的概念,更容易用記憶來表達時序關係和因果關係,比較適合尋找和利用數據之間的關聯。現在還有一種現在比較常用的循環神經網路(RNN,Recurrent Neural Network),屬於遞歸神經網路的一種變體,外加其縮寫也是RNN,目前一般將其歸併為遞歸神經網路模型中。區別是,遞歸神經網路是空間維度展開,採用了樹形結構,而循環神經網路採用了時間維度展開,近些年取得了的較大發展和應用的循環神經網路模型是LSTM模型。
以上這些是基本的深度神經網路模型,在深度學習實踐中,根據不同的場景、不同的問題和任務、以及數據集大小和質量的不同,會在這些基礎的模型之上進行改進甚至重新設計。
深度學習的流程與機器學習系統的流程類似:
1)、根據問題設計元數據方案,確定採用哪些維度的數據,並將數據進行預處理(量化、正交化、標準化、格式化等)。
2)、確定目標結果的衡量標準,主要是計算量和預測精度。
3)、做特徵工程:人工設計特徵,或者自動抽取特徵
4)、減少特徵數量:做特徵選擇或特徵降維
5)、確定採用的深度神經網路模型類型。常用CNN、RNN或SNN,但也可以採用它們的變形,或直接重新定義新的模型結構。
6)、確定輸入變數數量,輸出變數數量,隱層數,每層神經元個數和類型,以及學習策略。
7)、生成訓練數據集、驗證數據集、測試數據集。
8)、直接設置,或者調整超級參數(包括:初始值、步進長度、錯誤誤差等)。
9)、通過學習,獲得演算法模型。
10)、用驗證數據集和步驟2的衡量標準來評估演算法模型。
11)、應用演算法模型,進行發現和預測。
以上是深度學習的一般步驟。由於深度學習目前還是一個以試錯方式進行演算法建模,缺乏理論基礎,經常採用經驗和直覺來進行,尤其步驟6中需要使用大量的調參技巧。在實際操作中,步驟3到步驟11一般會反覆迭代多次才能獲得滿意的演算法模型。
需要補充的是,人類的智能包括兩個層次,一個是感知(例如:聽、看、感覺),一個是認知(例如:推理、識別、創造)。目前比較成功的深度學習應用基本集中在感知層次,智能水平剛剛接近於青蛙、老鼠等低等生物的智能。
3深度學習應用工具深度學習的理論基礎並不完善,但其在工業上的應用已經能取得突破性的成果。在實際應用中,深度學習的效果一般取決於三個核心因素:數據的質量和大小,深度學習模型的設計和工具的適用性,使用人員的經驗和參與程度。
目前深度學習在工業界的應用工具和框架非常多,在github上就開源了幾十種,下面介紹常見的7種:
1)、Tensor Flow。
基於C++和Python實現,支持CUDA技術,提供多種語言介面,可以配置在能力跨度很大的計算平台上,目前已經支持多CPU和分散式訓練,是推出最晚,但影響最大的、發展最快的、也最有潛力的深度學習框架。Google於2011年推出了使用深度置信網路的深度學習系統DistBelief,用於解決Google應用中的語音識別和圖片搜索問題。由於DistBelief的使用完全依賴於Google內部的基礎設施,代碼無法開源和重用,於是Google在2015年推出了一個開源的、可移植的大規模機器學習框架Tensor Flow,在原生支持RNN的同時,目前也支持多種深度學習模型,並於2016年推出了基於分散式系統的版本,以及基於雲的深度學習服務。
2)、Caffe。
使用C++和Python實現,支持CUDA技術。是2013年BVLC(Berkeley Vision and Learning Center)開發的一個實現了CNN模型的深度學習框架。該工具由於率先採用了GPU上的CUDA技術,所以速度非常快,非常適合做特徵提取,尤其是圖像識別和語音識別,也是第一個主流的工業級應用框架。同時,由於代碼組織完善、封裝比較完善,社區也比較活躍、資料和案例比較豐富,也是比較適合深度學習領域,尤其是用於圖像識別領域的RNN模型的初學者入門工具。
3)、Theano。
使用python實現。是2008年由LISA推出的深度學習框架,支持大多數的機器學習演算法。該工具雖然速度比較慢,但由於理論性比較規範,對CNN、RNN模型都有原生支持,在國外教育領域普及率很高,很多機器學習課程都是基於Theano來進行開展的,同時很多深度學習框架和工具的思想也來源於它。有點類似於產生併流行於計算機語言教育領域的Pascal語言的定位,目前一般用來做研究使用。另外,目前業界也有很多基於Theano設計的深度學習框架,比較有名的是Keras(目前也支持Tensor Flow作為底層框架)。
4)、Deeplearning4j。
使用Java實現,是首個商用級別的基於Java的深度學習開源庫。是2014年由創業公司發布的一個面向生產環境和商業應用的高成熟度深度學習開源庫,可與Hadoop和Spark等大數據系統集成,即插即用。使用 Deeplearning4j的往往是傳統的數據挖掘業務,比如埃森哲、雪弗蘭、IBM等。
5)、CNTK。
使用C++實現,支持多機多CPU多GPU(CUDA技術)。是微軟推出的開源的、高性能、高靈活性和擴展性的深度學習工具,是比較底層也比較複雜,學習曲線比較高,也是目前性能最好的深度學習工具和框架,在github上使用CNN的性能測試一直都遙遙領先於其他深度學習工具和框架。
6)、Neuroph。
使用Java實現。是一個比Caffe更加簡單的神經網路框架,主要包括一個API庫和一個可視化圖形工具,適合初學者學習深度學習的基本理論和工作流程,但不適合做出真正工業級的項目。
7)、Torch。
使用Lua實現,支持CUDA技術,對CNN的支持非常好。是比較早期(2000年)出現的一個支持大部分機器學習演算法的科學技術框架,是一個比較成熟、在工業界應用比較廣泛的深度學習框架,目前最新的版本是Torch7,Facebook和Google都在使用這個工具進行深度學習項目研究和工業級的應用。
深度學習領域目前發展非常快速,新的工具和框架層出不窮,已有的工具和框架也在快速發展和融合,以上只是介紹了截止到2016年9月,本人使用或了解過的一些工具和框架,個人推薦的是Tensor Flow(持續關注、項目應用,RNN為主,對CNN也有支持)和Caffe(入門學習、研究應用,CNN為主)。另外,目前國內對於Theano(大學和研究所裡面使用較多)和DeepLearning4J(Hadoop生態圈有一些應用)也比較多,也值得關注。
最後,深度學習得益於大數據、計算能力提升、以及機器學習演算法的成熟,成為當前人工智慧領域的主流技術框架,目前在兩個方向上正在拓展:
1)、正在從解決特定問題到解決通用問題的拓展,即模型表達的泛化問題。這一點學術界和工業界都抱有很大的期望,但現實並不樂觀,基於DNN的深度學習的泛化能力比較差,還有很多理論和工程問題可能需要突破。
2)、感知和認知是智慧生命最主要的兩種智能表現,前者普遍存在於所有生命體的神經系統中,在深度學習中表現為以圖像識別、語音識別等模式識別為主的深度學習系統,後者則是人類大腦的主要智能表現方式,表現為RAM(推理和歸納、注意、記憶)問題。當前,深度學習在拓展感知領域應用的同時,也在向認知問題的應用和基礎研究拓展,這一點在很大程度上得益於腦神經科學的發展成果。
三發展趨勢和展望如同軟體工程領域的一句名言「沒有銀彈」,我相信在人工智慧領域裡面,深度學習也不是銀彈。深度學習相對於今天的人工智慧領域來說,很有可能就像牛頓的萬有引力定律對於物理學的地位一樣,只是一個初級的技術集合。幾十年之後會出現更多的、應用更廣的人工智慧技術,人工智慧領域還會出現越來越多的黑科技和應用創意。我們不妨展望一下:
1、增量學習。是通過對新增數據的預測,不斷自動矯正和調整現有演算法模型的一種模式,也稱為在線學習。
2、遷移學習。主要期望通過相近或相似領域成熟的參數模型來解決本領域的問題,增量學習可以近似地看作是一種遷移學習。目前已經是比較熱鬧的領域,但還沒有看到真正有效果的商業級應用。
3、人工智慧模型、知識庫、數據集會更加開源。人們不必從頭開始訓練一個模型,如同不用從一個0歲的嬰兒開始訓練、而是直接複製一個10歲的兒童開始訓練一樣。
4、多模式引擎。不但基於機器學習和深度學習,也融合了基於符號推理和認知科學的領域知識。
5、非馮諾依曼計算機。包括生物計算機和量子計算機等非硅基計算機,也包括類腦計算(結構層次模仿腦,器件層次逼近腦,智能層次超越腦)。
6、腦機介面。
以上1、2、3已經是目前研究的熱點,並在實驗室和小規模應用中取得了突破,而4、5、6還在處於理論、模型、發展路徑的摸索
本文轉自:知行齋
推薦閱讀:
※我和他的前世今生
※真的有前世今生嗎?
※三教聖人的前世今生(中)——周文王與後天八卦、周易
※婦女節的前世今生
※細數《紅高粱》的前世今生