針對遊戲開發者舉辦的交流講座活動「CEDEC 2019」,在 2019 年 9 月 4 日至 6 日間於日本橫濱國際平和會議場舉行。在以下報導當中,就要和大家介紹「以 AI 製作 AI」這種獨特嘗試為主題的講座「並非只有製作『強悍』才是有能!以深度學習來製作 3D 動作遊戲中的敵人 AI」。
講座中登壇的主講者是 Luminous Productions 的程式設計師--
上段達弘。他在進入 SQUARE ENIX 公司後,參與遊戲引擎
「Luminous Studio」的開發,並在
《Final Fantasy XV》當中負責搭載 AI 相關的各種要素。因此上段設計師進行的技術實證,就是以《
Final Fantasy XV》風格的戰鬥作為主題,探討如何使用深度學習技術,在盡可能壓低各種成本的前提下製作出敵人角色的 AI。
-
Luminous Productions 上段達弘
-
想要製作敵人角色的 AI,過去通常是透過編寫腳本語言,或者是採用參數表等手法來製作。
而 Luminous Studio 則是採用稱為「AI Graph」的工具,讓並非程式技術人員的成員也可以參與製作 AI,但上段設計師表示,即使如此依然無法避免需要編程能力的作業出現。在實際製作遊戲時,要加入多少種怪物,就必須要重覆多少次這種 AI 製作過程,所以要投注在上面的各種成本相當可觀。所以他們才會想到,「讓 AI 來製作敵人 AI」這樣的點子。使用 AI 的深度學習技術,光靠持續模擬各種情況就可以完成敵人角色的 AI,在需要量產時也會更加輕鬆。
這時設定的目標為以下三項:
-
不靠人手就能自動製作 AI
-
要維持看起來自然,而且還頗為聰明的水準
-
準備讓企劃人員能夠在之後調整 AI 的方法
其中第一項是為了節省人力,第二項是要製作出看起來夠水準的 AI,這些都很好理解,但為什麼必須要在之後還能透過人工來調整呢?
這是因為最終目的並不是單純製作出更強悍的 AI,比如說已經學習到某個怪獸動作最佳解的 AI,就會展現出完全沒有任何破綻非常機械性的動作,擊垮玩家。這種敵人的確是「很強」,但是站在玩家立場來看一點也不好玩。做為玩家遊戲對手的 AI,必須要刻意製造出破綻來承受玩家攻擊,或是以讓玩家方便攻略的模式加以行動,並在此前提下,表現出像或有勇猛或有膽小的個性才行。
所以才必須要準備好讓企劃人員能在完成後再自行調整的系統。
在這次專案中最關鍵的一點,就是「強化學習」。所謂的強化學習,是指在做出正確行動後就給予報酬,讓 AI 學習到哪些行動會被鼓勵的手法,簡單來說就是在訓練狗狗時,給牠零食要牠握手的訓練方式。
就這次專案來說,「製造傷害」和「閃避敵人攻擊」等行動就可獲得報酬。所以 AI 就會在多次模擬中學習到哪些行動能獲得報酬,並且讓行動模式趨向能夠獲得更多的報酬。
上段設計師使用的是名為「DQN」(Deep Q Network)的 AI 程式,DQN 當然也會學習要怎麼做才會獲得更多報酬,但還會同時考慮到代表「將來有可能會獲得的報酬」,被稱為 Q 值的數值。
也就是說,有可能會排除當下可以直接獲得報酬的行動,選擇在經過一段時間之後,有可能會獲得更多報酬的行動。以上對於外行人來說,可能是難以理解的事情,但總之只要先了解到,「採取適合敵人角色的行動,就可以獲得報酬的 AI,會為了獲得更多的報酬而持續學習」,這樣子應該也就足夠了。
在一開始是隨機施展出各種攻擊的 AI,經過一段時間的學習之後,就會學到要在適當的時機施展攻擊,以及為了讓招式命中而調整位置等等,越來越符合遊戲敵人角色該有的行動。附帶一提學習是完全自動的過程,並不需要有人在旁邊監視,但上段設計師表示因為 AI 學習時的模式實在很是可愛,所以自己總是會忍不住盯著看。
不過如果只是這樣持續學習,就會變成上面也有提到的那種,只會採取最佳行動的無趣 AI。實際上在不斷持續深度學習過程後,的確產生出一個只會施展各種強悍招式的 AI。
這種問題可以透過調整報酬來防止,而且還能夠強調出敵人角色的個性。比如說如果 AI 只會重覆施展強悍招式的話,就可以設定成在採取同樣行動時不給報酬。想要製作出會展開接近戰鬥的 AI 時,就可以設定在縮短和對手間距離時會給予報酬。透過這些調整的手段,就可以讓 AI 學會要適當使用各種不同的招式來作戰。
到了這個階段後,就可以嘗試投入複數 AI 角色來測試團體戰,但卻因為 AI 的攻擊太過激烈而讓人完全沒有還手的餘地。這在某種程度上是已經可以預測到的問題,也一樣是靠調整報酬的方式來解決。
比如說設定成「在伙伴 AI 進行攻擊時發動攻擊,也不會獲得報酬」,就可以讓 AI 學習到,當有人已經在發動攻擊時,剩下的人就要在一旁等待結果。因為這些調整並不是編寫腳本語言,也不是使用邏輯程式,所以和過去的做法相比之下,需要花費的勞力相當少。
接下來上段設計師開始讓 AI 學習使用遊戲控制器操作,製作出能自動控制玩家角色的 AI。這時採用的方式,可不能使用和製作敵人角色 AI 時完全一樣的手法。
在製作敵人角色的時候,只要先選擇行動,行動結束後再判斷如何評價以及要不要給予報酬就好。像這樣子的過程,DQN 程式只要在每二到三秒之間執行一次就好。
但製作玩家角色的時候,除了必須要持續使用遊戲控制器操作,還因為不是馬上就會開始行動(比如按下攻擊鈕之後到施展招式為止會有數毫秒的空檔),所以 DQN 程式就必須要以 0.2 秒為間隔不斷執行。
而且因為操作是連續不斷的過程,所以 AI 也很難了解到是哪一個操作讓他獲得報酬,在給予評價和報酬時必須要回朔到幾秒之前的行動才行。在會場上公開播放了一段由 AI 操作的玩家角色和敵人角色戰鬥的場面,雙方的動作都很自然,完全看不出是由 AI 在操作。
AI 在經歷過這些學習過程後,還不能直接使用在遊戲裡。就像在本文一開始提到的一樣,因為學習的結果並不完全是企劃人員希望的結果,所以就必須要在學習完畢後再由人手介入。上段設計師還在這個階段,加入只要變更行動價值,就不需要重新學習也能調整 AI 行動的系統,在製作過程中可以對應更多細節。
AI 大概只需要花上五到七小時進行學習,就能夠獲得很出色的結果。為了縮短作業時間,所以把十二層不同場地層層相疊,場上會有許多 AI 在進行對戰,看起來就像是少年格鬥漫畫中出現的修練場一樣。
在培育 AI 的過程中,也浮現出可能碰上的問題。因為 AI 在選擇行動時包含一定程度的隨機要素,因此想要製造「在這個行動之後,一定會做那個動作」這種演出時,就必須要使用腳本語言。
另外因為 AI 很難重現出程式漏洞,像是在除錯等需要重現出程式漏洞的情況下,這的確可以說是個一定會發生的問題。
而且 AI 雖然在已經學習過的環境下可以完美採取行動,但是無法應對未知的狀況。比如說把在平地環境學習的 AI 投入高低差激烈的地形裡,他的動作就會顯得綁手綁腳。為了防止這種情況發生,就只能讓 AI 在各種不同的環境下學習,目前只有這種必須花費時間在上面的方法可以解決。AI 在學習時需要敵對的 AI,敵對 AI 的品質越高,學習結果也就越好,製作敵對 AI 的勞力也是絕對不能省略的過程(讓玩家角色 AI 和敵人 AI 在完全空白的狀態下互相對戰,感覺好像就能讓雙方同時快速成長,但實際測試之後,才知道因為雙方都只會持續隨機出招,所以完全派不上用場)。
使用深度學習技術來製作遊戲敵人角色的 AI,而且因為一昧強悍稱不上是個合格的遊戲對手,所以最後要由人類加以調整打造出更好的 AI。最近在各種棋類競技當中,越來越強悍的 AI 常常成為大家討論的話題,不過這次講座是談論製造 AI 時,還要考慮到遊戲的獨特環境,內容相當引人入勝。上段設計師採取的手法目前尚在實驗階段,如果真的完成耗費極低成本就可以量產適合遊戲使用之 AI 的技術,那應該能為遊戲開發催生出更多全新的可能性才對,非常令人期待他的進展。