描述的高低層次
在超級電腦“深藍”在國際象棋上打敗卡斯特洛夫十年后,人工智能Alpha GO才在圍棋上擊敗了李世石。
1997年,“深藍”的計算能力為每秒113.8億次浮點運算,已經遠遠超過了人腦計算的速度,但它只能堪堪打敗人類最好的國際象棋手。
如果說在象棋、圍棋中博弈的勝負關鍵在于預測隨后的步數,為什么在計算能力大大超過人類的情況下,人工智能卻花了十年才能在圍棋上有所突破呢?
這涉及到有關智能的核心問題之一:如何在輸入低層次的描述后輸出高層次的描述。這一種更高層次的描述,也可以叫做組塊化。
接下來我們要從圍棋這個話題暫時離開一會,我將從計算機系統、編程語言和人三個方面詳細地闡述一下層次這個概念。
計算機系統的高低層
我們現在使用的手機容量大多是以GB為單位計數的。這里的GB其實就是一種高層次的描述。
計算機的存儲單位從位(bit)開始,每一位在物理上可以理解為一個開關,有開和關(1和0)兩種狀態。
當我們把8個位組塊化后就有了字節(byte),把1024個字節組塊化后有了KB,1024KB組塊化成了MB,如此這般,還有GB、TB等等。
當然,這種組塊化還稱不上智能。
編程語言的高低層
最早給計算機編程的語言是機器語言,這種語言是CPU可以直接“讀懂”的。但相對的,它離機器更近,就離人更遠。機器語言的指令都是由0和1組成的,十分難理解。
隨后,有人把一些常用的指令“組塊化”變成一些簡單的英文指令,把2進制轉化為簡單的10進制,就產生了更高層次的匯編語言。
但人們是不會滿足只簡化這一點的,在匯編語言的基礎上又誕生了許多高級語言,這些高級語言使用起來更簡潔,成為了現在程序員們使用的主力軍。
到這里,你可能不能完全理解編程語言的運作方式,但這時高級語言和機器語言的層次間就有了一些玄妙的東西了:
程序員可以完全不理解他的程序在最低層次(機器語言)上是如何運行的,他只要理解他用來寫程序的高級語言就可以了。
這和人類的行為方式何其相似,當我們做出某個行為時,我們從不考慮神經元的觸發、肌肉的收縮,我們只需要想,然后如此行動。
人的層次
人可以大略分物理、化學、生物、心理幾個層次。
原子構成分子,分子組成了細胞,然后有器官,有系統,最后有了人。
我們在各種各樣的層次上描述人類的活動。在拒絕一個人的時候,有人說自己沒有分泌多巴胺,有人說自己沒有觸電的感覺;如果對一個人一見鐘情,有人說自己的呼吸都停止了,有人說自己戀愛了。
或許哪一天,Siri能對你說,在看到你的瞬間,我的CPU短路了。
圍棋的高低層
在圍棋中,雖然下一步有非常多的可能,但是好的棋手總是能根據對棋盤上形勢的判斷選出有限的幾步棋考慮。甚至可以說,越是頂尖的棋手所能看到的可能越少。
棋盤上每顆字的位置是低層次的描述,而所謂的“勢”就是一種高層次的描述。
在十年前,計算機無法通過對“勢”的判斷減少預測的可能,所以必須用超出人類的計算能力彌補這方面的劣勢。由于國際象棋一共8×8=64個格子,每個字的行動方式又有一定的規律,計算機可以通過窮舉法擊敗人類。
而圍棋號稱“千古無同局”,變化最多可以達到3.6×10^767種,如果計算機無法在高層次描述圍棋上有所突破,那么它永遠無法在圍棋上擊敗人類。
現在Alpha GO擊敗了李世石,確實當之無愧“人工智能”的名號,而“深藍”,卻永遠只能被稱作為超級計算機。
現在Alpha GO的工作組宣稱下一個項目要挑戰即時戰略游戲——星際爭霸2。作為一名喜歡玩游戲的男生,聽到這個消息很開心,至少證明了游戲的難度起碼不比圍棋要差吧。
文章主要思路來自《GEB》第十章