Python

Pythonではじめての強化学習3〜Actor and Critic model

投稿日:2018年1月11日 更新日:

課題 出力が連続値の場合

前回までで、環境からの入力が連続値、アクションへの出力が離散値(段階的)の場合はDQNを実装することでディープラーニングのモデルを使って強化学習をすることができた.
今回は、環境からの入力も連続値、アクションへの出力も連続値の場合の強化学習に挑戦した.

Actor and Critic

実装方法としては、状態と行動から決められるQ関数をディープラーニングのモデルで近似化するのと同時に、状態から行動の値を求めるディープラーニングのモデルをもう1個作る.
後者はひたすら行動方針だけを出して、前者はひたすら行動の評価だけをするので、Actor(役者)アンドCritic(批評家)という.
そのモデリングは、ここを参考にした.

Actorの順伝播のモデリング

Actorの順伝播のモデリングは標準的な感じで.
注意するポイントは、出力値の上限、下限があること.
最後の活性化関数をtanhにして1〜ー1の範囲にした上で、上限値、下限値の値をかけている.
ただ、MountainCarContinuousでは-1から1の範囲なので1をかけることにした(無意味だけど).
例えば、 −3〜4とかだったら、3.5をかけて、0.5を足すのかな.

Criticの順伝播のモデリング

Criticの順伝播のモデリングはStateとActionの2つを入力値とする.

ここで、Actorのモデルを含む形にするのか、Criticで学習したVariableをActorのVariableが参考にする処理をするのかという点がわからない.
やってみたけど、全然学習しなくなり、逆に別のモデルのままおのおの学習すれば今回は収束したので、Variableを共通化するような処理はしなかった.

Criticの逆伝播のモデリング

次に逆伝播.Criticの方は標準的な誤差逆伝播法で.

Actorの逆伝播のモデリング

Actorの逆伝播は、勾配を計算して適用する.
つまり誤差逆伝播法の仕組みは、損失関数を計算するときに、Variableを変数とみて微分すると、勾配が求められるから、損失関数を減らす方向に少しだけ勾配を適用することで学習するのだけど、今回は適用する勾配を直接計算して適用する.

その理論的な裏付けはQを最大化するように、actorを学習するという方策勾配定理によるらしいけど、よくわからないので実装例をそのまま参考にした.そのためDDPGと略されている.
【強化学習】実装しながら学ぶA3C【CartPoleで棒立て:1ファイルで完結】
強化学習その3

実装例ではlogが見当たらないのが気になるけど、うまく学習できたのでよしとした.

Actorにノイズを付与する

学習のはじめは手探り状態で始めるので、最初に間違った方向に学習だけを続けると間違った方向から抜け出せなくなる可能性があり、初期値に依存してしまうことになる.
そこで、DQNでは、εグリーディ法という考え方で一定程度ランダムな行動を取らせることにした.
出力が連続値の場合は、ランダムな行動ではなく、一定のノイズを付与して対策をしているようだ.
ChainerでやってみるActor-Critic(Deep DPG) – ドラフト編の図をみていくと、DQNのεグリーディの部分がDDPGではノイズ付与に置き換わっている.

結果 MountainCarContinuous

MountainCarContinuous-v0の環境でエピソード150くらいで収束した.
しかし、運が悪いと学習できない場合もあった.

数式が分かる人には下記の書籍にActor-Critic法の解説がある.

速習 強化学習 ―基礎理論とアルゴリズム―

速習 強化学習 ―基礎理論とアルゴリズム―書籍

作者Csaba Szepesvari

クリエーター小山田 創哲, 前田 新一, 小山 雅典, 池田 春之介, 大渡 勝己, 芝 慎太朗, 関根 嵩之, 高山 晃一, 田中 一樹, 西村 直樹, 藤田 康博, 望月 駿一

発行共立出版

発売日2017年9月21日

カテゴリー単行本

ページ数150

ISBN4320124227

Supported by amazon Product Advertising API

-Python
-, , ,

執筆者:

関連記事

Tensorflowのモデリング2〜RNN

By: fdecomite – CC BY 2.0 目次1 Reccurent Neural Network(RNN)2 入力値を計算3 RNNのモデル4 損失関数とオプティマイザーの定義 …

Python3で株式売買のシミュレーション〜pandas

By: Michael Gwyther-Jones – CC BY 2.0 目次1 株式売買シミュレーション2 ファイルの構造3 pandas4 DataFrameの作成、構造5 csvか …

市場テクニカル分析ライブラリta-libとPython用のラッパーTa-Libをインストールする

By: GotCredit – CC BY 2.0 目次1 ta-lib2 Ta-Lib ta-lib ta-libは市場のテクニカル分析用のライブラリ集. linuxの場合はソースコード …

Tensorflowのモデリング1〜CNN

By: William Warby – CC BY 2.0 目次1 畳み込みニューラルネットワーク2 Conv層3 POOL層4 残りの処理5 結果6 ハイレベルニューラルネットレイヤーを …

Pythonではじめての強化学習〜OpenAIGym

By: scarletgreen – CC BY 2.0 目次1 強化学習2 強化学習問題のモデル化〜マルコフ決定過程3 Open AI Gym4 Open AI Gymのインストール5 …