|
前提知識
・pythonとは
・強化学習とは
・ニューラルネットワーク
・chainer
・Experience Replay
・ε-greedy法
■DQN(Deep Q-Network)とは
DQN(Deep Q-Network)とは、強化学習においてニューラルネットワークを用いてQ値を学習する手法で、環境の状態量を入力し、各アクションに対するQ値を出力するようにします。
Q-ラーニングに対するメリットは以下のとおり。
・ 役に立たない可能性のある追加データを保存する事が無く、シンプルに設計できる
・ アクションが連続した問題に適している
・ ニューラルネットワーク自体の構造が複雑な問題を解くのに適しており、推定精度が良い
- 勾配法を用いる。Q値を確率としてとらえる事ができるなど
構造は以下となります。例えば状態1の時の最適な行動が2ならば、行動2のノードのQ値が最も大きくなります。

■pythonによる実装例
こちらで説明したスキナーの箱のテストをDQNで実現します。ここでは深層強化学習に特化したライブラリであるchainer , chainerrlを使用します。

今回のDQNの構造は以下。

<シミュレーション>
・pythonバージョン:Ver3.8で確認
・必要ライブラリ:numpy , chainer , chainerrl (インストール方法はこちら)
・プログラムファイル:skinnerbox_dqn.zip
以下の様な結果が出力されたと思います。1と0の数字は左から、状態、行動、報酬となり、状態が1(電源ON)、行動が1(操作ボタンON)の時に報酬を得る事ができます。
Q値が正しく更新され、Q値に従いきちんと報酬を得ていることが解ります (ε-greedy法によりQ値に従わない場合もある)。
またまれに、ニューラルネットワークの重みの初期値によってQ値が正しく更新されず、状態1の時に電源ボタンを押すQ値が高くなる場合がありますが、
エピソード数を多くすればいずれは解消します。ここでは再度実行させる事をお勧めします。
<実行結果>

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