AlphaGo算法原理淺析

2016年3月,AlphaGo與圍棋世界冠軍、職業九段棋手李世石進行圍棋人機大戰,以4比1的總比分獲勝,震驚世界;2017年5月,AlphaGo與排名世界第一的世界圍棋冠軍柯潔對戰,以3比0的總比分獲勝,再次震驚世界。圍棋界公認AlphaGo的圍棋能力已經遠遠超過了人類職業圍棋的頂尖水平了,那麼AlphaGo爲何這麼厲害,它的算法原理是什麼呢,下面結合在互聯網上看到的一些文章,整理思路進行淺析。算法

1、非AI時代的計算機下棋程序基本作法
在信息完整的狀況下,在棋局的每一步,計算機可使用窮舉法,本身與本身下棋(self-play),嘗試每個選擇,模擬全部可能的完整戰局,觀察結果,而後選出最佳走法。
這種方法在五子棋、象棋中還可行,但因爲圍棋的下子地方不少,各類下棋組合很是的大,窮舉法的計算量極其龐大,計算機很難在有效地時間裏窮舉出最佳走法。服務器

案例:

微信

1997年的「深藍」計算機打敗了人類的國際象棋冠軍卡斯帕羅夫,可是沒有人會認爲「深藍」真正擁有了人工智能,這是由於國際象棋的每一步都是可見的。在一個肯定性的棋局下,僅有有限個走法,而在這有限個走法中必然有一個最優的,那麼一個基本的想法就是對棋局進行預測,遍歷(窮舉)每一種走法直到一方勝出,而後回退計算每個可能贏的機率,最後使用機率最高的做爲最優的走法。「深藍」就是這麼作的,暴力窮舉全部的步子,而後找最優的步子。雖然贏了人類,但沒有智能,由於整個算法徹底就是按人工設計的一個算法,體現不出智能之處。網絡

計算機下圍棋,理論上也是能夠暴力破解的,可是問題就在於圍棋的可走的步子太多了,以致於按目前的計算性能根本作不到暴力破解。而另一種方式,是使用蒙特卡洛樹搜索的方法,蒙特卡洛算法經過某種「實驗」的方法,獲得一個隨機變量的估計,從而獲得一個問題的解。這種實驗能夠是計算機的模擬,那蒙特卡洛樹搜索怎麼模擬的。算法會找兩個圍棋傻子(計算機),他們只知道那裏能夠下棋(空白處,和非打劫剛提子處),他們最終下到終局。好了,這就能夠判斷誰贏了。算法就經過模擬M(M>>N)盤,看黑贏的機率。能夠看到這明顯的不合理,由於每步是亂下的,有些棋根本就不可能。機器學習

2、AlphaGo下圍棋的原理
AlphaGo下圍棋的原理借鑑了專業圍棋棋手的思惟,也就是俗話說的「走一步、看三步」。首先會先判斷在哪幾個地方能夠下子,勝算比較大;而後在其中某個地方下子後,在腦海中再日後「算」出n步,後面的棋局會是怎麼樣。
參照這種思惟模式,就不用窮舉全部的狀況了,在AlphaGo裏面,針對上面的思惟模式,涉及到兩個關鍵動做:(1)棋子要下在哪一個位置,(2)推演(「模擬」的方式)在下這一步後,後面幾步對方會怎麼下。
其中,第(1)關鍵動做,又能夠經過第(2)個動做得來,也就是說AlphaGo在面對當前棋局時,她會模擬(推演)棋局N次,選取N次模擬中某步走法的佔比最高,就肯定爲最優走法。
所以,關鍵問題在於,AlphaGo是怎麼作模擬(推演)的。函數

模擬就是AlphaGo本身和本身下棋,相似於棋手在腦殼中的推演,就是棋手說的「計算」。
AlphaGo面對當前局面,會用某種策略,本身和本身下,日後下幾步或者一直下到終局。
AlphaGo會模擬屢次,「不止一次」。愈來愈多的模擬會使AlphaGo的推演「愈來愈深」(一開始就一步,後來多是幾十步),對當前局面的判斷「愈來愈準」(根據後面局面變化的結果追溯到前面的局面,更新對前面局面的判斷),使後面的模擬「愈來愈強」(更接近於正解)。性能

模擬(推演)策略以下:

學習

其中,Q表明action value,u表明bonus。
一、Q其實就是模擬屢次之後,AlphaGo計算走a這步贏的機率,其中會有對將來棋局的模擬(大模擬中的小模擬)和估計,以下:
大數據

Q看上去有點複雜,但其實就是模擬N次之後,AlphaGo認爲模擬這步贏的平均機率。 
分母N是模擬這步棋的次數。分子是每次模擬贏的機率(V)的加和。其中,V又包括兩部分,value net是對形勢的判斷,和一個快速模擬到終局,它贏的機率。人工智能

二、u中包括兩個部分。一方面根據局面(棋形)大概判斷應該有那幾步能夠走,另外一方面懲罰模擬過多的招法,鼓勵探索其它招法,不要老模擬一步,而忽略了其它更優的招法。

這裏u中包括兩個部分,分子是AlphaGo根據當前局面判斷(policy net),不模擬,好比棋手根據棋形大概知道應該有哪幾步能夠走;分母是模擬到如今走當前步的累加,越大下次模擬越不會走這了(這裏就體現了重複模擬的懲罰)。
所以,(Q+u)就是決定在模擬中,下棋方會走(模擬)哪裏。


從上面能夠看出AlphaGo的兩大神器:value net(形勢判斷。模擬中,我走這步,我贏的機率是多少)和policy net(選點。模擬中,這個局面我走那幾步最強)。


一、第一神器policy net
先看下面這張圖。

如今輪到黑棋下,圖上的數字是AlphaGo認爲黑棋應該下這步的機率。咱們還發現,只有幾步(2步在這個圖中)的機率比較大,其餘步可能性都很小。這就像職業棋手了,學圍棋的人知道,初學者會以爲那裏均可以走,就是policy(選點)不行,沒有選擇性;而隨着棋力的不斷增加,選擇的範圍在不斷縮小,職業棋手就會鎖定幾個最有可能的走法,而後去推演之後的變化。AlphaGo經過學習,預測職業選手的着法有57%的準確率。提醒一下,這仍是AlphaGo「一眼」看上去的效果,它沒開始推演(模擬)呢。

那麼AlphaGo是怎麼作的呢?這時就有用到監督學習、深度學習、加強學習等算法了。

(1)監督學習(學習別人的棋譜)
首先,policy net是一個模型。它的輸入是當前的棋局(19*19的棋盤,每一個位置有3種狀態,黑、白、空),輸出是最可能(最優)的着法,每一個空位都有一個機率(可能性)。着法並不是無跡可尋,人類已經下了千年的棋了。policy net先向職業選手學習,她從KGS圍棋服務器,學習了3000萬個局面的下一步怎麼走。也就是說,大概職業選手怎麼走, AlphaGo已經瞭然於胸。學習的目的是,不是單純的記住這個局面,而是類似的局面也會了。當學習的局面足夠多時,幾乎全部局面都會了。這種學習叫作「監督學習」(supervised learning)。
(2)深度學習(提高準確性)
AlphaGo強的緣由之一是policy net這個模型是經過深度學習(deep learning)完成的,深度學習是近幾年興起的模擬人腦(神經網絡)的機器學習方法,它使AlphaGo學習到的policy更加準確。
(3)加強學習(本身跟本身學,生成不少未知的棋局)
AlphaGo從職業棋手學完後,感受沒什麼能夠從職業棋手學的了,爲了超越老師和本身,只能本身左右互搏,經過本身跟本身下,找到更好的policy。好比說,她從監督學習學到了一個policy:P0。AlphaGo會例外作一個模型P1。P1一開始和P0同樣(模型參數相同)。稍微改變P1的參數,而後讓P1和P0下,好比,黑用P1,白用P0選點,直到下完(終局)。模擬屢次後,若是P1比P0強(贏的多),則P1就用新參數,不然,從新在原來基礎上改變參數,咱們會獲得比P0強一點點的P1。注意,選點是按照policy的機率的,因此每次模擬是不一樣的。屢次學習後AlphaGo會不斷超越本身,愈來愈強。這種學習咱們叫作加強學習(reinforcement learning)。它沒有直接的監督信息,而是把模型放在環境中(下棋),經過和環境的互相做用,環境對模型完成任務的好壞給於反饋(贏了仍是輸了),從而模型自行改變本身(更新參數),更好地完成任務(贏棋)。加強學習以後,AlphaGo在80%的棋局中打敗之前的本身。

總結一下policy。它是用來預測下一步「大概」該走哪裏。它使用了深度學習,監督學習,加強學習等方法。


二、第二神器value net
AlphaGo她的靈魂核心就在下面這個公式裏:

V*(s)=Vp*(s)約等於Vp(s)

s是 棋盤的狀態,就是前面說的19*19,每一個交叉3種狀態。
V是對這個狀態的評估,就是說黑贏的機率是多少。
V*是這個評估的真值。
p*是正解(產生正解的policy)
p是AlphaGo前面所說學到的最強的policy net。
若是模擬之後每步都是正解p*,其結果就是V*,這解釋了等號。

AlphaGo天才般的用最強poilicy,p來近似正解p*,從而能夠用p的模擬Vp來近似V*。即便Vp只是一個近似,但已經比如今的職業9段好了。想一想她的p是從職業選手的着法學來的,就是你能想到的棋她都想到了。並且她還在不斷使得p更準。頂尖職業棋手就想之後的20-40步,還會出錯(錯覺)。AlphaGo是模擬到終局,還極少出錯。

圍棋問題實際是一個樹搜索的問題,當前局面是樹根,樹根長出分支來(下步有多少可能性,棋盤上的空處都是可能的),這是樹的廣度,樹不斷生長(推演,模擬),直到葉子節點(終局,或者後面的局面)。樹根到葉子,分了多少次枝(推演的步數)是樹的深度。樹的平均廣度,深度越大,搜索越難,要的計算越多。圍棋平均廣度是250,深度150,象棋平均廣度是35,深度80。若是要遍歷圍棋樹,要搜索250的150次方,是不實際的。這也是圍棋比象棋複雜的多的緣由之一。但更重要的緣由前面講了:是象棋有比較簡單的手工能夠作出的value函數。好比,吃王(將)得正無窮分,吃車得100分,等等。1997年戰勝當時國際象棋世界冠軍的DeepBlue就是人手工設計的value。而圍棋的value比象棋難太多了。手工根本無法搞。又只能靠深度學習了。

value net也是一個監督的深度學習的模型。屢次的模擬的結果(誰贏)爲它提供監督信息。它的模型結構和policy net類似,可是學的目標不一樣。policy是下步走哪裏,value是走這後贏的機率。

總結一下,value net預測下一走以後,贏的機率。自己沒法獲得。可是經過用最強policy來近似正解,該policy的模擬來近似主變化,模擬的結果來近似準確的形勢判斷V*。value net用監督的深度學習去學模擬的獲得的結果。value net 主要用於模擬(在線,下棋的時候)時,計算Q值,就是平均的形勢判斷。

 

再回顧一下模擬,模擬的每一步是兼顧: 模擬到如今平均的形勢判斷value net, 快速rollout模擬到終局的形勢判斷, 根據當前形勢的選點policy,和懲罰過多的模擬同一個下法(鼓勵探索)等方面。通過屢次模擬,樹會搜索的愈來愈廣,愈來愈深。因爲其回溯的機制,Q值愈來愈準,下面的搜索會愈來愈強。由於每次的Q值,都是當前模擬認爲的最優(排除鼓勵探索,屢次後會抵消),模擬最多的下法(樹分支)就是整個模擬中累積認爲最優的下法。

 

歡迎關注本人的微信公衆號「大數據與人工智能Lab」(BigdataAILab),獲取更多資訊

相關文章
相關標籤/搜索