最近入坑用AI打游戲,決定先去扒alphagao是怎么做的
圍棋AI早期利用圍棋知識(shí)、棋譜進(jìn)行特征匹配之后擁抱蒙特卡洛樹搜索,在Alphago中在蒙特卡羅樹搜索的框架下,使用了監(jiān)督學(xué)習(xí)和增強(qiáng)學(xué)習(xí)的方法。數(shù)據(jù)來自160,000盤6-9段玩家的圍棋對(duì)戰(zhàn),共29,400,000個(gè)棋局
下面是算法大致構(gòu)架
說明:
蒙特卡羅樹搜索
個(gè)人認(rèn)為蒙特卡洛樹搜索是邏輯最為復(fù)雜的地方
首先熟悉一下蒙特卡羅方法
蒙特卡羅方法是一種統(tǒng)計(jì)模擬方法,是使用隨機(jī)數(shù)(或更常見的偽隨機(jī)數(shù))來解決很多計(jì)算問題的方法。當(dāng)所求解問題是某種隨機(jī)事件出現(xiàn)的概率,或者是某個(gè)隨機(jī)變量的期望值時(shí),通過“實(shí)驗(yàn)”的方法,以這種事件出現(xiàn)的頻率估計(jì)這一隨機(jī)事件的概率,或者得到這個(gè)隨機(jī)變量的某些數(shù)字特征,并將其作為問題的解。它是一種有偏估計(jì)。
舉個(gè)栗子:
希望得到π值的估計(jì),那么就在一個(gè)圓的外切正方形內(nèi)隨機(jī)放置100000個(gè)點(diǎn),通過坐落在園內(nèi)的點(diǎn)與全部點(diǎn)的比來得到π的估計(jì)。
再如計(jì)算積分,通過模擬點(diǎn)落在積分曲線內(nèi)部的概率得到這部分面積的估計(jì)。
蒙特卡羅樹搜索和蒙特卡羅方法還是不一樣的,前者沒有是無偏的。蒙特卡羅方法做的是概率估計(jì)而蒙特卡羅樹搜索卻可以做到局面估計(jì)。
蒙特卡洛樹搜索主要涉及到選擇、擴(kuò)展、模擬以及反向更新四個(gè)步驟
選擇過程會(huì)兼顧勝率和多樣性
具體到Alphago的算法:
選擇:

有兼顧到reward和多樣性
擴(kuò)展:
如果到達(dá)的葉子節(jié)點(diǎn)訪問次數(shù)不足閾值,是不做擴(kuò)展的,僅僅更新價(jià)值估計(jì)
如果超過了閾值,則做拓展,拓展節(jié)點(diǎn)訪問次數(shù)置為0,并用SL Policy Network求取落字先驗(yàn)
模擬:
使用value net進(jìn)行估計(jì)
使用rollout net快速走子進(jìn)行估計(jì)
綜合二者得到擴(kuò)展的葉節(jié)點(diǎn)的價(jià)值
反向更新:
各節(jié)點(diǎn)的訪問次數(shù)更新
各節(jié)點(diǎn)的價(jià)值更新(取均值)
落子選擇:
選擇訪問次數(shù)最多的