雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!
感覺用 Atari 遊戲研究人工智能有點「不夠接地氣」?現在我們可以使用 Gameboy 模拟器了。

對于很多 80 後、90 後來說,任天堂 Gameboy 代表了青春的很大一部分。很多我們耳熟能詳的遊戲都是最初搭載在這款 8 位遊戲掌機上的,包括鼎鼎有名的《馬裡奧》、《塞爾達》系列。對于國内玩家來說,我們玩得最多的則應該是《口袋妖怪》系列了。
這款遊戲機距離首次釋出已過去了 30 年時間,不過人們對于它的熱情卻絲毫不減。昨天,一款利用 Python 編寫的 Gameboy 模拟器在社交網絡上吸引了人們的廣泛關注。
爺的青春回來了?作者在 Reddit 上發出的文章迅速獲得了上千點贊。
該項目的作者之一 Mads Ynddal 宣布,PyBoy 的 1.0 版正式釋出。
PyBoy 是什麼?
簡而言之,它是一個完全用 Python 從頭開始編寫的 Game Boy 模拟器,并且支援通過 API 編寫腳本。研究者添加了類型定義,使其可以使用 Cython 編譯軟體,進而獲得與用 C 和 C++編寫的模拟器相媲美的性能。
特點
PyBoy 被設計成通過 Python 通路,是以支援并鼓勵人們做實驗研究,機器人和人工智能在作此嘗試。研究者正在建構遊戲特定的包裝器,目前,包裝器可讓程式員與俄羅斯方塊和超級瑪麗進行互動,而不需要對 Game Boy 有深入的了解。可以參考該文檔:
https://docs.pyboy.dk。
項目作者還想學習和嘗試更多奇特的功能,根據大學項目的研究,他們向模拟器添加了倒回功能,也就是說,您可以在任何遊戲中倒回時間。
PyBoy 模拟器架構
1990 年,任天堂為 Game Boy 申請了專利。下圖展示了該專利中 CPU、RAM、盒帶和顯示屏之間的內建與連接配接。
Game Boy 專利中的架構圖。
PyBoy 項目成員基于此在 Python 中為每個元件制定類(class),進而在「主機系統」上為「客戶系統」搭建了基礎(系統運作 Python)。該客戶系統就是虛拟的 Game Boy 硬體,理論上它能夠運作為 Game Boy 編寫的每一個軟體部分。
下圖展示了 PyBoy 模拟器中所有類及其關系:
PyBoy 對強化學習的意義以及與其他環境的比較
這些年來,已有很多人開發過 Gameboy 模拟器,現在的電腦和手機上都有可運作的工具。為什麼要用 Python 來寫一款呢?當然是用來訓練人工智能的。
想打遊戲?Gameboy 對于現在的人來說恐怕有點「難以上手」。
最接近通用人工智能的方法——強化學習
通用人工智能這一概念指的是機器能夠成功完成任意一件人類能夠做到的智力型任務。目前我們對 AI 的研究距離這一目标還差很遠的距離,吳恩達之前就表示過,深度學習做的僅是高維的「curve fitting」。
不同于那些依靠預先收集資料(甚至需要大量人工标記)的機器學習算法,強化學習是一種僅通過環境獎賞進行訓練的算法,其工作機制類似于人體内部的多巴胺系統。強化學習是目前最接近于人類從經驗中學習這一能力的機器學習算法,尤其适用于智能體需要根據其所處環境進行決策的情景。
下圖展示了 RL 智能體是如何僅以遊戲圖像作為輸入,來學習馬裡奧控制政策的。
為什麼大量關于 RL 的研究都在 Atari 上進行,而不是其他更實際的問題?
- 關于 RL 的研究使用 Atari 作為基準的原因主要有如下幾點:
- Atari 環境能夠讓我們使用相同的算法測試多個不同的環境,驗證 RL 算法的通用性;
- 由于輸入僅為遊戲圖像,增加了問題的複雜性;
- Atari 為研究人員提供了一個公認的測試平台,能夠較為公平地比較不同算法之間的性能;
- RL 需要大量的互動資料進行學習,在真實環境中實際測試之前,Atari 為算法的初期驗證提供了一個安全、快速、低成本的測試平台。
下圖為一些 Atari 環境的展示:
Atari、PySC2 之類環境與 PyBoy 對比
上一小節介紹了在 Atari 環境中訓練 RL 智能體的諸多優勢,然而随着 RL 的發展,這一相對較簡單的環境逐漸不再适用于目前新的 RL 研究。不久之前,由 DeepMind 提出的 Agent57 在所有 Atari 環境中表現均超越了人類玩家平均水準,也預示着在 Atari 環境上的 RL 研究逐漸進入尾聲。
更困難環境有諸如 DeepMind 與暴雪合作的 PySC2,需要智能體學會複雜的協同、對抗政策。雖然 AlphaStar 在這一環境中取得了令人矚目的成果,但仍存在很多亟待解決的問題。以下為 PySC2 環境示意圖。
PyBoy 環境的難度可以說介于 Atari 與 PySC2 之間,它為我們提供了一個驗證 RL 性能的新基準。在将 RL 應用于更複雜的實際問題之前,我們可以先在這一難度适中的環境中進行低成本、高效的測試。
就像特斯拉的人工智能和自動駕駛視覺總監 Andrej Karpathy 說的,「One should always try a BB gun before reaching for the Bazooka.」
PyBoy API 文檔
如果使用者需要建立一個自己的機器人或者是 AI,可以在 PyBoy Documentation (
https://baekalfen.github.io/PyBoy/index.html)找到所有用以支援的外部元件,其中各種類及其用法都非常詳細,這裡不再一一贅述。(如下圖結構索引)
簡短示例
PyBoy 可以作為 Python 中的對象加載。是以它可以從另一個腳本進行初始化,并可以由該腳本控制和探測。看一下 gamewrapper_tetris.py 上一個粗糙的「機器人」,正在與遊戲進行互動。當然,所有的外部元件都可以在 PyBoy 文檔中找到。
對于一般的 Game Boy 文檔,可以檢視 Pan Docs,其中包含了每個主題的詳細資訊。
以下是從螢幕讀取資料的簡短示範,該代碼也可以在 gamewrapper_mario.py 中找到:
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 的情況下運作上述代碼,則将在下面得到圖檔和終端輸出。值得注意的是,Mario 的形态顯示為索引 0,1,16,17。
作者簡介
該項目的作者 Asger Anders Lund Hansen、Mads Ynddal 和 Troels Ynddal 均來自丹麥。畢業于丹麥哥本哈根大學的 Mads Ynddal 表示,事實上這一 Gameboy 模拟器可以追溯到 2015 年他在大學期間的項目。
Gameboy 模拟器的的 1.0 版釋出了,但對于開發者們來說還有很多事可以去做。項目研發者表示,目前可以推進的方向包括為模拟器加入聲音、彩色、Gameboy 模拟連線,以及更多遊戲的封裝,當然還有在其之上訓練神經網絡的示例。
希望在人們的努力下,Gameboy 中的遊戲也能重獲新生。更重要的是,它現在還有了訓練人工智能的任務。
【雲栖号線上課堂】每天都有産品技術專家分享!
課程位址:
https://yqh.aliyun.com/live立即加入社群,與專家面對面,及時了解課程最新動态!
【雲栖号線上課堂 社群】
https://c.tb.cn/F3.Z8gvnK
原文釋出時間:2020-04-21
本文作者:機器之心
本文來自:“
機器之心”,了解相關資訊可以關注“機器之心”