Pythonでゲームボーイエミュレーターを作成し、AIモデルをトレーニングする:デンマーク人の大学のプロジェクトが大ヒット

Pythonでゲームボーイエミュレーターを作成し、AIモデルをトレーニングする:デンマーク人の大学のプロジェクトが大ヒット

Atari ゲームを使って人工知能を研究するのは、ちょっと現実的ではないと感じますか?これでゲームボーイエミュレーターが使用できるようになります。

[[322869]]

80 年代や 90 年代に生まれた多くの人々にとって、任天堂のゲームボーイは青春時代の大きな部分を象徴しています。私たちがよく知っているゲームの多くは、有名な「マリオ」や「ゼルダ」シリーズを含め、もともとこの 8 ビット ゲーム コンソールにインストールされていました。国内のプレイヤーにとって、最も多くプレイするゲームはおそらく「ポケモン」シリーズでしょう。

このゲーム機が最初に発売されてから30年が経ちましたが、人々の熱狂はまったく衰えていません。昨日、Python で書かれたゲームボーイ エミュレーターがソーシャル ネットワーク上で大きな注目を集めました。

青春が戻ってきた?著者のRedditへの投稿はすぐに何千ものいいねを獲得した。

プロジェクトの作者の一人である Mads Ynddal 氏が、PyBoy バージョン 1.0 の正式リリースを発表しました。

PyBoyとは何ですか?

つまり、これは Python で完全にゼロから書かれたゲームボーイ エミュレーターであり、API 経由でスクリプトをサポートしています。研究者らは、Cython を使用してソフトウェアをコンパイルできるようにする型定義を追加し、C および C++ で記述されたシミュレーターに匹敵するパフォーマンスを実現しました。

プロジェクトリンク: https://github.com/Baekalfen/PyBoy

特徴

PyBoy は Python 経由でアクセスできるように設計されており、実験研究、ロボット工学、人工知能に取り組む人々をサポートし、奨励します。研究者たちはゲーム固有のラッパーを構築しており、現在、プログラマーはゲームボーイに関する詳細な知識を必要とせずにテトリスやスーパーマリオを操作できるようになっている。ドキュメントを参照できます: https://docs.pyboy.dk。

プロジェクトの作者たちは、より珍しい機能を学び、試してみたかったので、大学のプロジェクトの研究に基づいて、エミュレーターに巻き戻し機能を追加しました。これにより、どのゲームでも時間を巻き戻すことができます。

PyBoy エミュレータのアーキテクチャ

1990年に任天堂はゲームボーイの特許を申請した。次の図は、特許における CPU、RAM、カートリッジ、ディスプレイの統合と接続を示しています。

ゲームボーイの特許からのアーキテクチャ図。

これを基に、PyBoy プロジェクトのメンバーは各コンポーネントのクラスを Python で作成し、「ホスト システム」(Python が実行されるシステム) 上に「クライアント システム」の基盤を構築しました。クライアント システムは仮想 Game Boy ハードウェアであり、理論上は Game Boy 用に作成されたすべてのソフトウェアを実行できます。

次の図は、PyBoy シミュレーター内のすべてのクラスとそれらの関係を示しています。

PyBoy が強化学習にもたらす意味と他の環境との比較

長年にわたり、多くの人がゲームボーイエミュレーターを開発しており、現在ではコンピューターと携帯電話の両方で実行できるツールも存在します。なぜ Python で書くのでしょうか?もちろん、人工知能のトレーニングにも使われます。

[[322871]]

ゲームをプレイしたいですか?ゲームボーイは、現代の人にとってはちょっと「使いにくい」ものかもしれません。

汎用人工知能に最も近いアプローチ - 強化学習

汎用人工知能の概念は、人間が実行できるあらゆる知的タスクを機械がうまく完了できる能力を指します。現時点では、AI に関する研究はまだこの目標からは程遠い。Andrew Ng 氏は以前、ディープラーニングは高次元の「曲線フィッティング」のみを行うと述べていた。

事前に収集されたデータに依存する機械学習アルゴリズム(大量の手動ラベル付けも必要)とは異なり、強化学習は環境報酬のみでトレーニングされるアルゴリズムです。その動作メカニズムは人体のドーパミン システムに似ています。強化学習は現在、経験から学ぶ人間の能力に最も近い機械学習アルゴリズムであり、インテリジェントエージェントが環境に基づいて決定を下す必要があるシナリオに特に適しています。

下の図は、RL エージェントがゲーム画像のみを入力として使用してマリオの制御ポリシーを学習する方法を示しています。

なぜ RL に関する研究が、他のより実用的な問題ではなく Atari でこれほど多く行われているのでしょうか?

  • RL 研究で Atari をベンチマークとして使用する理由はいくつかあります。
  • Atari 環境では、同じアルゴリズムを使用して複数の異なる環境をテストし、RL アルゴリズムの汎用性を検証できます。
  • 入力はゲーム画像のみなので、問題の複雑さが増します。
  • Atari は、さまざまなアルゴリズム間のパフォーマンスを公平に比較​​できる、認められたテスト ベッドを研究者に提供しています。
  • RL の学習には大量のインタラクション データが必要です。実際の環境でのテストの前に、Atari はアルゴリズムの初期検証のために安全で高速、低コストのテスト プラットフォームを提供します。

以下は Atari 環境の例です。

Atari、PySC2、その他の環境とPyBoyとの比較

前のセクションでは、Atari 環境で RL エージェントをトレーニングする多くの利点を紹介しました。ただし、RL の発展に伴い、この比較的単純な環境は徐々に新しい RL 研究には適さなくなっています。少し前、DeepMind が提案した Agent57 は、すべての Atari 環境で人間のプレイヤーの平均レベルを上回りました。これは、Atari 環境での RL 研究が徐々に終わりに近づいていることを示していました。

さらに難しい環境としては、DeepMind と Blizzard のコラボレーションによる PySC2 があり、インテリジェント エージェントが複雑な協力戦略と対立戦略を学習する必要があります。 AlphaStar はこの環境で素晴らしい成果を達成しましたが、解決すべき問題はまだ数多く残っています。以下は PySC2 環境の図です。

PyBoy 環境の難易度は Atari と PySC2 の中間にあると言え、RL パフォーマンスを検証するための新しいベンチマークを提供します。 RL をより複雑な現実世界の問題に適用する前に、この中程度の難しさの環境で低コストで効率的なテストを実施できます。

テスラのAIおよび自動運転ビジョン担当ディレクターのアンドレイ・カルパシー氏は、「バズーカ砲に手を伸ばす前に、必ずBBガンを試してみるべきだ」と語った。

Githubの紹介

インストール方法は?

Python を実行するように設定された環境がすでにある場合は、インストールは非常に簡単です。

  1. パッケージ マネージャーを使用して SDL2 をインストールします (sudo apt install libsdl2-dev または brew install sdl2)
  2. pip install pyboyを使用してPyboyをインストールします。

PyBoy は、ターミナル $ pyboy file.rom から直接使用することも、Python スクリプトで使用することもできます。

  1. pyboyからPyBoyをインポートする
  2. pyboy = PyBoy( 'ROMs/gamerom.gb' )ですが、 pyboy.tick() ではありません:
  3. 合格

このプロジェクトは、macOS、Raspberry Pi (Raspbian)、Linux (Ubuntu)、Windows 10 もサポートしています。

PyBoy API ドキュメント

ユーザーが独自のロボットや AI を作成する必要がある場合、それをサポートするために使用されるすべての外部コンポーネントは PyBoy ドキュメント (https://baekalfen.github.io/PyBoy/index.html) で見つけることができます。さまざまなクラスとその使用方法は非常に詳細なので、ここでは 1 つずつ説明しません。 (構造インデックスは下記参照)

短い例

PyBoy は Python のオブジェクトとして読み込むことができます。したがって、別のスクリプトから初期化し、そのスクリプトによって制御およびプローブすることができます。ゲームとやりとりする粗雑な「ボット」である gamewrapper_tetris.py を見てみましょう。もちろん、すべての外部コンポーネントは PyBoy のドキュメントに記載されています。

Game Boy の一般的なドキュメントについては、すべてのトピックに関する詳細な情報が記載されている Pan Docs をご覧ください。

以下は画面からデータを読み取る簡単なデモンストレーションです。このコードは gamewrapper_mario.py にも記載されています。

  1. osimport sysをインポートする
  2. pyboyからPyBoyをインポートし、WindowEvent
  3. #以下のディレクトリからPyBoyをインポートできるようにします
  4. ファイルパス = os.path.dirname(os.path.realpath(__file__))
  5. sys.path.insert( 0 , ファイルパス + "/.." )
  6. # ROMがargvif len(sys.argv) > 1を通じて与えられているかどうかを確認します:
  7. ファイル名 = sys.argv[ 1 ]そうでない場合:
  8. print( "使用方法: python mario_boiler_plate.py [ROMファイル]" )
  9. 終了( 1 )
  10.  
  11. quiet = sys.argv 内の"--quiet"
  12. pyboy = PyBoy(ファイル名、window_type = "headless"  静かなら  "SDL2" 、window_scale= 3 、debug=not quiet、game_wrapper=True)
  13. pyboy.set_emulation_speed( 0 ) pyboy.cartridge_title() == "スーパーマリオラン"をアサートする 
  14.  
  15. マリオ = pyboy.game_wrapper()
  16. マリオ.start_game()
  17. assert mario.score == 0 assert mario.lives_left == 2 assert mario.time_left == 400 assert mario.world == ( 1 , 1 ) assert mario.fitness == 0 # AI開発のための組み込みフィットネススコア
  18. last_fitness = 0print(マリオ)
  19.  
  20. pyboy.send_input(WindowEvent.PRESS_ARROW_RIGHT) は範囲( 1000 )内の_に対して実行されます:
  21. mario.fitness >= last_fitness であると主張する
  22. last_fitness = マリオフィットネス
  23.  
  24. pyboy.tick()
  25. mario.lives_left == 1 の場合:
  26. assert last_fitness == 27700 assert mario.fitness == 17700 # ライブで負けると、このフィットネススコアリングで10.000ポイント減点されるprint(mario)
  27. その他:
  28. print( "マリオは死ななかった?" )
  29. 終了( 2 )
  30.  
  31. mario.reset_game() がmario.lives_left == 2 であることを確認します 
  32.  
  33. pyboy.stop()

スーパーマリオランド ROM をロードした状態で上記のコードを実行すると、以下のイメージとターミナル出力が得られます。マリオのパターンはインデックス 0、1、16、17 で表示されることに注目してください。

著者について

このプロジェクトの作者であるAsger Anders Lund Hansen氏、Mads Ynddal氏、Troels Ynddal氏はいずれもデンマーク出身です。デンマークのコペンハーゲン大学を卒業したマッズ・インドダル氏は、実はこのゲームボーイエミュレーターは、彼が大学時代に2015年に始めたプロジェクトにまで遡ることができると語った。

[[322874]]

ゲームボーイ エミュレーターのバージョン 1.0 がリリースされましたが、開発者が行うべき作業はまだたくさん残っています。プロジェクト開発者らは、現在進めることができる方向性としては、シミュレーターへのサウンド、カラー、ゲームボーイシミュレーション接続の追加、さらに多くのゲームのパッケージ化、そしてもちろん、シミュレーター上でのニューラルネットワークのトレーニング例などがあると述べた。

皆さんの努力でゲームボーイのゲームも復活できるといいですね。さらに重要なことは、現在では人工知能を訓練するという任務を負っていることです。

<<:  AI を使って「手を洗ってください」を 500 の言語に翻訳する方法

>>:  百度研究所が新しいAIツールを発表:10分以内に記事を自動的に動画に変換可能

ブログ    
ブログ    

推薦する

...

タオバオのメイン検索リコールシナリオにおけるマルチモーダル技術の探究

検索リコールは検索システムの基礎として、効果向上の上限を決定します。私たちが直面している主な課題は、...

祭壇から一般公開へと移行する冬季オリンピックでAIブラックテクノロジーを公開

現代のスポーツ競技は、アスリート同士のタイム競争であるだけでなく、舞台裏でのさまざまなハイテクノロジ...

Facebook、動画から学習する新たなAIプロジェクトを開始

3月30日、海外メディアの報道によると、Facebookの開発者らは、公開動画から学習できる「Lea...

...

人工知能人材の需要は倍増し、アルゴリズム人材の不足は170万人に達した

デジタル経済と実体経済の融合と発展が加速する中、デジタル経済の重要な技術モジュールとしての人工知能の...

比較分析に基づく人工知能技術の革新の道筋に関する研究

1. はじめに人工知能(AI)技術は1950年代に誕生し、現在では最も最先端かつ最も普及しているハイ...

ネットワークにおける機械学習の実用的応用

各 Web アプリケーションには独自の機能とパフォーマンス パラメーターのセットがあり、これらは動的...

ディープラーニングを理解するための鍵 – 啓蒙

ニューラル ネットワークは、これまでに発明された最も美しいプログラミング パラダイムの 1 つです。...

...

...

注目の話題レビュー:人工知能市場規模は100兆元を超え、爆発的な成長を導く

AI(人工知能)は、研究開発を通じて人間の理論、方法、技術、アプリケーション システムをシミュレート...

Google は人工知能の分野で「堀」を持っていないのでしょうか?

少し前、匿名の人物が、Google 社内の研究者による研究メモを Discord プラットフォームに...

AI による顔を変える動画が何百万人ものユーザーを獲得。たった 1 ステップで楽しさから恐怖感まで

今朝、私の友人の輪の中に、AI による顔の変形に関する短い動画が大量に現れました。これらの短編動画の...