為了創(chuàng)建游戲中的AI機(jī)器人,游戲開發(fā)者通常會(huì)根據(jù)規(guī)則手工編寫一系列代碼。在大多數(shù)情況下,這種方法能使機(jī)器人在模仿人上做到極盡逼真,但它們本質(zhì)上和人還是有較大區(qū)別,大部分玩家還是一眼就能分辨出這個(gè)隊(duì)友/敵人究竟是真人還是AI。
那么,除了手動(dòng)寫規(guī)則,或是寫一些硬編碼,我們還有別的方式能使游戲AI更仿真嗎?如果我們想讓AI通過觀察人類行為學(xué)會(huì)打游戲,我們?cè)撛趺醋觯?/p>
為了探索這些問題,我們首先需要一個(gè)能提供大量比賽數(shù)據(jù)的游戲,比如《FIFA》。所以接下來我們就以《FIFA》系列的最新版《FIFA 18》為例,用記錄了玩家行為和決定的大量游戲錄像訓(xùn)練一個(gè)端到端的深度學(xué)習(xí)機(jī)器人。需要注意一點(diǎn)是,我們不會(huì)針對(duì)單個(gè)游戲規(guī)則編寫硬編碼。
Github地址:github.com/ChintanTrivedi/DeepGamingAI_FIFA.git
玩游戲的機(jī)制
因?yàn)槲覀儾荒茉L問游戲的內(nèi)部代碼,所以為機(jī)器人構(gòu)建基本的游戲機(jī)制是一個(gè)首要任務(wù)。這其實(shí)也是種優(yōu)勢,這個(gè)項(xiàng)目的一個(gè)前提就是不依賴任何游戲內(nèi)部信息。因此,我們的機(jī)器人只會(huì)看到簡單的游戲窗口屏幕截圖,玩家看到的是什么,它看到的就是什么。它會(huì)通過處理這些視覺信息輸出想要采取的動(dòng)作,并用手柄模擬器把指令傳達(dá)給游戲。之后不斷刷新圖像,重復(fù)循環(huán)。
如上圖所示,現(xiàn)在我們建立了一整個(gè)為機(jī)器人提供輸入,并由它輸出操控游戲角色的指令的框架。這時(shí)我們就來到了一個(gè)有趣的環(huán)節(jié):學(xué)習(xí)游戲智能。它可以被分為兩個(gè)步驟:(1)用卷積神經(jīng)網(wǎng)絡(luò)理解截圖;(2)用長短期記憶網(wǎng)絡(luò)理解圖像內(nèi)容并做出決策。
第1步:訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)(CNN)
CNN以其能高精度檢測圖像中物體的能力而聞名。在它的基礎(chǔ)上,我們輔之以高性能的GPU、更智能的神經(jīng)網(wǎng)絡(luò)架構(gòu),我們就能獲得一個(gè)可以實(shí)時(shí)運(yùn)行的CNN模型。
為了讓我們的機(jī)器人了解輸入的圖像,我們可以使用這個(gè)名為MobileNet的輕量級(jí)、高速CNN。該網(wǎng)絡(luò)能在高度理解截圖的前提下從圖中抓取特征圖,例如玩家或玩家關(guān)注的角色在屏幕上的位置。之后再結(jié)合物體檢測模型SSD檢測球場上的球員、球以及球門。
第2步:訓(xùn)練長期短期記憶網(wǎng)絡(luò)(LSTM)
現(xiàn)在我們已經(jīng)理解了圖像,也就是說機(jī)器人擁有了進(jìn)行決策的能力。但是我們不希望只讓它看到一個(gè)個(gè)檢測框然后采取行動(dòng),我們希望它能看到圖像的短序列。這就是為什么引入LSTM的原因——它們能夠模擬視頻數(shù)據(jù)中的時(shí)間序列。我們把連續(xù)的幀用作時(shí)間步長,并用CNN模型從每一幀中提取特征映射,再把這些同時(shí)饋入兩個(gè)LSTM網(wǎng)絡(luò)。
第一個(gè)LSTM負(fù)責(zé)了解玩家需要做什么動(dòng)作,因此,這就是一個(gè)多類分類模型。第二個(gè)LSTM得到的輸入和第一個(gè)相同,但它必須決定采取什么動(dòng)作來實(shí)現(xiàn)橫傳、直塞、短傳、射門:另一個(gè)多類分類模型。我們把這兩個(gè)分類問題的輸出轉(zhuǎn)換為按鍵,以此達(dá)到控制游戲的目的。
評(píng)估機(jī)器人的性能
除了讓AI機(jī)器人直接上賽場,其實(shí)我們也找不出任何測試性能的方法。在訓(xùn)練了400分鐘后,機(jī)器人學(xué)會(huì)了向?qū)Ψ角蜷T靠近、向前方傳球并在發(fā)現(xiàn)球門時(shí)射門。在《FIFA 18》的新手模式下,我們的機(jī)器人在6常比賽中打進(jìn)了4粒球,比17/18賽季的Paul Pogba還多出1球。
(口音聽不太清,請(qǐng)自己練聽力)
小結(jié)
這只是一種創(chuàng)建機(jī)器人的方法,就結(jié)果來看,它還是挺積極的。訓(xùn)練中也曾出現(xiàn)兩個(gè)問題,一是機(jī)器人分不清敵我雙方,另一個(gè)則是它把球踢過半場就開始往回跑。關(guān)于第一點(diǎn),作者的解決方案是把截圖和按鍵信息作為監(jiān)督學(xué)習(xí)的訓(xùn)練數(shù)據(jù),并始終用相同的主隊(duì)和不同的客隊(duì)比賽,久而久之,機(jī)器人就能分出哪些是自己人,哪些是對(duì)手。而關(guān)于第二點(diǎn),一位網(wǎng)友提出了一種更為簡單的解決方案,就是以中線為界把球場分為兩部分,翻轉(zhuǎn)一側(cè)的截圖并調(diào)整方位,起到事半功倍的效果。
在有限的訓(xùn)練下,機(jī)器人已經(jīng)掌握了基本的比賽規(guī)則:朝球門移動(dòng)并把球踢進(jìn)網(wǎng)里。如果再經(jīng)過一段時(shí)間的訓(xùn)練,相信它能比現(xiàn)有的游戲AI更接近人類,而且更容易創(chuàng)建。此外,如果我們能擴(kuò)展一下這個(gè)實(shí)驗(yàn),用真實(shí)的比賽數(shù)據(jù)來訓(xùn)練它,相信機(jī)器人的行為能更自然和現(xiàn)實(shí)。所以也許游戲開發(fā)商們可以換種方式來做AI了,你說對(duì)嗎,EA?
-
機(jī)器人
+關(guān)注
關(guān)注
211文章
28714瀏覽量
208720 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4785瀏覽量
101246 -
AI
+關(guān)注
關(guān)注
87文章
31753瀏覽量
270536
原文標(biāo)題:自制AI隊(duì)友:創(chuàng)建一個(gè)會(huì)玩《FIFA 18》的深度神經(jīng)網(wǎng)絡(luò)
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論