前言
本來其實不想寫這個的,但是看到很多網友以及一些圍棋職業選手提出了一些疑問,比如「Google 沒有頂尖的棋手為什么能開發出頂尖的圍棋機器人?」還有「機械為什么可以在如此直覺主導的游戲中戰勝人類?」。這些問題事實上在人工智能領域已經有很多理論來做解釋。而且這些理論也并不是 Google 提出的。AlphaGo 所使用的理論大多還是十余年前左右的論文的一些成果。在此之前,使用了這些理論開發出來的人工智能其實已經在 2006 年就已經在 9x9 的小棋盤上戰勝周俊勛九段,之后在 2013 年 CrazyStone 程序就已經在讓四子前提下戰勝過石田芳夫九段,而就在去年,Facebook 的圍棋機器人在不讓子的前提下,勝過職業選手。至于之前「前百度深度學習研究院」的吳韌所開發的異構神機也使用的是類似的理論,也在前幾天戰勝過職業棋手。
這些方法上,AlphaGo 并無太大創新,很大程度上是 Google 團隊實現得相對完善以及訓練程度更好,以及人工智能算法的實現和調參存在很大的偶然因素。那么究竟是什么方法讓機械擁有了和人一樣直覺,而不是簡單的機械化的思考。這事我們還是要從頭講起。
無法計算的數據量
早在 1996 年,IBM 的深藍計算機就戰勝了國際象棋世界名將加里·卡斯帕羅夫。但象棋有一個特點,那就是每一步下的選擇是相對非常有限的,最多也就十幾種可能。哪怕是通過最最暴力的搜索方法,把每種都跑一遍,搜索幾十步內的最優解。雖然這個方法隨著搜索深度是指數級增長的,但事實上由于底數比餃小,依靠強大的算力還是可以解決的。而深藍計算機正是這么一臺擁有強大算力的超級計算機。
然而在圍棋上,這樣就不行了,因為圍棋每一步都有上百種選擇,如此大的底數純粹的暴力就顯然無法滿足了。至少硬件的發展并非每年成百倍成百倍地快速增長的。同樣的方法,顯然是不適合使用在圍棋上的。
在 2002 年之前,人們長期研究一個可以通過計算靜態地分析出每一子的價值出來。然而這個方法的發展一直很慢。直到人們試圖嘗試一種動態評估一個博弈的一種方法,這就是靠猜。這個方法被稱為蒙特卡洛搜索樹,其前身是非常著名的上世紀曼哈頓計劃期間由烏拉姆和馮·諾依曼提出的蒙特卡洛方法。
如果我們想知道圓周率的值,我們如何利用猜的方法來猜出圓周率呢?我們只需要在一個方形中隨機而均勻地扔飛鏢,數一下,多少個飛鏢扔在了以方形邊長為直徑的圓里,多少扔在了外面,根據圓的面積公式和方形的面積公式就能把 π 算出來。而蒙特卡洛搜索樹就是利用蒙特卡洛方法來優化搜索樹。簡單來說,就是,我們認為這一步下在一個地方是最優的,而我們不知道這地方在哪里。我們先通過一系列隨機的采樣,從而去猜測一個值,這個值可能是最優解,也可能是一個接近最優解的解。但至少,這可以用來估算像圍棋這樣大的棋盤的東西了,而不需要把每個細枝末節都同等對待地來暴力搜索。
⑨神的大局觀
解決完計算量的問題,我們還要來解決人類在圍棋上最大的優勢——直覺,或者說「大局觀」。那么如何才能擁有大局觀呢?我們想一下,人們在下圍棋的時候,通常會先考慮下在哪個片區,以獲得什么樣的目的。而這就是所謂的大局觀。
AlphaGo 的另一部分重要思想,得益于神經科學的發展,即人類認識人大腦神經的發展。人類愈發了解了大腦內神經元的工作模式,包括人類學習、認知的神經模型。這樣的非常基礎的模型,極大地方便了利用計算機來模擬人類進行學習的過程。
蒙特卡洛方法只是簡化了計算,并不具備學習的能力。無論是單純的蒙特卡洛搜索還是與 α-β 搜索結合的還是和置信區間結合一些版本,都與人類能越學越強的圍棋技巧相比差上太多。至少,人腦是一個極其復雜的計算模型,哪怕是現在最好的計算機,其算力和整個大腦比起來還是差很多的。
在 2007 年,一些科學家試圖提出一個新的機器學習模型,即所謂的深度學習。所謂深度學習,你可以看做模擬許多許多人腦中的神經元構成的一個網絡。網絡的每一層,針對一個特性進行識別。網絡的每一層,都是一個單純分類的無監督學習模型。你可以想像一下,人眼看到一個圖像。經過一系列神經元,首先識別出了里面的眼睛、然后識別了里面的鼻子、嘴,再根據這些特性,發現這是一個人。這樣依次發現的機制。而學習是通過一個有監督的反向傳播進行。即告訴你這張圖像里有一條狗,然后反向的一步步調整網絡,讓網絡適應符合怎么樣鼻子、嘴、眼睛的是一條狗。通過不斷地數據的訓練,即可以讓模型越來越優。這個模型在圖像識別領域已經達到甚至有時超越了人的識別能力。
而 AlphaGo 使用的就是深度學習來優化蒙特卡洛搜索樹。在 AlphaGo 中有兩個網絡,一個是策略網絡,一個是價值網絡。策略網絡即是一個大局觀的網絡,機器會先通過其經驗,找出其應該做出進攻的反應還是防守的反應,表現在下在哪個片區是最為合適的,是不是應該跟棋之類的大問題。然后再通過蒙特卡洛搜索樹去算出具體下在哪里是最合適的。
而我們說到,深度學習模型是真的和人一樣可以學習的。每下一次棋,它就可以進一步調優自己的策略網絡。首先 AlphaGo 導入了上千個職業選手對弈的棋譜,使得自己有了一個基礎的下棋策略。這時候的 AlphaGo 就和一個受過系統訓練的圍棋少年一樣了。然而這和職業選手的區別還是很大。這也就是所謂的「Google 沒有頂尖的棋手為什么能開發出頂尖的圍棋機器人?」按照一般常理,AlphaGo 應該一段一段地和人挑戰,越發提高自己能力。然而 AlphaGo 不是這么做的,它選擇和自己對弈。兩臺 AlphaGo 來對弈,將對弈的結果調優自己的網絡。這個聽起來很奇怪,為什么兩個下得都不怎么樣的棋手一起下棋,棋藝能那么快提升呢?因為它一天能和自己下上百萬盤棋,它可以把自己分身成幾萬份跑在幾萬臺電腦上,以及可以晝夜不停也不會過勞死,而這是任何一個人類都做不到的。AlphaGo 的開發人員說,他曾在早期能下贏 AlphaGo,而很快,AlphaGo 的水平就遠超了他。所以 AlphaGo 得到了飛速的提升。僅僅五六個月,AlphaGo 就能從戰勝歐洲棋王挑戰到世界頂尖選手的水平了。
人工智能的基本法
當然搞人工智能也要有基本法。這個基本法就是算力或者說是資源。雖然做了很大的優化,計算下圍棋的計算量還是很大的。比起深藍時依靠超級計算機來解決問題。AlphaGo 選擇了一條適合 Google 的路徑來解決算力問題。那就是分布式計算。使用分布式計算的 AlphaGo 版本比起不使用的版本其智能程度也是有相當大的提升。即使最簡單,它也可以有更多時間來做隨機的嘗試,以找出更優的價值解。
同樣利用深度學習優化蒙特卡洛搜索的 Facebook 圍棋團隊,相比 Google 就沒有那么壕力沖天了。無論是開發資源還是人員來說也是遠少于 Google。Facebook 的圍棋機器人之前也取得了相當好的成績,大概可以擊敗職業二段選手的水平。但是比起 AlphaGo,還是差上許多。
所以說,做這么一個人智能,背后的投入程度、重視程度也起到了很大的作用。這也是為什么深度學習目前做得很好的公司大多是一些頂尖的 IT 企業里的研發團隊。
后記
比起 AlphaGo 在圍棋上的成就,其實大多數人很好奇人工智能未來的何去何從。從這次中,我們看到計算機已經具備了人類大局判斷能力,其本質是類似于人類的學習能力,即不告訴電腦應該怎么做,而讓電腦看人類是怎么做的。這項的應用其實相當廣泛,尤其在非常復雜的問題上。
比如說,無人駕駛汽車之前發展很困難,是因為人們總是試圖去把駕駛規則完全講給電腦,而這點太過復雜,難以用純邏輯說清。而今天 Google 的無人駕駛汽車也是使用的類似的深度學習的技術,讓計算機觀察人類開車并學習,從而模仿人類的判斷。最終依靠計算機強大的算力和不會疲勞等特點,甚至超越人類的判斷。
短期來看,利用深度學習的人工智能在未來數年內將會得到很大的應用。而這也是 Google 熱衷于下圍棋的原因。醉翁之意不在酒,在乎山水之間也。Google 只是想利用圍棋來顯示他們在深度學習應用上的先進水平。
就人工智能的最終目的來看,我們已經跨出了很大的一步。之前而言,我們很大程度局限于人類強大的抽象的思考能力,而模仿人類神經系統的模型已經很好地模擬了這種思考是怎么產生的了。進一步說,如果一個機器,擁有和人完全一樣的眼睛、耳朵、鼻子、觸覺等作為它的輸入,以及類似于人類肌肉和關節的機械部件作為它的輸出。并且模擬一個和人腦一樣復雜程度的神經網絡,并讓它觀察人類進行學習。是不是在某個未來,我們可以擁有和人類功能非常接近甚至超越人類的智能的出現。深度學習都為這樣的強人工智能提出了理論上的基礎。