av天堂久久天堂色综合,最近中文字幕mv免费高清在线,在线a级毛片免费视频,av动漫,中文字幕精品亚洲无线码一区

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

  • 科技行者

  • 算力行者

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

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

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

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

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

AlphaGo對(duì)李世石第三盤(pán)比賽

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

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

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

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

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

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

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

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

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

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

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

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

在完成對(duì)未來(lái)可能性的思考之后,采取探索程度最高的行動(dòng)。

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

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

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

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

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

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

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

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

代碼

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

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

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

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

Connect4

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

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

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

game.py

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

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

Connect4行動(dòng)方塊

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

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

run.ipynb

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

1. 自我對(duì)抗

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

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

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

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

agent.py

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

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

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

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

model.py

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

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

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

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

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

current_player.model.viewLayers()

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

MCTS.py

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

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

config.py

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

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

funcs.py

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

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

from game importGame

from funcs importplayMatchesBetweenVersions

importloggers as lg

env = Game()

playMatchesBetweenVersions(

env

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

, -1 #第一玩家版本號(hào)(-1為人類(lèi))

, 12 #第二玩家的版本號(hào)(-1為人類(lèi))

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

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

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

)

initialise.py

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

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

memory.py

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

loss.py

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

settings.py

Run與run_archive文件夾的位置。

loggers.py

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

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

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

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

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

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

結(jié)果

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

小批量迭代中的丟失情況

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

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

以下為最終排名:

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

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

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

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

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

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

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

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

medium.com

作者:David Foster

編譯整理:科技行者

分享至
3贊

好文章,需要你的鼓勵(lì)

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