為什么要研究游戲 AI 呢?
作者 | 葉鑫來源 | DatawhaleAI作為時(shí)下計(jì)算機(jī)算法的超級巨星,在例如CV、NLP、語音、機(jī)器人等諸多領(lǐng)域都有廣泛的應(yīng)用。而在游戲領(lǐng)域,AI的應(yīng)用往往被認(rèn)為只是把游戲角色擬人化,算法的第一印象也通常是強(qiáng)化學(xué)習(xí)。但實(shí)際當(dāng)中,AI在游戲中的應(yīng)用卻不止于此。本文就來介紹一下游戲領(lǐng)域的AI應(yīng)用與算法。
自 AI 的想法誕生以來,游戲一直為 AI 的研究過程提供助力。游戲不僅提出有趣且復(fù)雜的問題來供AI解決————例如去精通一個(gè)游戲;它們也為(人類,甚至機(jī)器)用戶能夠體驗(yàn)到的創(chuàng)意以及表達(dá)提供了一個(gè)畫布。因此可以說,游戲是罕見的,是科學(xué)(解決問題)與藝術(shù)相碰撞并相互作用的領(lǐng)域,而這些因素也讓游戲?qū)τ贏I的研究來說成為一個(gè)獨(dú)特并且優(yōu)秀的環(huán)境。然而不僅是AI在游戲中提升,游戲也在AI研究中得到了發(fā)展。——《Artificial Intelligence and Games》
01 從游戲環(huán)節(jié)看AI應(yīng)用
在游戲領(lǐng)域中,AI的應(yīng)用其實(shí)并不僅僅是人們印象中的玩家型戰(zhàn)斗AI。傳統(tǒng)意義上的游戲制作融入了AI的方法之后在各個(gè)環(huán)節(jié)都催生了相應(yīng)的應(yīng)用與算法。如果我們將一款游戲拆開來看他的各個(gè)環(huán)節(jié),這些AI的應(yīng)用就變得直觀起來。
1.1 游戲畫面
在游戲制作的環(huán)節(jié)里,開發(fā)者需要制作相應(yīng)角色的動(dòng)畫模型,來滿足使用者在游戲內(nèi)視覺上的需求,在傳統(tǒng)的游戲制作上,通常需要一名專門游戲原畫師來制作相應(yīng)的內(nèi)容,但是聚焦到游戲內(nèi)角色們的表情與動(dòng)作這些細(xì)節(jié)上時(shí),動(dòng)畫的設(shè)計(jì)通常變得吃力不討好起來,應(yīng)用視覺AI可以將人們的動(dòng)作投影到角色身上,生成相應(yīng)的動(dòng)作表情;而在環(huán)境的設(shè)計(jì)中,AI也可以起到相似的效果,通過輸入現(xiàn)實(shí)的圖片來得到相應(yīng)的游戲畫面。在這個(gè)問題上,CV中的機(jī)器學(xué)習(xí)方法例如姿態(tài)識別,表情識別,GAN等起到了關(guān)鍵性的作用。下面幾個(gè)例子帶你一窺AI是如何創(chuàng)造游戲畫面的。
1.2 玩家型AI
該類型應(yīng)該是最被大眾所熟知的游戲AI類型,2017年AlphaGo擊敗世界圍棋冠軍李世石,2019年OpenAI Five擊敗DOTA2世界冠軍OG證明了AI在游戲上的表現(xiàn)可以超越人類。而此類AI問題本質(zhì)上可以看成是路徑規(guī)劃問題,即根據(jù)當(dāng)前的游戲狀態(tài)生成相應(yīng)的動(dòng)作序列。典型的以強(qiáng)化學(xué)習(xí)、深度強(qiáng)化學(xué)習(xí)為代表的游戲AI目前在國內(nèi)的游戲工業(yè)界已被大量研究,在某些游戲類型例如棋牌類、回合制策略游戲中,蒙特卡洛搜索樹(行為樹)、演化算法、A*等在線學(xué)習(xí)算法也具有一定優(yōu)勢。
1.3 游戲內(nèi)容
在這一方面的AI應(yīng)用常常不為人所知,通常被稱為Procedural Content Generation(PCG)。在游戲內(nèi)容(地圖)的產(chǎn)出上,以魔獸爭霸3為例,一方面依賴于游戲本體制作時(shí)開發(fā)者制作的地圖;另一方面依賴于社區(qū)玩家的自定義地圖,而社區(qū)玩家內(nèi)容又更是由玩家數(shù)量所決定,豐富且可行的游戲內(nèi)容是吸引玩家入坑的重要保障。利用AI去生成可行的游戲內(nèi)容是非常值得研究的方向。目前該方向的主流算法包括演化算法、GAN等。
1.4 游戲初始化平衡
目前在卡牌類游戲中,為了初始化得到的卡牌或是環(huán)境相對平衡,在PVE游戲中體現(xiàn)為玩家可以戰(zhàn)勝Bot,PVP游戲例如爐石傳說、自走棋,防止出現(xiàn)雙方卡牌差距過大導(dǎo)致輸?shù)?,可以利用AI來設(shè)計(jì)發(fā)牌的策略。該方向的主要算法為演化算法。
1.5 游戲測試
在游戲制作完成后,開發(fā)者們需要測試游戲內(nèi)存在的bug,這毫無疑問是重要的,如果一款游戲存在大量的bug,對該游戲的評價(jià)和收益都會(huì)造成巨大的影響。而測試游戲需要大量的時(shí)間,在這一方面,測試專用的agent可以被設(shè)計(jì)來面對這一挑戰(zhàn),目前這一塊的算法主要為蒙特卡洛搜索樹、強(qiáng)化學(xué)習(xí)、深度強(qiáng)化學(xué)習(xí)等。
1.6 用戶畫像
在游戲的運(yùn)營過程中,玩家在游戲內(nèi)的行為會(huì)產(chǎn)生豐富且復(fù)雜的數(shù)據(jù),這些數(shù)據(jù)內(nèi)折射了玩家的行為,分析并合理利用這些數(shù)據(jù)可以提煉出有價(jià)值的信息,這些信息可以用作促進(jìn)游戲更新更多玩家喜歡的內(nèi)容,預(yù)測玩家的行為和喜好,檢測作弊外掛等。這一種游戲中的數(shù)據(jù)分析問題被稱為用戶畫像問題,利用合理的機(jī)器學(xué)習(xí)算法可以極大提升玩家的游戲體驗(yàn)。
02 AI應(yīng)用在游戲中的詳細(xì)分類
【硬核預(yù)警】下面將參考開篇提到的的《Artificial Intelligence and Games》,對游戲領(lǐng)域的AI從應(yīng)用和方法兩方面做匯總介紹,在方法部分會(huì)涉及大量AI技術(shù)。
- 利用AI玩游戲
- 利用AI為玩家建模
- 利用AI生成游戲內(nèi)容
2.1 利用AI玩游戲
在游戲中建立bot。
依據(jù)數(shù)據(jù)和預(yù)算產(chǎn)生不同水平的agent,可以與玩家共同匹配或作為PVE的NPC等提高玩家體驗(yàn)水平,由此引申的功能可以有動(dòng)態(tài)難度調(diào)節(jié),游戲自動(dòng)平衡。
在投入運(yùn)行前,可以通過投入大量的有測試行為的agent進(jìn)入游戲,根據(jù)其行動(dòng)期間的log異常來得到一些bug,或是通過bot間的對戰(zhàn),依據(jù)一定的判定方法來得到版本數(shù)值平衡性分析。
在游戲投入運(yùn)行得到一定的玩家數(shù)據(jù)前,可以使用agent的行動(dòng)來得到仿真的玩家數(shù)據(jù),例如陣型識別,勝率預(yù)測等數(shù)據(jù)。
根據(jù)共同演化的方法,一系列基礎(chǔ)的agent可以通過參數(shù)演化或者agent間對抗性的方法來催生性能更好的agent。
尋路規(guī)劃可以被視為AI動(dòng)作序列輸出的一種特例。在某些游戲例如馬里奧中,尋路算法本身就構(gòu)成了AI player。
- Planning-based:最佳優(yōu)先搜索(例如 ),蒙特卡洛樹搜索,演化規(guī)劃
- 基于模型的強(qiáng)化學(xué)習(xí)
- 靜態(tài)類方法:狀態(tài)機(jī),行為樹,基于效用(啟發(fā)式)函數(shù)的AI方法
- planning-based:STRIPS(符號化表示規(guī)劃)
- 強(qiáng)化學(xué)習(xí):需要高度表格化表示。
- 深度強(qiáng)化學(xué)習(xí):基于游戲圖像,不需要標(biāo)記數(shù)據(jù),但需要有游戲?qū)崟r(shí)的獎(jiǎng)勵(lì)設(shè)置。
- 演化算法:通過演化算法來更新神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和權(quán)重來達(dá)到最優(yōu)化。
- 模仿學(xué)習(xí):根據(jù)玩家的數(shù)據(jù)來學(xué)習(xí)游戲的策略,基于游戲圖像,需要玩家數(shù)據(jù)。
- 逆強(qiáng)化學(xué)習(xí):根據(jù)策略來學(xué)習(xí)游戲中的獎(jiǎng)勵(lì)分布。
2.2 利用AI生成游戲內(nèi)容
就是PCG(Procedural content generation),利用AI的方法去協(xié)助設(shè)計(jì)游戲系統(tǒng),前置要求是需要比較好的數(shù)據(jù)(包括數(shù)據(jù)的質(zhì)量,數(shù)據(jù)的代表方式,數(shù)據(jù)的數(shù)量)和有代表性的評估方法(包括美學(xué),可玩性,新奇性)。具體的應(yīng)用方法需要進(jìn)一步查閱資料。
使用領(lǐng)域規(guī)則根據(jù)隨機(jī)初始狀態(tài)生成大量不規(guī)則圖形,可用于熱量、雨水、液體流動(dòng)、壓力爆炸等環(huán)境系統(tǒng)建模,也可以生成洞窟等小型地圖,但無法保證可控性。
定義一系列文法規(guī)則來生成內(nèi)容。
相較于機(jī)器學(xué)習(xí)的方法,搜索方法可以大大減少所需求的數(shù)據(jù)量,關(guān)鍵問題有例如需要確定較好的內(nèi)容表示形式,需要有一種較好的評估手段。有以下幾種分類:
- EA類算法:遺傳算法,演化策略,演化編程
- EA like 算法:粒子群演算法,差分進(jìn)化算法
- content representation
- 評估方法
-
直接評估是通過某種函數(shù)去約束評估生成的內(nèi)容,包括Theory-driven和Data-driven,區(qū)別在于評估函數(shù)是基于理論還是經(jīng)驗(yàn)?zāi)P偷摹?
-
基于仿真是利用bot AI去進(jìn)行游戲來評估游戲的內(nèi)容。包括靜態(tài)評估和動(dòng)態(tài)評估,區(qū)別是評估函數(shù)是否會(huì)隨著時(shí)間改變。
-
互動(dòng)評估屬于實(shí)時(shí)評估,通過人類玩家的體驗(yàn)進(jìn)行評價(jià)。包括隱式評估-通過玩家玩游戲產(chǎn)生的數(shù)據(jù)來分析內(nèi)容好壞,以及顯式評估- 玩家直接評分
PCG研究的一個(gè)新方向是在現(xiàn)有內(nèi)容上訓(xùn)練生成器,以便能夠產(chǎn)生更多相同類型和風(fēng)格的內(nèi)容。這是受最近的深度神經(jīng)網(wǎng)絡(luò)研究結(jié)果的啟發(fā),其中生成式對抗網(wǎng)絡(luò)和變異自動(dòng)編碼器等網(wǎng)絡(luò)架構(gòu)在學(xué)習(xí)生成臥室、貓或人臉等圖像方面取得了很好的效果,同時(shí)也受到了早期研究結(jié)果的啟發(fā),其中較簡單的學(xué)習(xí)機(jī)制如馬爾科夫鏈和較復(fù)雜的架構(gòu)如遞歸神經(jīng)網(wǎng)絡(luò)都在一些語料庫的訓(xùn)練后學(xué)習(xí)生成文本和音樂。
- 神經(jīng)網(wǎng)絡(luò),包括GAN,AutoEncoder和NeuroEvolution等等。
-
概率模型,包括決策樹等
大致的PCGML數(shù)據(jù)代表方式與訓(xùn)練方法總結(jié)如下:e.將游戲生成內(nèi)容與玩家體驗(yàn)結(jié)合(EDPCG,Expierience-driven PCG),它包括了三個(gè)核心方面: 情緒激發(fā)、情緒檢測和情緒表達(dá)。1.數(shù)據(jù)representation:
- Sqquences: 利用順序的向量來作為輸入(輸出)數(shù)據(jù)
- Grid: 使用2D的網(wǎng)格結(jié)構(gòu)來作為輸入(輸出)數(shù)據(jù)
- Graph:使用原始圖像作為輸入(輸出)數(shù)據(jù)
2.PCGML訓(xùn)練方法:
- Backpropagation: 利用反向傳播作為訓(xùn)練NN的方法來
- Evolution: 使用演化計(jì)算方法來訓(xùn)練NN或是直接生成結(jié)果
- Frequency Count:使用統(tǒng)計(jì)學(xué)與馬爾科夫鏈變種來計(jì)算概率
- Expectation Maximization: 利用EA算法來訓(xùn)練無監(jiān)督學(xué)習(xí)模型
- Matrix Factorization:矩陣因子化是一種數(shù)學(xué)方法來將輸入的矩陣分解到更低維度的方法
- 情緒激發(fā): 游戲?yàn)榧ぐl(fā)情感提供了出色的背景構(gòu)件,因?yàn)榇碳な亲兓模瑏碜圆煌膩碓?,如圖像、聲音、故事等等。
- 情緒檢測: 游戲用戶(玩家)通常更愿意提供更多的多模態(tài)性質(zhì)的輸入(通過傳感器),只要這將導(dǎo)致體驗(yàn)的增強(qiáng)。從某種意義上說,玩家是情感計(jì)算和多模態(tài)交互研究的最佳用戶。
- 情緒表達(dá): 用戶在游戲中自愿經(jīng)歷一系列的體驗(yàn):這些體驗(yàn)從非常積極的到非常消極的都有。同時(shí),游戲中的情感體驗(yàn)是受玩家影響的! 因此,玩家習(xí)慣于并在很大程度上對基于情感的表達(dá)持開放態(tài)度!
2.3 利用AI為玩家建模
利用游戲產(chǎn)生的數(shù)據(jù)來為玩家建立體驗(yàn)或行為模型(包括其消費(fèi)預(yù)測,游戲性行為預(yù)測,體驗(yàn)感預(yù)測)或是進(jìn)一步利用該數(shù)據(jù)來更新與描述游戲(例如平衡性分析,游戲流派,提供給Agent更多的訓(xùn)練數(shù)據(jù))
b.理解玩家在游戲中的行為。AI輔助分析游戲行為,例如發(fā)掘一些新的游戲玩法;可以根據(jù)異常數(shù)據(jù)來判定外掛等作弊系統(tǒng);形成可觀的游戲數(shù)據(jù)來支持新的游戲AI迭代;輔助設(shè)計(jì)更具有公平性的匹配系統(tǒng);預(yù)測玩家的行為;對玩家社交群體分類;分析玩家的性格。
-
Experience: 玩家在游戲過程中的感受,包括:一系列(合成的)感受、認(rèn)知、行為狀態(tài),或是其他的用戶狀態(tài),情緒和認(rèn)知等
-
Behavior:玩家在游戲過程中的行為。
-
model-based(理論驅(qū)動(dòng)):從一些列玩家心理學(xué)、認(rèn)知學(xué)的研究中得到一些玩家對應(yīng)游戲的模型,來自上而下的設(shè)計(jì)游戲
-
model-free(數(shù)據(jù)驅(qū)動(dòng)):不利用之前的學(xué)科研究來對玩家進(jìn)行自下而上的建模,其中包括可視化,例如熱力圖來衡量玩家的活動(dòng)頻率。
玩家建模包括尋找一個(gè)函數(shù),將玩家的一組可測量的屬性映射到特定的玩家狀態(tài)。按照監(jiān)督學(xué)習(xí)的方法,這是通過機(jī)器學(xué)習(xí)或自動(dòng)調(diào)整模型的參數(shù)來實(shí)現(xiàn)的,以適應(yīng)包含一組輸入樣本的數(shù)據(jù)集,每個(gè)樣本與目標(biāo)輸出配對。輸入樣本對應(yīng)于可測量的屬性(或特征)列表,而目標(biāo)輸出對應(yīng)于我們有興趣學(xué)習(xí)預(yù)測的每個(gè)輸入樣本的玩家狀態(tài)的注釋。如前所述,注釋可以從行為特征,如關(guān)卡或玩家原型的完成時(shí)間,到玩家經(jīng)驗(yàn)的估計(jì),如玩家的挫折感等。
很多時(shí)候,我們面臨的數(shù)據(jù)集是沒有關(guān)于玩家行為或經(jīng)驗(yàn)狀態(tài)的目標(biāo)輸出。在這種情況下,玩家的建模必須依靠無監(jiān)督學(xué)習(xí)。無監(jiān)督學(xué)習(xí)的重點(diǎn)是通過發(fā)現(xiàn)輸入的關(guān)聯(lián),在沒有獲得目標(biāo)輸出的情況下,將模型與觀察結(jié)果相匹配。輸入通常被視為一組隨機(jī)變量,通過觀察輸入向量之間的關(guān)聯(lián)來建立模型。應(yīng)用于玩家建模的無監(jiān)督學(xué)習(xí)包括聚類和關(guān)聯(lián)挖掘等任務(wù)。