2017-07-20 15 views
0

いくつかのOpenAIジム環境では、「ラム」バージョンがあります。たとえば、Breakout-v0Breakout-ram-v0です。OpenAIジムのRAM環境の観測をどのように解釈するのですか?

Breakout-ram-v0を使用して、各観測は、長さ128

質問の配列である:どのようにBreakout-v0の観察を変換することができる(160×210画像である)Breakout-ram-v0の観察の形に(これは長さ128の配列です)?

私の考えはBreakout-ram-v0のモデルを訓練し、Breakout-v0環境を使って訓練されたモデルの再生を表示することです。

答えて

3

ラムオプションを理解するには、いくつかの方法があります。

あなたがポンを学びたいとしましょう。ピクセルから訓練すれば、おそらくいくつかの層の畳み込みネットを使用するでしょう。興味深いことに、convnetの最終出力は1Dのフィーチャの配列です。これらは、完全に接続されたレイヤーに渡され、イメージに認識された機能に基づいて、正しい「アクション」を出力することができます。あるいは、1次元配列の機能を補強するレイヤーを使用することもできます。

ここで、ポンはとてもシンプルで、おそらく160x160ではなく16x16イメージで表現できるとしましょう。まっすぐなダウンサンプリングでは十分な詳細が得られないので、openCVを使ってボールとパドルの位置を抽出し、ミニバージョンの16x16ポンを作成します。素敵で鮮明なピクセルで必要な計算は、ゲームの本質を表現するためにあなたのディープネットよりもずっと小さく、あなたの新しいconvnetは素敵で小さなものです。それでは、あなたはあなたの礼拝堂がもう必要ではないことに気づきます。 16x16ピクセルごとに完全に接続されたレイヤーを作成するだけで済みます。

だから、あなたが持っているものを考えてください。今では、完全に接続されたレイヤーを訓練するために、ゲームの簡単な表現を取得する2つの異なる方法があります。

  1. あなたの深いコンベネットはいくつかのレイヤーを通り抜けて、最終レイヤーに256個のフィーチャーを出力します。完全に接続されたレイヤーに渡します。
  2. あなたの手動の特徴抽出は、OpenCVでブロブ(パトル/ボール)を抽出して、16×16のポンを作ります。それを完全に接続されたレイヤーに渡すことで、実際には16x16 = 256の抽出されたフィーチャーのセットに過ぎません。

パターンは、ゲームの状態を「表現」する簡単な方法を見つけてから、完全に接続されたレイヤーに渡します。

オプション3を入力します。ゲームのRAMは256バイトの配列でもかまいません。しかし、あなたはこれがゲームの「状態」を含んでいることを知っているので、それはあなたの16x16バージョンのポンのようです。ボールの方向などについての情報を持っている可能性が高いため、16x16よりも「より良い」表現になる可能性が最も高いです。

これで、ゲームの状態を単純化し、完全に接続されたレイヤー、またはあなたの補強アルゴリズム。

OpenAIがあなたにRAMを与えてくれたことは、あなたがゲームの「表現」を学ぶ作業を避けることに役立っています。そして、あなたは「政策」の学習に直接移動しましょう。ゲームの状態。

OpenAIは、RAMバージョンの視覚的出力を「見る」方法を提供するかもしれません。もしそうでなければ、それを利用可能にするよう求めることができます。しかし、それはあなたが得る最高です。彼らは、RAMをレンダリングするコードをリバースエンジニアリングするつもりはなく、実際には不可能なピクセルに基づいてRAMを生成するためにコードをリバースエンジニアリングすることもなく、ピクセルは状態の一部に過ぎないゲームの

ラムを簡単に利用できるのであれば、ラムを提供するだけです。そのため、良い状態表示を提供するものがあると仮定して、何をすべきかを学習するアルゴリズムを試すことができます。

ピクセルをRAMに変換するのと同じように(簡単な)方法はありませんが、アタリシステムにラムとピクセルの両方を与えるように依頼する方法がありますRAM上で動作しますが、ピクセルを表示します。

関連する問題