在一款完美的信息類(lèi)游戲中,如果你所需要的一切都能夠讓每一個(gè)玩家在游戲規(guī)則中看到,這不是一件很神奇的事情嗎?
但遺憾的是,對(duì)于像我這樣的普通玩家來(lái)說(shuō),閱讀有關(guān)一款新游戲的玩法規(guī)則只是學(xué)習(xí)玩復(fù)雜游戲旅程中的一小部分,而大部分時(shí)間都花在玩游戲當(dāng)中,當(dāng)然最好是與實(shí)力相當(dāng)?shù)耐婕遥ɑ蛘哂凶銐蚰托膸椭覀儽┞度觞c(diǎn)的更好些的玩家)比賽。經(jīng)常輸?shù)粲螒蚝拖M@勝有時(shí)會(huì)帶來(lái)一定的心理懲罰和獎(jiǎng)勵(lì),不過(guò)這將引導(dǎo)我們逐漸把游戲玩得更好。
也許,在不久的將來(lái),AI語(yǔ)言模型能夠讀取類(lèi)似于國(guó)際象棋這樣的復(fù)雜游戲的規(guī)則,并從一開(kāi)始就盡可能達(dá)到最高水平。與此同時(shí),我提出了一種更溫和的挑戰(zhàn)方式——通過(guò)自我游戲?qū)W習(xí)。
我們要討論的游戲是SumTo100。此游戲的目標(biāo)是通過(guò)對(duì)1到10之間的數(shù)字進(jìn)行加法運(yùn)算來(lái)達(dá)到100的總和。以下是此游戲遵循的規(guī)則:
我們選擇從這樣一款簡(jiǎn)單的游戲開(kāi)始,這樣的做法存在很多優(yōu)點(diǎn):
此圖中,游戲狀態(tài)為AI助理完成其回合后的總和。值為1.0意味著,AI助理肯定會(huì)贏(或已經(jīng)贏);而值為-1.0意味著AI助理一定會(huì)輸(假設(shè)對(duì)手發(fā)揮最佳);中間值表示估計(jì)的回報(bào)值。例如,狀態(tài)值為0.2表示略微正的狀態(tài),而狀態(tài)值為-0.8表示可能的損失。
如果您想對(duì)代碼進(jìn)行深入研究,那么執(zhí)行整個(gè)訓(xùn)練過(guò)程的腳本就是learn_sumTo100.sh,對(duì)應(yīng)的開(kāi)源存儲(chǔ)庫(kù)地址是https://github.com/sebastiengilbert73/tutorial_learnbyplay。如果感覺(jué)不必要,那么請(qǐng)耐心等待,因?yàn)榻酉聛?lái)我們將對(duì)AI助理如何通過(guò)自我游戲?qū)W習(xí)進(jìn)行詳細(xì)的描述。
我們希望我們的AI助理能夠從以前版本的游戲中學(xué)習(xí)。但是,在游戲第一次迭代中,由于AI助理還沒(méi)有學(xué)到任何東西;所以,我們將不得不模擬隨機(jī)玩家玩的游戲。在每一個(gè)回合中,玩家都會(huì)從游戲管理庫(kù)(即編寫(xiě)游戲規(guī)則的類(lèi))獲得當(dāng)前游戲狀態(tài)下的合法動(dòng)作列表。隨機(jī)玩家將從該列表中隨機(jī)選擇一次移動(dòng)。
圖2展示了兩個(gè)隨機(jī)玩家玩游戲的示例:
在這種情況下,第二個(gè)玩家通過(guò)達(dá)到100的總和贏得了游戲。
現(xiàn)在,我們來(lái)實(shí)現(xiàn)一個(gè)可以訪問(wèn)神經(jīng)網(wǎng)絡(luò)的AI助理,該神經(jīng)網(wǎng)絡(luò)將游戲狀態(tài)(在助理玩過(guò)之后)作為輸入,并輸出該游戲的預(yù)期回報(bào)值。對(duì)于任何給定的狀態(tài)(在助理進(jìn)行游戲之前),助理都會(huì)獲得有效動(dòng)作的列表及其相應(yīng)的候選狀態(tài)(我們只考慮具有確定性轉(zhuǎn)換的游戲)。
圖3顯示了AI助理、對(duì)手(其移動(dòng)選擇機(jī)制是未知的)和游戲狀態(tài)管理庫(kù)之間的互動(dòng):
在這種設(shè)置中,AI助理依靠其回歸神經(jīng)網(wǎng)絡(luò)來(lái)預(yù)測(cè)游戲狀態(tài)的預(yù)期回報(bào)值。神經(jīng)網(wǎng)絡(luò)越能預(yù)測(cè)哪一個(gè)候選移動(dòng)產(chǎn)生最高回報(bào)值,助理就越能發(fā)揮其作用。
我們的隨機(jī)玩法列表將為我們提供第一次訓(xùn)練的數(shù)據(jù)集。以圖2中的示例游戲?yàn)槔覀兿霊土P玩家1的動(dòng)作,因?yàn)樗膭?dòng)作導(dǎo)致了失敗。最后一個(gè)動(dòng)作產(chǎn)生的狀態(tài)值為-1.0,因?yàn)樗试S對(duì)手獲勝。其他狀態(tài)通過(guò)γ?因子得到負(fù)值折扣。其中,d是相對(duì)于助理到達(dá)的最后狀態(tài)的距離;γ代表折扣因子,這個(gè)數(shù)范轉(zhuǎn)是[0,1],它表達(dá)了游戲進(jìn)化中的不確定性:我們不想與最后一個(gè)決策那樣嚴(yán)厲地懲罰早期的決策。圖4顯示了與玩家1所做決策相關(guān)的狀態(tài)值:
隨機(jī)游戲生成具有目標(biāo)預(yù)期回報(bào)的狀態(tài)。例如,達(dá)到97的和時(shí)將對(duì)應(yīng)值為-1.0的目標(biāo)預(yù)期回報(bào),而達(dá)到73的和時(shí)則對(duì)應(yīng)于值為-γ3的目標(biāo)預(yù)期收益。一半的狀態(tài)從玩家1的角度出發(fā),另一半從玩家2的角度出發(fā)(盡管在SumTo100游戲中這并不重要)。當(dāng)一場(chǎng)比賽以AI助理獲勝的結(jié)果結(jié)束時(shí),相應(yīng)的狀態(tài)會(huì)得到類(lèi)似的折扣正值。
現(xiàn)在,我們準(zhǔn)備好了開(kāi)始訓(xùn)練所需的一切:一個(gè)神經(jīng)網(wǎng)絡(luò)(我們將使用兩層感知器)和一個(gè)(狀態(tài),預(yù)期回報(bào))數(shù)據(jù)對(duì)的數(shù)據(jù)集。接下來(lái),讓我們看看預(yù)測(cè)預(yù)期回報(bào)值的損失是如何演變的:
我們不應(yīng)該感到驚訝的是,神經(jīng)網(wǎng)絡(luò)對(duì)隨機(jī)玩家玩游戲的結(jié)果沒(méi)有表現(xiàn)出太大的預(yù)測(cè)能力。
那么,神經(jīng)網(wǎng)絡(luò)到底學(xué)到了什么嗎?
幸運(yùn)的是,由于狀態(tài)可以表示為0到100之間的1D數(shù)字網(wǎng)格;因此,我們可以繪制第一輪訓(xùn)練后神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)回報(bào),并將其與圖1中的最佳狀態(tài)值進(jìn)行比較:
上述事實(shí)證明,通過(guò)隨機(jī)游戲的混亂狀態(tài)操作,神經(jīng)網(wǎng)絡(luò)學(xué)到了兩件事:
既然兩名玩家現(xiàn)在都知道他們必須達(dá)到100,那么達(dá)到90到99之間的總和應(yīng)該受到懲罰,因?yàn)閷?duì)手會(huì)抓住機(jī)會(huì)贏得比賽。這種現(xiàn)象在第二輪訓(xùn)練后的預(yù)測(cè)狀態(tài)值中是可見(jiàn)的:
我們看到正在出現(xiàn)一種規(guī)律:第一輪訓(xùn)練通知神經(jīng)網(wǎng)絡(luò)關(guān)于最后一個(gè)動(dòng)作;第二輪訓(xùn)練通知倒數(shù)第二個(gè)動(dòng)作,等等。我們需要重復(fù)游戲生成和預(yù)測(cè)訓(xùn)練的循環(huán),至少與游戲中的動(dòng)作有一樣多的次數(shù)。
以下圖片顯示了第25輪訓(xùn)練后預(yù)測(cè)狀態(tài)值的演變情形:
當(dāng)我們從游戲的結(jié)束走向開(kāi)始時(shí),預(yù)測(cè)回報(bào)的包絡(luò)線(xiàn)指標(biāo)值呈指數(shù)衰減。這是個(gè)問(wèn)題嗎?
造成這種現(xiàn)象的因素有兩個(gè):
在實(shí)際情況中,這應(yīng)該不是一個(gè)問(wèn)題,因?yàn)樵谌魏吻闆r下,我們都會(huì)比較給定狀態(tài)下的有效動(dòng)作的值,這些動(dòng)作具有可比的規(guī)模,至少在SumTo100游戲中是這樣。當(dāng)我們選擇使用貪婪法移動(dòng)時(shí),數(shù)值的規(guī)模并不重要。
我們可以通過(guò)運(yùn)行AI助理的多輪參賽副本來(lái)解決SumTo100的簡(jiǎn)單游戲,并訓(xùn)練一個(gè)回歸神經(jīng)網(wǎng)絡(luò)來(lái)預(yù)測(cè)生成游戲的預(yù)期回報(bào)。
北京市海淀區(qū)中關(guān)村南1條甲1號(hào)ECO中科愛(ài)克大廈6-7層
北京市公安局海淀分局備案編號(hào):110108002980號(hào)營(yíng)業(yè)執(zhí)照
本文地址:http://www.schoolwires.net.cn/article-404.html
上一篇:OpenAI換帥,阿爾特曼出局本人此前表示決策上...
下一篇:谷歌發(fā)現(xiàn)新的英特爾CPU漏洞英特爾已修復(fù)...