GoogleのDeepMindAtari 紙を読んでいて、試しています「エクスペリエンスリプレイ」の概念を理解するため。エクスペリエンスリプレイは他の多くの強化学習ペーパー(特にAlphaGoペーパー)で取り上げられているので、その仕組みを理解したいと思います。以下にいくつかの抜粋を示します。
最初に、データをランダム化するエクスペリエンスリプレイと呼ばれる生物学的に着想を得たメカニズムを使用しました。これにより、観測シーケンスの相関関係が削除され、データ分布の変化が滑らかになります。
次に、このペーパーでは次のように詳しく説明します。
ニューラルネットワークをトレーニングするための他の安定した方法がありますが、ニューラルフィットQ反復などの強化学習設定では、これらの方法には、ネットワークの de novo 数百回の反復トレーニングが含まれます。したがって、これらの方法は、アルゴリズムとは異なり、大規模なニューラルネットワークで正常に使用するには非効率的です。図1に示す深い畳み込みニューラルネットワークを使用して、近似値関数 $ Q(s、a; \ theta_i)$ をパラメーター化します。
$ \ theta_i $ は、反復 $ i $ でのQネットワークのパラメーター(つまり、重み)です。エクスペリエンスの再生を実行するために、エージェントのエクスペリエンスを各タイムステップ $ e_t =(s_t、a_t、r_t、s_ {t + 1})$ に保存します。データセット $ D_t = \ {e_1、\ dots、e_t \} $ 内のspanclass = “math-container”> $ t $ 。学習では、経験のサンプル(またはミニバッチ)にQラーニングの更新を適用します $(s、a、r、s “)\ sim U(D)$ 、保存されたサンプルのプールからランダムに均一に抽出されます。反復 $ i $ でのQ学習の更新では、次の損失関数が使用されます。 $$ L_i (\ theta_i)= \ mathbb {E} _ {(s、a、r、s “)\ sim U(D)} \ left [\ left(r + \ gamma \ max_ {a”} Q(s “、 a “; \ theta_i ^-)-Q(s、a; \ theta_i)\ right)^ 2 \ right] $$
素人の言葉で言えば、体験のリプレイとは何ですか、そしてその利点は何ですか?
回答
の重要な部分引用されたテキストは次のとおりです。
エクスペリエンスの再生を実行するために、エージェントのエクスペリエンスを保存します$ e_t =(s_t、a_t、r_t、s_ {t + 1} )$
これは、シミュレーションまたは実際の経験中に発生する状態/アクションのペアでQ学習を実行する代わりに、システムが検出されたデータを保存することを意味します。 [state、action、reward、next_state]-通常は大きなテーブルにあります。これは関連する値を保存しないことに注意してください。これは、後でアクション値の計算にフィードする生データです。
学習フェーズは、経験を積むことと論理的に分離され、このテーブルからランダムサンプルを取得することに基づいています。ポリシーを改善すると、最適なアクションに近いアクションを探索するさまざまな動作が発生し、それらから学習する必要があるため、2つのプロセス(動作と学習)をインターリーブする必要があります。ただし、これを好きなように分割できます-例: 1つのステップを踏み、3つのランダムな前のステップなどから学習します。エクスペリエンスリプレイを使用する場合のQラーニングターゲットは、オンラインバージョンと同じターゲットを使用するため、そのための新しい公式はありません。与えられた損失の公式は、経験のリプレイなしでDQNに使用するものでもあります。違いは、 s、a、r、s “、a”をフィードすることだけです。
DQNでは、DeepMindチームも2つのネットワークを維持し、どちらかを切り替えました。学習と、現在のアクション値の見積もりを「ブートストラップ」としてフィードするもの。これは、非線形関数近似器を使用する場合のアルゴリズムの安定性に役立ちました。これが、バーが$ {\ theta} ^ {\ overline {\ space}} _ i $で表すものです。これは、ウェイトの代替の凍結バージョンを示します。
エクスペリエンスリプレイの利点:
-
複数回学習することで、以前のエクスペリエンスをより効率的に使用できます。これは、実際のエクスペリエンスを取得するのにコストがかかる場合に重要です。 Qラーニングの更新は増分であり、すぐには収束しないため、同じ状態、アクションペアが与えられた場合、特に即時の結果(報酬、次の状態)の変動が少ない場合は、同じデータを使用した複数のパスが有益です。
-
関数近似器をトレーニングするときの収束動作が向上します。これは、データが iid データに似ているためです。最も監視された学習収束の証明。
エクスペリエンスリプレイのデメリット:
- Q($ \ lambda $)などのマルチステップ学習アルゴリズムを使用するのは困難です。 、バイアス(ブートストラップによる)と分散(長期的な結果の遅延とランダム性による)のバランスをとることにより、より良い学習曲線を与えるように調整できます。マルチステップDQNとエクスペリエンスリプレイDQNは、論文 Rainbow:Combining Improvements in Deep ReinforcementLearning で検討されている拡張機能の1つです。
DQNで使用されているアプローチは、このビデオ講義の一部でデビッドシルバーによって簡単に概説されています(01:17頃: 00ですが、その前のセクションを見る価値があります)。時間があれば、強化学習の大学院レベルのコースであるシリーズ全体を視聴することをお勧めします。
コメント
- Let 'は、トレーニング中、私たちはある州にいて、イプシロン欲張りのポリシーに従って行動を起こし、あなたは別の州に行くと言います。だからあなたは報酬と次の状態を手に入れます。ここで、報酬はゲームのスコアであり、状態は画面のピクセルパターンである可能性があります。次に、関数近似器と、すでに凍結されている関数近似器を使用して欲張りポリシーから取得した値との間のエラーを取得します。しかし、近似器を最適化するときの経験の再生では、ランダムな状態のアクションデータセットを取得します。私は正しいですか?
- @ShamaneSiriwardhana:はい、あなたは正しいと思います。これは実際の軌跡からのまったく同じデータですが、最新のステップからのみ学習するのではなく、大きなテーブルに保存し、そのテーブルからサンプルを取得します(通常は複数のサンプルで、数千の前のステップから選択できます。 )。さらに詳しい説明が必要な場合は、サイトで質問してください。
- ええ、もう一度論文を読みました。また、この方法はポリシー外の学習も改善できると述べています。なぜなら、Q学習では、イプシロン-欲張りポリシーに従って行動しますが、値の更新は欲張りポリシーに従って機能します。したがって、タイムステップごとに、ニューラルネットパラメータがミニバッチ統計によって更新されます。これは、正確なタイムステップ統計とは関係ありませんが、これより前に発生したことは、データの無相関にも役立ちます。
- @Neil Slater、I 'レインボーペーパーを確認しましたが、'エクスペリエンスリプレイとマルチプレイを組み合わせるための特別なトリックの使用に関する特別なコメントはありませんでした。ステップ法。また、'マルチステップ法は元々エクスペリエンスリプレイと組み合わせることが不可能であると聞きましたが、エクスペリエンスリプレイからではなくリプレイからn連続エクスペリエンスをランダムに選択するのはなぜですか?各nエクスペリエンス間で、相関関係は見つかりませんでしたか? 'このマルチステップエクスペリエンスのリプレイではありませんか?
- @NeilSlater "マルチを使用するのが難しいのはなぜですかステップ学習アルゴリズム"?どういう意味ですか?
回答
アルゴリズム(または少なくともそのバージョン。 Coursera RL capstoneプロジェクト)は次のとおりです。
-
最後の
#buffer_size
SARS (州、行動、報酬、新しい州)の経験。 -
エージェントを実行し、エージェント(バッファー)が少なくとも
#batch_size
エクスペリエンスを取得するまで、リプレイバッファーにエクスペリエンスを蓄積させます。- $で、特定のポリシー(たとえば、離散アクションスペースの場合はsoft-max、連続の場合はGaussianなど)に従ってアクションを選択できます。 \ hat {Q}(s、a; \ theta)$ 関数推定量。
-
#batch_size
以上:-
関数推定量のコピーを作成します( $ \ hat {Q}(s、a; \ theta)$ )現時点で、つまり、重みのコピー $ \ theta $ -これを「フリーズ」し、更新しません。そして、「真の」状態を計算するために使用します $ \ hat {Q}(s “、a”; \ theta)$ 。の更新:
-
リプレイバッファーからのサンプル
#batch_size
エクスペリエンス。 -
サンプリングされた経験を使用して関数推定器のバッチ更新を作成します(例: Q学習で
$ \ hat {Q}(s、a)= $ ニューラルネットワーク-ネットワークの重みを更新します)。凍結された重みを「真の」アクション値関数として使用しますが、凍結されていない関数は引き続き改善します。
-
-
これを行うまで最終状態に到達します。
-
常に新しいエクスペリエンスをリプレイバッファに追加することを忘れないでください
-
-
必要な数のエピソードを実行します。
「真」の意味:各エクスペリエンスは、真の価値関数 $ Q(s、a)$ と関数推定器
コードの抜粋は次のとおりです:
def agent_step(self, reward, state): action = self.policy(state) terminal = 0 self.replay_buffer.append(self.last_state, self.last_action, reward, terminal, state) if self.replay_buffer.size() > self.replay_buffer.minibatch_size: current_q = deepcopy(self.network) for _ in range(self.num_replay): experiences = self.replay_buffer.sample() optimize_network(experiences, self.discount, self.optimizer, self.network, current_q, self.tau) self.last_state = state self.last_action = action return action