DQNの具体例 CartPole問題



機械学習

分類(classification)

ニューラルネットワーク(NN)

クラスタリング

強化学習

敵対的生成ネットワーク

公開日:2020/4/18 , 最終更新日:2020/4/29        

前提知識
 ・pythonとは
 ・DQNとは
 ・Cartpole問題


こちらでCartpole問題の具体例を説明しましたが、これをDQN(Deep Q-Network)を用いて学習させます。 使用するプログラムはpython、DQN用に使用するライブラリはchainerchainerrlです。

■DQNの構造
以下となります。


<活性化関数>
DQNの出力層は、すべきアクションの確率値で表現されるので、活性化関数は出力値のトータル値が1である必要があります。従ってsoftmax関数の仕様が望ましいです。 しかし、アクション値が連続的なもの(を離散化した)の場合は、出力は-1から-1で表現できるtanhの使用が望ましいです。

■シミュレーション
<学習>
先ずは、DQNの重みの学習を行います。シミュレーション環境は以下。

 ・pythonバージョン:Ver3.8で確認
 ・必要ライブラリ:numpy , OpenAI gym(インストール方法はこちら)
 ・プログラムファイルcart_dqn.zip

結果は以下のとおり。エピソードを重ねるにつれ報酬を多く得ていくのが解ります (報酬200は、失敗せずにポールを立ち続けさせる事ができている状態)。 この結果は「agentフォルダ」に保存され、次のテストで使用します。

episode: 250 reward_sum: 161.0
episode: 260 reward_sum: 181.0
episode: 270 reward_sum: 200.0
episode: 280 reward_sum: 200.0
episode: 290 reward_sum: 200.0

<テスト>
学習結果を用いて、倒立振子を立て続けることができるか確認します。以下プログラムファイルとなります。上記プログラムに対し、テストに不要な部分を削除しております。

 ・プログラムファイルcart_dqn_test.zip

シミュレーション結果は以下のとおり。

   

■応用問題
上記ではポールがきちんと立った状態から開始していました。次はもう少し変更して、ポールが倒れている状態から学習して、ポールを立たせる様します。その方がいかにもAIっぽくて面白いと思います。

<ライブラリ(cartpole.py)変更点>
cartpoleのライブラリを変更してポールの初期位置を変更します。私の場合は以下フォルダに保存されているcartpole.pyを変更します。

C:\Users\take\AppData\Local\Programs\Python\Python37\Lib\site-packages\gym\envs\classic_control

ファイル内の以下部分の赤文字部分を変更します。これが初期値がポールが倒れた状態を表します。ポールの位置、角度の詳細はこちらで説明。

def reset(self):
    self.state = [0, 0, 3.14 , 0]
    self.steps_beyond_done = None
    return np.array(self.state)


<報酬の与え方>
ライブラリから返される報酬は使わず、自分で設定します。ポールが以下の状態でそれぞれ報酬を与えます。ポールが時計回りで立つ場合と反時計回りで立つ場合は、 返してくるポールの角度値が異なるので注意が必要です。



<シミュレーション>
パラメータ、シミュレーションファイルは以下のとおり。

 ・ ニューラルネットワークの中間層:150
 ・ エピソード数:1500
 ・ 1エピソードのステップ数:400
 ・ 学習用ファイル:cart_dqn2.zip
 ・ テスト用ファイル:cart_dqn_test2.zip

なおプログラムを実行した際に以下の様なエラーメッセージが出ますが、気にしなくても良いです。 これは、ライブラリはポールが倒れたので一度リセットを促してくるのですが、今回の場合はポールが立っていない場合もシミュレーションを動かすのを前提としているので、 リセットする必要が無いためです。

You are calling 'step()' even though this environment has already returned done = True~~

学習後のテスト結果は以下のとおり。

   









サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



機械学習

分類(classification)

ニューラルネットワーク(NN)

クラスタリング

強化学習

敵対的生成ネットワーク