強化学習への入門。 その3. Q-Learning with Neural Networks, Algorithm DQN

このリンクからTensorFlowのコードを自分で実行することもできますし(PyTorch版はこのリンク)、実行せずにコードを見続けることもできます。 これまでの部分より少しコードが長いので、ここでは最も重要な部分のみを紹介します。

ここで、CartPoleの環境を紹介します。 この環境の可視化と実行には、OpenAI Gymを使用しています。 目標は、ポールを垂直に保つために、カートを左右に移動させることです。 ポールの傾きが垂直軸から15度以上傾くと、エピソードが終了し、やり直しになります。 ビデオ1では、この環境でランダムにアクションを起こし、いくつかのエピソードを実行する例を示しています。

ビデオ1: CartPole環境でのランダムなゲームプレイ。

DQNアルゴリズムを実装するために、まずメイン (main_nn) とターゲット (target_nn) DNNを作成することから始めることにします。 ターゲット ネットワークはメイン ネットワークのコピーになりますが、重みのコピーは独自に作成します。 また、オプティマイザーと損失関数も必要です。

Algorithm 1. Deep Neural Networksのアーキテクチャ.

次に、経験リプレイバッファを作成し、経験をバッファに追加して、後でトレーニング用にサンプリングする.

Algorithm 2.経験リプレイバッファは、経験値をバッファに追加して、後でトレーニング用にサンプリングする.

アルゴリズム2. Experience Replay Buffer.

また、ε-greedyポリシーを実行するためのヘルパー関数を書き、バッファに格納されたデータを使用してメインネットワークを訓練する。

Algorithm 3. ε-greedy政策のための関数とニューラルネットワークの学習のための関数。

必要なハイパーパラメータも定義し、ニューラルネットワークを学習させる。 ε-greedy方針で1エピソードを再生し、データを経験再生バッファに格納し、各ステップの後に主ネットワークを訓練する。 2000ステップに一度、メインネットワークからターゲットネットワークに重みをコピーする。 また、イプシロン(ε)の値を小さくして、高い探索から始め、時間の経過とともに探索を減少させることにする。 各エピソードの後、アルゴリズムがどのように学習を開始するかを見ていくことにする。 メインループ。

これは表示される結果です:

Episode 0/1000. Epsilon: 0.99. Reward in last 100 episodes: 14.0 Episode 50/1000. Epsilon: 0.94. Reward in last 100 episodes: 22.2 Episode 100/1000. Epsilon: 0.89. Reward in last 100 episodes: 23.3 Episode 150/1000. Epsilon: 0.84. Reward in last 100 episodes: 23.4 Episode 200/1000. Epsilon: 0.79. Reward in last 100 episodes: 24.9 Episode 250/1000. Epsilon: 0.74. Reward in last 100 episodes: 30.4 Episode 300/1000. Epsilon: 0.69. Reward in last 100 episodes: 38.4 Episode 350/1000. Epsilon: 0.64. Reward in last 100 episodes: 51.4 Episode 400/1000. Epsilon: 0.59. Reward in last 100 episodes: 68.2 Episode 450/1000. Epsilon: 0.54. Reward in last 100 episodes: 82.4 Episode 500/1000. Epsilon: 0.49. Reward in last 100 episodes: 102.1 Episode 550/1000. Epsilon: 0.44. Reward in last 100 episodes: 129.7 Episode 600/1000. Epsilon: 0.39. Reward in last 100 episodes: 151.7 Episode 650/1000. Epsilon: 0.34. Reward in last 100 episodes: 173.0 Episode 700/1000. Epsilon: 0.29. Reward in last 100 episodes: 187.3 Episode 750/1000. Epsilon: 0.24. Reward in last 100 episodes: 190.9 Episode 800/1000. Epsilon: 0.19. Reward in last 100 episodes: 194.6 Episode 850/1000. Epsilon: 0.14. Reward in last 100 episodes: 195.9 Episode 900/1000. Epsilon: 0.09. Reward in last 100 episodes: 197.9 Episode 950/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0 Episode 1000/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0

今、エージェントはCartPole環境に対する報酬を最大化することを学習したので、結果を視覚化して、200フレームにわたってポールのバランスを維持できるようになったことを見るために、エージェントにもう1回環境との相互作用をさせることにします。

動画2. 学習したDQNエージェントとCartPole環境とのインタラクションを可視化した結果。

このリンクからTensorFlowコードを自分で実行できます(またはこのリンクからPyTorchバージョンも)

コメントを残す

メールアドレスが公開されることはありません。