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)的一般性解決方法。
這樣的能力無論如何夸大都不為過。這意味著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ù)。
如果說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)練的兩大根基。
在今天的文章中,我將嘗試探討以下三項(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)容。如果以下存在任何謬誤,我向大家誠摯道歉,并期待您能夠加以糾正!
在本示例中,我們的算法將要學(xué)習(xí)如何進(jìn)行Connect4游戲(或者叫四連棋)。其復(fù)雜程度當(dāng)然無法與圍棋相提并論……但其中仍然包含總計(jì)4531985219092個游戲位置。
游戲規(guī)則非常簡單。玩家輪流在可用位置上放入自己顏色的棋子,第一個將四個己方棋子連成一排的玩家獲勝——垂直、水平或者斜向皆可。如果整個棋盤都被填滿但仍未出現(xiàn)四連一排,則游戲打成平局。
下面來看構(gòu)成代碼庫的關(guān)鍵文件摘要:
此文件包含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í)并逐步掌握游戲策略。
本文件中包含開始學(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)。
此文件當(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)練。
此文件包含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ò)中的卷積過濾器
其中包含Node、Edge與MCTS類,其共同構(gòu)成蒙特卡洛搜索樹。
MCTS類包含之前提到的moveToLeaf與backFill方法,且Edge類的各實(shí)例存儲與每項(xiàng)潛在移動相關(guān)的統(tǒng)計(jì)信息。
在此文件中,大家可以設(shè)置將對算法造成影響的關(guān)鍵參數(shù)。
調(diào)整上述變量會對運(yùn)行時間、神經(jīng)網(wǎng)絡(luò)準(zhǔn)確性以及算法的整體成功率造成影響。上述參數(shù)能夠產(chǎn)生高質(zhì)量Connect4玩家,但需要很長時間才能學(xué)習(xí)完成。要加快算法速度,請嘗試使用以下參數(shù)。
此文件當(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ī)
)
在運(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類的一個實(shí)例,用于存儲以往游戲的記憶,以供算法對current_pkayer神經(jīng)網(wǎng)絡(luò)進(jìn)行重新訓(xùn)練。
此文件中包含一項(xiàng)自定義丟失函數(shù),其會在將預(yù)測結(jié)果發(fā)送至交叉熵丟失函數(shù)之前地其進(jìn)行模糊,從而避免出現(xiàn)非法移動。
Run與run_archive文件夾的位置。
日志文件被保存在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é)果
通過幾天的訓(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ī)律。
項(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
編譯整理:科技行者
好文章,需要你的鼓勵
新加坡國立大學(xué)研究團(tuán)隊(duì)開發(fā)了SPIRAL框架,通過讓AI與自己對弈零和游戲來提升推理能力。實(shí)驗(yàn)顯示,僅訓(xùn)練AI玩簡單撲克游戲就能讓其數(shù)學(xué)推理能力提升8.6%,通用推理提升8.4%,且無需任何數(shù)學(xué)題目作為訓(xùn)練材料。研究發(fā)現(xiàn)游戲中的三種推理模式能成功轉(zhuǎn)移到數(shù)學(xué)解題中,為AI訓(xùn)練提供了新思路。
同濟(jì)大學(xué)團(tuán)隊(duì)開發(fā)的GIGA-ToF技術(shù)通過融合多幀圖像的"圖結(jié)構(gòu)"信息,創(chuàng)新性地解決了3D相機(jī)噪聲問題。該技術(shù)利用圖像間的不變幾何關(guān)系,結(jié)合深度學(xué)習(xí)和數(shù)學(xué)優(yōu)化方法,在合成數(shù)據(jù)集上實(shí)現(xiàn)37.9%的精度提升,并在真實(shí)設(shè)備上展現(xiàn)出色泛化能力,為機(jī)器人、AR和自動駕駛等領(lǐng)域提供更可靠的3D視覺解決方案。
伊利諾伊大學(xué)研究團(tuán)隊(duì)通過對比實(shí)驗(yàn)發(fā)現(xiàn),經(jīng)過強(qiáng)化學(xué)習(xí)訓(xùn)練的視覺語言模型雖然表現(xiàn)出"頓悟時刻"現(xiàn)象,但這些自我糾錯行為并不能實(shí)際提升推理準(zhǔn)確率。研究揭示了AI模型存在"生成-驗(yàn)證差距",即生成答案的能力強(qiáng)于驗(yàn)證答案質(zhì)量的能力,且模型在自我驗(yàn)證時無法有效利用視覺信息,為AI多模態(tài)推理發(fā)展提供了重要啟示。
MIT等頂尖機(jī)構(gòu)聯(lián)合提出SparseLoRA技術(shù),通過動態(tài)稀疏性實(shí)現(xiàn)大語言模型訓(xùn)練加速1.6倍,計(jì)算成本降低2.2倍。該方法使用SVD稀疏性估計(jì)器智能選擇重要計(jì)算部分,在保持模型性能的同時顯著提升訓(xùn)練效率,已在多個任務(wù)上驗(yàn)證有效性。