AlphaGo背后的搜索算法:蒙特卡罗树搜索 alphago 代码
代碼:?https://github.com/Rochester-NRT/AlphaGo
AlphaGo背后的搜索算法:蒙特卡羅樹搜索
本文首發于微信公眾號號“編程派”。微信搜索“編程派”,獲取更多Python編程一手教程及優質資源吧。
昨天(3月9日)下午,經過三個多小時的較量,韓國棋手李世石宣布向谷歌人工智能AplphaGo認輸,意味著人工智能獲得了這場人機世紀之戰的第一場勝利。而此前AlphaGo已經以平等條件擊敗了歐洲圍棋冠軍樊麾。
有專家在賽后評論說,AlphaGo的勝利只能算是算法的勝利,因為人工智能目前只是一種算法程序,沒有道德,也沒有情感,更談不上情感。
小編其實認為這并沒有錯,而且就算李世石最后輸給了AlphaGo,這樣不代表人類輸給了機器人。因為這臺打敗了人類最高智能代表的機器,是由人類一手精心打造的,其內部的算法也是眾多科學家一步一步改進得來的。
本文的主題,就是AlphaGo能夠成功擊敗專業棋手的功臣之一:蒙特卡羅樹搜索(Monte Carlo Tree Search)。
蒙特卡羅搜索樹的貢獻,從谷歌AlphaGo的官方網站上就可見一斑。
完美信息博弈
我們知道,圍棋有著明確的游戲規則,其中不存在隨機或運氣成分(如擲骰子或洗牌)。這類游戲都可以歸類為所謂的完美信息博弈(perfect information games)。在完美信息博弈中,每時點參與人采取一個行動,每個參與人在其決策的同時知道以前所有的行動。
因此,理論上我們是可以構建一個包含了所有可能結果的樹,因為游戲中所有的一切都是有規則可循的(fully determined)。幾乎所有的弈棋程序,都是依靠其強大、精確的計算能力,來預測好的下法。
為什么之前的弈棋程序沒有征服圍棋?
AlphaGo并不是第一個智能弈棋程序。1997年時,已有超級電腦深藍戰勝國際象棋棋王卡斯帕羅夫的先例。那么為什么深藍沒有乘勝追擊,挑戰圍棋呢?這是因為IBM在比賽結束后就讓深藍退役了。O(∩_∩)O~
說正經的,這很大程度上與圍棋的極大可能性和此前弈棋程序的算法限制有關。
我們知道,圍棋棋盤橫豎各有19條線,共有361個落子點,雙方交替落子,這意味著圍棋總共可能有10^171(1后面有171個零)種可能性。這超過了宇宙中的原子總數是10^80(1后面80個零)!
而傳統AI一般采用的是暴力搜索方法(深藍就是這樣干的),就所有可能存在的下法構建一個樹。這樣自然根本無法應對圍棋游戲啦。
什么是蒙特卡羅樹搜索?
“蒙特卡洛樹搜索”是一種啟發式的搜索策略,能夠基于對搜索空間的隨機抽樣來擴大搜索樹,從而分析圍棋這類游戲中每一步棋應該怎么走才能夠創造最好機會。
一位名叫蘇椰的知乎用戶舉了這樣一個例子,以通俗的語言進行了解釋:假如筐里有100個蘋果,讓我每次閉眼拿1個,挑出最大的。于是我隨機拿1個,再隨機拿1個跟它比,留下大的,再隨機拿1個……我每拿一次,留下的蘋果都至少不比上次的小。拿的次數越多,挑出的蘋果就越大,但我除非拿100次,否則無法肯定挑出了最大的。這個挑蘋果的算法,就屬于蒙特卡羅算法:盡量找好的,但不保證是最好的。
需要說明的是,蒙特卡羅樹搜索并不是只有一種算法,而是一類算法。其中最流行的算法之一就是UCT(upper confidence bounds applied to trees)。
AlphaGo是第一個使用該算法的弈棋程序嗎?
AlphaGo不是第一個使用蒙特卡羅樹搜索的弈棋程序。
據senseis.xmp.net網站介紹,第一個使用UCT算法的圍棋程序是MoGo。而且,MoGo在2008年的美國圍棋公開賽上,第一次在19x19的全尺寸棋盤上擊敗了職業選手(當然與AlphaGo不同,這位職業選手讓了9個子)。
AlphaGo是如何使用蒙特卡羅樹搜索的?
雖然“蒙特卡洛樹搜索”在此前一些弈棋程序中也有采用,在相對較小的棋盤中能夠很好地發揮作用,但在正規的全尺寸棋盤上,這種方法的缺陷也體現出來了,因為涉及的搜索樹實在太大了。
但AlphaGo采用了很聰明的策略,利用深度學習的方法降低搜索樹的復雜性。因此“深度學習”和“蒙特卡洛樹搜索”就成為它的兩個關鍵因素。在每個模擬游戲中,AlphaGo都有兩個大腦指引它進行搜索:價值網絡(value network)和政策網絡(policy network)。“政策網絡”觀察棋盤布局企圖找到較好的下法,“價值網絡”則預測這樣下的話對方棋手贏棋的可能。結合這兩個建議,AlphaGo最終決定怎樣落子才是勝算最大的。
能用Python實現這種樹搜索法嗎?
當然可以,而且一個使用UCT算法實現的Python弈棋程序只有400行代碼左右哦!想要下載試玩的話,就看本期另外一篇推送吧。
參考資料:
https://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/
http://senseis.xmp.net/?MonteCarlo
http://senseis.xmp.net/?UCT
http://tech.huanqiu.com/news/2016-03/8668752.html
https://www.zhihu.com/question/20254139
http://googleresearch.blogspot.com/2016/01/alphago-mastering-ancient-game-of-go.html
http://www.dcine.com/2016/01/28/alphago/
本站文章除注明轉載外,均為本站原創或編譯,如需轉載,請聯系微信公眾號“編程派”獲得授權。轉載時,應注明來源、作者及原文鏈接
總結
以上是生活随笔為你收集整理的AlphaGo背后的搜索算法:蒙特卡罗树搜索 alphago 代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [caffe] 数据制作和训练
- 下一篇: PCANet --- 用于图像分类的深度