pg麻將胡了試玩平臺(tái) 用Python寫(xiě)出Gameboy模擬器,還能訓(xùn)練AI模型:丹麥小哥的大學(xué)項(xiàng)目火了
機(jī)器心臟報(bào)告
機(jī)器之心編輯部
你是否覺(jué)得用雅達(dá)利游戲來(lái)研究人工智能有點(diǎn)“不夠接地氣”?現(xiàn)在我們可以使用Gameboy模擬器了。
對(duì)于很多80、90后來(lái)說(shuō),任天堂Gameboy代表了很大一部分年輕人。我們熟悉的很多游戲最初都是安裝在這款8位游戲掌上游戲機(jī)上的,其中包括著名的《馬里奧》和《塞爾達(dá)》系列。對(duì)于國(guó)內(nèi)玩家來(lái)說(shuō),我們玩得最多的應(yīng)該就是《口袋妖怪》系列了。
自這款游戲機(jī)首次發(fā)布以來(lái),已經(jīng)過(guò)去了 30 年,但人們對(duì)它的熱情依然不減。昨天,一款用Python編寫(xiě)的Gameboy模擬器在社交網(wǎng)絡(luò)上引起了廣泛關(guān)注。
我的青春又回來(lái)了嗎?作者在 Reddit 上的帖子很快獲得了數(shù)千個(gè)點(diǎn)贊。
該項(xiàng)目的作者之一Mads Ynddal宣布PyBoy 1.0版本已經(jīng)正式發(fā)布。
什么是 PyBoy?
簡(jiǎn)而言之,它是一個(gè)完全用 Python 從頭開(kāi)始??編寫(xiě)的 Game Boy 模擬器,支持通過(guò) API 編寫(xiě)腳本。研究人員添加了類型定義,允許使用 Cython 編譯軟件,從而獲得與用 C 和 C++ 編寫(xiě)的模擬器相當(dāng)?shù)男阅堋?/p>
項(xiàng)目鏈接:
特征
PyBoy 被設(shè)計(jì)為通過(guò) Python 訪問(wèn),因此它支持并鼓勵(lì)人們進(jìn)行實(shí)驗(yàn)研究,機(jī)器人技術(shù)和人工智能正在嘗試這樣做。研究人員正在構(gòu)建特定于游戲的包裝器,目前允許程序員與俄羅斯方塊和超級(jí)馬里奧兄弟進(jìn)行交互,而無(wú)需深入了解 Game Boy。你可以參考這個(gè)文檔:。
項(xiàng)目作者還想學(xué)習(xí)和嘗試更多奇特的功能,根據(jù)大學(xué)項(xiàng)目的研究,他們?yōu)槟M器添加了倒帶功能,即可以在任何游戲中倒帶時(shí)間。
PyBoy模擬器架構(gòu)
1990年,任天堂為Game Boy申請(qǐng)了專利。下圖展示了該專利中CPU、RAM、卡帶和顯示器之間的集成和連接。
Game Boy 專利的架構(gòu)圖。
基于此,PyBoy項(xiàng)目成員用Python為每個(gè)組件開(kāi)發(fā)了一個(gè)類,從而為“主機(jī)系統(tǒng)”(運(yùn)行Python的系統(tǒng))上的“客戶端系統(tǒng)”奠定了基礎(chǔ)。這個(gè)客戶系統(tǒng)是虛擬的 Game Boy 硬件,理論上它可以運(yùn)行為 Game Boy 編寫(xiě)的所有軟件。
下圖展示了PyBoy模擬器中的所有類及其關(guān)系:
PyBoy 對(duì)于強(qiáng)化學(xué)習(xí)意味著什么以及它與其他環(huán)境的比較
這些年來(lái)很多人開(kāi)發(fā)了Gameboy模擬器,現(xiàn)在已經(jīng)有了可以在電腦和手機(jī)上運(yùn)行的工具。為什么要用Python來(lái)寫(xiě)呢?當(dāng)然是用來(lái)訓(xùn)練人工智能的。
想玩游戲嗎? Gameboy對(duì)于現(xiàn)在的人來(lái)說(shuō)可能有點(diǎn)“難用”。
最接近通用人工智能的方法——強(qiáng)化學(xué)習(xí)
通用人工智能的概念是指機(jī)器成功完成人類可以完成的任何智力任務(wù)的能力。我們目前對(duì)人工智能的研究離這個(gè)目標(biāo)還很遠(yuǎn)。吳恩達(dá)之前說(shuō)過(guò),深度學(xué)習(xí)只做高維的“曲線擬合”。
與依賴預(yù)先收集的數(shù)據(jù)(甚至需要大量人類標(biāo)記)的機(jī)器學(xué)習(xí)算法不同pg網(wǎng)賭軟件下載,強(qiáng)化學(xué)習(xí)是一種僅通過(guò)環(huán)境獎(jiǎng)勵(lì)進(jìn)行訓(xùn)練的算法,其工作原理與人體內(nèi)部多巴胺系統(tǒng)類似。強(qiáng)化學(xué)習(xí)是目前最接近人類從經(jīng)驗(yàn)中學(xué)習(xí)的能力的機(jī)器學(xué)習(xí)算法,特別適合智能體需要根據(jù)環(huán)境做出決策的情況。
下圖顯示了 RL 代理如何僅使用游戲圖像作為輸入來(lái)學(xué)習(xí)馬里奧控制策略。
為什么如此多的強(qiáng)化學(xué)習(xí)研究是在 Atari 上進(jìn)行的,而不是在其他更實(shí)際的問(wèn)題上?
使用 Atari 作為 RL 研究基準(zhǔn)的主要原因如下:
Atari環(huán)境允許我們使用相同的算法來(lái)測(cè)試多個(gè)不同的環(huán)境,驗(yàn)證RL算法的通用性;
由于輸入只是游戲圖像,因此增加了問(wèn)題的復(fù)雜度;
Atari為研究人員提供了一個(gè)公認(rèn)的測(cè)試平臺(tái),可以公平地比較不同算法的性能;
強(qiáng)化學(xué)習(xí)需要大量的交互式數(shù)據(jù)來(lái)進(jìn)行學(xué)習(xí)。在實(shí)際環(huán)境中進(jìn)行實(shí)際測(cè)試之前,Atari 提供了一個(gè)安全、快速、低成本的測(cè)試平臺(tái),用于算法的初步驗(yàn)證。
下圖顯示了 Atari 環(huán)境的一些示例:
Atari 與 PySC2 和 PyBoy 等環(huán)境的比較
上一節(jié)介紹了在 Atari 環(huán)境中訓(xùn)練 RL 智能體的許多優(yōu)點(diǎn)。然而,隨著強(qiáng)化學(xué)習(xí)的發(fā)展pg賞金大對(duì)決試玩版,這種相對(duì)簡(jiǎn)單的環(huán)境逐漸不再適合當(dāng)前新的強(qiáng)化學(xué)習(xí)研究。不久前,DeepMind 提出的 Agent57 在所有 Atari 環(huán)境下的表現(xiàn)都超越了人類玩家的平均水平,這也預(yù)示著 Atari 環(huán)境下的 RL 研究正在逐漸接近尾聲。
更困難的環(huán)境包括 PySC2,這是 DeepMind 和暴雪之間的合作,它要求智能體學(xué)習(xí)復(fù)雜的協(xié)作和對(duì)抗策略。盡管AlphaStar在這種環(huán)境下取得了令人矚目的成果,但仍然存在許多問(wèn)題需要解決。下圖是PySC2環(huán)境示意圖。
PyBoy環(huán)境的難度可以說(shuō)介于Atari和PySC2之間。它為我們提供了驗(yàn)證 RL 性能的新基準(zhǔn)。在將強(qiáng)化學(xué)習(xí)應(yīng)用于更復(fù)雜的現(xiàn)實(shí)問(wèn)題之前,我們可以在這種中等難度的環(huán)境中經(jīng)濟(jì)有效地測(cè)試強(qiáng)化學(xué)習(xí)。
正如特斯拉人工智能和自動(dòng)駕駛視覺(jué)總監(jiān)安德烈·卡帕蒂 (Andrej Karpathy) 所說(shuō),“在使用火箭筒之前,應(yīng)該先嘗試使用 BB 槍?!?/p>
GitHub簡(jiǎn)介
如何安裝?
如果你已經(jīng)配置了可以正常運(yùn)行Python的環(huán)境,那么安裝非常簡(jiǎn)單:
通過(guò)包管理器安裝SDL2(sudo apt install libsdl2-dev或brew install sdl2)
使用 pip install pyboy 安裝 Pyboy
您可以直接從終端 $ pyboy file.rom 或在 Python 腳本中使用 PyBoy:
from pyboy import PyBoy
pyboy = PyBoy('ROMs/gamerom.gb')while not pyboy.tick():
pass
該項(xiàng)目還支持 macOS、Raspberry Pi (Raspbian)、Linux (Ubuntu) 和 Windows 10。
PyBoy API 文檔
如果用戶需要?jiǎng)?chuàng)建自己的機(jī)器人或AI,可以在PyBoy文檔()中找到所有支持的外部組件。各個(gè)類及其用法都非常詳細(xì),這里不再贅述。 (結(jié)構(gòu)指標(biāo)如下圖)
簡(jiǎn)短的例子
PyBoy 可以作為 Python 中的對(duì)象加載。因此它可以從另一個(gè)腳本初始化并由該腳本控制和探測(cè)??匆幌?gamewrapper_tetris.py,了解與游戲交互的原始“機(jī)器人”。當(dāng)然,所有外部組件都可以在 PyBoy 文檔中找到。
有關(guān)一般 Game Boy 文檔,請(qǐng)查看 Pan Docs,其中包含每個(gè)主題的詳細(xì)信息。
這是從屏幕讀取數(shù)據(jù)的簡(jiǎn)短演示,代碼也可以在 gamewrapper_mario.py 中找到:
import osimport sys
from pyboy import PyBoy, WindowEvent
# Makes us able to import PyBoy from the directory below
file_path = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, file_path + "/..")
# Check if the ROM is given through argvif len(sys.argv) > 1:
filename = sys.argv[1]else:
print("Usage: python mario_boiler_plate.py [ROM file]")
exit(1)
quiet = "--quiet" in sys.argv
pyboy = PyBoy(filename, window_type="headless" if quiet else "SDL2", window_scale=3, debug=not quiet, game_wrapper=True)
pyboy.set_emulation_speed(0)assert pyboy.cartridge_title() == "SUPER MARIOLAN"
mario = pyboy.game_wrapper()
mario.start_game()
assert mario.score == 0assert mario.lives_left == 2assert mario.time_left == 400assert mario.world == (1, 1)assert mario.fitness == 0 # A built-in fitness score for AI development
last_fitness = 0print(mario)
pyboy.send_input(WindowEvent.PRESS_ARROW_RIGHT)for _ in range(1000):
assert mario.fitness >= last_fitness
last_fitness = mario.fitness
pyboy.tick()
if mario.lives_left == 1:
assert last_fitness == 27700assert mario.fitness == 17700 # Loosing a live, means 10.000 points in this fitness scoringprint(mario)
breakelse:
print("Mario didn't die?")
exit(2)
mario.reset_game()assert mario.lives_left == 2
pyboy.stop()
如果您在加載了 Super Mario Land ROM 的情況下運(yùn)行上述代碼,您將獲得下面的圖像和終端輸出。值得注意的是pg麻將胡了試玩平臺(tái),馬里奧的形態(tài)顯示為索引 0、1、16、17。
關(guān)于作者
該項(xiàng)目的作者是來(lái)自丹麥的 Asger Anders Lund Hansen、Mads Ynddal 和 Troels Ynddal。畢業(yè)于丹麥哥本哈根大學(xué)的 Mads Ynddal 表示,其實(shí)這個(gè) Gameboy 模擬器可以追溯到他 2015 年上大學(xué)時(shí)的項(xiàng)目。
Gameboy 模擬器 1.0 版已經(jīng)發(fā)布,但開(kāi)發(fā)人員還有很多事情可以做。該項(xiàng)目開(kāi)發(fā)人員表示,目前可以推進(jìn)的方向包括添加聲音、顏色、與模擬器的Gameboy模擬連接以及更多的游戲包,當(dāng)然還有在其之上訓(xùn)練神經(jīng)網(wǎng)絡(luò)的示例。
希望在人們的努力下,Gameboy上的游戲也能獲得新生。更重要的是,它現(xiàn)在擔(dān)負(fù)著訓(xùn)練人工智能的任務(wù)。
在《機(jī)器之心》CVPR 2020第一期在線分享中,我們邀請(qǐng)了北京大學(xué)智能科學(xué)系的陳漢庭(論文第一作者)為我們分享了主題《Additive Neural Network: Do we real need multiplication in深度學(xué)習(xí)?” 》,歡迎廣大讀者報(bào)名學(xué)習(xí)。
我要評(píng)論