日韩av高清在线不卡免费观看,黄色毛片手机在线视频,日本久久成人免费电影,国产精品久久久久久久久无码男男

微信掃一掃,關(guān)注公眾號

  • 科技行者

  • 算力行者

見證連接與計(jì)算的「力量」

首頁 DeepMind公布官方教程,開始創(chuàng)建自己的AlphaZero AI吧

DeepMind公布官方教程,開始創(chuàng)建自己的AlphaZero AI吧

2018-02-01 20:24
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2018-02-01 20:24 ? CNET科技行者

2016年3月,Deepmind的AlphaGo以4比1的比分戰(zhàn)勝18屆圍棋世界冠軍李世石,這場比賽吸引到全球超過2億觀眾。機(jī)器學(xué)會圍棋策略,并擊敗人類頂尖高手,這在以往被視為一種不可能的壯舉——或者至少被認(rèn)為要到十年后才有可能實(shí)現(xiàn)。

AlphaGo對李世石第三盤比賽

這本身已經(jīng)成就了歷史性時刻。但2017年10月18日,DeepMind又再次邁出新的一大步。

在《無需人類知識掌握圍棋游戲》論文當(dāng)中,DeepMind公布了一種新的算法變種,即AlphaGo Zero——其能夠以100比0的比分狂虐AlphaGo。令人難以置信的是,AlphaGo Zero完全通過自學(xué)掌握了圍棋技藝,即以“白板”狀態(tài)起步通過戰(zhàn)勝自我進(jìn)行學(xué)習(xí)。如此一來,無需人類圍棋專家提供的數(shù)據(jù)庫,超人類AI即可成為現(xiàn)實(shí)。

僅僅48天之后,DeepMind于2017年12月5日發(fā)布了另一篇題為《通過自我強(qiáng)化學(xué)習(xí)算法掌握國際象棋與將棋》的論文,展示了AlphaGo Zero如何在國際象棋與將棋領(lǐng)域分別擊敗最強(qiáng)程序StockFish與Elmo。更可怕的是,其整個學(xué)習(xí)過程是——從一竅不通到成為世界上最強(qiáng)的下棋程序——僅用了24個小時。

憑借如此恐怖的實(shí)力,AlphaZero正式誕生——這種通用型算法能夠在無需人類專家策略作為知識基礎(chǔ)的前提下,快速建立起適用于特定目標(biāo)的一般性解決方法。

這項(xiàng)成就之所以值得稱道,主要有以下兩點(diǎn)原因:

1. AlphaZero無需任何人類專家策略作為輸入內(nèi)容

這樣的能力無論如何夸大都不為過。這意味著AlphaGo Zero的底層方法能夠利用完美信息(即比賽雙方皆可隨時了解全盤信息)適應(yīng)任何游戲,即除游戲規(guī)則之外不再需要任何預(yù)先提供的專業(yè)指導(dǎo)。

也正因?yàn)槿绱耍珼eepMind才能夠在初始AlphaGo Zero論文發(fā)布的短短48天之后,發(fā)布國際象棋與將棋版本。毫不夸張地講,我們需要做的僅僅是變換用于描述游戲機(jī)制的輸入文件,同時調(diào)整與神經(jīng)網(wǎng)絡(luò)以及蒙特卡洛樹搜索相關(guān)的超參數(shù)。

2.該算法極為優(yōu)雅

如果說AlphaZero所使用的超復(fù)雜算法全世界只有少數(shù)人能夠理解,仍然不會影響到這項(xiàng)卓越的成就。而更難能可貴的是,其核心實(shí)際上相當(dāng)簡單,甚至可以總結(jié)成以下幾句概括:

通過潛在的未來場景設(shè)計(jì)游戲思維,優(yōu)先考慮更具前景的途徑,同時考慮對方可能選擇的反應(yīng)行為,同時繼續(xù)探索未知。

在達(dá)成某種陌生狀態(tài)后,評估對當(dāng)前優(yōu)勢位置的信心,并將評分與此前采取的達(dá)成當(dāng)前狀態(tài)的思維途徑進(jìn)行映射。

在完成對未來可能性的思考之后,采取探索程度最高的行動。

在游戲結(jié)束時,返回并評估一切錯誤的未來位置價值評估,并相應(yīng)更新自身理解。

這聽起來正是我們每個人游玩游戲時的學(xué)習(xí)過程,對吧?當(dāng)做出錯誤判斷時,很可能是由于我們未能準(zhǔn)確把握所占據(jù)位置的未來價值,或者錯誤判斷了對手執(zhí)行某種操作的可能性,因此錯過了搶占先機(jī)的機(jī)會。而這些,正是成就 Alpha Zero游戲?qū)W習(xí)訓(xùn)練的兩大根基。

如何構(gòu)建您自己的AlphaZero

在今天的文章中,我將嘗試探討以下三項(xiàng)內(nèi)容:

1、AlphaZero之所以標(biāo)志著人工智能發(fā)展一大步的兩個理由。

2、如何重現(xiàn)AlphaZero方法以掌握Connect4游戲。

3、如何調(diào)整代碼以適應(yīng)其它游戲。

首先,查看AlphaGo Zero備忘清單以深入理解AlphaGo Zero的工作原理。我們顯然有必要對代碼中的各個組成部分進(jìn)行遍歷。

代碼

克隆此Git庫,其中包含我所引用的代碼。

要開始整個學(xué)習(xí)過程,首先請運(yùn)行run.ipyng Jupyter記事本中的前兩面。在建立起足夠的游戲位置以填充自身記憶之后,神經(jīng)網(wǎng)絡(luò)即可開始訓(xùn)練。通過更多自我對抗及訓(xùn)練,其將能夠慢慢提升游戲價值以及后續(xù)潛在位置移動判斷方面的能力,從而做出更好的決策并獲得更強(qiáng)大的游戲水平。

現(xiàn)在我們將查看具體代碼內(nèi)容,并展示一些結(jié)果,用以證明AI確實(shí)隨著時間推移而變得愈發(fā)強(qiáng)大。

備注——這只是我個人對于AlphaZero工作原理的理解,這些理解主要基于前文提到的論文內(nèi)容。如果以下存在任何謬誤,我向大家誠摯道歉,并期待您能夠加以糾正!

Connect4

在本示例中,我們的算法將要學(xué)習(xí)如何進(jìn)行Connect4游戲(或者叫四連棋)。其復(fù)雜程度當(dāng)然無法與圍棋相提并論……但其中仍然包含總計(jì)4531985219092個游戲位置。

游戲規(guī)則非常簡單。玩家輪流在可用位置上放入自己顏色的棋子,第一個將四個己方棋子連成一排的玩家獲勝——垂直、水平或者斜向皆可。如果整個棋盤都被填滿但仍未出現(xiàn)四連一排,則游戲打成平局。

下面來看構(gòu)成代碼庫的關(guān)鍵文件摘要:

game.py

此文件包含Connect4游戲的基本規(guī)則。

每個方格被分配一個數(shù)字,范圍為由0到41,如下所示:

Connect4行動方塊

Game.py文件提供游戲狀態(tài)間的轉(zhuǎn)移邏輯,并給出可選行動范圍。舉例來說,若當(dāng)前為空棋盤且將棋子放在38號位,則takeAction方法會返回一個新的游戲狀態(tài),且起手玩家位于中央列的底部。

您可以利用任何擁有同樣API的游戲文件替換game.py,算法會自動根據(jù)您提供的規(guī)則進(jìn)行自我學(xué)習(xí)并逐步掌握游戲策略。

run.ipynb

本文件中包含開始學(xué)習(xí)過程的相關(guān)代碼。其會加載游戲規(guī)則,而后通過主算法循環(huán)進(jìn)行迭代,具體分為以下三個階段:

1. 自我對抗

2. 重新訓(xùn)練神經(jīng)網(wǎng)絡(luò)

3. 評估神經(jīng)網(wǎng)絡(luò)

此循環(huán)當(dāng)中主要涉及兩個代理,分別為best_player與current_player。

其中best_player包含表現(xiàn)最好 神經(jīng)網(wǎng)絡(luò),并將被用于生成自我對抗記憶。而current_player隨后會根據(jù)記憶重新訓(xùn)練其神經(jīng)網(wǎng)絡(luò),而后做出最好的選擇。如果贏了,那么best_player當(dāng)中的神經(jīng)網(wǎng)絡(luò)會被切換為current_player中的神經(jīng)網(wǎng)絡(luò),而后再次開始循環(huán)。

agent.py

此文件當(dāng)中包含Agent類(游戲中的一位玩家)。每個玩家都會利用自己的神經(jīng)網(wǎng)絡(luò)與蒙特卡洛樹進(jìn)行初始化。

其中simulate方法運(yùn)行蒙特卡洛樹搜索過程。具體來講,該代理移動至對的葉節(jié)點(diǎn),利用其神經(jīng)網(wǎng)絡(luò)評估該節(jié)點(diǎn),而后通過該樹回填該節(jié)點(diǎn)的值。

而act方法則多次重復(fù)模擬,從而理解當(dāng)前哪個位置為最優(yōu)行動。此后,其會將選定的行動返回給游戲,并實(shí)際加以執(zhí)行。

最后是replay方法,其負(fù)責(zé)利用原有游戲記憶對神經(jīng)網(wǎng)絡(luò)進(jìn)行重新訓(xùn)練。

model.py

此文件包含Residual_CNN類,其負(fù)責(zé)定義如何構(gòu)建神經(jīng)網(wǎng)絡(luò)實(shí)例。

它利用AlphaGo Zero論文當(dāng)中提到的一種神經(jīng)網(wǎng)絡(luò)架構(gòu)縮寫形式——即卷積層,而后為大量剩余層,最終拆分為一個值與策略標(biāo)頭。

各卷積過濾器的深度與數(shù)量可以在配置文件當(dāng)中指定。

Keras庫負(fù)責(zé)構(gòu)建該網(wǎng)絡(luò),后端則由TensorFlow充當(dāng)。

要查看該神經(jīng)網(wǎng)絡(luò)當(dāng)中的各獨(dú)立卷積過濾器以及密集連接層,請?jiān)趓un.ipyng記事本當(dāng)中運(yùn)行以下命令:

current_player.model.viewLayers()

神經(jīng)網(wǎng)絡(luò)中的卷積過濾器

MCTS.py

其中包含Node、Edge與MCTS類,其共同構(gòu)成蒙特卡洛搜索樹。

MCTS類包含之前提到的moveToLeaf與backFill方法,且Edge類的各實(shí)例存儲與每項(xiàng)潛在移動相關(guān)的統(tǒng)計(jì)信息。

config.py

在此文件中,大家可以設(shè)置將對算法造成影響的關(guān)鍵參數(shù)。

調(diào)整上述變量會對運(yùn)行時間、神經(jīng)網(wǎng)絡(luò)準(zhǔn)確性以及算法的整體成功率造成影響。上述參數(shù)能夠產(chǎn)生高質(zhì)量Connect4玩家,但需要很長時間才能學(xué)習(xí)完成。要加快算法速度,請嘗試使用以下參數(shù)。

funcs.py

此文件當(dāng)中包含 playMatches與playMatchesBetweenVersions函數(shù),負(fù)責(zé)實(shí)現(xiàn)兩個代理間的對抗。

要進(jìn)行自我對抗,請運(yùn)行以下代碼(同樣位于run.ipynb記事本當(dāng)中):

from game importGame

from funcs importplayMatchesBetweenVersions

importloggers as lg

env = Game()

playMatchesBetweenVersions(

env

, 1 #計(jì)算機(jī)玩家所在的運(yùn)行版本號

, -1 #第一玩家版本號(-1為人類)

, 12 #第二玩家的版本號(-1為人類)

, 10 #進(jìn)行多少盤游戲

, lg.logger_tourney #游戲日志記錄位置

, 0 #哪個玩家先起手,-0為隨機(jī)

)

initialise.py

在運(yùn)行算法時,所有模型與記憶文件都將被保存在root目錄下的run文件夾內(nèi)。

若需要稍后從此檢查點(diǎn)重新啟動算法,請將run文件夾移動至run_archive文件夾,并在文件夾名稱中添加運(yùn)行編號。接下來,在initialise.py文件中輸入運(yùn)行編號、模型版本號以及記憶版本號,對應(yīng)于run_archive文件夾中相關(guān)文件的位置。這樣如往常一樣運(yùn)行算法后,即可從此檢查點(diǎn)開始。

memory.py

Memory類的一個實(shí)例,用于存儲以往游戲的記憶,以供算法對current_pkayer神經(jīng)網(wǎng)絡(luò)進(jìn)行重新訓(xùn)練。

loss.py

此文件中包含一項(xiàng)自定義丟失函數(shù),其會在將預(yù)測結(jié)果發(fā)送至交叉熵丟失函數(shù)之前地其進(jìn)行模糊,從而避免出現(xiàn)非法移動。

settings.py

Run與run_archive文件夾的位置。

loggers.py

日志文件被保存在run文件夾當(dāng)中的log文件夾內(nèi)。

要啟動日志記錄,請?jiān)谖募袑ogger_disabled變量的值設(shè)置為False。

查看日志文件將幫助我們理解算法的工作狀態(tài)并掌握其“思路”。舉例來說,以下為logger.mcts文件樣本。

來自logger.mcts文件的輸出結(jié)果

在logger.tourney當(dāng)中,您可以看到評估階段當(dāng)中每項(xiàng)移動的具體可能性:

來自logger.tourney文件的輸出結(jié)果

結(jié)果

通過幾天的訓(xùn)練,以下為小批量迭代后產(chǎn)生的圖表:

小批量迭代中的丟失情況

第一行為策略標(biāo)頭中的誤差(MCTS移動可能性中的交叉熵,針對來自神經(jīng)網(wǎng)絡(luò)的輸出結(jié)果)。最下一行則為值標(biāo)頭(實(shí)際游戲價值與神經(jīng)網(wǎng)絡(luò)預(yù)測值之間的均方誤差)誤差。中間一行則為二者的平均值。

很明顯,該神經(jīng)網(wǎng)絡(luò)在預(yù)測每種游戲狀態(tài)值以及潛在下一動移動方面表現(xiàn)得越來越好。為了顯示這一結(jié)果的提升過程,我從第1次迭代到第49次迭代當(dāng)中選出17個玩家組成聯(lián)盟。每個玩家進(jìn)行兩次配對,并在其中獲得一次起手權(quán)。

以下為最終排名:

很明顯,該神經(jīng)網(wǎng)絡(luò)的新版本要比初始版本更勝一籌,贏得了大部分游戲。另外,學(xué)習(xí)似乎還沒有飽和——隨著訓(xùn)練時間的進(jìn)一步延長,其游戲水平變得更為強(qiáng)大,并能夠?qū)W習(xí)到愈發(fā)復(fù)雜的策略。

舉例來說,神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)過程中發(fā)現(xiàn)的第一項(xiàng)明確策略在于盡早搶占中央列。觀察該算法最初版本與第30次迭代版本間的差異,會發(fā)現(xiàn):

神經(jīng)網(wǎng)絡(luò)最初版本

神經(jīng)網(wǎng)絡(luò)第30次迭代版本

這是一項(xiàng)很好的策略,因?yàn)榇蠖嗨倪B排布都需要經(jīng)過中間列——因此應(yīng)盡早阻止對手利用這一點(diǎn)。神經(jīng)網(wǎng)絡(luò)在無需任何人為輸入的前提下發(fā)現(xiàn)了這項(xiàng)規(guī)律。

學(xué)習(xí)其它游戲

項(xiàng)目的games文件夾當(dāng)中有一個面向“Metasquares”游戲的game.py文件,其基本規(guī)則是在網(wǎng)格當(dāng)中畫下X與O,從而盡可能形成不同大小的正方形。正方形面積越大,得分則越高。當(dāng)網(wǎng)格被畫滿時,得分最高的玩家獲勝。

如果你將Connect4 game.py文件切換為Metasquares game.py文件,即可通過同樣的算法學(xué)習(xí)如何玩轉(zhuǎn)Metasquares游戲。

medium.com

作者:David Foster

編譯整理:科技行者

分享至
3贊

好文章,需要你的鼓勵

推薦文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-