dann的alpha torch_一图解密AlphaZero(附Pytorch实践)
本來(lái)打算自己寫(xiě)寫(xiě)的,但是發(fā)現(xiàn)了David Foster的神作,看了就懂了。我也就不說(shuō)啥了。
看不清的話,原圖在后面的連接也可以找到。
沒(méi)懂?!!!那我再解釋下。
AlphaGo Zero主要由三個(gè)部分組成:自我博弈(self-play),訓(xùn)練和評(píng)估。和AlphaGo 比較,AlphaZero最大的區(qū)別在于,并沒(méi)有采用專家樣本進(jìn)行訓(xùn)練。通過(guò)自己和自己玩的方式產(chǎn)生出訓(xùn)練樣本,通過(guò)產(chǎn)生的樣本進(jìn)行訓(xùn)練;更新的網(wǎng)絡(luò)和更新前的網(wǎng)絡(luò)比賽進(jìn)行評(píng)估。
在開(kāi)始的時(shí)候,整個(gè)系統(tǒng)開(kāi)始依照當(dāng)前最好的網(wǎng)絡(luò)參數(shù)進(jìn)行自我博弈,那么假設(shè)進(jìn)行了10000局的比賽,收集自我博弈過(guò)程中所得到的數(shù)據(jù)。這些數(shù)據(jù)當(dāng)中包括:每一次的棋局狀態(tài)以及在此狀態(tài)下各個(gè)動(dòng)作的概率(由蒙特卡羅搜索樹(shù)得到);每一局的獲勝得分以及所有棋局結(jié)束后的累積得分(勝利的+1分,失敗得-1分,最后各自累加得分),得到的數(shù)據(jù)全部會(huì)被放到一個(gè)大小為500000的數(shù)據(jù)存儲(chǔ)當(dāng)中;然后隨機(jī)的從這個(gè)數(shù)據(jù)當(dāng)中采樣2048個(gè)樣本,1000次迭代更新網(wǎng)絡(luò)。更新之后對(duì)網(wǎng)絡(luò)進(jìn)行評(píng)估:采用當(dāng)前被更新的網(wǎng)絡(luò)和未更新的網(wǎng)絡(luò)進(jìn)行比賽400局,根據(jù)比賽的勝率來(lái)決定是否要接受當(dāng)前更新的網(wǎng)絡(luò)。如果被更新的網(wǎng)絡(luò)獲得了超過(guò)55%的勝率,那么接收該被更新的網(wǎng)絡(luò),否則不接受。
那么我們首先來(lái)看一下AlphaZero的輸入的棋局狀態(tài)到底是什么。如圖所示,是一個(gè)大小為19*19*17的數(shù)據(jù),表示的是17張大小為19*19(和棋盤(pán)的大小相等)的特征圖。其中,8張屬于白子,8張屬于黑子,標(biāo)記為1的地方表示有子,否則標(biāo)記為0 。剩下的一張用全1或者是全0表示當(dāng)前輪到 黑子還是白子了。構(gòu)成的這個(gè)數(shù)據(jù)表示游戲的狀態(tài)輸入到網(wǎng)絡(luò)當(dāng)中進(jìn)行訓(xùn)練。
那么我們來(lái)看一下,AlphaZero的網(wǎng)絡(luò)到底是怎么樣的呢?
這個(gè)網(wǎng)絡(luò)主要由三個(gè)部分組成:由40層殘差網(wǎng)絡(luò)構(gòu)成的特征提取網(wǎng)絡(luò)(身體),以及價(jià)值網(wǎng)絡(luò)以及策略網(wǎng)絡(luò)(兩個(gè)頭)。該網(wǎng)絡(luò)當(dāng)中價(jià)值網(wǎng)絡(luò)所輸出的值作為當(dāng)前的狀態(tài)的價(jià)值估計(jì); 策略網(wǎng)絡(luò)的輸出作為一個(gè)狀態(tài)到動(dòng)作的映射概率。而這兩個(gè)部分的輸出都被引入到蒙特卡羅搜索樹(shù)當(dāng)中,用來(lái)指導(dǎo)最終的下棋決策。那么顯然,價(jià)值網(wǎng)絡(luò)輸出的是一個(gè)1D的標(biāo)量值,在-1到1之間;策略網(wǎng)絡(luò)輸出的是一個(gè)19*19*1的特征圖,其中的每一個(gè)點(diǎn)表示的是下棋到該位置的概率。那我們來(lái)看一下,該網(wǎng)絡(luò)是如何指導(dǎo)蒙特卡羅搜索樹(shù)的。
如圖所示,在圖中的搜索樹(shù)當(dāng)中,黑色的點(diǎn)表示的是從一個(gè)狀態(tài)過(guò)渡到另一個(gè)狀態(tài)的動(dòng)作a;其余的節(jié)點(diǎn)表示的是棋局的狀態(tài),也就是之前所說(shuō)的輸入。從一個(gè)非葉子節(jié)點(diǎn)的狀態(tài)開(kāi)始,往往存在多種可能的行動(dòng),而其中的狀態(tài)節(jié)點(diǎn)a具有4種屬性,他們決定了到底應(yīng)該如何選擇。具體來(lái)講,其中的N表示的是到目前為止,該動(dòng)作節(jié)點(diǎn)被訪問(wèn)的次數(shù);P表示網(wǎng)絡(luò)預(yù)測(cè)出來(lái)的選擇該節(jié)點(diǎn)的概率;W表示下一個(gè)狀態(tài)的總的價(jià)值,而價(jià)值網(wǎng)絡(luò)輸出的動(dòng)作的價(jià)值會(huì)被累及到這個(gè)值當(dāng)中;這個(gè)值除以被訪問(wèn)到的次數(shù)就等于平均的價(jià)值Q。實(shí)際上,還會(huì)給Q加上一個(gè)U來(lái)起到探索更多的動(dòng)作的效果。我想應(yīng)該是非常清楚的。那么如何根據(jù)構(gòu)建出來(lái)的搜索樹(shù)進(jìn)行下棋的步驟呢?在一定的閾值范圍內(nèi)(比如說(shuō),1000個(gè)迭代之前),采用最大化Q函數(shù)的方式來(lái)選擇動(dòng)作;那么當(dāng)大于這個(gè)閾值之后采用蒙特卡羅搜索樹(shù)的方式(例如PUCT算法,也就是根據(jù)概率和被訪問(wèn)的次數(shù))來(lái)選擇執(zhí)行的動(dòng)作。
那我們來(lái)看一下蒙特卡羅搜索樹(shù)在這里面時(shí)如何實(shí)現(xiàn)的。首先是其中的節(jié)點(diǎn):
class Node:
def __init__(self, parent=None, proba=None, move=None):
self.p = proba
self.n = 0
self.w = 0
self.q = 0
self.children = []
self.parent = parent
self.move = move
其中主要為之前所說(shuō)的4個(gè)屬性以及父子節(jié)點(diǎn)的指針。而最后一個(gè)move指出了在當(dāng)前狀態(tài)下的合法下棋步驟。在訓(xùn)練的過(guò)程中,這些值都會(huì)被更新,那么在更新之后如何通過(guò)他們來(lái)進(jìn)行動(dòng)作的選擇呢?
def select(nodes, c_puct=C_PUCT):
" Optimized version of the selection based of the PUCT formula "
total_count = 0
for i in range(nodes.shape[0]):
total_count += nodes[i][1]
action_scores = np.zeros(nodes.shape[0])
for i in range(nodes.shape[0]):
action_scores[i] = nodes[i][0] + c_puct * nodes[i][2] * \
(np.sqrt(total_count) / (1 + nodes[i][1]))
equals = np.where(action_scores == np.max(action_scores))[0]
if equals.shape[0] > 0:
return np.random.choice(equals)
return equals[0]
這里表示的是對(duì)于任何一個(gè)節(jié)點(diǎn),從其所有的子節(jié)點(diǎn)當(dāng)中,通過(guò)PUCT算法找出最大得分的那個(gè)節(jié)點(diǎn)。在這個(gè)得分action_scores[i]的計(jì)算過(guò)程中,網(wǎng)絡(luò)預(yù)測(cè)的概率和該節(jié)點(diǎn)被訪問(wèn)的次數(shù)都有被考慮。對(duì)于被訪問(wèn)到的非葉子節(jié)點(diǎn)繼續(xù)進(jìn)行擴(kuò)展;而如果是葉子節(jié)點(diǎn)則進(jìn)行最終的評(píng)估。至于其中的殘差網(wǎng)絡(luò)模塊,價(jià)值網(wǎng)絡(luò),策略網(wǎng)絡(luò)就不再一一敘述了。詳細(xì)參考:https://github.com/dylandjian/superGo?github.com
References:
總結(jié)
以上是生活随笔為你收集整理的dann的alpha torch_一图解密AlphaZero(附Pytorch实践)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python二维数据读取对齐_从投影的二
- 下一篇: 制作碳排放强度的空间可视化_【科研成果】