AlphaGo強的原因之一是policy net這個模型是通過深度學(xué)習(xí)(deep learning)完成的。深度學(xué)習(xí)是近幾年興起的模擬人腦的機器學(xué)習(xí)方法。它使AlphaGo學(xué)習(xí)到的policy更加準(zhǔn)確。以前的AI都沒有那么強的學(xué)習(xí)能力。
更加厲害的是,AlphaGo從職業(yè)棋手學(xué)完后,感覺沒什么可以從職業(yè)棋手學(xué)的了。為了超越老師和自己,獨孤求敗的她只能自己左右互搏,通過自己下自己,找到更好的policy。比如說,她從監(jiān)督學(xué)習(xí)學(xué)到了一個policy,P0。
AlphaGo會例外做一個模型P1。P1一開始和P0一樣(模型參數(shù)相同)。稍微改變P1的參數(shù),然后讓P1和P0下,比如,黑用P1,白用P0選點,直到下完(終局)。模擬多次后,如果P1比P0強(贏的多),則P1就用新參數(shù),否則,重新再原來基礎(chǔ)上改變參數(shù)。我們會得到比P0強一點點的P1。注意,選點是按照policy的概率的,所以每次模擬是不同的。多次學(xué)習(xí)后AlphaGo會不斷超越自己,越來越強。這種學(xué)習(xí)我們叫做增強學(xué)習(xí)(reinforcement learning)。它沒有直接的監(jiān)督信息,而是把模型發(fā)在環(huán)境中(下棋),通過和環(huán)境的互相作用,環(huán)境對模型完成任務(wù)的好壞給于反饋(贏棋還是輸),從而模型改變自己(更新參數(shù)),更好的完成任務(wù)(贏棋)。增強學(xué)習(xí)后,AlphaGo在80%的棋局中戰(zhàn)勝以前的自己。
最后,AlphaGo還有一個mini的policy net,叫rollout。它是用來上面所說的模擬中,快速模擬的終局的。它的輸入比正常policy net小,它的模型也小,所以它的耗時是2微妙,而一個policy要3毫秒。它沒有policy準(zhǔn),但是它快。
總結(jié)一下policy。它是用來預(yù)測下一步“大概”該走哪里。它使用了深度學(xué)習(xí),監(jiān)督學(xué)習(xí),增強學(xué)習(xí)等方法。它主要用于每次模擬中的bonus的先驗(我大概該怎么走),和value net的學(xué)習(xí)(后面的重點)。
如果單純用policy預(yù)測的著法來作為最優(yōu)著法,不通過value net的計算和上面說的模擬,對職業(yè)棋手那是不行的。但是,單純用policy預(yù)測已經(jīng)足夠打敗以前的圍棋AI(大約有業(yè)余5段實力)了。這說明了上面3種學(xué)習(xí)方法的強大威力。
AlphaGo就看了一眼,還沒有推演,你們就敗了。policy net為解開那個死結(jié)走出了第一步,下面我們就講講這第二個“神器”:value net。
10.第二神器value net怎么工作的?
前面說了,形勢判斷是什么無跡可尋,就連職業(yè)9段也做不到。有了policy net,整個世界都不一樣了。AlphaGo她的靈魂核心就在下面這個公式里。
V*(s)=Vp*(s)約等于Vp(s)。
s是棋盤的狀態(tài),就是前面說的19*19,每個交叉3種狀態(tài)。
V是對這個狀態(tài)的評估,就是說黑贏的概率是多少。
V*是這個評估的真值。
p*是正解(產(chǎn)生正解的policy)
p是AlphaGo前面所說學(xué)到的最強的policy net。
如果模擬以后每步都是正解p*,其結(jié)果就是V*,這解釋了等號。
如果你知道V*這個函數(shù),在當(dāng)前局面,你要對走下一步(圍棋平均有250種可能性)后的狀態(tài)s進行評估,選最大的V*走就行。圍棋就完美解決了。但是,前面說了,V*不存在。同樣p*也不存在(理論上存在,實際因為搜索空間太大,計算量太大找不到。在5*5的棋盤中下棋可以做到)。
AlphaGo天才般的用最強poilicy,p來近似正解p*,從而可以用p的模擬Vp來近似V*。即使Vp只是一個近似,但已經(jīng)比現(xiàn)在的職業(yè)9段好了。想想她的p是從職業(yè)選手的著法學(xué)來的,就是你能想到的棋她都想到了。而且她還在不斷使的p更準(zhǔn)。頂尖職業(yè)棋手就想以后的20-40步,還會出錯(錯覺)。AlphaGo是模擬到終局,還極少出錯。天哪,這人還怎么下。
圍棋問題實際是一個樹搜索的問題,當(dāng)前局面是樹根,樹根長出分支來(下步有多少可能性,棋盤上的空處都是可能的),這是樹的廣度,樹不斷生長(推演,模擬),直到葉子節(jié)點(終局,或者后面的局面)。樹根到葉子,分了多少次枝(推演的步數(shù))是樹的深度。樹的平均廣度,深度越大,搜索越難,要的計算越多。圍棋平均廣度是250,深度150,象棋平均廣度是35,深度80。如果要遍歷圍棋樹,要搜索250的150次方,是不實際的。這也是圍棋比象棋復(fù)雜的多的原因之一。但更重要的原因前面講了:是象棋有比較簡單的手工可以做出的value函數(shù)。比如,吃王(將)得正無窮分,吃車得100分,等等。1997年打敗當(dāng)時國際象棋世界冠軍的DeepBlue就是人手工設(shè)計的value。而圍棋的value比象棋難太多了。手工根本沒法搞。又只能靠深度學(xué)習(xí)了。
在講value的原理前,先看看定性看看value的結(jié)果。如圖,這是AlphaGo用value net預(yù)測的走下一步,她贏的概率。空的地方都被藍色標(biāo)示了,越深說明AlphaGo贏的概率越高。這和我們學(xué)的棋理是相符的,在沒有戰(zhàn)斗時,1,2線(靠邊的地方)和中間的概率都低,因為它們效率不高。而且大多數(shù)地方的概率都接近50%。所以說贏棋難,輸棋也很難。這當(dāng)然排除雙方激烈戰(zhàn)斗的情況。