ホーム » TensorLayer » TensorFlow : TensorLayer : チュートリアル (3) 深層強化学習

TensorFlow : TensorLayer : チュートリアル (3) 深層強化学習

TensorFlow : TensorLayer : チュートリアル (3) 深層強化学習 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 12/04/2018

* 本ページは、TensorLayer の以下のドキュメントの一部を翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

チュートリアル (3)

Pong Game サンプルを実行する

チュートリアルの 2nd パートでは、深層強化学習サンプルを実行します、これは Deep Reinforcement Learning: Pong from Pixels で Karpathy により紹介されています。

python tutorial_atari_pong.py

チュートリアル・コードを実行する前に、OpenAI gym 環境をインストールする必要があります、これは強化学習のためのポピュラーなベンチマークです。総てが正しくセットアップされれば、次のような出力を得るでしょう :

[2016-07-12 09:31:59,760] Making new env: Pong-v0
  [TL] InputLayer input_layer (?, 6400)
  [TL] DenseLayer relu1: 200, relu
  [TL] DenseLayer output_layer: 3, identity
  param 0: (6400, 200) (mean: -0.000009  median: -0.000018 std: 0.017393)
  param 1: (200,)      (mean: 0.000000   median: 0.000000  std: 0.000000)
  param 2: (200, 3)    (mean: 0.002239   median: 0.003122  std: 0.096611)
  param 3: (3,)        (mean: 0.000000   median: 0.000000  std: 0.000000)
  num of params: 1280803
  layer 0: Tensor("Relu:0", shape=(?, 200), dtype=float32)
  layer 1: Tensor("add_1:0", shape=(?, 3), dtype=float32)
episode 0: game 0 took 0.17381s, reward: -1.000000
episode 0: game 1 took 0.12629s, reward: 1.000000  !!!!!!!!
episode 0: game 2 took 0.17082s, reward: -1.000000
episode 0: game 3 took 0.08944s, reward: -1.000000
episode 0: game 4 took 0.09446s, reward: -1.000000
episode 0: game 5 took 0.09440s, reward: -1.000000
episode 0: game 6 took 0.32798s, reward: -1.000000
episode 0: game 7 took 0.74437s, reward: -1.000000
episode 0: game 8 took 0.43013s, reward: -1.000000
episode 0: game 9 took 0.42496s, reward: -1.000000
episode 0: game 10 took 0.37128s, reward: -1.000000
episode 0: game 11 took 0.08979s, reward: -1.000000
episode 0: game 12 took 0.09138s, reward: -1.000000
episode 0: game 13 took 0.09142s, reward: -1.000000
episode 0: game 14 took 0.09639s, reward: -1.000000
episode 0: game 15 took 0.09852s, reward: -1.000000
episode 0: game 16 took 0.09984s, reward: -1.000000
episode 0: game 17 took 0.09575s, reward: -1.000000
episode 0: game 18 took 0.09416s, reward: -1.000000
episode 0: game 19 took 0.08674s, reward: -1.000000
episode 0: game 20 took 0.09628s, reward: -1.000000
resetting env. episode reward total was -20.000000. running mean: -20.000000
episode 1: game 0 took 0.09910s, reward: -1.000000
episode 1: game 1 took 0.17056s, reward: -1.000000
episode 1: game 2 took 0.09306s, reward: -1.000000
episode 1: game 3 took 0.09556s, reward: -1.000000
episode 1: game 4 took 0.12520s, reward: 1.000000  !!!!!!!!
episode 1: game 5 took 0.17348s, reward: -1.000000
episode 1: game 6 took 0.09415s, reward: -1.000000

このサンプルは、丁度人間の挙動のように、ニューラルネットワークに画面入力から Pong ゲームをどのようにプレーするかを学習することを可能にします。ニューラルネットワークは fake AI プレーヤーとプレーしてそれを打ち負かすことを学習します。15,000 エピソードの訓練後、ニューラルネットワークはゲームの 20% 勝利できます。ニューラルネットワークは 20,000 エピソードでゲームの 35% 勝利し、それが訓練するためのより多くの勝利データを持つにつれ、ニューラルネットワークがより速く学習することを見ることができます。30,000 エピソードの間それを実行すれば、それは決して敗北しません。

render = False
resume = False

ゲーム環境を表示したい場合、render を True に設定します。コードを再度実行するとき、resume を True に設定できます、コードは存在するモデルをロードしてその上で基本モデルをその上で訓練します。


 

強化学習を理解する

Pong ゲーム

強化学習を理解するため、元の画面入力から Pong ゲームをどのようにプレーするかをコンピュータに学習させます。始める前に、Deep Reinforcement Learning: Pong from Pixels と呼ばれる有名なブログを調べることを強く勧めます、これは python-numpy と OpenAI gym 環境を使用した深層強化学習のミニマリズム的な実装です。

python tutorial_atari_pong.py

 

ポリシーネットワーク

深層強化学習では、ポリシーネットワークは深層ニューラルネットワークと同じで、私達が何をすべきか (move UP or DOWN) を知らせるアクションを出力するのはプレーヤー (or 「エージェント」) です; Karpathy のコードでは、2 つのアクション, UP と DOWN, だけを定義して単一の sigmoid 出力を使用していました; チュートリアルをより一般的にするために、3 softmax 出力を使用して 3 つのアクションを定義しました、これは UP, DOWN と STOP (do nothing) です。

# observation for training
states_batch_pl = tf.placeholder(tf.float32, shape=[None, D])

network = tl.layers.InputLayer(states_batch_pl, name='input_layer')
network = tl.layers.DenseLayer(network, n_units=H,
                                act = tf.nn.relu, name='relu1')
network = tl.layers.DenseLayer(network, n_units=3,
                        act = tf.identity, name='output_layer')
probs = network.outputs
sampling_prob = tf.nn.softmax(probs)

それからエージェントが Pong をプレーしているとき、それは異なるアクションの確率を計算し、そして一様分布からサンプル (アクション) をドローします。アクションは 1, 2 と 3 で表わされますが、softmax 出力は 0 から始まるべきなので、ラベル値をマイナス 1 して計算します。

prob = sess.run(
    sampling_prob,
    feed_dict={states_batch_pl: x}
)
# action. 1: STOP  2: UP  3: DOWN
action = np.random.choice([1,2,3], p=prob.flatten())
...
ys.append(action - 1)

 

ポリシー勾配

ポリシー勾配法は状態をアクションにマップするポリシー関数を直接学習する end-to-end アルゴリズムです。近似ポリシーは期待報酬を最大化することにより直接学習可能でしょう。ポリシー関数のパラメータ (e..g. pong サンプルで使用されるポリシーネットワークのパラメータ) は期待報酬の勾配のガイダンスのもとで訓練されて学習可能です。換言すれば、そのパラメータを更新することを通してポリシー関数を徐々に調整できます、その結果それは与えられた状態からより高い報酬に向けてアクションを生成します。

ポリシー勾配の代替方法は深層Q学習 (DQN) です。それは、状態とアクションをある値にマップする (Q 関数と呼ばれる) 値関数 (= value function) を学習することを試みる Q-学習に基づきます。DQN は Q 関数を関数近似器として表わすために深層ニューラルネットワークを用います。訓練は temporal-difference 誤差 (訳注: = TD 誤差) を最小化することにより成されます。「経験再生 (= experience replay)」と呼ばれる神経生物学的にインスパイアされたメカニズムが、非線形関数近似器の使用に起因するその安定性を改良することを手助けするために DQN と一緒に典型的には使用されます。

強化学習についてより良い理解を得るために次のペーパーをチェックすることができます。

  • Reinforcement Learning: An Introduction. Richard S. Sutton and Andrew G. Barto
  • Deep Reinforcement Learning. David Silver, Google DeepMind
  • UCL Course on RL

近年で深層強化学習の最も成功したアプリケーションは Atari ゲームと (最初にワールドクラスのプロ囲碁棋士を打ち負かした) AlphaGO をプレーするための経験再生を持つ DQN を含みます。AlphaGO は、Pong ゲームの例に類似したそのポリシーネットワークを訓練するためにポリシー勾配法を使用しました。

 

データセット反復

強化学習では、最後の決定をエピソードとして考えます。Pong ゲームでは、(一つの) エピソードは数十ゲームです、何故ならばゲームはどちらか一方のプレーヤーのための 21 のスコアが満点だからです。それでバッチサイズは幾つのエピソードをモデルを更新するために考えるかです。このチュートリアルでは、10 エピソードのバッチ上で RMSProp を使用して 200 隠れ層ユニットを持つ 2-層ポリシーネットワークを訓練します。

 

損失と更新式

訓練で最小化すべき損失式を作成します :

actions_batch_pl = tf.placeholder(tf.int32, shape=[None])
discount_rewards_batch_pl = tf.placeholder(tf.float32, shape=[None])
loss = tl.rein.cross_entropy_reward_loss(probs, actions_batch_pl,
                                              discount_rewards_batch_pl)
...
...
sess.run(
    train_op,
    feed_dict={
        states_batch_pl: epx,
        actions_batch_pl: epy,
        discount_rewards_batch_pl: disR
    }
)

バッチの損失はポリシーネットワークの総ての出力、行なった総てのアクションそしてバッチの対応する割引報酬に関連します。最初に割引報酬と出力と真のアクション間の交差エントロピーを乗算して各アクションの損失を計算します。

 

What Next?

上のチュートリアルは貴方自身のエージェントを end-to-end でどのように構築できるかを示します。それは合理的な品質を持つ一方で、デフォルトのパラメータは最善のエージェントモデルを与えないでしょう。改良できる 2, 3 のことがここにあります。

まず最初に、型通りの MLP モデルの代わりに、Playing Atari with Deep Reinforcement Learning が記述するように画面情報をよりよく捕捉するために CNN を使用することができます。

また、モデルのデフォルト・パラメータは調整されていません。学習率、減衰 (率) を変更したりモデルの重みを異なる方法で初期化してみることができます。

最後に、異なるタスク (ゲーム) 上でモデルを試して Example の他の強化学習アルゴリズムを試すことができます。

 

以上






AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com