當前位置: 華文問答 > 數位

AlphaGo「理解」圍棋嗎?

2017-05-24數位

樓上很多人說的不錯了。這裏回答的稍微偏題一點(因為事情已經過了很長時間了,可以稍稍避開原問題做一個解答)。

原問題是AlphaGo是否理解圍棋,但是我更感興趣的是人們是否理解AlphaGo。

顯然理解。因為演算法在那裏,看的懂論文的就可以試圖復現一個 prototype。

但是,仔細一想就會發現,理解演算法本身,和理解演算法的行為,似乎不是一回事。

舉一個簡單的例子。一個程式,它的作用是找出一個陣列中最大的數。這個再簡單不過,相信會編程的都會寫,也就是,對於這個演算法大家都是理解的。但是,你真的理解這個演算法的行為嗎?比如,這個演算法找到的最大值是什麽?你一開始可能覺得很簡單,不就找一下最大值嗎?但是很快就會意識到,如果這個輸入數據足夠大,並且沒有先驗知識,那麽找到最大值的唯一方法就是把這個演算法忠實的跑一遍 --- 你沒有獲得任何理解的捷徑,使得能在這個演算法得到結論前得到答案。如果不到一個演算法得出結果才能知道演算法會得到什麽結果,你真的理解這個演算法的行為嗎?

自由意誌也是很類似的東西。如果你總能夠在一個人做出行為之前得知他會做什麽,那麽這個人有自由意誌嗎?事實上對於一部份事,至少在一個人的大腦產生動作訊號(計算的角度,就是得到輸出或者答案)之前,你難以準確估計他會做什麽。這點和之前求最大值的程式非常像。所以說如果今後人們發現人的大腦也在執行某種生物學上的簡單規則,並且對這個規則理解得極其清楚,(只要在開放世界中),也不妨礙一個人有「自由意誌」(你依然沒法幹涉和預測他的「自由」)。

現在AlphaGo是不是類似的?你是否能夠在AlphaGo計算出值之前,用某種捷徑得知它下面會下什麽?目前來看很難,但是也很簡單-讓AlphaGo算出這個我們想要得知的值不就行了,因為我們充分理解它的演算法,我們可以用海量的GPU和CPU讓它算的更快,以便讓我們更快得到那個結果,但是這樣並不叫理解AlphaGo的「行為」,雖然AlphaGo每一步怎麽算的你都清清楚楚,但是得出結果還得等它算完。

仔細一想,對於之前那個求最大值的程式,如果我們知道它會處理的數據是遞增的,那麽我們可以立即得知答案: 它會輸出最後一個值。如果最大的值在後1%,那麽我們可以倒過來搜尋,在這種情況下我們相比那個程式看上去更加有「靈感」。

分子動力學模擬也是如此。原理當然我們明白,但是結果非得那個程式算完才完全清楚。當然如果我們知道模擬的內容是一些常溫下的水和磷脂,那麽我們會對結果有個大致的預期。

說了這麽多,就是想說演算法處理的數據本身未嘗不是一種復雜和難以解釋所在。演算法的行為,不僅依賴於程式碼,也依賴於分支處判斷的數據。真正脫離數據的演算法是沒有意義的,而非常大和復雜,並且在開放世界中不斷產生的數據,可以使得一些哪怕極為簡單的演算法產生極難預知的行為。現在AlphaGo下的那幾千萬局圍棋,並沒有類似於「單調遞增」這種強的先驗知識,而演算法從這些數據中得到了網路的權值,演算法又根據這些權值忠實的執行,得到的行為自然也不能期望被簡單理解(否則某種程度上你就你理解了幾億個棋局的數據)。

那麽,什麽叫理解圍棋本身?首先圍棋本身這個概念太寬泛,可以嚴實為「理解下贏圍棋本身」。我們再嚴實一下理解為「語言可表達,按此可復現」,這對於圍棋還算是適合的。比如某人給你一本圍棋秘籍,你看了後便能席卷棋界,那麽恐怕沒人承認你不懂如何下贏圍棋。這時候你的理解便是那個秘籍。AlphaGo呢?答案是它的理解是它的完整的程式(包括權值這些)的內容。你可以把它當做一本「圍棋秘籍」用,方法是自己一步步手動推那個程式(比如讀組譯碼自己在紙上寫下所有東西),只不過很慢而已。顯然你可能不能接受這個---這不是human-friendly的理解,但是這個「理解」確實是可以被人「理解」的理解,雖然我們沒有真正理解AlphaGo這些權值到底是什麽含義。(當然咯,現在人們也發明了各種演算法來試圖理解這些「權值」,比如發現了某些特征,但是為什麽有這個特征?為什麽特征非要長這個樣子?我們並不全部清楚)

那麽我猜還有人一定會問AlphaGo是否理解圍棋。我覺得這樣的討論是沒有意義的。除非有人告訴你,你會知道圍棋是一種2個人的,而且兩個人面對面做的,對抗的,零和的,棋盤19*19的,棋盤是方的,上面是打格子的,格子也是方的,有黑白兩個子的,黑子先下的,兩個輪流下的,要下在格點而不是格子中間的,有限時要求的,棋子數量足夠的,一個棋子不會占超過一格的,棋子是圓的,兩邊凸起的,中國古代發明的,一種賽局遊戲嗎?你也不知道。AlphaGo只是被訓練來下贏棋---甚至都不關心能贏幾目,只要達到贏的狀態就行。

這點和砍樹的人不必成為植物學家一樣。

你或許還是不能接受AlphaGo這個樣子,我想這是因為,人們下圍棋,一定要先理解「圍棋」什麽東西,下面才可以操作。但是AlphaGo卻是在不知道(或者沒有被提供數據)「圍棋是一種2個人的,而且兩個人面對面做的,對抗的,零和的,棋盤19*19的,棋盤是方的,上面是打格子的,格子也是方的,有黑白兩個子的,黑子先下的,兩個輪流下的,要下在格點而不是格子中間的,有限時要求的,棋子數量足夠的,一個棋子不會占超過一格的,棋子是圓的,兩邊凸起的,中國古代發明的,一種賽局遊戲」中的任何一點的時候,可以戰勝人類。我想,這可能是所謂「強AI」和「弱AI」之前的差異吧。作為「強AI」的我們,理解東西從物理世界,感情,理性決策這些出發,在上面構建上層建築,比如下圍棋。但是AlphaGo直接從「下贏圍棋」出發,來做到這一點。很難說哪個更好,只是一個廣泛但難以在過於特定的場景深入,另外一個狹義但是卻可以做到極好。在未來弱AI可能在每個它處理的領域都要好於強AI,並且我們可以批次生產他們而不需要從頭教育,這是現在已經成為現實的事情(比如圍棋,還有最近的德州撲克,人臉辨識,影像標註,影像辨識,甚至將來可以預見的特定場合轉譯,語音辨識,自動駕駛,等等等等)。

最終我們創造了弱AI(AlphaGo)。因為一個特定領域的智慧沒法在自然界自然產生。自然界就是一個典型的開放的,數據齊全的環境,需要一個普遍適合的生物存在,弱AI會因為「沒有用途」而被前進演化淘汰。所以一個有明顯智慧的群體,幾乎可以確定是強AI。(現在我們搞出弱AI,恐怕也是社會的需求,因為難以接受但是必須承認的一點是一個弱AI可能在社會中的貢獻可能強過很多強AI)。至於是否能在這種開放的環境中搞出強AI就是後人的問題了。