Tensorflowのサンプル試し(倒立振子問題07)
■途中の学習の追加と探索法の変更。
今まで倒立振子問題のパラメータを変えて動かしてきたけど、今回は学習途中でサンプルを追加することとε-greedy法以外の探索法の試し。
隠れ層(64,)、学習率0.0005、バッチ128、初期データ収集数3000、リプレイバッファの最大長20000で固定。トレーニング数1000と5000で、それぞれ5回ずつ試行。
まずは途中の学習の追加。
今までは初期データとして収集したサンプルのみを基に学習を行ってきたけど、今回は学習したデータを基に途中でサンプルを作り、学習データとして使う。
結果が下。

途中学習無しでは5000回のトレーニング数でもよい結果は出ていないが(9回前後)、学習有りではそこそこな結果が出ている(30-48)。良好な結果となったものをデータとして使い学習を進めたため、良い結果に行きつきやすくなったのではと思う。
次は、探索法を変えてみる。
今まではε-greedy法で、εの割合でQ値が最大の行動を選択し、それ以外ではランダム。Boltzmannはソフトマックス関数を使いQ値に基づく確率に応じて行動を選択とのこと。ε-greedy法では、Q値が最大の行動が必ず選択されるけど、Boltzmannでは、Q値が大きい方が選択される確率は高くなるけど、必ずその行動が選択されるわけではない、と理解している。Noisy DQNは、Q値に適度な±の値(ノイズ)を加えて、行動を選択するものらしい。
このあたりはChatGPTでコードを生成して動かした。
結果が下。

5000回のトレーニング数では、結果に優位な差があるとまでは言えそうにない。ただ、1000回のトレーニング数ではNoisy DQNの探索法で良好な結果が出ているよう。
ε-greedy法以外のもので試したら、大きく改善する方法があるのではと期待したけど、そうでもなかった。
これで倒立振子問題のサンプルは一端終わりにする。