當前位置:
首頁 > 新聞 > 實戰|用GAN混搭出你自己的8-bit任天堂遊戲

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

機器之心報道

參與:晏奇、微胖



玩了那麼多年的任天堂,有沒有想過自己動手攢一版屬於自己的混搭版任天堂風遊戲。本文是machine learning is fun作者的另一篇實操類文章,手把手交你用GAN來實現這個想法。

生成模型(Generative Model)能讓計算機自己創造數據,比如照片、電影或音樂。

一年多以前,Alec Radford(在 Ian Goodfellow 的研究基礎上)發表了一篇論文。這篇論文改變了每個人對於用機器學習搭建生成模型的想法。這種新系統被稱為深度卷積生成對抗網路(Deep Convolutional Generative Adversarial Networks,DCGANs )

通過一種巧妙的結合方式,讓兩個深度神經網路互相競爭,DCGANs 能夠創造出足以令人信以為真、近乎真實相片的圖片。所有這些卧室圖片都出自 DCGAN:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

人工智慧研究人員關注生成模型的原因在於,這些模型似乎朝著能消化真實世界原始數據、自動理解世界的人工智慧系統,邁出了重要一步。

但是,讓我們用生成模型做一件有點冒傻氣的事情——創作八位(8-bit)電子遊戲作品!(譯者註:八位遊戲,想想魂斗羅)

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

這一遊戲級別的所有藝術創作都是機器生成的。



生成模型的目標

所以,人工智慧研究人員建造複雜的系統,生成看上去不錯的卧室圖片是為了什麼?

這是因為如果你要生成關於一些東西的圖片,得要先理解它們。

看看這張圖片:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

一隻狗。準確的說是……我的狗。

你馬上就看出這是一幅狗的圖片——一隻有四條腿,一隻尾巴,長有毛皮的東西。但是,對於一台計算機來說,這幅圖僅僅是一個表徵了每個像素顏色的數字網格,理解不了圖片所代表的概念。

但是,現在請想像一下,給計算機展示上千張狗的圖片,看完這些圖片以後,計算機就能自己生成關於狗的新圖片——包括不同品種的狗,不同角度看見的狗。我們甚至可以向計算機索要特定類型圖片,比如,「一隻小獵犬的側面圖。」

如果計算機能夠做到這一點,並且生成的圖像中,狗的腿、尾巴、耳朵數量都是對的,那麼,這就可以證明計算機知道哪些部分可以組成一隻狗,儘管沒人對它解釋過這些。因此,某種意義上,一個好的生成模型至少具有嬰兒水平理解能力。

這就是為什麼研究者們那對建立生成模型那麼興奮。它們看起來是一種訓練計算機了解人類概念的方法,而且在訓練過程中不需要將這些概念的含義明確教授給計算機。這是超越現有系統的巨大一步,現有系統只能從訓練數據中學習,而且這些數據還需要人工費心費力的預先標記處理才行。

但是,如果這項研究得到的整個結果是一個能生成狗圖像的程序,要等多少年我們才能有第一個由計算機生成的 Dog-A-Day 日曆這樣的副產品呢?

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

沒錯,最終機器人會向每個人的工作挑戰。

如果你能寫一個理解狗的程序,那麼為什麼不寫一個能理解其它任何事物的程序?或者是一個可以生成無數人握手照片的程序?我肯定有人會掏錢做這活兒的。

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

我意思是……額,對於一家AI創業公司來說,這個點子的確很爛……但是我還聽過更爛的創業點子,所以……沒準能成功吧?

好吧,也許一個可以生成一堆無用圖像的程序不會那麼吸引人。但是考慮到生成模型僅在去年就頻頻出現進展,誰知道我們5或10年之後會怎樣。如果有人開發了一種能產生整部電影,或音樂,或遊戲的系統,那麼將會發生什麼?

如果你展望一下20到30年後,你已經能夠想像一個100%由機器生成娛樂業的世界了。

視頻遊戲產業是第一個開始做用人工智慧生成原始內容的嚴肅實驗的娛樂產業領域。除了重疊在計算機遊戲和機器學習工程師之間的文氏圖(Venn diagram)以外,目前的AAA視頻遊戲大約有3億多美元的市場,所以還有很大的投資激勵來發展視頻遊戲開發自動化。

我們還在基於機器學習的生成模型的早期發展階段,它們的實際使用領域目前來說很狹窄,但是有很多事情用它們來做會很有趣。我們現在就來看看我們能用其中一種模型來做什麼。



DCGANs網路是如何工作的

為了得到DCGAN,我們先建立兩個深度神經網路。然後我們讓它們互相對抗,一直不斷地讓其試圖戰勝自己的對手。在這個過程中,它們二者都變得越來越強。

我們假設第一個深度神經網路是一名新警員正在接受假鈔識別訓練,它的工作是觀察一幅圖片來告訴我們這個圖片是否包含了真鈔。

由於我們是在圖片中尋找物體,所以我們可以使用標準卷積神經網路( Convolutional Neural Network)來干這活兒。如果你不熟悉ConvNets,你可以參見我早先的文章。但是基本想法還是,給神經網路輸入一幅圖像,通過多層網路來處理它,這些多層網路逐漸識別圖像中越發複雜的細節特徵,然後輸出一個單值(single value)——在這個例子中,即是:圖像中是否包含了一幅有著真鈔的圖片

這第一個神經網路就被稱為「判別網路」(Discriminator):

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

圖:判別網路

現在,讓我們假設第二個神經網路是一個假幣偽造新手,正在學習造假技術。對於第二個神經網路,我們將反轉一個標準的卷積神經網路中的各層,以此讓每個信息都可以反向傳遞。於是,這第二個網路能輸入一系列值並輸出一張圖片,而非「判別網路」那樣輸入一張圖片然後輸出一個值。

這是第二個神經網路,稱為「生成網路」(Generator):

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

圖:生成網路

所以,現在我們既有一個警員(即:判別網路)來搜尋假幣,也有一個假幣販子(即:生成網路)來印刷假幣。那我們就讓他們互相練練手吧!

在第一回合中,生成網路將創造出悲劇般不堪的「假幣」,它也就僅僅是把錢的各種元素組合在了一起。之所以這樣是因為它現在還完全不知道錢應該長成什麼樣子。

生成器造出了它第一張(不堪入目)假美元

但是,現在我們的判別網路在執行驗證假幣這活兒時也表現出同樣糟糕的能力,所以,它根本看不出是否是假幣。

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

圖:這貨(判別網路)居然覺得這張美元真的!

現在,我們更進一步,告訴判別網路說這張美元實際上是偽造的。然後我們給它展示一張真的美元並問它:這張真的和剛才那張假的看起來哪些地方不一樣。判別網路就開始尋找新的細節來幫助它自己區分真假二者。

例如,判別網路也許會注意到真鈔上面有一個人而且假鈔上沒有。憑藉這個知識,判別網路學會了如何區分真假。在驗鈔這件事上,它的能力有所提升。

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

圖:判別網路終於變強了點!它現在可以識別那些製作很粗糙的假幣了。

現在我們開始第二輪。我們告訴生成網路,它的假幣圖像突然因為被發現是偽造的而被拒絕了,於是它需要開始它自己的改進了。我們當然也告訴它說:判別網路現在通過尋找是否有臉來判斷真偽,所以對於生成網路,最好的忽悠判別網路的辦法就是在自己做的假幣上放一張臉:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

圖:生成網路製作了一張稍微好點的假幣

然後這張假幣再次被誤認為是真的!於是,判別網路不得不再看一遍真鈔並找出一個新方法來分辨它和假鈔的區別點。

這種在生成網路和判別網路之間來回對抗的遊戲持續數千次,直到雙方網路都成了專家。最終,生成網路可以生成非常逼真的假鈔,而且判別網路也變身為能夠鑒別哪怕是最細微錯誤的超級警探。

當兩個網路都充分地訓練,以至於人類都被產生的偽圖像之逼真程度所震撼後,我們就可以用這些偽圖像來做任何我們想做的事情。



將這項技術應用於視頻遊戲

所以現在我們知道「深度卷積生成對抗網路」(DCGANs)是如何工作的了。讓我們來試試我們是否可以用它來生成上世紀80年代風的視頻遊戲圖像。

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

我們來創建一個DCGAN,它能基於真實遊戲的截圖來為生成虛構的任天堂(NES)視頻遊戲:

我們的想法是,如果我們能生成令人信以為真的虛視頻遊戲,我們就能從這些截圖中複製粘貼其中的設計,並且把它用在我們自己製作的的復古風格的遊戲中。由於這些生成的視頻遊戲從未存在過,所以它甚至都不會被偷走。(也許吧……以後可能講不定)

視頻遊戲設計在那個年代是非常簡單的。因為NES只有一點點內存(遊戲佔用的內存比這篇文章占的都少得多!),程序員必須要用大量的技巧來把遊戲藝術裝進內存里。為了最大化使用有限的空間,遊戲使用Tile-based圖形處理方法 ,也就是說遊戲中每個屏幕圖像都是由一些(一般來說是16*16的像素)重複的圖形片(graphical tile)組成。

例如,遊戲「塞爾達傳說」(The Legend of Zelda)的開場畫面就是僅僅由8個不同的tile組成的:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

這就是整個「塞爾達傳說」遊戲地圖的tile:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

有時候這些tiles會交換它們周圍的顏色來讓不同的地區看上不不同,不過也僅僅是這樣而已。

我們的目標是為我們的遊戲創建一個類似的tiles。因此,我們並不真正關心我們生成的遊戲截圖是否看起來和真實世界一樣,而是僅僅去搜尋可以在我們遊戲中用16*16像素的tiles拼成的形狀和圖案——就像石頭、水、橋等等,然後我們可以用那些tiles來建造我們自己的8-bit視頻遊戲畫面。



獲取數據

為了訓練我們的系統,我們需要大量的數據。幸運的是我們有超過700款NES遊戲可以提取數據。

我使用wget在 The Video Game Museum網站(抱歉爬取了你們的網站!)上下載了所有的NES遊戲屏幕截圖。在幾分鐘下載之後,我有了超過一萬幅上百種不同NES遊戲的屏幕截圖:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

圖:只用差不多1萬張遊戲截圖就可以組成訓練數據集

現在,DCGANs僅針對很小的圖像進行工作就行了——256*256像素左右。雖然NES遊戲機的整個解析度只有256*224像素,但是這不是個大問題。為了讓事情變得簡單,我把每個NES遊戲截圖都剪裁到了224*224像素大小。



設置DCGAN

在github上有一些DCGANs的開源實現,你可以試試。我用了Taehoon Kim的Tensorflow implementation。由於DCGANs是非監督式的,你需要做的事情就是把數據放到一個文件夾,調整基本參數,開始訓練,然後等著看給你的結果。

這裡是原始訓練數據的一些樣例:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

現在開始訓練。一開始,從生成網路中輸出的完全是純噪音。但是隨著生成網路學著做得越來越好,它慢慢開始生成有形狀的圖像。

經過了幾輪更多的訓練後,圖像開始變得類似於惡夢版的經典任天堂遊戲。

隨著訓練的深入,我們開始看見我們希望看見的磚和塊。你也可以看見屏幕元素,比如生命條或者甚至一些文字:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

接下來就是比較複雜的地方了。我們怎麼知道計算機正在創建一個全新的藝術而不是只是從訓練圖像中直接反覆使用藝術設計呢?在其中兩張圖片中,你可以清晰的看見來自《超級馬里奧3》的菜單欄和來自初版超級馬里奧的標題欄。

反覆訓練數據絕對是可能發生的事情。 通過使用大的訓練數據集而不是訓練太長時間,我們可以嘗試減少發生這種情況的機會。但這是一個棘手的問題,研究依然在進行中。

由於我不是為了美學來干這事,所以我調整模型一直到它產生出對於我來說看起來是原創的作品就可以了。但是我不能證明我這個「藝術設計」是完全原創的,除非通過搜尋訓練數據來看是否有類似的藝術設計,從而才可以驗證它的原創性。

進行了幾個小時的訓練,生成的包含16*16像素的「tiles」的圖像在我看來還不錯。我還在找一些關於石塊、磚形、水形、灌木以及可以營造詭異氣氛的tiles的變化版本。

接下來我需要預處理生成圖像來保證它們只使用64種可在NES上處理的顏色:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

原始的NES系統只能顯示這64種顏色。技術上講,這兒其實只有54種獨特的顏色,因為它們之中有一些是複製的。

然後我將在 Tiled Map Editor打開這些64色圖像。因為,這樣我就可以輕鬆地抓取一些符合我想要的16*16像素tiles了。

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

圖:我從生成的截圖中抓取的tiles

然後,在 Tiled Map Editor裡面,我可以把這些16*16像素的「tiles」排成一個水平布局,讓人想起了NES的遊戲《惡魔城》(Castlevania):

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

看起來還聽不錯的!要知道,我沒有用圖像編輯器碰任何一個像素。每個「tiles」都直接來自於DCGAN的模型。

下面,讓我們把我們的主角也放進來,再放一些《惡魔城》里的敵人,於是我們就看見了這個畫面就像是在運動中一樣:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

為了獲得完整的效果,讓我們來看看如果畫面中加上了菜單元素看起來會怎樣:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

想想這事機器創作的背後都有點冒冷汗……

我覺得這看起來很像我記憶中的NES遊戲!我沒說這是有史以來最棒的NES藝術設計,但肯定不是最差的:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

《獵豹人》(The Cheetahmen)不是個好遊戲。



就這樣?

我對這樣的生成模型真的很興奮。有一天,能用計算機來生成無數的藝術品這件事,想想就很迷人。但是當我和別人提到它,有時會聽到這樣的回答:「就這樣?這也太基礎了點吧。」

當然,現在對生成模型有大量的炒作。儘管很難被訓練並且受限於產生很小的圖像,GANs還是已經被稱為人工智慧的未來。實際上,現有的最好模型也只能生成郵票大小的突變狗圖像:

實戰|用GAN混搭出你自己的8-bit任天堂遊戲

真實惡夢中才會出現的動物!照片源自Ian Goodfellow』s GAN Tutorial paper

但是幾年前,我們還無法做到這件事情。能生成這樣的圖片,我們非常興奮。

技術每天都在進步。這裡我隨便找了篇論文,這周發出來的,它用GANs來判斷人臉的歲數。

如果我們按照這個節奏繼續前進,不會太久,生成模型就會成為幫助我們搞創作的主流工具。現在開始研究是個絕佳時機!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

人工智慧看走眼的圖像都長什麼樣?
手把手教你為iOS系統開發TensorFlow(附開源代碼)
機器之心深度研學社每周乾貨:2017年第13周
親述GAN簡史:人工智慧不能理解它無法創造的東西
斯坦福大學Brainstorm神經形態晶元:未來計算的新方向

TAG:機器之心 |

您可能感興趣

任天堂最近出了個「美食」遊戲,叫《Splatoon 2》
BitSummit2017遊戲展任天堂展出多款Switch獨立遊戲
滿載童年回憶,UNIQLO UT Grand Prix 任天堂主題系列即將發售!
任天堂改造Switch復古遊戲,NES Golf們或可用手勢控制!
經典遊戲《合金彈頭X》登錄PS4/Xbox One/任天堂Switch
這個叫Fuze的任天堂Switch應用厲害了 能編寫NS遊戲
玩家將Gameboy改裝成任天堂Switch底座 造型完整外觀酷炫
還是專註遊戲性吧,任天堂SNES mini用的硬體與NES mini一樣
任天堂月底發布Switch的 iOS 配套應用
任天堂Switch的在線服務app上線了,你可以用它和隊友在遊戲中通話
人氣掌機 New 3DS 停產,任天堂用 New 2DS LL 取代
Level-5社長稱正在為任天堂Swicth主機開發遊戲作品
任玩堂將於7月21日發布 Switch 配套 iOS 應用 「任天堂 Switch 在線」
任天堂是怎麼打造出Switch的?
任天堂註冊 Game Boy 新商標,或將推出Game boy mini
Switch-Con:讓任天堂Switch和三星Galaxy S8秒變遊戲主機
任天堂為Switch掌機推出「熒光黃」配色Joy-Con手柄:6月16日上市
SE:比起Xbox天蠍座更看好任天堂Switch
寶可夢將在任天堂 Switch 上推出系列新遊戲《Pokémon Stars》