【童年回憶殺】工程師如何用 GAN 神還原紅白機的超級瑪利歐?

【我們為什麼挑選這篇文章】任天堂的超級瑪利歐遊戲多年來都是是許多人心目中的經典遊戲,從過往的像素風格到現在的 3D 精緻立體風格,瑪利歐雖然已經過去了好幾代,推陳出新出各式各樣的版本與玩法,但紅白機仍然深植在多數人心中。而本篇文章所提到的開發者,或許也是其中一位充滿童年情懷的熱血工程師吧。(責任編輯:郭俐伶)

本文經 AI 新媒體量子位(公眾號 ID:QbitAI)授權轉載,轉載請連繫出處

作者:量子位

《超級瑪利歐》的重度玩家們可能已經發現,上圖這並不是原本 32 關裡面的遊戲關卡畫面。

不過,如果你以為這是《超級瑪利歐製造》的傑作,那你就猜錯了!這是 AI 利用 GAN(Generative Adversarial Network,簡稱 GAN)做出來的!

利用 GAN 生成紅白機的遊戲畫面,並不是新鮮事,不過,這一次是可以無限延長的那種!

如何用 AI 做出永不破關的超級馬力歐?

首先,你需用到 4 個顏色通道表示物件,在遊戲中,關卡資料以壓縮格式存儲,通常,每個物件用兩個位元組來描述位置和類型。一個位元組指定 16×16 網格中的 xy 座標;第二個位元組指定物件的類型。比如在第一關的場景中,僅用了 12 個位元組來描述:

07 81 | 47 24 | 57 00 | 63 01 | 77 01 | C9 71

作者為了將關卡編碼為 16×16 的圖像,分別設置了 4 個獨立顏色通道:

比如,第一關的截圖,就可以表示成這樣:

這樣的編碼方式,既能夠涵蓋夠多物件,但又不會太過複雜。並且根據關卡中物件的排列方式進行分組,會利於模型進行學習並重現。比如,實心磚用來佈置樓梯、磚塊則通常水準放置。

此外,將所有物件組織成一個合理的方案,減少生成網路失誤對輸出結果的負面影響。

比如用硬幣代替磚塊,影響非常小;而如果用管道或庫巴來代替,就會出現問題。

開發者還找出了遊戲的一些特點:

管道可以連接地面或一排浮動塊;

方塊通常用來構建各種尺寸的樓梯;

磚塊和問題塊,大多排在第 3 位和第 7 位;

其他角色一般會分成兩三組。

接下來,作者使用 TensorFlow 作為後端,利用 Keras 來構建模型,並進行訓練。

生成器通過輸入的一組特徵向量,來生成新的樣本圖像;鑒別器則區分是訓練集中的真實圖像,還是生成器偽造的。隨著遍歷訓練集的次數增加,生成效果也逐漸改善

下面最終輸出的結果:

嗯,效果真的還不錯!

想做出永不通關的畫面?用 cGAN 就對了

現在,只需把一張張「截圖」連接起來,然後你就會得到 半個庫巴、半個管道,以及半個瑪利歐…..

如何做到無縫拼接,得到連貫的關卡呢?這就需要利用「有條件的 GAN」,把前一個場景作為後一個場景的邊界條件,就像這樣:

可以看出場景的左側部分,是以第一行圖像作為邊界條件生成的。

具體來說,首先要在之前的基礎上,向生成器輸入一組 16×4 的圖像,作為上一個場景的邊界部分。

網路架構是這樣的:

生成器在輸入條件的限制下,生成 16×16 的圖像,然後,把它們與 16×4 的輸入圖像進行拼接,再用拼接後的圖像來訓練鑒別器。

利用 16×4 圖像的不斷反覆運算,最終就能拼接成連續的場景,比如,經過 40 次反覆運算的結果:

「不想通關綜合症」可能有救了!開發者表示,雖然效果不是特別完美,但是已經具備了趣味性和可玩性。

是不是和那個「能玩一輩子的遊戲」——《瑪利歐製造》有點像?它同樣主打關卡製造,不過是玩家來手動設計。

這種方式在發佈關卡之前,作者必須通關一次,於是有些人就加入隱蔽的「作者通道」,偷個懶直接到達終點。

不少高手都曾被「馬造毒圖」難倒,當然如果玩家發現隱蔽通道,就能通關。
而這樣「有趣又有毒」的關卡,不知道 AI 能否構建出來呢?

(本文經 AI 新媒體量子位 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈爷青回!GAN 生成的超级马里奥关卡,可以永不通关的那种 〉。)

你可能會有興趣

你玩「小朋友下樓梯」最高紀錄是幾層?當年遊戲開發者現已是超強工程師!

【體驗長榮的苦衷】在蘇伊士運河開船有多難?CNN 小遊戲讓你秒懂

比 AlphaGo 還威!跑步 AI 攻破史上最難的小遊戲:QWOP


《TechTaiwan》國際版 2021 正式上線

國外都在關注台灣的哪些科技消息呢? 立即至 Facebook 按讚、Twitter 及 LinkedIn 追蹤,第一手國際趨勢、科技洞察都會在 TechTaiwan 官方網站 哦!

點關鍵字看更多相關文章: