--- tags: Paper, GPT --- # 【論文筆記】MarioGPT: Open-Ended Text2Level Generation through Large Language Models 論文連結: https://arxiv.org/abs/2302.05981 ## Introduction 本篇研究提出了 MarioGPT,是基於 GPT-2 模型微調(fine-tune)訓練而成的瑪利歐遊戲關卡生成模型。透過輸入文字提示,就可以讓模型生成相對應特色的關卡。此外,作者結合 MarioGPT 與新穎性搜索(novelty search),能夠生成多樣化的關卡,達成了開放式(open-ended)生成,意即關卡的生成是多樣化而無限制的。 ![](https://i.imgur.com/ahOcmX7.png =500x) ## Dataset Used 訓練使用的資料是超級瑪利歐兄弟(Super Mario Bros.)和超級瑪利歐兄弟:失落的關卡(Super Mario Bros.: The Lost Levels)裡面的關卡,取自於 Video Game Level Corpus (VGLC) 。每個關卡都是 path-annotated level,意思是遊戲角色走的路徑都有在關卡資料裡標註。關卡資料是用字串來表示的,每個物件都用特定符號來代表,例如以下關卡: ![](https://i.imgur.com/NzsVSJR.png =500x) 用字串來表示為: ![](https://i.imgur.com/dyPmTTY.png =500x) ## MarioGPT Model 作者使用的預訓練模型為 DistilGPT2 ,是一個輕量型的 GPT-2 架構。 MarioGPT 和 GPT 的目的很類似,都是希望可以預測下一個 token 是什麼,對於瑪利歐遊戲關卡而言,其實就是把代表關卡的字串沿著每一 column 切分,給定過去的 columns,來預測下一個 column。MarioGPT 的微調方式其實就是以最大化下一個 column 作為目標函數來微調 DistilGPT2。 另外模型還加入了 prompting 的機制,將文字輸入到一個 pre-trained 好的語言模型(這裡使用的是 BART),此模型會根據輸入的文字輸出一個 vector,而這個 vector 就會輸入至 GPT-2 的 cross attention layer,和輸入 GPT layer 的關卡序列一起經過整個模型。 Prompts 是由特定的 feature 和對應的數量所組合的文字,例如 3 pipes, 1 enemy, some blocks, low elevation,或者 no pipes, some enemies, 100 blocks, high elevation 等等。其中 no, little, some, many 這種文字中沒有指定數量的關鍵字是有相對應的數量的,數量為作者計算出來每 50 columns 的四分位數。 ![](https://i.imgur.com/HbiNfdZ.png =500x) MarioGPT 預測關卡的流程: ![](https://i.imgur.com/sr190i5.png) ## Novelty Search Novelty search 是一種 diversity-seeking 的演算法,主要目標是想要找到更多新穎的結果。Novelty search 通常會透過一個 novelty score 來衡量產生的新結果和現有的結果的差異程度多寡,由此來搜索更多新穎的結果。 作者使用 novelty search 的原因是希望生成的遊戲關卡不僅僅只是可以生成各種關卡物件,還可以讓玩家在玩這些關卡的時候表現出多樣化的 player behavior,也就是希望玩家完成關卡時採取的路徑是多樣化的。 整個 novelty search 的過程如下圖所示: ![](https://i.imgur.com/kgzjjTn.png) 首先先初始化選擇一小筆已經生成的關卡作為存檔(archive),從存檔裡任意抽樣一個關卡 $L_i$,再將此關卡拿去改造,生成一個改造過的關卡 $\hat{L_i}$。接著計算這個新關卡的 novelty score,如果分數有超過某個 threshold 的話,就把這個改造的關卡也加進存檔裡。這個過程重複很多很多回之後,存檔裡就可以有很多多樣化的關卡。 Novelty score 的計算是根據關卡的 behavior characteristic 來計算的。Behavior characteristic 的定義為一個關卡裡預測路徑的 moving average。取 k 個存檔裡離此改造關卡最接近的關卡,計算他們和改造關卡的 behavior characteristic 平均距離,即為 novelty score。簡單來說,其實就是當一個改造後關卡的預測路徑和現有在存檔裡的其他關卡的路徑相差很遠的話,novelty score 就會高,表示可以加進存檔裡。 下圖為 behavior characteristic 示意圖: ![](https://i.imgur.com/ylX2aEQ.png =500x) 使用到 MarioGPT 的部分為改造關卡的步驟,過程如下圖: ![](https://i.imgur.com/peq4RvD.png) 核心想法是隨機選取關卡裡的某一片段(40-80 columns),把這個片段用 MarioGPT 隨機生成的另一個片段替代,這樣就可以產生遊戲角色行走路徑可能不同的關卡樣式。 然而這個方法可能會出現預測的路徑不連貫的問題的問題,這是因為 MarioGPT 和 GPT 一樣是 unidirectional 的,意即預測下一個 column 的時候只看得到前面的 columns。為了維持關卡的連貫性,作者根據 BERT 模型進行微調,訓練出 MarioBERT,此模型是一個 mask prediction model,可以根據前後的 columns 來預測中間的 column,因此可以平滑原本片段不連貫的地方。 ## Experiments and Results 為了探討 MarioGPT 生成關卡的能力,作者進行了各式各樣的實驗: ### Tile Prediction Accuracy 作者另外找了其他的 baselines 和 MarioGPT 在 validation set 上進行比較,用以了解 MarioGPT 預測的準確度。以字串表示的關卡中的一個字符為一個 tile,tile prediction accuracy 表示預測關卡中每一個字符的準確度。 其中 LSTM 模型也是一個生成瑪利歐關卡的模型,有興趣可以參考[此連結](https://arxiv.org/abs/1603.00930),from-scratch-MarioGPT 則是沒有使用預訓練的 GPT-2,直接 train from scratch 的 MarioGPT 模型,adapter-MarioGPT 則是在 GPT-2 原本的 prediction layer 上加上一層 adapter layer,並且只微調這層 layer 得到的模型。 結果顯示,由預訓練的 GPT-2 模型微調而成的 MarioGPT 在預測的結果準確度是最高的。 ![](https://i.imgur.com/guL4wIe.png =500x) ### Measuring Playability of Levels 為了測試 MarioGPT 生成的關卡可玩性有多高,他們讓 Robin Baumgarten’s A* agent(一個專門遊玩瑪利歐遊戲的 agent)來嘗試遊玩 250 個由 MarioGPT 生成的關卡。結果顯示其中 88.33% 的關卡是可以被 agent 破關的。 另外他們想評估 MarioGPT 生成的關卡中預測的角色行走路徑是否可行,因此比較了生成的路徑和 agent 實際採用的路徑,兩者個 MAE 如下表所示,單位為 tile。可以發現如果關卡是可玩的,路徑的差是 1.14 tiles,表示說如果關卡是可玩的,agnet 所採用的路徑和 model 建議的幾乎相差無幾;但若關卡不可玩的話,MAE 高達 4.55 tiles,也就代表 model 建議的路徑是不可行的。 ![](https://i.imgur.com/sLZ55jM.png =500x) ### Prompting Ability MarioGPT 可以直接由 prompt 來生成對應特色的關卡。作者想探討生成的關卡是否真的有如實對應 prompt 的敘述,因此隨意生成 1000 個 samples 來確認關卡生成的準確度。 下表顯示 MarioGPT 對應 prompt 的準確度還算可以,且 MarioGPT 在 block 的生成數量最為準確,而 enemy 的最不準確。作者給出的解釋是因為在訓練過程中,block 的總數量很多,但 enemy 的數量很少,所以這個結果是可以預期到的。 ![](https://i.imgur.com/Yih7Qyg.png =400x) ### Effect on Novelty Search 透過結合 MarioGPT 和 novelty search,可以生成很多樣化的關卡樣式。作者將 novelty search 的過程中逐漸加入存檔的關卡路徑投影出來,可以看到隨著越來越多關卡加入存檔中,角色在關卡中採取的路徑也越來越多樣化。但同時他們也發現投影上有很多重疊的路徑,表示仍然有相似的路徑的關卡會被加入存檔裡面,而這也是一個待解的問題。 ![](https://i.imgur.com/C2hVoI5.png) 下圖比較了存檔裡面具有最高 novelty score 的兩個關卡和最低的兩個關卡。可以看到低的兩個關卡中,路徑幾乎是一樣的,而高的兩個關卡差異性比較大。 ![](https://i.imgur.com/zg3NTIG.png) ## Conclusion 這篇研究提出的 MarioGPT 可以: 1. 預測玩家與關卡的互動(預測角色採取的路徑) 2. 生成可玩的關卡 3. 利用 novelty search,生成各式各樣內容的關卡 Future work: 1. 用更大、更多細節的關卡的訓練 MarioGPT 2. 透過 reinforcement learning from human feedback 來結合玩家的回饋與關卡生成方法