1. 程式人生 > >α-β剪枝演算法和蒙特卡洛樹搜尋【轉】

α-β剪枝演算法和蒙特卡洛樹搜尋【轉】

深藍採用的是前面提到的約翰·麥卡錫提出的α-β剪枝演算法。該演算法的基本思想是,利用已經搜尋過的狀態對搜尋進行剪枝,以提高搜尋的效率。演算法首先按照一定原則模擬雙方一步步下棋,直到向前看幾步為止,然後對棋局進行打分(分數越大表明對我方越有利,反之表明對對方有利),並將該分數向上傳遞。當搜尋其他可能的走法時,會利用已有的分數,減掉對我方不利對對方有利的走法,儘可能最大化我方所得分數,按照我方所能得到的最大分數選擇走步。從以上描述可以看出,對棋局如何打分是α-β剪枝演算法中非常關鍵的內容。深藍採用規則的方法對棋局打分,大概的思路就是對不同的棋子按照重要程度給予不同的分數,比如車分數高一點,馬比車低一點等。同時還要考慮棋子的位置賦予不同的權重,比如馬在中間位置比在邊上的權重就大,還要考慮棋子之間的聯絡,比如是否有保護、被捕捉等等。當然實際系統中比這要複雜的多,但大概思想差不多,這裡只是舉例。這樣打分看起來很粗糙,但是如果搜尋的深度比較深的話,尤其是進入了殘局,還是非常準確的,因為對於國際象棋來說,當進入殘局後,棋子的多少可能就決定了勝負。這就如同用牛頓法數值計算一個曲線下的面積,用多個矩形近似曲線肯定有不小的誤差,但是如果矩形的寬度足夠小時,矩形的面積和就可以逼近曲線下的面積了,道理是一樣的。
人工智慧的里程碑:從深藍到AlphaGo

α-β剪枝演算法示意圖
α-β剪枝演算法示意圖
根據上面的介紹,α-β剪枝演算法也只是搜尋到一定的深度就停止,並不是一搜到底,那麼是不是可以不用α-β剪枝演算法,而是生成出小於該深度的所有狀態,也可以達到同樣的效果呢?換句話說,α-β剪枝演算法對於提高搜尋效率究竟有多大的提高呢?筆者曾經就這個問題請教過深藍的主要參與者許峰雄博士,他回答說:在深藍計算機上,如果不採用α-β剪枝演算法,要達到和深藍一樣的下棋水平的話,每步棋需要搜尋17年的時間。由此可見,α-β剪枝演算法是非常有效的。在深藍之後,中國象棋、日本將棋等,採用類似的方法先後均達到了人類頂級水平。2006年8月9日,為了紀念人工智慧50週年,在浪潮杯中國象棋人機大戰中,“浪潮天梭”系統擊敗了以柳大華等5位中國象棋大師組成的大師隊,第二天再戰許銀川國際大師,雙方戰平。
人工智慧的里程碑:從深藍到AlphaGo

長時間以來,計算機在人機大戰中一馬平川,攻克一個又一個堡壘,唯獨剩下了一個圍棋,成為一個未開墾的處女地。為什麼在其它棋類中屢建奇功的α-β剪枝演算法對圍棋不靈了呢?很多人認為是圍棋的狀態更多,更復雜,計算機還處理不了。從可能的狀態數上來說,圍棋確實更復雜一些,但筆者認為這不是根本的原因。前面分析過,在α-β剪枝演算法中,非常依賴於對棋局的打分,無論是國際象棋還是中國象棋,都有一個共同的特點,一方面局面越下越簡單,進入殘局後,棋子的多少就可能決定勝負,另一方面,以將軍為獲勝標誌,判斷起來簡單。而圍棋就不同了,對局面的判斷非常複雜,棋子之間相互聯絡,不可能單獨計算,而且沒有一個像將軍這樣的獲勝標誌,導致對棋局打分非常困難,從而使得計算機圍棋的水平一直停止不前,即便國際上最好的圍棋程式也達不到業餘初段的水平。
計算機圍棋的第一次突破發生在2006年,來自法國的一個計算機圍棋研究團隊,將信心上限決策方法引入到計算機圍棋中,結合蒙特卡洛樹搜尋方法,使得圍棋程式效能有了質的提高,在9路圍棋上(9*9大小的棋盤)戰勝了人類職業棋手。從此之後,圍棋程式基本以蒙特卡洛樹搜尋結合信心上限決策方法為主要的計算框架,經過大家不斷的改進提高,2013年計算機程式CrazyStone在受讓四子的情況下,在19路(19*19大小的正式棋盤)圍棋上戰勝被稱為“人腦計算機”的日本棋手石田芳夫九段,被認為達到了業餘圍棋五、六段的水平。
蒙特卡洛方法是二十世紀40年代中期由S.M.烏拉姆和J.馮·諾伊曼提出的一類隨機模擬方法的總稱,其名稱來源於摩納哥的著名賭城,可以用隨機模擬的方法求解很多問題的數值解。著名的“蒲豐投針”就屬於這類方法,通過向畫有格子的紙上投針計算π值。
人工智慧的里程碑:從深藍到AlphaGo
這裡寫圖片描述


蒲豐投針方法求解π值
前面提到過,傳統方法之所以在圍棋上失效,一個主要原因就是圍棋的棋局難於估計,於是有人就想到了用蒙特卡洛隨機模擬的方法對棋局進行估值。其思想很簡單,對於當前棋局,隨機地模擬雙方走步,直到分出勝負為止。通過多次模擬,計算每個可下棋點的獲勝概率,選取獲勝概率最大的點走棋。在圍棋程式中實際使用的是一種被稱為蒙特卡洛樹搜尋的方法,邊模擬邊建立一個搜尋樹,父節點可以共享子節點的模擬結果,以提高搜尋的效率。其基本原理如下圖所示,分為一下四個過程:
l 選擇:以當前棋局為根節點,自上而下地選擇一個落子點。
l 擴充套件:向選定的節點新增一個或多個子節點。
l 模擬:對擴展出的節點用蒙特卡洛方法進行模擬。
l 回傳:根據模擬結果依次向上更新祖先節點的估計值。
人工智慧的里程碑:從深藍到AlphaGo
這裡寫圖片描述
圍棋中的蒙特卡洛樹搜尋方法

上述過程有點類似於人類下棋時的計算過程,搜尋樹的深度相當於向前看多少步棋,對棋局的判斷則是通過“模擬”這個過程實現的。人在計算的過程中,對可能的走棋點會分輕重緩急,重要的點多考慮,次要的點少考慮,甚至不考慮。計算機程式在第一步“選擇”過程中如何體現這一想法呢?信心上限決策方法的引入就是這一思想的體現。
信心上限決策是研究多臂老虎機問題時提出的一個統計決策模型,根據該模型,可以最大化效益。在圍棋問題中,每個可落子點相當於多臂老虎機的一個臂,要選擇可帶來最大化效益的那個節點擴充套件。按照信心上限決策方法,要考慮兩個因素:
l 優先選擇模擬過程中到目前為止勝率最大的節點,以進一步考察它是否是一個好點。
l 優先選擇那些到目前為止模擬次數比較少的節點,以考察這些點是否有潛在的好點。

信心上限決策方法就是對上述兩個因素的加權折中,選取Ij最大的點進行擴充套件,其中Ij按下式計算,是上述兩個因素的加權和:
人工智慧的里程碑:從深藍到AlphaGo
這裡寫圖片描述
其中,Xj是節點j目前的收益(比如獲勝概率),n是目前為止的總的模擬次數,Tj(n)是節點j目前的模擬次數,C是加權係數,對二者的重要性進行調節。
在蒙特卡洛樹搜尋中引入信心上限決策方法後,計算機圍棋水平得到很大的提高,最好的圍棋程式已經可以達到業餘5段左右的水平。由於是通過模擬的方法對棋局進行評估,如果想達到比較準確的評估,需要模擬更多的次數。因此,蒙特卡洛樹搜尋存在兩個不足,影響了其水平的提高:(1)雖然採用了信心上限決策方法選擇擴充套件的棋子,但是其選擇範圍還是全體可下子點;(2)每次模擬必須一下到底,完成整局棋的模擬,直到分出勝負為止。由於圍棋可能存在的狀態非常巨大,這兩點均極大地影響了搜尋效率,阻礙了計算機圍棋水平的提高。