圍棋大戰(zhàn)AlphaGo四比一勝了李世石,令人驚嘆技術(shù)進展的程度。但另一方面,機器輸?shù)哪潜P引起了各種猜疑,連“故意放水”的陰謀論都出來了。也有了解機器學習的人在小聲嘀咕:莫不是李世石那“神之一手”正好是AlphaGo的對抗樣本?
這幾年深度學習紅得發(fā)紫,但并非無懈可擊,“對抗樣本”就是一個說不清的“隱疾”。有圖有真相:各位先看看下面的圖里都是什么。

湊出來的計算機“直覺”
在《計算機會有超人的智能嗎?》一文中,我說到機器學習通常把“學習”看作以“計算”為途徑和目標。從計算的觀點看,用計算機解決一個問題就是實現(xiàn)一個從輸入到輸出的函數(shù)。以數(shù)值函數(shù)為例,如果已知從輸入X,Y到輸出Z的關(guān)系是 Z = X2–Y,那么當輸入是(2,3)時,輸出是1;輸入是(4,7)時,輸出是9;輸入是(3,5)時,輸出是4。只要把輸入轉(zhuǎn)化成輸出的公式或算法是已知的,總能編一個程序完成這個計算。這就是為什么說“只要人能說清楚解法,計算機就能解決問題”。而人工智能可以說是研究在說不清解法時怎么用計算機解決問題。機器學習會把上述問題看成“函數(shù)擬合”,就是說一般性公式是不知道的,只知道具體“樣本”f(2,3) = 1, f(4,7) = 9 等等,而需要據(jù)此估算f(3,5)等于什么。
在人工智能歷史上,曾有人試圖用“猜函數(shù)”的辦法解決此類問題,并聲稱重新發(fā)現(xiàn)了歐姆定律和開普勒定律等等。這條路的問題是滿足條件的函數(shù)很多,而且樣本常常包含誤差,所以擬合程度太高也未必是好事。現(xiàn)在機器學習的主流辦法不是“猜函數(shù)”,而是“湊函數(shù)”,就是說用一個一般性的方法根據(jù)樣本造一個近似函數(shù)出來。既然目的是用這個函數(shù)來處理像f(3,5)這樣的新問題,f本身是否能寫成一個簡單的公式有什么關(guān)系呢?函數(shù)的建立方法是把樣本推廣到類似輸入。既然輸入(3,5)作為一個點正好在(2,3)和(4,7)中間,不妨認為f(3,5)是f(2,3)和f(4,7)平均值5。因為“正確公式”是不存在的,這個預(yù)測完全合理。至于是否符合事實,則要實際檢驗后才知道了。
人工神經(jīng)網(wǎng)絡(luò)就是一個通用的“函數(shù)擬合器”。很多人顧名思義地認為人工神經(jīng)網(wǎng)絡(luò)就是“像人腦一樣工作”,其實它的設(shè)計只是從人腦得到些靈感,而其真正的吸引力來自其可塑性,即可以通過調(diào)整內(nèi)部參數(shù)變成各種各樣的函數(shù)。一開始參數(shù)是隨便定的,所以可能得到 f(2,3) = 0。這時樣本所提供的正確答案1會被學習算法用來調(diào)整網(wǎng)絡(luò)參數(shù)以達到希望的輸出(不一定正好是1,但足夠接近)。下面再用同樣的辦法訓練f(4,7) = 9。這里的麻煩是后面的樣本所引起的參數(shù)調(diào)整會破壞對前面樣本的處理結(jié)果,所以當所有樣本處理完成后還必須回頭重來。這個“訓練”過程一般要重復很多遍才能讓同一組網(wǎng)絡(luò)參數(shù)同時(盡可能)滿足所有樣本的要求。
了解這種訓練過程,就可以看到AlphaGo實際上是不能像人那樣通過復盤來總結(jié)前一盤棋的經(jīng)驗教訓,并馬上用在后一盤棋中的,而是需要把很多(甚至所有)以前的樣本再整個過一遍(甚至多遍)以保證從這盤棋中學到的知識不會破壞以前的成果。如果說人類學習一般是“增量式的局部修改”(哪里錯了改哪里),那深度學習就是“總量式的全局修改”(用樣本總體定全部參數(shù))。
深度學習能許諾DeepMind進軍醫(yī)療的未來嗎?
一個人工神經(jīng)網(wǎng)絡(luò)通過訓練得到的知識是分布在其所有網(wǎng)絡(luò)參數(shù)之中的,這也就導致了其結(jié)果的難以理解。AlphaGo在某一個時刻為什么走某一步,這是其系統(tǒng)中成千上萬個參數(shù)共同決定的,而這些參數(shù)的值是系統(tǒng)全部訓練歷史的產(chǎn)物。即使我們真能重現(xiàn)它的完整歷史,也往往無法把它的某個決定的“原因”用我們能理解的概念來描述清楚。有種觀點認為這說明機器成功地擁有了“直覺”,但這事還需要從兩方面看。和傳統(tǒng)計算系統(tǒng)相比,能從大量樣本中總結(jié)出某種規(guī)律自然是進步,但完全說不清這種規(guī)律不能說是個優(yōu)點。人的許多信念由于來源復雜以至于我們自己也說不清,因此以“直覺”稱之,但并非所有信念都是這樣來路不明的。
深度學習,以至于整個主流機器學習,在很大程度上接受這種把學習系統(tǒng)看成個“黑箱”的做法,美其名曰“端到端”學習,意思是說“我只要實現(xiàn)你要的函數(shù)就行了,你管我怎么做的呢”。這種辦法自然有它的優(yōu)點(比較省心),但一旦出了問題就很難說清到底是怎么回事,也就更難做相應(yīng)的改進了。AlphaGo的昏招和上面的對抗樣本都是這方面的例子。
那么這個問題要不要緊呢?這就要看應(yīng)用領(lǐng)域了。對圍棋來說,我覺得程序超過人類已成定局,個別比賽的勝負已經(jīng)無關(guān)大勢了。即使程序確有類似于對抗樣本的死穴存在,也不是棋手在對局時容易利用的,而可能是得靠運氣來碰。現(xiàn)在發(fā)現(xiàn)的對抗樣本,如參考文獻[1]中展示的,都是用另一個學習技術(shù)“遺傳算法”經(jīng)過大量計算造出來的。這個辦法能否用于圍棋還是個問題。另一方面,程序的棋路難以理解或模仿,這對圍棋界自然是個遺憾,但不影響它的勝率。所以這些問題對圍棋程序都不是致命的。
現(xiàn)在AlphaGo的開發(fā)者DeepMind號稱要進軍醫(yī)療領(lǐng)域,那可就完全是另一回事了。如果一個機器診斷系統(tǒng)在收集了和你有關(guān)的信息后直接就給你開藥,而其全部理由就是“這是我的直覺”,你能接受嗎?當然,這個系統(tǒng)以往的成功率可能高達95%,盡管它也曾經(jīng)給頭疼的病人開過腳氣藥。但問題是你怎么知道自己不是那5%呢?更何況基于大數(shù)據(jù)的統(tǒng)計性診斷對常見病、多發(fā)病會很有效,但對特殊病例的處理能力就沒有保證了,因此成功率大概也到不了95%。由于這個問題事關(guān)機器學習的基本假設(shè)和框架,因此不是修改算法細節(jié)所能解決的。DeepMind可能要另辟蹊徑才有希望。

“黑箱”技術(shù)之外的天地
目前業(yè)界對深度學習的局限性認識嚴重不足,而AlphaGo的勝利更在大眾中造成了深度學習可以解決各種學習問題的假象。實際上,學界這兩年對深度學習的態(tài)度已經(jīng)從興奮追捧轉(zhuǎn)為冷靜審視,而深度學習的領(lǐng)軍人物也紛紛出面否認了“這項技術(shù)已解決了人工智能核心問題”的說法。
看到這里,有些讀者可能會準備寫如下評論:“我早就說了嘛,人工智能不過是一些程序,怎么可能真能像人那樣學習呢!”—對不起,你還真是說早了。上面所說的問題存在于深度學習、人工神經(jīng)網(wǎng)絡(luò)、機器學習之中,但有關(guān)結(jié)論不能推廣到整個人工智能領(lǐng)域,因為不是所有學習技術(shù)都是做函數(shù)擬合的。
一個問題的解決過程總是由一系列步驟組成的。傳統(tǒng)的計算系統(tǒng)是讓設(shè)計者既指定個別步驟又指定整個過程,因此保證了解決的可靠性和可理解性,但這種系統(tǒng)毫無靈活性。在很大程度上,人工智能的基本目標就是給系統(tǒng)靈活性和適應(yīng)性。當然,設(shè)計者也不可能什么都不限定。函數(shù)擬合的辦法可以說是“限定兩端,放開中間”,即以訓練樣本的形式約束系統(tǒng)的輸入輸出關(guān)系,但容許學習算法相對自由地選擇實現(xiàn)這種關(guān)系的中間步驟和對非樣本的處理結(jié)果。而另一種可能性是恰恰相反,可以說是“限定步驟,放開過程”,而我自己的工作就屬于這一類。
在《計算機會有超人的智能嗎?》一文中,我提到了我設(shè)計的“納思”系統(tǒng)(詳見參考文獻[2])。納思是個推理系統(tǒng),其中每個基本步驟都遵循一個廣義推理規(guī)則,包括演繹、歸納、歸因、例示、修正、選擇、比較、類推、合并、分解、變換、派生、決策等等。這些推理規(guī)則同時也實現(xiàn)著學習的功能,而且可以靈活地彼此銜接以完成復雜的任務(wù)。這里的基本假設(shè)是任意思維過程都可以被分解成這些基本步驟,而“學習”就是系統(tǒng)使用這些規(guī)則以經(jīng)驗為原材料建造和調(diào)整信念和概念體系的“自組織”過程。
把“學習”理解成“信念和概念的自組織”比理解成“函數(shù)擬合”更接近人的學習過程,同時也避免了目前機器學習中的很多問題。比如說,由于系統(tǒng)的每一步都遵循某一條規(guī)則,其結(jié)果就具有較好的可解釋性。人工神經(jīng)網(wǎng)絡(luò)的結(jié)果常常只有數(shù)學意義下的解釋,即“這個結(jié)論是由現(xiàn)有全部網(wǎng)絡(luò)參數(shù)決定的”,而納思的結(jié)論一般有概念層面上的邏輯解釋,即“這個結(jié)論是從某某前提中被某規(guī)則推出來的”。盡管如果一個信念的來源極其復雜,它也會被說成是“直覺”。
設(shè)計納思這樣的學習系統(tǒng)的難點是確定其中規(guī)則的合理性和完備性,以及在運用這些規(guī)則時平衡靈活性和確定性。這些問題我會在以后逐步介紹。現(xiàn)在要說的是既然要讓系統(tǒng)自己學習,那它就難免犯錯,但這不能被用作對批評的擋箭牌。這里的關(guān)鍵問題是這些錯誤是否可以理解,以及系統(tǒng)能否從錯誤中學習以避免重蹈覆轍。
對抗樣本之所以是一個大問題,不僅僅是由于這些樣本導致了系統(tǒng)的誤判(人在圖片識別時也會誤判),而是由于它們揭示了機器學習在“湊函數(shù)”的過程中所生成的中間結(jié)果和人感知過程中的逐層抽象結(jié)果有根本性不同。人在識別“企鵝”、“孔雀”、“鸚鵡”時的中間結(jié)果一般都包括對其頭部、身體、翅膀等鳥類普遍特征的識別,而機器學習算法所抽取的特征則一般沒有獨立意義,只是對整個“端到端”擬合過程有貢獻(提高正確率、收斂速度等等)。因此,如果一個樣本和訓練樣本很不一樣,這些中間結(jié)果有可能導致莫名其妙的輸出。系統(tǒng)很難有效地從這種錯誤中吸取教訓,因為誰都沒法說它是哪一步錯了。要避免這種問題,僅僅限定輸入輸出關(guān)系是不夠的,中間結(jié)果也必須有不完全依賴于網(wǎng)絡(luò)參數(shù)的意義,因此不能只考慮學習算法的數(shù)學特征而不顧其認知功能,而這正是邏輯框架優(yōu)于黑箱模型之處。
最后再說說在圍棋大戰(zhàn)的評論中暴露出的問題。如前面提到的,整體上看,“深度學習”被高估了,但“人工智能”卻被低估了。比如說有些評論半開玩笑地說:“能贏棋時反而成心輸?shù)舨潘阌兄悄埽@是計算機永遠做不到的”。殊不知盡管AlphaGo的確不會這樣做,但這一功能在技術(shù)上根本不是問題。一個通用智能系統(tǒng)中同時會存在著多個目標,而系統(tǒng)在采取某個行動前必須權(quán)衡該行動對各個有關(guān)目標的影響。在這種情況下,總體效果最好的行動可能犧牲某些次要目標。如果這樣一個系統(tǒng)覺得成心輸?shù)粢槐P能贏的棋可以實現(xiàn)一個更重要的目標(比如提高后面比賽的收視率),那它完全可能這么做。這種功能在包括納思在內(nèi)的通用智能系統(tǒng)中早已實現(xiàn)了,只不過尚未出現(xiàn)在應(yīng)用技術(shù)中而已(這里不討論“計算機該不該說謊”等相關(guān)問題)。既然這次圍棋大戰(zhàn)的結(jié)果出乎了絕大多數(shù)人的預(yù)料,希望尚存學習能力的人能以此為鑒,以后不要再僅僅因為你不知道怎么讓計算機做某事就斷言說那事是不可能做到的。
參考文獻
[1]Anh Nguyen, Jason Yosinski, Jeff Clune, Deep neural networks are easily fooled:High confidence predictions for unrecognizable images, IEEE Conference on Computer Vision and Pattern Recognition, 2015
[2]Pei Wang, Rigid Flexibility: The Logic of Intelligence, Springer, 2006