看了 AlphaGo 和李世乭九段這 5 場比賽之后,你知道 AlphaGo 是怎么思考的嗎?
其實(shí),AlphaGo 的“思考”和人類的思考有些相似,所以它的勝利才顯得意義重大。
想要知道 AlphaGo 怎么下圍棋,簡單了解圍棋的規(guī)則非常重要。
顧名思義,“圍棋”的要點(diǎn)在于“圍”。圍棋棋盤是 19 × 19 的格狀棋盤,黑子和白字在交叉點(diǎn)上交替落子,哪一方“圍”的地盤大便獲勝。
如何計(jì)算“地盤”?每當(dāng)棋盤上落下一子,便會出現(xiàn)與該子橫或豎相鄰的四個(gè)交叉點(diǎn),這四個(gè)點(diǎn)被稱為“氣”,一顆棋子最多擁有四口“氣”,斜方向相鄰的交叉點(diǎn)不是氣。
橫或豎相鄰的同色棋子可以共用“氣”。如果一個(gè)字或幾個(gè)字周圍所有的氣都被對方棋子占據(jù),沒有氣的棋子就是死子。
右側(cè)圖中棋子周圍的的點(diǎn)表示氣,雙方棋子可以共用氣。
在這樣的規(guī)則要求下,勝負(fù)的關(guān)鍵便在于如何高效地用棋子占據(jù)更大的地盤,同時(shí)還要防止對方將你已經(jīng)占據(jù)的位置圍死。圍棋開局時(shí)一般從靠近邊緣的地方開始落子也是因?yàn)橄鄬τ谄灞P中央,邊緣方便用更少的棋子占據(jù)更大的地方。
圍棋棋盤一共有 361 個(gè)落子點(diǎn),平均分配的話,一方棋子占據(jù)的位置加上活棋圍住的落子點(diǎn)只要超過 180.5 個(gè)就會勝利。但先落下第一個(gè)子的黑棋占有優(yōu)勢,按照中國規(guī)則,在計(jì)算棋子數(shù)量時(shí),黑棋必須減掉 3 又 3/4 子,也就是必須超過 185 子才能獲勝。
有的棋局會在未下完時(shí),便因?yàn)閷Ψ揭呀?jīng)占據(jù)了無法追趕的優(yōu)勢而認(rèn)輸。而有的棋局雙方會進(jìn)行到“收官”的階段,這里不再展開。
以上,是圍棋的簡單的基礎(chǔ)規(guī)則,但因?yàn)槠灞P很大,圍棋的戰(zhàn)術(shù)千變?nèi)f化。
說起這個(gè),“窮舉”、“蒙特卡羅樹算法”、“深度學(xué)習(xí)”等等一大堆術(shù)語經(jīng)常出現(xiàn)。
所謂 “深度學(xué)習(xí)”,是 AlphaGo 圍棋訓(xùn)練的第一步,將人類棋譜輸入計(jì)算機(jī),學(xué)習(xí)人類的落子習(xí)慣。這種“識別”與人臉識別、圖像分類等搜索技術(shù)類似。
第一步:
AlphaGo 會把輸入系統(tǒng)的人類棋譜的每一步進(jìn)行分拆,棋盤上每個(gè)落子以及隨后的應(yīng)對落子算作一個(gè)樣本,AlphaGo 從這些人類棋局中分解出了三千多萬個(gè)樣本。
這些樣本集合在一起,能夠識別出每個(gè)特定的落子之后,哪一種應(yīng)對方法的概率最高,這個(gè)最高的概率其實(shí)就是人類棋手最喜歡的應(yīng)對方法。
雖然說圍棋“千古無同局”,但是局部來看還是有很多相似的模式反復(fù)出現(xiàn),AlphaGo 就學(xué)會了這些最受歡迎的下法。
第二步:
AlphaGo 的思考結(jié)合了蒙特卡羅樹搜索。
假設(shè)一個(gè)從來都沒下過圍棋的人,用了分身術(shù)分成兩個(gè)人開始在棋盤上亂下,最終這盤棋也會分出個(gè)勝負(fù)。第二盤,上一盤贏的那個(gè)分身不再完全是亂下了,開始使用贏的那一盤中的一些對應(yīng),第三盤棋,第二盤贏的那個(gè)分身開始使用第一盤和第二盤中的對應(yīng)。當(dāng)?shù)?N 盤棋下完之后,這個(gè)始終贏棋的分身就會獲得最有可能獲勝的落子方法。
以上這 N 盤棋就是一步使用蒙特卡羅樹搜索的思考過程,思考結(jié)束后的下一個(gè)落子,就是被是推演過次數(shù)最多,獲勝概率最高的那一步。
AlphaGo 團(tuán)隊(duì)還改進(jìn)了以上這種傳統(tǒng)的蒙特卡羅樹搜索算法。
上面我們說過的深度神經(jīng)網(wǎng)絡(luò)得出了一套人類棋手概率最高的下法,假設(shè)蒙特卡羅樹搜索故事中那個(gè)完全不會下棋的人學(xué)習(xí)了這套下法,那么之后的“亂下”思考過程的起點(diǎn)就會提高很多。這樣一來,蒙特卡羅樹算法的計(jì)算量就減少很多,提高了效率。
第三步:
AlphaGo 自己和自己下棋。 圍棋畢竟變化太多,AlphaGo 需要更多的棋局來學(xué)習(xí),于是通過自我對弈產(chǎn)生新的棋局。
AlphaGo 自己和自己下棋,棋力的來源就是第一步通過學(xué)習(xí)人類棋局得到的落子方法。AlphaGo 左右互搏,自我對弈幾萬盤,就能總結(jié)出贏棋概率更高的新下法,接下來再用新下法自我對弈幾萬盤,以此類推,最終得到了一套棋力比最初只學(xué)習(xí)人類下法厲害很多的新策略。
那用這新的策略和蒙特卡羅樹搜索結(jié)合是不是更厲害呢?答案卻是否。
因?yàn)槭褂酶怕蕘碛?xùn)練的這種策略會讓下法高度集中,變化太少,而蒙特卡羅樹搜索需要更多的變化才更有效。
第四步:局面評估。這也是 AlphaGo 最厲害的地方是,它可以像人類一樣在比賽過程中估計(jì)局面的優(yōu)劣,這樣才有第四局它判斷獲勝幾率太小,選擇中盤認(rèn)輸。
當(dāng)一盤棋開始的時(shí)候,AlphaGo 先用第一步訓(xùn)練的下法下若干步,然后亂下一步,接著用第三步自我對弈訓(xùn)練產(chǎn)生的更厲害的下法下完整盤棋,然后對結(jié)果做一個(gè)評估,評估出“亂下”的那步棋造成的局面是好是壞。
AlphaGo 可以在一步的思考中亂下很多次,總有一次能匹配到真實(shí)對下棋的狀況。而對這一步亂下以及后續(xù)結(jié)果的評估,就是對當(dāng)前局面的判斷。
大家對戰(zhàn)勝卡斯帕羅夫的“深藍(lán)”有一些誤解。深藍(lán)并不是單純的“窮舉”,通過計(jì)算所有的可能性來實(shí)現(xiàn)勝利。深藍(lán)的算力約為每秒 2 億步棋,想要窮盡國際象棋十的四十五次方這個(gè)級別的可能性需要十的二十九次方年的時(shí)間,這顯然不可能。
深藍(lán)內(nèi)置了數(shù)百萬人類國際象棋的開局庫,這部分計(jì)算可以省掉,同時(shí)深藍(lán)也不是算出所有可能的步法,而是推算 12 步左右,而人類的國際象棋大師大約能夠推算 10 步,勝負(fù)就在這其中產(chǎn)生。
AlphaGo 每秒鐘可以計(jì)算幾百萬步棋,通過大量學(xué)習(xí)人類棋局,用這些經(jīng)驗(yàn)自我對弈產(chǎn)生新的經(jīng)驗(yàn),用這些新經(jīng)驗(yàn)來下棋,再利用蒙特卡羅樹搜索產(chǎn)生下一步對應(yīng)的下法,配合“亂下”產(chǎn)生的對局面的評估,就是 AlphaGo 戰(zhàn)勝人類頂尖棋手的秘密。
參考文獻(xiàn):Mastering the game of Go with deep neural networks and tree search.——Nature 2016.1.27