23

多数のアクションがある「ディープ Q ラーニング」を使用してモデルを構築しようとしています (2908)。標準の DQN: ( https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf ) を使用してある程度の成功を収めた後、アクション スペースが大きすぎて実行できないと判断したため、さらに調査を行うことにしました。効果的な探索。

その後、私はこの論文を発見しました: https://arxiv.org/pdf/1512.07679.pdfそこでは、彼らはアクター批評家モデルとポリシー勾配を使用し、それから私を導きました: https://arxiv.org/pdf/1602.01783.pdfポリシー勾配を使用して、DQN 全体よりもはるかに優れた結果を取得します。

Keras にポリシー グラデーションを実装しているサイトをいくつか見つけまし2016/06/14/kerlym-a-deep-reinforcement-learning-toolbox-in-keras/しかし、それらがどのように実装されているか混乱しています。前者 (そして私が論文を読んだとき) では、アクター ネットワークに入力と出力のペアを提供する代わりに、すべての重みの勾配を提供し、ネットワークを使用してそれを更新するように見えますが、後者では、入出力ペアを計算するだけです。

私は自分自身を混乱させましたか?入力と出力のペアを提供し、標準の「適合」を使用してネットワークをトレーニングするだけですか、それとも何か特別なことをする必要がありますか? 後者の場合、Theano バックエンドでどのように行うのですか? (上記の例では TensorFlow を使用しています)。

4

2 に答える 2

10

TL;DR

  1. Keras.backend を使用してカスタム損失関数と勾配を実装する方法を学びます。より高度なアルゴリズムに必要になりますが、コツをつかめば実際にははるかに簡単です
  2. keras.backend を使用する CartPole の例の 1 つは、https: //gist.github.com/kkweon/c8d1caabaf7b43317bc8825c226045d2です (ただし、そのバックエンドは Tensorflow を使用しましたが、同じではないにしても非常に似ているはずです)。

問題

遊ぶときは、

エージェントには、基本的に状態を各アクションの確率であるポリシーにマップする関数であるポリシーが必要です。したがって、エージェントはポリシーに従ってアクションを選択します。

つまり、ポリシー = f(状態)

トレーニングするときは、

Policy Gradient には損失関数がありません。代わりに、期待される報酬のリターンを最大化しようとします。そして、log(action_prob) *Advantage の勾配を計算する必要があります。

  1. アドバンテージは報酬の関数です。
    • 利点 = f(報酬)
  2. action_prob は、状態と action_taken の関数です。たとえば、パラメータを更新して、実行したアクションの確率を増減できるように、どのアクションを実行したかを知る必要があります。
    • action_prob = sum(policy * action_onehot) = f(states, action_taken)

私はこのようなことを想定しています

  • ポリシー = [0.1、0.9]
  • action_onehot = action_taken = [0, 1]
  • 次に、action_prob = sum(policy * action_onehot) = 0.9

概要

2 つの関数が必要です

  • 更新関数: f(状態、action_taken、報酬)
  • アクション関数を選択: f(state)

model.compile(...) -> model.fit(X, y) だけで済む典型的な分類問題のように実装するのは簡単ではないことはすでに知っています

でも、

  • Keras を十分に活用するには、カスタム損失関数と勾配の定義に慣れている必要があります。これは基本的に、前者の著者が取ったアプローチと同じです。

  • Keras Functional API と keras.backend のドキュメントをもっと読むべきです

さらに、さまざまな種類のポリシー勾配があります。

  • 前者は DDPG と呼ばれ、実際には通常のポリシー勾配とはかなり異なります。
  • 後者は、Kapathy のポリシー勾配の例に基づいた従来の REINFORCE ポリシー勾配 (pg.py) です。しかし、それは非常に単純です。たとえば、1 つのアクションのみを想定しています。そのため、代わりに model.fit(...) を使用して何らかの方法で実装できた可能性があります。

参考文献

于 2017-05-18T08:48:37.597 に答える