LV. 42
GP 236

【心得】機器學習於遊戲業的發展和應用

樓主 Serenade lindark
今天我想跟大家分享的主題是一個在台灣遊戲業很少看到,但實際上卻跟遊戲非常相關的領域,也就是人工智慧(Artificial Intelligence, AI),並且本文所提的是專指含有機器學習(Machine Learning)機制之AI。雖然作遊戲的不一定會接觸AI,但作AI的倒是滿喜歡從電子遊戲來做研究。因為遊戲就像是個小型的虛擬世界,先在這個有限條件的世界測試演算法可能性,在慢慢發展到現實世界可用的版本。

本文的目的並不是要說做這個領域有多好賺,或著台灣遊戲業不重視這塊領域。而是希望從遊戲的角度,讓大家了解AI並不是只有程式和數學,有的時候更需要的是一些想像力。如果有興趣想走這個領域的話,最後我也會提些個人心得。

AI的發展
我認為AI現在之所以會如此頻繁的出現在人們的視線中,還真的是從AlphaGo在2016年接連打敗幾個圍棋職業高手開始。因為即使在這之前已經有打贏西洋棋高手的深藍電腦,但要開發圍棋的AI其複雜度完全不是開發西洋棋或象棋AI同個等級的。

在此前提之下,AlphaGo使用的核心理論,也是目前機器學習的主流深度學習(Deep learning) 理論。其基礎類神經網路(Neural Network)實際上是已經存在很久的演算法,過去也曾有一段時間被認為沒有什麼價值而很少人深入。

而AI之所以在最近幾年不斷的快速發展,除了學者不斷改進類神經網路理論的缺點外。另一個重要的原因則是顯示卡晶片製程的進步,原來用來計算多邊型讓遊戲畫面變得更漂亮的GPU,被發現非常適合用於處理多層類神經網路的計算,克服了深度學習非常耗時的缺點。就在這一切都準備好了之後,剩下的就是一個發光發熱的舞台。

我敢說AlphaGo絕對是AI發展史上一個里程碑,它用圍棋這個規則簡單、變化卻又極其複雜的遊戲,向大家展示了在「學習」這件事情上,AI已經超越人類了。

不只社會大眾意識到AI可以只用幾年的時間,就重新定義有幾千年歷史的圍棋遊戲。就連學界的教授也發現到一個新大陸紛紛投入研究,開啟了AI的黃金時代

已用於電子遊戲對戰的AI
現在AI在圍棋界的發展已經進入到AI大戰AI,神仙打架的環境界了,人類基本上不是對手。不過人類棋士倒也不是毫無所獲,現在直接向AI學習比起過去進步更快

開發AlphaGo的DeepMind團隊也離開了圍棋開始探索其它電子遊戲的可能性。有在接觸這方面新聞的板友可能也聽說過用來進行星海爭霸2(StarCraft2)對戰的AI - AlphaStar,或著由OpenAI開發的DOTA2 AI - OpenAI Five

這兩個遊戲AI在一定的條件下已經可以穩定勝過人類玩家,而我相信要完全勝過人類也是遲早的事。因為像這種吃操作和反應的電競遊戲,AI本來就有強大的優勢,只要在戰術選擇上不要太差,基本上都是很容易贏的。

也許有的人會認為人類設計了一款遊戲,然後在設計一個用來玩遊戲的AI,這麼做究竟有什麼意義呢?這當然是有意義的,像是星海2的AlphaStar就是要去學習在不完全的資訊中了解人類對手的意圖,選擇最合適的戰略。而DOTA2的OpenAI Five則是在學習團隊合作的機制,尤其是當AI與人類隊友配合的時候,電腦能不能讀懂人類的想法並給予幫助,更是AI領域非常重要的研究目標。

也就是說人類研究AI的目的並不是要電腦勝過人類,而是要讓電腦去了解人類
另外不知道大家還記不記得過去曾經有個叫作QWOP的跑步模擬器小遊戲。1個月前有個工程師用閒暇時間寫了玩QWOP的AI,然後也成功成為世界紀錄第一名,可以參考他在YouTube的視頻

從某種角度來看寫玩這種小遊戲的AI也實在是沒有任何意義。不過讓我們換一個思考方式,製造雙足移動的機器人一直以來都是人類夢想中的一個研究主題。如果能用設計QWOP的AI概念延伸,是否能夠設計一個能夠在現實世界行走得更加穩定,還能夠跌倒中回復姿態的機器人AI呢?

AI用於開發遊戲的可能性
前面提到的AI研究團隊都還不算是任職於遊戲公司。雖然前面提到台灣遊戲業還沒有成熟到可以去運用AI。但像EA、UBISOFT這種國際大廠,或著是對岸的遊戲公司。都已經開始去探索AI用於遊戲的可能性,而這正是現在AI研究的一個重點

AI可以幫我們做些什麼?該怎麼做?

例如是否能夠設計一個專門用來測試遊戲BUG的AI?如果要做的話需要蒐集怎麼樣的資料,輸入是什麼?輸出又是什麼?模型要怎麼設計?做機器學習的人大概就是在研究這些,可以說是數學、理論和想法的結合

或著是用來生成更符合人類美感的遊戲地圖,隨機生成地圖這個機制很多遊戲都有,但大多是野外場景。因為生成野外地圖的時候,大家還不會特別在意一棵樹、一個石頭或一條河被擺在什麼位置,只要注意合理性就可以。但在生成室內或著城鎮地圖時,人們就會開始注意物件擺放位置是否美觀,以及是否給人重複感。而這也是AI領域的一個應用,如果能夠訓練AI了解人類的美感,就能夠讓設計師更有效率的完成工作

如何進入AI的相關產業
如果只是想單純的體驗機器學習,那麼可以使用python的Keras套件,網路上有非常多的教學使用起來非常便利。幾行程式就能夠建構一個深度類神經網路(Deep Neural Network)模型,輕鬆就可以作出一個圖像辨識程式。

不過如果未來真的想往這個領域走下去,那還是需要去讀一些理論的東西。前面提到的AlphaGo、AlphaStar和OpenAI Five也都不單是一個深度學習模型,會依照實際遇到的問題在模型的前後端加入一些演算法進行處理。

因此對於想進這個領域的人,以我也算是從事AI研究工作的經驗,雖然不是做跟遊戲有關的研究,還是可以給些建議

1.數學是最基本的東西,像微積分就是類神經網路最重要的概念,高中的時候還是好好學起來,不然大學還是要重讀一遍

2.學會看懂數學,可能很多人解題非常厲害,但卻不知道課本上的公式到底在寫什麼。好好練習如何看懂數學式子到底想表達什麼,為什麼會這麼寫絕對是非常有用的。因為在看研究論文的時候,你會發現與其講一大堆文字敘述還不如寫一個數學公式比較容易讓人明白

3.任何好的想法只要沒有做過實驗測試過就只是空談,所以至少要會一種能夠把自己想法實踐的程式語言。python是個好選擇

4.這領域需要多讀研究論文了解一下別人的思路和新的演算法,有時候可以省下摸索的時間,例如想知道AlphaStar是怎麼打星海的話可以去搜尋這篇論文
Grandmaster level in StarCraft II using multi-agent reinforcement learning
裡面就有提到滿多需要注意的地方和做法

5.雖然說要讀國外論文,但英文重要性沒有想像中的那麼高,因為如果不打算投國外期刊的話,其實知道專有名詞其他全部丟給GOOGLE翻譯是可以的,看懂數學和實作比較重要

6.最好考個前段大學的研究所,科系還是其次,重要的是打聽哪個教授有在做機器學習的產學合作計畫去加入他們。這種有在做研究計畫的教授都有自己的人脈,跟教授打好關係對日後找相關工作有很大的幫助。或著計畫參與的夠深入,投履歷的時候也可以寫上曾經參與某系統開發,成效如何等等。

板務人員:歡迎申請板主