【what is this】強化学習の定番例題のひとつに、CartPole(倒立振子)があります。多くの場合、ポールの初期状態をほぼ真上(北向き)にしていますが、完全に倒れた真下(南向き)にした場合でも、うまく学習できて、長時間ポールを立て続けることができます。
■ CartPole(倒立振子)問題 - 制御工学と強化学習この問題は、よく知られているように、台車にポールを立てた状態を長く維持するための制御です。図1にあるように、当初は制御工学の問題(1)だったと思います。それが、強化学習で著名なR. S. Suttonの書籍(2)で、Q-Learning(=強化学習の手法のひとつ)の例題としてとり上げられました。その後さらに、強化学習の実行とテスト(シュミレーションによる)のための例題として、MATLAB(3)や、OpenAI(4)で扱われています。
図1 CartPole(倒立振子)問題 - 制御工学と強化学習
ここでは、OpenAIのGym(その中の"CartPole-V0"という環境)を使います。全体の状態は、台車の位置と速度、ポールの角度と角速度の4項で表現されます。これらは連続量なので、Q-Learningで扱うには、これらを離散化(連続量を6区分するなど)します。台車の制御は、単位時間毎に一定の力で右へ押すか、左へ押すかだけです。その動作に反応したポールの新しい状態は、Gymが運動方程式の計算結果として返してくれます。ただし、各時点でその状態がどの程度好ましいのかを示す点数付け(報酬付与)は、自分で設計します。
ここでの問題は、どういう状態の時、台車をどちらに動かすのが良いかを学習させることです。それをQ-Learningという手法で実行します。OpenAIのGymを利用したのは、上記の力学計算をやってくれるとともに、台車とポールのアニメーションも提供されるからです。ビジュアライゼーションはいつも重要です!
ここでの問題は、どういう状態の時、台車をどちらに動かすのが良いかを学習させることです。それをQ-Learningという手法で実行します。OpenAIのGymを利用したのは、上記の力学計算をやってくれるとともに、台車とポールのアニメーションも提供されるからです。ビジュアライゼーションはいつも重要です!
技術的詳細は置いておき、結果を楽しみましょう。以下の図は、まだ学習があまり進んでいない段階です。すぐに倒れてしまうことが多いです。アニメーションの途中で、ガクッとなっているのは、そこでポールが倒れることを意味しています。真北から左右に12度以上開いた角度になった時がそれに該当します。倒れるとその試行(エピソード)が終了し、直ちに、次の新しい試行に入っています。
学習初期の状態(開始時、ポールの向きはほぼ真上)
学習終盤の状態(開始時、ポールの向きはほぼ真上)
さて、上記では、新しい試行はいつもポールをほぼ垂直に(僅かに左右に傾けて)立てた状態から開始しました。それでは、今度は、ポールが完全に倒れた状態、すなわち、真南を指している場合はどうでしょうか。その状態から、ポールを真北に向けてそれを維持するのはかなり大変そうに思います。
これを、深層学習(DQN : Deep Q Network)を用いてQ-Learningでやった報告が参考資料[1]にありました。それを追試した結果が以下の図です。
学習終盤の状態(開始時、ポールの向きは真下)
このようなアニメーションで興味を抱き、強化学習の詳細に入って行くきっかけになればよいですね。
参考資料
[1] 制御工学の基礎あれこれ
http://arduinopid.web.fc2.com/index.html
http://arduinopid.web.fc2.com/index.html
0 件のコメント:
コメントを投稿