DeepMind 最近又上了新聞,他們最新的AlphaStar在星際爭霸的遊戲中與人類頂級星際玩家打成了11比1,幾乎完勝人類玩家。這篇文章就結合DeepMind的創始人之一David Silver的最後一節強化學習課程,簡單探討一下AI是如何在遊戲領域學習並戰勝人類的。
1.完全信息雙人零和博弈
首先,將遊戲簡化爲雙人零和博弈的遊戲,即爲
- 遊戲參與者只有兩方,你和計算機,或者計算機和計算機。
- 一方的收益必然意味着另一方的損失,博弈各方的收益和損失相加總和永遠爲“零”,(雙方獎勵:R1+R2=0)
有的遊戲, 在任意時刻,雙方是知道遊戲的完全狀態的,這樣的遊戲是完全信息的遊戲,或者說是Markov的遊戲,比如象棋,國際象棋,圍棋等。
有的遊戲是非完全信息的,比如撲克遊戲,你是不知道對方手裏的牌的。
這裏我們研究的是完全信息遊戲,當然我們也假設遊戲的狀態是有限的,遊戲最終會分出勝負,或者是平局。
2.Minmax和Minmax搜索
知道遊戲的全部狀態+有限狀態意味着,玩家可以通過暴力枚舉,來計算所有可能的下法,形成一棵搜索樹(習慣稱爲“Game tree”)
假設遊戲只有4步,不妨令自己先手,枚舉所有可能得走法,得到最後一步的價值如圖:
然後從最後第4步反推第3步。第3步是自己行動,當然要Max(最大化)獎勵,於是反推得到第三步的價值:
第2步是對方行動,由於是零和博弈,所以對方一定是要Min(最小化)獎勵,以此類推就可以得到整個Game tree:
可以看出樹的根是-2,是個負數,這就意味着如果對手能夠算出這個Game tree的話,你投子的一瞬間就已經輸了。
3.Minmax的侷限性和改進方法
理論上來說計算機只要足夠強大,就能通過Minmax搜索出整個Game tree,從而徹底打敗人類。然而,即便是對於很簡單的遊戲,這也是幾乎是不可能的。
一個遊戲的複雜程度是由其深度,也就是樹的層數,以及其分支數目決定的。可以令特徵深度爲d,分支因子爲b,那麼其複雜程度是隨着b和d的大小成指數型增長的。
改進Minmax的方法有很多,這裏重點介紹兩個,值函數近似和剪枝方法。
4. Alpha-beta剪枝
剪枝顧名思義就是減掉多餘的分支,優化分支因子的數目。Alpha-beta剪枝算法是應用最廣的剪枝方法,其原理就是剪掉明顯非最優策略的分支。舉一個簡單的例子就可以理解了。
如上圖,當我們再做game tree 搜索的時候,已知第"1"層Min節點左分支的值函數爲"8",那麼第"0"層Max節點的值函數就必然">=8"。已知"第"2"層Max節點左分支值函數爲"5",那麼第"1"層Min節點的右分支就必然"<=5",所以我們可以直接剪掉這個分支,這個分支剩下的部分就不用搜索了。
Alpha-beta剪枝不僅直接減小了分支因子b,同時還能間接減小深度因子b,比如上面的例子,如果這是一個完整的三層game tree, 減掉之後就變成了二層game tree 了。
5.值函數近似
值函數近似的方法實際上在之前的強化學習文章已經介紹過了,與其讓計算機記住每一個狀態,不如抽取出一些特徵(feature) s和對應的權重(W),將這些特徵和權重代替狀態作爲V函數或者Q函數的輸入,然後過迭代和學習得到近似的最優的V函數和Q函數。
近似函數可以是簡單的線性函數,也可以是複雜的神經網絡。有了近似函數我們就可以用我們熟悉的強化學習算法MC,TD等來學習遊戲了。
6.尾巴
當然這邊文章只是粗淺地介紹了人工智能在遊戲中的基本原理,希望在今後的文章中能夠更加深入地探討人工智能在遊戲領域的應用。
同樣的本文主要的參考資料來自於David Silver 教授(DeepMind 的創始人)在UCL的課程以及Richard S. Sutton and Andrew G. Barto的經典書籍:Reinforcement Learning: An Introduction