From AlphaGo Zero to 2048论文分享
0 摘要
近年來,游戲 2048 獲得了巨大的人氣 [6]。游戲允許玩家移動屏幕上的數字(2 的冪,例如 2、4、8、16 等),總和至少為 2048。因為它只有 4 個動作,所以很容易上手: 上、下、左、右。但是,很難獲得大于或等于 2048 的數字,因為您在當前狀態下所做的每個操作都會導致數百個不可預知的結果。在本文中,我們提出了一種用于 AlphaGo Zero 和 2048 游戲的類似算法,具有獨特的獎勵和懲罰系統,以提高人工智能 (AI) 的自學速度并為 AI的自動播放模式獲得更高的分數。此外,基于具有 Alpha-Beta 修剪的 Minimax 算法、Expectiminimax 算法和蒙特卡洛樹搜索 (MCTS) 的結果,我們得出結論,蒙特卡洛樹搜索在應用于 2048 游戲時優于其他算法。最后,我們表明具有強化學習的人工智能 [9] 可以擊敗人類在 2048 年游戲中取得的最高分。
1 引言
AlphaGo [10] 是一個玩棋盤游戲 Go [12] 的計算機程序。而且,它是第一個擊敗職業人類圍棋選手的計算機程序,也是第一個擊敗世界圍棋冠軍的程序。 AlphaGo 是由 Alphabet Inc. 在倫敦的 Google DeepMind 開發的。它有三個更強大的繼任者,稱為 AlphaGo Master、AlphaGo Zero 和 AlphaZero [12]。最早的版本 AlphaGo 需要成千上萬的人類業余和專業游戲來學習和掌握圍棋游戲,而 AlphaGo Zero 是第一個從完全隨機的游戲開始,通過與自己玩圍棋游戲來學習的版本。已經證明 AlphaGo Zero 比之前的版本 [11] 更好。自從 AlphaGo Zero 廣受好評后,人們就開始嘗試研究 AlphaGo Zero 的算法/方法,以便將其應用到其他游戲中。在本文中,我們將展示一個可以自動玩游戲 2048 并在合理的運行時間內最大化游戲分數的 AI。
Game 2048 是一款單人益智游戲。 Gabriele Cirulli 是一位意大利用戶界面設計師和 Web 開發人員,他創建了這款游戲并于 2014 年 3 月發布了它 [13]。游戲 2048 很簡單:給玩家一個 4 × 4 的棋盤,其中每個牌可能包含一個 2 的冪的數字。開始時,只有兩個編號的牌,編號為 2 或 4。玩家控制并通過按箭頭鍵更改棋盤,棋盤中的圖塊會根據玩家移動。例如,如果你按向上鍵,所有的圖塊都會向上。如果相鄰單元格上的數字匹配,它們將合并;否則,它們將保持在原來的位置(見圖 1)。此外,每次移動后,一個新的數字,2 或 4,將均勻地出現在一個空單元格上,配給可以設置。在本文中,我們將 2 和 4 之間的出現比率設置為 9:1。玩家的目標是在 4 × 4 網格上滑動編號的圖塊,以合并并創建一個編號為 2048 或更大的圖塊(參見圖 1)。當沒有空單元格且沒有更多有效動作時,游戲結束。如果在游戲結束前棋盤上出現了編號為 2048 的棋子,則玩家獲勝。
圖 1:游戲 2048 中的移動示例。左圖顯示當前狀態,右圖顯示“向上”移動后的下一個狀態。 左邊有兩個 8。 向上移動瓷磚后,底部的 8 將向上移動并與上面相同的數字 8 合并,組合成一個 16。
我們認為以下三種方法是最流行和最有效的策略:帶有 alpha-beta 剪枝的 Minimax 算法、Expectimax 算法和 Monte Carlo Tree Search (MCTS)。 然后我們根據我們在訓練 AI 時為游戲設置的規則設置獎勵和懲罰。 這樣一來,2048就可以從單人益智游戲衍生到自動AI游戲,這意味著在整個自學過程中不再需要人機交互。 在沒有來自人類專家的數據集的情況下訓練人工智能對于開發具有超人技能的人工智能具有重要意義,因為專家數據通常很昂貴、不可靠或根本不可用。
論文主要分為三個部分:
a) 帶有 alpha-beta-pruning 的 Minimax 算法
b) Expectimax 算法
c) 蒙特卡洛樹搜索 (MCTS)
2 兩種獎懲制度
我們設置了兩種獎懲系統:一種使用權重矩陣α,另一種使用權重矩陣β。 權重矩陣 α 是一個在右上角具有最高值且其值沿對角線遞減的矩陣(見圖 2)。 權重矩陣 β 看起來像一個貪食蛇形狀,玩家沿著路徑滑動圖塊并將它們合并到同一個右上角(參見圖 3)。
Figure 2: Weight Matrix α
圖 3:左:橫向貪食蛇形狀的權重矩陣 β; 右圖:水平-垂直貪食蛇形狀的權重矩陣 β
根據我們的實驗,將具有接近值的圖塊放在一起通常會導致更多可能的合并。 顯然,單次滑動可以合并兩個相同編號的圖塊,同時按升序或降序管理不同的圖塊,這可以幫助圖塊以后連續合并。 從直覺上可以看出,將具有接近值的圖塊放置在彼此附近通常會導致更多可能的合并。 對于相同編號的圖塊,單次滑動即可合并; 對于不同編號的圖塊,按升序或降序排列是合理的,這樣它們就可以連續合并。 因此,它似乎試圖使用在一個角上具有最高權重并沿對角線遞減的矩陣 α。
由于矩陣 α 并沒有在很大程度上區分圖塊:兩個圖塊的不同權重可能會因它們承載的數量差異而減弱,因此創建權重矩陣 β 以擴大權重范圍。 權重矩陣 β 是貪食蛇形的(見圖 3)。 啟發式是我們期望沿著貪食蛇的滑動和合并將更大的數字放在角落里。 在嘗試了具有各種權重值的對稱和貪食蛇形權重矩陣后,我們發現貪食蛇形權重矩陣的性能最好。
3 三種樹搜索算法
游戲2048可以被視為兩人游戲,人類玩家與計算機對戰。 輪到人類通過選擇四個基本方向之一來移動棋盤:上、下、左或右; 然后,計算機扮演在其中一個空單元格中隨機放置一個數字 2 或 4 的角色。 因此,Minimax 算法首先引起了我們的注意,因為它是一種在包含兩個玩家的游戲中廣泛使用的決策規則。
將 Minimax 算法應用于 2048 游戲時,計算機扮演對手角色,只需以 9:1 的概率比放置 2 或 4 的新圖塊。 首先,我們解釋算法中的符號:
(1) players:agent,opponent 代理人,對手
(2) s: the grid board that reflects the current state 反映當前狀態的網格板
(3) a: the action taken 采取的行動
(4) actions(s): possible actions at state s 狀態 s 的可能動作
(5) result(s, a): resulting state if action a is chosen at state s 如果在狀態 s 選擇動作 a,則結果狀態
(6) isEnd(s): whether s is an end state (the game is over) s是否為結束狀態(游戲結束)
(7) eval(s): evaluation at state s 狀態 s 的評估
(8) player(s) ∈ players: the player that controls state s 控制狀態 s 的玩家
(9) totalScore(s): the score at the end of the game 比賽結束時的比分
(10) d: the current depth of the search tree 搜索樹的當前深度
Minimax算法的數學公式如下:
玩家可以從每一輪中的四個動作中選擇一個,即,動作a∈{上,下,左,右}。 動作a隨機將2或4放入當前棋盤的空格子中。 當達到最大深度或導致游戲結束時,每輪評估函數將重新調整每個turn作為當前分數。
接下來,我們從上面的Mini-Max算法派生了Expectimax算法。 不同之處在于我們在代理節點和對手節點之間添加了機會節點。 因此,當我們將啟發式和域知識添加到我們的評估功能時,當AI到達最后一個深度級別時,或者游戲結束時,算法的偽代碼如下:
Expectimax算法具有一些缺點,例如要分析的移動次數快速增加深度,并且計算功率限制了算法可以走的深度。 因此,我們嘗試了第三種方法:蒙特卡羅樹搜索。 蒙特卡羅樹搜索的基本思想是基于強盜(Bandit-based)的方法。 一名球員需要選擇K個動作中的某個動作,并通過不斷選擇最佳移動來最大化累積獎勵。 一旦玩家選擇,此動作的真正獎勵將取決于隨后可能的移動。
蒙特卡羅樹搜索算法列舉了將游戲2048的狀態S作為輸入的神經網絡作為輸入,并輸出移動概率和值(P,V)。 標量值V表示狀態s的“善良”。 在AZG,v代表了從這個狀態獲勝的概率,但由于我們只有一個玩家,它也是使用當前網絡的預期當前游戲結果和平均結果之間的比率。 這樣,大于1的值為良好,低于1的值不是那么好(見圖4 [1])。
Figure 4: MCTS
在每個狀態下,執行 MCTS,并構建一棵樹,根節點為初始狀態 s0s_0s0?。 對于樹中的每個狀態 sss,有四個邊(s,a)(s, a)(s,a) 對應于可能的移動,每個邊包含統計信息:
- (1) N(s,a)N(s, a)N(s,a) - number of times action has been taken from state s 從狀態
s 采取行動的次數 - (2) W(s,a)W (s, a)W(s,a) - total value of move a from state s 從狀態 s 移動
a 的總值 - (3) Q(s,a)Q(s, a)Q(s,a) - mean value of move a from state s 從狀態 s 移動 a 的平均值
- (4) P(s,a)P(s, a)P(s,a) - prior probability of selection move a 選擇移動a的先驗概率
該算法迭代三個階段(最初 1600 次):
- (1) 選擇:每次迭代從 s0s_0s0? 開始,并在模擬到達葉節點 sLs_LsL? 時結束。 在每個時間 ttt,根據搜索樹中的統計信息選擇一個移動。
U(s,a)=P(s,a)∑bN(s,b)1+N(s,a)(1)U(s, a)=P(s, a) \frac{\sqrt{\sum_{b} N(s, b)}}{1+N(s, a)} \tag1U(s,a)=P(s,a)1+N(s,a)∑b?N(s,b)??(1)
此搜索控制策略最初更喜歡高概率和低訪問計數的操作,但漸近地更喜歡具有高動作值的動作。
- (2) 擴展和評估:使用當前神經網絡進行評估葉節點sLs_LsL? 。 葉節點被擴展,每個邊緣(sLs_LsL?,aaa)初始化為N=0,W=0,Q=0,P=paN = 0,W = 0,Q = 0,P = paN=0,W=0,Q=0,P=pa。 然后備份值vvv。
-(3) 反向傳播:邊緣統計信息在反向傳播中更新。
N(s,a)=N(s,a)+1,W(s,a)=W(s,a)+v,Q(s,a)=W(s,a)/N(s,a).N(s, a) = N(s, a) + 1, \\W (s, a) = W (s, a) +v, \\Q(s, a) = W (s, a)/N(s, a).N(s,a)=N(s,a)+1,W(s,a)=W(s,a)+v,Q(s,a)=W(s,a)/N(s,a).
一旦迭代完成,計算概率。 下一步移動只是最大選擇。 在其訓練階段,AGZ按分布進行抽樣。 我們使用了一個確定性的選擇,因為2048游戲存在如此多的隨機性。
我們注意到,更深入的深度導致搜索樹的維度爆炸。 此外,整個樹搜索算法探討了樹的一些不必要的部分。 因此,我們在所有三種樹搜索算法中實現了Alpha-Beta修剪,以防止這些問題。Alpha-Beta修剪估計兩個值:Alpha(增益的較低限制)和Beta(增益的上限)。 在任何情況下,在Beta小于Alpha的情況下,將修剪其余的子樹。
在利用蛇形權重矩陣βββ的人啟發式時,我們只考慮一些最重要的空圖塊,它們對它們具有更高的權重。 經過具有最小值(深度,空圖塊的數目,4)或(深度,空圖塊的數目,6)的幾個圖塊后,這些界限通常更靠近在一起。 只要α和β的范圍內存在一些重疊,這種會聚不是問題。 在評估節點時,我們可能會發現它已經移動了其中一個界限,使得α和β之間不再存在任何重疊。此時,我們知道此節點永遠不會導致我們將考慮的解決方案路徑,因此我們可能會停止處理此節點。 換句話說,我們停止生成其子節點,然后返回其父節點并完成這個子樹修剪。
4 具有Alpha-Beta修剪的Minimax算法
2048游戲具有離散狀態空間,其包含完美的信息。它也是棋盤和跳棋等轉向的游戲。因此,我們可以使用alpha-beta修剪應用于Minimax Search,這已被證明在這種類型的游戲上工作。單調性啟發式試圖確保圖塊的值沿左/右和上/下方向呈增加或減小。這個啟發式唯一表明了許多其他人提到的直覺,那么高價值的圖塊應該被聚集在一個角落里。它通常會阻止孤立的較小值圖塊,并將游戲板組織得非常好,較小的圖塊級聯并填充較大的圖塊。獨自啟發式傾向于創建一個結構,其中相鄰的圖塊的值下降。然而,為了合并,相鄰的圖塊需要顯然是相同的價值。因此,平滑性啟發式只是測量相鄰圖塊之間的值差異,以便最小化這一計數。最后,免費圖塊太少有懲罰,因為當游戲板變得過于狹窄時,選擇可以快速耗盡。
表1說明了具有alpha-beta修剪的Minimax算法的結果。
4.1 Expectimax Optimization預期優化
AI需要10ms到200ms以執行移動,具體取決于游戲板位置的復雜性。 此期望算法有四種啟發式方法:
- (1)為開放方塊授予“獎金”
- (2)在邊緣上有大值的授予“獎金”
- (3)在級別增加時對增加的非單調行和列進行懲罰,因為大量的非單調行大幅影響了得分。
- (4)除了打開空間之外,第二啟發式計算潛在合并的數量(相鄰的等值)。
通過遠程控制運行100次后,預期算法的結果如表2所示。
基于表2中的結果,觀察到深度2, 3和4的平均分數分別為11279,16766和59436,并且每個深度的實現最大得分為31924,33940和59436。 AI永遠不會獲得至少一次2048圖塊。 這場比賽花費了27830次移動,超過96分鐘,平均每秒4.8次移動。 最初,存在兩個啟發式方法:為開放方塊授予“獎金”,并且在邊緣上具有大值。
4.2 Monte Carlo Tree Search蒙特卡洛樹搜索
如果我們從隨機初始化的神經網絡開始,所實現的模擬器的分數在500到4000的范圍內。這些分數類似于隨機播放的結果。 訓練進行了10個小時。 當我們在蒙特卡羅樹中使用100種模擬時,總共進行66個訓練周期。 所有16個模擬器組合的都能每秒執行大約7個移動。 在所有66個周期中,新的訓練模型能夠用舊的權重擊敗神經網絡四次。 最好的得分為2638。
在Monte Carlo樹中使用50模擬時,32個游戲模擬器能夠每秒執行大約40個移動。 在10小時的游戲和訓練期間,完成了334個訓練周期,并且新版本的初始模型實現了一個更好的中位數得分兩倍。
在開發和測試過程中,中性網絡的參數大多保持不變,同時僅嘗試不同的學習率和殘留層的量。 其他參數,如網絡所在的樣本數量在每個訓練周期上訓練,也試圖播放評估模型的游戲量以實現更好的結果。 遺憾的是,嘗試的組合都無法在游戲玩法的10小時內從自行播放中改進模型,并且在訓練過程中的結果與隨機初始化網絡所實現的結果類似。 蒙特卡羅樹搜索的結果已顯示在表3。
總結
以上是生活随笔為你收集整理的From AlphaGo Zero to 2048论文分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 风格迁移--U-GAT-IT模型(ICL
- 下一篇: 傅里叶变换原理解析