精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
DeepMind公布官方教程,開始創建自己的AlphaZero AI吧

科技行者報道

來源:medium.com

作者:David Foster

編譯整理:科技行者

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

AlphaGo對李世石第三盤比賽

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

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

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

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

這項成就之所以值得稱道,主要有以下兩點原因:

1. AlphaZero無需任何人類專家策略作為輸入內容

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

也正因為如此,DeepMind才能夠在初始AlphaGo Zero論文發布的短短48天之后,發布國際象棋與將棋版本。毫不夸張地講,我們需要做的僅僅是變換用于描述游戲機制的輸入文件,同時調整與神經網絡以及蒙特卡洛樹搜索相關的超參數。

2.該算法極為優雅

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

通過潛在的未來場景設計游戲思維,優先考慮更具前景的途徑,同時考慮對方可能選擇的反應行為,同時繼續探索未知。

在達成某種陌生狀態后,評估對當前優勢位置的信心,并將評分與此前采取的達成當前狀態的思維途徑進行映射。

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

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

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

如何構建您自己的AlphaZero

在今天的文章中,我將嘗試探討以下三項內容:

  1. AlphaZero之所以標志著人工智能發展一大步的兩個理由。

  2. 如何重現AlphaZero方法以掌握Connect4游戲。

  3. 如何調整代碼以適應其它游戲。

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

代碼

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

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

現在我們將查看具體代碼內容,并展示一些結果,用以證明AI確實隨著時間推移而變得愈發強大。

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

Connect4

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

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

下面來看構成代碼庫的關鍵文件摘要:

game.py

此文件包含Connect4游戲的基本規則。

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

Connect4行動方塊

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

您可以利用任何擁有同樣API的游戲文件替換game.py,算法會自動根據您提供的規則進行自我學習并逐步掌握游戲策略。

run.ipynb

本文件中包含開始學習過程的相關代碼。其會加載游戲規則,而后通過主算法循環進行迭代,具體分為以下三個階段:

1.  自我對抗

2.  重新訓練神經網絡

3.  評估神經網絡

此循環當中主要涉及兩個代理,分別為best_player與current_player。

其中best_player包含表現最好 神經網絡,并將被用于生成自我對抗記憶。而current_player隨后會根據記憶重新訓練其神經網絡,而后做出最好的選擇。如果贏了,那么best_player當中的神經網絡會被切換為current_player中的神經網絡,而后再次開始循環。

agent.py

此文件當中包含Agent類(游戲中的一位玩家)。每個玩家都會利用自己的神經網絡與蒙特卡洛樹進行初始化。

其中simulate方法運行蒙特卡洛樹搜索過程。具體來講,該代理移動至對的葉節點,利用其神經網絡評估該節點,而后通過該樹回填該節點的值。

而act方法則多次重復模擬,從而理解當前哪個位置為最優行動。此后,其會將選定的行動返回給游戲,并實際加以執行。

最后是replay方法,其負責利用原有游戲記憶對神經網絡進行重新訓練。

model.py

此文件包含Residual_CNN類,其負責定義如何構建神經網絡實例。

它利用AlphaGo Zero論文當中提到的一種神經網絡架構縮寫形式——即卷積層,而后為大量剩余層,最終拆分為一個值與策略標頭。

各卷積過濾器的深度與數量可以在配置文件當中指定。

Keras庫負責構建該網絡,后端則由TensorFlow充當。

要查看該神經網絡當中的各獨立卷積過濾器以及密集連接層,請在run.ipyng記事本當中運行以下命令:

current_player.model.viewLayers()

神經網絡中的卷積過濾器

MCTS.py

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

MCTS類包含之前提到的moveToLeaf與backFill方法,且Edge類的各實例存儲與每項潛在移動相關的統計信息。

config.py

在此文件中,大家可以設置將對算法造成影響的關鍵參數。

調整上述變量會對運行時間、神經網絡準確性以及算法的整體成功率造成影響。上述參數能夠產生高質量Connect4玩家,但需要很長時間才能學習完成。要加快算法速度,請嘗試使用以下參數。

funcs.py

此文件當中包含 playMatches與playMatchesBetweenVersions函數,負責實現兩個代理間的對抗。

要進行自我對抗,請運行以下代碼(同樣位于run.ipynb記事本當中):

from game importGame

from funcs importplayMatchesBetweenVersions

importloggers as lg

env = Game()

playMatchesBetweenVersions(

env

, 1 #計算機玩家所在的運行版本號

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

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

, 10 #進行多少盤游戲

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

, 0 #哪個玩家先起手,-0為隨機

)

initialise.py

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

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

memory.py

Memory類的一個實例,用于存儲以往游戲的記憶,以供算法對current_pkayer神經網絡進行重新訓練。

loss.py

此文件中包含一項自定義丟失函數,其會在將預測結果發送至交叉熵丟失函數之前地其進行模糊,從而避免出現非法移動。

settings.py

Run與run_archive文件夾的位置。

loggers.py

日志文件被保存在run文件夾當中的log文件夾內。

要啟動日志記錄,請在文件中將logger_disabled變量的值設置為False。

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

來自logger.mcts文件的輸出結果

在logger.tourney當中,您可以看到評估階段當中每項移動的具體可能性:

來自logger.tourney文件的輸出結果

結果

通過幾天的訓練,以下為小批量迭代后產生的圖表:

小批量迭代中的丟失情況

第一行為策略標頭中的誤差(MCTS移動可能性中的交叉熵,針對來自神經網絡的輸出結果)。最下一行則為值標頭(實際游戲價值與神經網絡預測值之間的均方誤差)誤差。中間一行則為二者的平均值。

很明顯,該神經網絡在預測每種游戲狀態值以及潛在下一動移動方面表現得越來越好。為了顯示這一結果的提升過程,我從第1次迭代到第49次迭代當中選出17個玩家組成聯盟。每個玩家進行兩次配對,并在其中獲得一次起手權。

以下為最終排名:

很明顯,該神經網絡的新版本要比初始版本更勝一籌,贏得了大部分游戲。另外,學習似乎還沒有飽和——隨著訓練時間的進一步延長,其游戲水平變得更為強大,并能夠學習到愈發復雜的策略。

舉例來說,神經網絡在學習過程中發現的第一項明確策略在于盡早搶占中央列。觀察該算法最初版本與第30次迭代版本間的差異,會發現:

神經網絡最初版本

神經網絡第30次迭代版本

這是一項很好的策略,因為大多四連排布都需要經過中間列——因此應盡早阻止對手利用這一點。神經網絡在無需任何人為輸入的前提下發現了這項規律。

學習其它游戲

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

如果您將Connect4 game.py文件切換為Metasquares game.py文件,即可通過同樣的算法學習如何玩轉Metasquares游戲。

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
手把手:AlphaGo有啥了不起,我也能教你做一個(附Python代碼)
教你用Python和Keras建立自己的AlphaZero
完爆阿爾法狗元,DeepMind用5000臺TPU訓練出新算法,1天內稱霸3種棋類
非得從零開始學習?扒一扒強化學習的致命缺陷
史上最強棋類AI降臨:谷歌公布AlphaGo升級版
AI可以在游戲里稱霸,但是解決現實問題太難了
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 孝感市| 雷山县| 江川县| 安龙县| 丽江市| 鸡东县| 高淳县| 白银市| 延津县| 抚顺县| 沙湾县| 新津县| 栾城县| 临高县| 沁水县| 鄢陵县| 庄浪县| 灯塔市| 奉节县| 久治县| 邳州市| 论坛| 射阳县| 乳山市| 威远县| 潼南县| 漯河市| 屏南县| 烟台市| 浏阳市| 乡城县| 娱乐| 邵武市| 鞍山市| 东城区| 黄浦区| 阿克陶县| 岳池县| 滁州市| 河间市| 弋阳县|