我們都知道CPU適合串行計算,GPU適合大規模並行計算,大腦的硬件就像是一個GPU,大腦的操作系統和所有算法都是運行在GPU上,在高層次的計算上則模擬CPU的串行計算模式,如算術計算,代數計算,自然語言操作等等。所以某種程度來說,這些高層次的計算是模擬計算(用矩陣計算模擬各種單元操作),所以速度很慢; 而像圖像識別,語音識別是非模擬計算其速度很快。這個和現代計算機剛好相反操作系統和大多數算法運行在CPU上,GPU目前還主要是輔助設備,主要做一些特定的並行加速,在CPU上串行計算是非模擬計算,並行計算相當於模擬計算。如果操作系統和算法都需要運行在GPU上,那麼無疑相當於重造一個IT行業,這也是人工智能困難的原因之一,還有一個更爲關鍵的問題是人腦的操作系統和算法都是可學習程序( Learnable Programs),所有的程序編碼(除生來自帶的程序外)都來自於世界數據,人腦真正做到了數據即程序,你只需要數據就可以學會開車而不需要人爲的程序編碼,這就是人腦算法的強大之處
圖靈完備性
談到計算機,那麼在計算機領域中有一個非常重要的理論叫圖靈完備性,簡單來講,圖靈完備性是指一臺機器給予足夠的時間、內存及必要的指令,便可解決任意可計算問題。那麼什麼是可計算問題?就要談到可計算性理論(Computability Theory),這個比較複雜了,這裏不展開說,大家可以參考文章[1]。很多時候我們可以先有某種直覺,知道其理論的內容及適應範圍,將他作爲公理使用,而不必一開始就去深究,等我們真正需要理解其內容的時候再認真研究。簡單來說,圖靈機(Universal Turing Machine)是目前人類能製造的機器中計算能力的上限,我們使用的計算機除了內存不是無窮大的,基本可看作爲一臺圖靈機,任何機器或語言如果滿足圖靈完備性,那麼他們都是可以相互模擬的,即圖靈等價,即A能計算的問題,B同樣能計算;圖靈等價是一個非常重要特點。
爲什麼說在人工智能裏圖靈完備性非常重要?人工智能的目標之一,就是模擬人類大腦,意味着人腦能計算的問題,計算機也必須能計算,即要求人腦是圖靈完備的,如果沒有這個基礎那麼人工智能是不可能實現的(這裏需要補充的是人腦發明或發現了圖靈機,那麼說明人腦能模擬圖靈機,我們只需要圖靈機能模擬人腦便可)。沒有理由相信人腦的計算能力超越了圖靈機,超越了人類能製造的機器中計算能力的上限,因爲人本身也是物理系統,人也是人造出來的,這個問題涉及到丘奇-圖靈論題(Church–Turing thesis),大家可以參考
大腦中的操作系統(意識?)
操作系統的核心即資源管理(Resource Management),對於大腦而言,人的身體的所有部分都是我們所謂的資源,比如我們的手,腳,眼睛,鼻子,耳朵,甚至大腦本身,區別在於有些是輸入系統,有些是輸出系統,有些是決策系統; 類比於計算機,眼睛,耳朵等等感知設備就像計算機的攝像頭,麥克風,手腳是輸出系統,如喇叭,顯示器,這個不太形象,如果形象一點的話就像無人車的輪子,方向盤。所以當我們討論所謂意識的時候我們在討論什麼?我們的意識能感知和控制所有身體能被感知和控制的資源,這個和操作系統有什麼差別?所以當我們討論意識的時候,實際上我們在討論資源感知和控制的核心,所以意識是操作系統嗎?這個問題留給各位去思考了,權當拋磚引玉
對比現代操作系統,我們會發現操作系統非常複雜,其構成動輒上百萬行代碼甚至上千萬行代碼,所以我們沒有理由覺得大腦裏面這個操作系統很簡單,如果僅僅簡單看作等價的話,那麼模擬人腦裏面這個操作系統就相當於從零再造一個Linux操作系統,這個有多困難顯而易見
大腦是算法的集合
我們很難感覺到自己其實一直在使用算法,因爲這些算法就嵌在我們的大腦中作爲很自然的存在,因爲太自然和普遍了,所以我們忽視了他們,比如我問: 1+1=? 大多數人都能快速回答出結果,但是如果我問:18943 + 78439 = ? 會不會發現我們會利用規則去計算,3+9=?是否需要進位?4+3=?是否需要加進位值?… 當我們一個序列完成下來的時候,我們才能回答這個多位數加法問題。其實當我們去細究加法問題的時候會發現他很複雜,這個涉及到皮亞諾公理與數學分析的內容,參考 ,那麼計算機(模型)能學會加法嗎?可以參考本人的另一篇博客 學習算法的算法 神經編碼器-解釋器,另一個問題是: 如果我們使用的模型是非圖靈完備的,能學習到加法嗎?這個問題並非顯而易見,實際上很多帶遞歸循環的(圖靈完備?不知道該怎麼定義)算法,用模型去學習都要求圖靈完備,不然這個模型無法學會這個算法,僅僅只能逼近
對大腦而言很簡單的東西,用算法實現會發現非常困難,作爲算法從業者,在很多方面深有體會,如人臉檢測或者通用物體檢測(Object Detection),這裏面近幾年也誕生了許許多多的算法,如Faster-RCNN,SSD,Yolo 等等[9-10],人看這個世界,當我們靜止不動的時候望着馬路,車,行人從我們面前移動而過,我們能自然的感覺到運動物體,大腦可能根本沒經過大量的運算,這個算法有點像背景差分算法或者幀間差分算法,我們會發現這個背景差分算法在動物中普遍存在,如我們熟悉的青蛙,如果蟲子不動的話,青蛙無法感知到蟲子,還有鳥類,魚類,一些爬行動物等等,這個算法的優點是運算量非常小,但無法感知到長期靜止的物體,這也是爲什麼在大腦不發達的動物中很容易被察覺到的原因。
到人類這裏就變得比較複雜了,人類有靜態物體感知的能力即模式感知,和上面的SSD很像,先檢測出物體的位置再通過注意力機制分離該區域圖像並作物體相似度識別,即我們說的物體識別(Object Recognition),對於運動的物體人類可以通過模式相似性不斷跟蹤這個物體,即物體跟蹤(Object Tracking)及物體分割(Object Segmentation),人腦物體檢測本身自帶描述邊界這個功能,這些都是人腦中的基本功能
回過頭來,我們發現現在我們所謂用Deep Learning學習到的許許多多的模型本質上還是在模擬人大腦中的算法,所以爲什麼說大腦是算法的集合
目前的算法有部分沒有大腦裏面的算法精度這麼高,原因在於人腦感知物體用了很多的信息和算法,如三維信息,上下文環境信息(Context, 如衣着,步態等等),如相似度匹配(基於模型的),運動估計(如:卡爾曼濾波),所以這也是爲什麼解決重識別(Re-ID)問題都夠嗆的原因,僅僅根據局部相似度是不夠的,以上是感知的算法,實際我們仍然是模擬大腦的算法,雖然我們還沒有人腦感知算法這麼完美,但是也在逐步的逼近,我們離解決這些問題也並不遙遠了
可以看到關於感知這個問題我們用算法在模擬大腦所做的,各種各樣的複雜,而且高度模塊化與高度集成。既然感知都這麼複雜,沒有理由相信,作爲人類智能的皇冠:人腦中認知,如自然語言理解,邏輯推理,幾何建模等等能力算法很簡單,尤其是自然語言理解。所以我們要多少模型才能學習到這些算法?
可學習的程序與程序合成
談到人工智能,就會談到機器學習,不管傳統的機器學習算法,如Logistic Regression,SVM,Decision Tree,Random Forests,Neural Networks等等,也好,還是現在很火的Deep Learning,本質都是找到一個程序或者我們常說的機器學習模型(Model),給定輸入得到要求的輸出,只是這個輸出可能並不是確定的,所以機器學習模型可以被定義爲“可學習的程序(Learnable Programs)”,即給定數據和約束條件計算得到我們希望的程序[2]
這樣的程序這裏簡單概括爲兩種形式,第一種爲黑盒程序或模型,即我們並不知道其原理,只能根據有限的輸入輸出測試該程序或模型的正確性,即我們只能證僞而不能證明其正確性; 第二種爲白盒程序,這個時候程序或模型能返回給我們確定的合成程序,我們能夠很容易證明或證僞該合成程序的正確性。其實我們的大腦裏同時有這兩種功能,比如識別物體,識別人臉等等,我們難以寫出一個判斷邏輯讓其他人去驗證,但是當給我們某個熟悉的人的照片時,我們能確切識別出這個人是誰; 相對的,對於加減乘除等等數學題目,我們能寫出邏輯讓其他人判斷邏輯的正確性,這個是可驗證的。所以爲什麼說大腦裏有這兩種功能,而且我們可以基本總結出一個規律:大腦裏的黑盒程序可能是最基礎的功能,處理着直覺運算,如人臉識別,物體識別,開車等等,白盒程序是更高級的功能,關聯到我們的認知,如自然語言理解,邏輯推斷等等
目前,我們只能學習屬於所有可能程序的一個非常狹窄和特定子集的程序,如我們上面所說的物體檢測,跟蹤等等。但是,如果我們可以以模塊化和可重複使用的方式學習任何程序怎麼辦?這個和現代計算機非常的像了,區別只在於大腦所運行的程序和硬件是一體的,大腦中的程序要求是必須是可學習的,所以當我們把 操作系統+可學習程序 與 意識+學習能力 聯繫在一起的時候,我們會發現大腦可能本身就是一個複雜的計算機,只是他是由大自然通過上億年演化出來的,且我們生下來就有了完整的操作系統與部分基礎程序功能(人類智能的大多數內容都來自天生,類比普通程序與操作系統)[4],這個和我們的剛買的電腦或手機有點相似,裏面有基礎的操作系統和一些必要的系統程序
大腦中的圖靈完備結構
大自然很神奇,能夠從無到有的將動物及人演化出來,我們會發現生物基本都形成了運行的閉環(不閉環的生命體肯定存在,但是他們會在演化中被大自然不斷的刪除)。一個問題是生物智能的演化有邊界嗎?我們知道在演化中哺乳動物,如小鼠的大腦中都演化出了兩種基礎結構,即:新皮層與海馬體,這兩種結構是人類目前密集研究的,也出了很多有意義的論文,海馬體有點像計算機中的運行內存,不過其數據存取方式是Content-Based,而不是Address-Based,新皮層相對海馬體而言更加簡潔,主要是各種特定功能的程序:如人臉辨識,語音識別,語言理解等等,這也是爲什麼新皮層很大的原因,存儲了非常多需要的各種程序,可以參考本人關於海馬體與新皮層的另一篇文章[here],最近DeepMind也做了很多關於海馬體的研究,如:Neural Turing Machine, DNC 等等[7-8],都是在用圖靈完備結構去模擬海馬體的功能,所以是否海馬體及其周邊的控制區域與輸入輸出區域構成了生物大腦中的圖靈完備結構呢?這裏的個人猜測是,非常可能,因爲沒有圖靈完備,我們是不可能學會像Python,Java,C++這種語言的,而這個區域在人腦中是核心區域,人腦中可能也有其他局部有圖靈完備結構,但很多我們學習的問題,尤其是數學問題都要求圖靈完備性,沒有必要開闢很多的相同結構去做這些事情,更合理的方式是演化出通用的處理結構,所以到這裏就很有意思了,如果這個猜測成立,那麼大腦和現代計算機之間幾乎沒有必然不可跨越的鴻溝,而且某種程度來說人只是生物智能演化樹上的一個分支,並不特殊,這種通用的(圖靈完備)結構完全可能存在於各種不同種類的生命體當中(如:老鼠,大象,猩猩,海豚等等),人和其他擁有圖靈完備結構的動物不同在於我們的硬件性能及軟件豐富度,像80年代的計算機和現代計算機之間的差別,只是這種量變讓我們誤以爲我們產生了質的差別。
還有一個需要說明的問題是人的機械(運動)自由度,是很多動物不具備的,人的手臂加上腳,理論上可以操縱(在足夠的時間與能量下,類比於圖靈完備性中的足夠時間和內存)這個世界的任意物體,這也是我們能夠使用工具,製造器械的原因,如果我們像海豚一樣,即便有強悍的大腦也沒有辦法演化出現代人類社會
人工智能到了哪個階段了
毫無疑問,自從深度學習崛起以來,我們在圖像識別,圖像分割,語音識別,機器翻譯,自然語言處理等等方面都有了巨大的進步,尤其是2016年以來,AlphaGo 戰勝李世石[5],AlphaGo Master 戰勝柯潔,AlphaGo Zero 登頂圍棋之神[6],看起來我們好像要實現人工智能了,但是這兩年好像冷了下來,回過頭我們發現還有很多問題需要解決,毫無疑問,我們仍然處於通用人工智能的初級階段,但是我們已經有了通用人工智能的雛形(Reinforcement Learning),也有高維數據建模的能力(Deep Learning),雖然仍然有很多問題需要解決(Adversarial Samples,Model Explanation等等),未來AGI只會更近
參考:
- Computability An Introduction to Recursive Function Theory
- Recent Advances in Neural Program Synthesis
- Analysis - Terence Tao(實分析 - 陶哲軒)
- A critique of pure learning and what artificial neuralnetworks can learn from animal brains
- Mastering the game of Go with deep neural networks and tree search
- Mastering the game of Go without human knowledge
- Neural Turing Machine
- Hybrid computing using a neural network with dynamic external memory
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- SSD: Single Shot MultiBox Detector
- You Only Look Once: Unified, Real-Time Object Detection