強化学習で制約付きアクションスペースを実装する方法?


12

Tensorflowの上に構築された非常に優れたTensorforceライブラリのおかげで、PPOエージェントで強化学習モデルをコーディングしています。

最初のバージョンは非常にシンプルでしたが、今では各ステップですべてのアクションを使用できない、より複雑な環境に飛び込んでいます。

5つのアクションがあり、それらの可用性が内部状態(前のアクションおよび/または新しい状態/観測スペースによって定義される)に依存するとします。

  • 2つのアクション(0と1)は常に利用可能です
  • 2つのアクション(2および3)は、internal_state == 0の場合にのみ使用できます
  • 1つのアクション(4)は、internal_state == 1の場合にのみ使用できます

したがって、internal_state == 0の場合は4つのアクションが利用可能であり、internal_state == 1の場合は3つのアクションが利用可能です。

私はそれを実装するいくつかの可能性を考えています:

  1. internal_stateに応じて、各ステップでアクションスペースを変更します。これはナンセンスだと思います。
  2. 何もしない:使用できないアクションを選択しても影響がないことをモデルに理解させます。
  3. ほとんど何もしない:モデルが利用できないアクションを選択したときに、報酬にわずかにマイナスの影響を与えます。
  4. モデルを支援する:モデルにinternal_state値+箇条書き2または3を通知する整数を状態/監視スペースに組み込む

これを実装する他の方法はありますか?あなたの経験から、どれが一番いいですか?

回答:


5

最も簡単な解決策は、すべてのアクションを単に「合法」にすることですが、違法の可能性のあるアクションからさまざまな法的アクションへの一貫した確定的なマッピングを実装します。使用しているPPO実装が不正なアクションを選択するたびに、それをマップする正当なアクションに置き換えるだけです。その後、PPOアルゴリズムは、違法行為が選択された場合と同様に、自分自身を更新できます(違法行為は単に...法的行為の「ニックネーム」のようになります)。

たとえば、あなたが説明する状況では:

  • 2つのアクション(0と1)は常に利用可能です
  • 2つのアクション(2および3)は、internal_state == 0の場合にのみ使用できます
  • 1つのアクション(4)は、internal_state == 1の場合にのみ使用できます

場合によってはinternal_state == 0アクションがあれば、4(違法行為)を選択して、あなたは常に他のいずれかのアクションのためにそれを交換し、代わりにその1を再生することができます。それについて一貫している限り、どちらを選択するかは(理論的には)重要ではありません。アルゴリズムは、不正なアクションを選択したことを知っている必要はありません。同じ状態で将来同じ不正なアクションを再び選択するときは常に、代わりに一貫して同じ正当なアクションにマップされるため、その動作に従って強化するだけです。


01


最初の「解決策」については、マッピングをどのように選択するかを「理論的に」重要ではないことを先に書きました。ただし、ここでの選択が実際の学習速度に影響を与えることは間違いありません。これは、学習プロセスの初期段階で、ランダムに近いアクションを選択する可能性が高いためです。一部のアクションが出力に「複数回表示される」場合、それらは最初の厳密にランダムなアクション選択で選択される可能性が高くなります。したがって、初期の行動に影響があり、収集するエクスペリエンスに影響があり、それが学習内容にも影響します。

internal_state変数に入力フィーチャを含めることができれば、パフォーマンスにとって有益であることは間違いありません。

特定の違法行為に何らかの形で「意味的に近い」何らかの法的措置を特定できる場合、「マッピング」の「類似した」行為を違法行為から法的行為に具体的に結び付けることは、パフォーマンスにとっても有益です。そのソリューション。たとえば、天井が非常に低い状態(頭をぶつけるため)で違法になる「前方へジャンプ」アクションがある場合、そのアクションを「前方へ移動」アクション(これはまだ似ていますが、どちらも順方向に進んでいます)、「逆方向に移動」アクションにマップするよりも。この「類似した」アクションの考え方は、特定のドメインにのみ適用できますが、一部のドメインでは、アクション間にそのような類似性がない場合があります。


1

目的は、Tensorforceのようなフレームワークを使用して、状態駆動型ルールに依存するアクションスペースに特定の制約を持つ近位ポリシー最適化コンポーネントを設計することです。

質問にリストされている設計オプション

これらのオプションは、以下の初期分析を読む際のクイックリファレンスとしてここにリストされています。

  • internal_stateに応じて、各ステップでアクションスペースを変更します。これはナンセンスだと思います。
  • 何もしない:使用できないアクションを選択しても影響がないことをモデルに理解させます。
  • ほとんど何もしない:モデルが利用できないアクションを選択したときに、報酬にわずかにマイナスの影響を与えます。
  • モデルを支援する:モデルにinternal_state値+箇条書き2または3を通知する整数を状態/監視スペースに組み込む

初期分析

移動ごとにアクションスペースを変更することは確かに賢明です。つまり、実際には、前述の問題の適切な表現と、人間がゲームをプレイする通常の方法と、チェスと囲碁でコンピュータが人間を倒す方法です。

この考えの明らかな無意味さは、Tensorforceプロジェクトのロードマップに沿った進展と強化理論に沿った進展の単なる産物であり、どちらも全体像は若いです。TensorforceのドキュメントとFAQを読むと、フレームワークがルールエンジンをプラグインしてアクションスペースを決定するように設計されているようには見えません。これはオープンソースの欠点ではありません。ルール条件付きマルコフ連鎖決定の理論や提案アルゴリズムを提供する論文はないようです。

何もしないオプションは、文献に示されている現在利用可能な戦略に適合するオプションです。何もしないことがおそらく、より信頼性が高く、おそらくより即時に望ましい動作を生成するアプローチです。

モデルを支援するという概念の問題は、モデルを拡張することほど強力なアイデアではないということです。オープンソースでは、これはモデルを表すクラスを拡張することで行われます。

    a. Represent rule-conditioned learning in nomenclature
    b. Represent convergence mathematically using the new nomenclature
    c. Determining a method of convergence
    d. Proving convergence
    e. Rechecking
    f. Defining a smooth and efficient algorithm
    g. Providing PAC learning information for planning
    f. Peer review
    g. Extending the classes of the library
    h. Proof of concept with the current problem above
    i. Additional cases and metrics comparing the approach with the others
    j. Extending the library flexibility to support more such dev

ルールに制約のあるケースをカバーするように学習システムを拡張することは、博士論文の優れたアイデアであり、多くの可能なアプリケーションを備えたプロジェクト提案として研究所に飛ぶかもしれません。すべてのステップで研究者を思いとどまらせないでください。これらは基本的に、博士論文または資金提供を受けたAI研究プロジェクトのステップのリストです。

短期的な解決策として、モデルを支援することは機能するかもしれませんが、強化学習パスに沿ってAIのアイデアを促進するための適切な戦略ではありません。特定の問題に対する短期的な解決策として、問題なく機能する場合があります。ほとんど何もしないという考えは、Tensorforceが使用している可能性が高い特定の実装につながった収束の証明に収まるため、より健全な場合があります。

ほとんど何もしない状態からコンバージェンスを支援するように名前を変更すると、試してみる前に正しい見方を身に付けることができます。学習率と同様に、オーバーシュートを回避するために収束に近づくと、アシストを減衰させる必要がある場合があります。


3
通常AlphaGoなどで発生するのは、ニューラルネットワークの低レベルの表現が非常に大きなアクションスペースを表すことです。そのほとんどは、現在の状態では不可能です(これは、固定サイズのベクトルを出力する単純なNNの制限のために行われます) )。次に、コードの別の部分でフィルターを適用して、許可された移動のみの確率を選択して正規化します。結合されたNNとフィルターはエージェントの一部です。したがって、エージェント全体が「移動ごとにアクションスペースを変更する」と言っても差し支えありません。ただし、Tensorforceライブラリ内でそれがどのように実現されるかはわかりません。
Neil Slater、

1

通常、エージェントが実行できるアクションのセットは時間の経過とともに変化しませんが、一部のアクションは異なる状態で不可能になる可能性があります(たとえば、TicTacToeゲームのどの位置でもすべての動きが可能であるとは限りません)。

コードの一部https://github.com/haje01/gym-tictactoe/blob/master/examples/base_agent.pyで例として見てください

ava_actions = env.available_actions()
action = agent.act(state, ava_actions)
state, reward, done, info = env.step(action)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.