[譯]什麼是蒙特卡洛樹搜尋

Cup發表於2017-10-26

什麼是蒙特卡洛樹搜尋

蒙特卡洛樹搜尋(MCTS)是一種在人工智慧問題中進行決策優化的方法,通常是對於那些在組合遊戲中需要移動規劃的部分。蒙特卡洛樹搜尋將隨機模擬的通用性與樹搜尋的準確性進行了結合。

馮·諾依曼於 1928 年提出的極小化極大理論(minimax)為之後的對抗性樹搜尋方法鋪平了道路,而這些在電腦科學和人工智慧剛剛成立的時候就成為了決策理論的根基。蒙特卡洛方法通過隨機取樣解決問題,隨後在 20 世紀 40 年代,被作為了一種解決模糊定義問題而不適合直接樹搜尋的方法。Rémi Coulomb 於 2006 年將這兩種方法結合,來提供一種新的方法作為圍棋中的移動規劃,如今稱為蒙特卡洛樹搜尋(MCTS)。

近期由於它在計算機圍棋上的成果和對某些難題具有解決的潛力,科研領域對於 MCTS 的研究興趣快速上升。它的應用領域已不止於博弈,而且理論上 MCTS 可以應用於任何能夠以 {狀態,動作} 形式描述,通過模擬來預測結果的領域。


基本演算法

最基本的 MCTS 演算法本身就是簡單的:根據模擬出來的結果,建立一棵節點相連的搜尋樹。整個過程可以被分解為如下幾步:

1.選擇

從根節點 R 開始,遞迴地選擇最優子節點(下面會解釋)直到一個葉子節點 L 為止。

2.擴充套件

如果 L 不是終止節點(就是說,博弈尚未結束)那麼就建立一個或多個子節點,並選擇其中一個 C。

3.模擬

從 C 執行一次模擬推出(譯者注:通常稱為 playout 或 rollout)直到得到一個結果。

4.反向傳播

用模擬出來的結果更新當前的移動序列。

每一個節點必須包含兩部分重要的資訊:基於模擬所得結果的估值,和被訪問的次數

在最簡單和最大化利用記憶體的執行中,MCTS 會在每次迭代中新增一個子節點。注意,在某些情況下每次迭代增加多個子節點可能會更有益。


節點的選擇

老虎機與 UCB 演算法

在樹遞迴地向下發展時的節點的選擇,是取決於該節點是否最大化了某些數量,類似於多臂老虎機問題:即玩家每回合都要選擇那個能夠帶給他們最大化收益的老虎機。接下來的上限置信區間(Upper Confidence Bounds, UCB)公式通常會被用到:

其中 vi 是節點的估值,ni 是節點被訪問的次數而 N 是它的父親節點被訪問的總次數。C 是可調的偏置引數。

利用性 vs 探索性

UCB 公式在利用性探索性之間提供了不錯的平衡,鼓勵訪問未曾訪問過的節點。獎勵是基於隨機模擬的,所以節點在變的可靠之前必須被訪問一定的次數。MCTS 估值往往在開始的表現會非常不可靠,但隨著足夠多的時間而逐漸向可靠的估值收斂,若有無限多的時間則可以收斂至最優估值。

蒙特卡洛樹搜尋(MCTS)與上限置信區間樹(UCT)

Kocsis 和 Szepervari (2006)首先利用 UCB 提出了一個完整的 MCTS 演算法並命名為上限置信區間樹(UCT)的方法。這個方法正是如今被大多數人採用於 MCTS 的實施中的演算法。
UCT 可以被描述為 MCTS 的一種特殊情況,即:

UCT = MCTS + UCB

優點

MCTS 相對傳統樹搜尋方法具有一些不錯的優點。

上下文無關

MCTS最大的好處就在於它無需知道該博弈(或者其他問題領域)的任何戰術或策略。這個演算法可以無需知道任何該博弈的資訊(除了可進行的動作和終止條件)。這意味著任何的 MCTS 的實現方案可以在僅僅修改一小部分後便移植到其他的博弈中,對於所有的博弈問題來說 MCTS 的這個特性也是一種隱形的好處。

非對稱樹增長(Asymmetric Tree Growth)

MCTS 表現出一種非對稱的樹增長來適應搜尋空間的拓撲。演算法會訪問其更‘感興趣’的節點,並將搜尋空間集中於更加相關的部分。

這使得 MCTS 很適合於擁有大量影響因素的博弈中,如 19x19 大小的圍棋。如此巨大的空間組合往往會使得標準的深度或廣度搜尋方法出現問題,但 MCTS 的適應特性意味著它會(最終)找到那些更為優秀的移動(動作)並專注於那裡的搜尋。

優雅的退出

演算法可以在任意時間中止並返回當前最佳的評估策略。建立的搜尋樹可以被拋棄或為以後的複用而保留。

易用性

演算法非常易於實現,可見教程。(譯者注:pythonjava 原始碼及相關知識點可在此找到)


缺點

MCTS 雖然只有少量缺陷,但他們可以很嚴重(影響樹搜尋的效果)。

博弈強度

MCTS 演算法,在最基本的形式下,即使針對中等複雜度的博弈也有可能在一定時間內不能夠給出很好的決策。這很可能是由於決策空間的絕對大小和關鍵樹節點在沒有被訪問足夠多的次數的情況下不能夠給出可靠的估值的原因。

幸運的是,演算法的表現可以通過一些技巧來提升。


提升方法

這裡有兩種方法可能有益於提升 MCTS 的實現:一個是對於特定領域,另一個對於所有的領域。

特定的領域(知識)

對於特定博弈的領域知識通常會在進行模擬的階段被開發出來,這樣得到的推出或決策(playout)會與人類的選手的動作更加相似。這意味著推出的結果會變的比隨機模擬更加的真實並且節點會在更少的迭代後產生真實可靠的估值。

特定的領域知識提升方法往往需要知道當前博弈已知的一些技巧,如圍棋中的捕捉動作或者六貫棋中的橋指令。它們對當前博弈有巨大的提升效果,不過同時也犧牲了通用性。

領域獨立(提升方法)

領域獨立提升方法有著很大的應用範圍,是 MCTS 演算法研究中的聖盃,也是當今很多研究所瞄準的方向。許多這樣的提升被提出並與不同層面的成功相吻合,從簡單(博弈並獲勝的移動/避免在推出中可能失敗的移動)到複雜的節點初始化和選擇方法,還有元策略。
可以通過瀏覽提升列表來檢視 MCTS 更多提升的細節


成立的研究課題

MCTS 仍是研究領域中的新的部分,有許多正在進行的研究課題。

演算法提升

幾乎所有針對基本演算法做出的提升建議都需要更多的研究。可以參考該提升列表

自動化調參

最簡單的一個問題是,如何動態地調整搜尋引數,如 UCB 中的偏置引數,來最大化演算法效果,並且是否其他方面的搜尋演算法也能類似地被引數化呢。

節點擴充套件

有些應用適合於每次迭代擴充套件一個節點,而有些則適合多個。至今尚未有清晰的指導來告訴我們哪些情況下應該使用哪個策略,並且是否可以被自動化。

節點可靠性

若能基於情景和節點在搜尋樹中的相對位置,知道一個節點要被訪問了多少次之後才會變得可靠,會非常有用處。

樹形狀分析

我們在這一方面已經針對 UCT 樹會不會根據所給博弈的特定而產生另一些特徵,進行了初步的研究(Williams 2010)。有著不錯的結果。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOSReact前端後端產品設計 等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章