スイス滞在記【89日目】
強化学習のあれこれ.
CMC2回目
CMCの授業の2回目である.本日は常微分方程式とその分類について.生物システム(微分方程式による記述)は基本的には非線形かつ解析的に解けないので,局所的に観察したい現象なりを取り出してきて線形化する.これは工学や物理でもよく用いられる.
その際に,基本は一階の常微分方程式として書かれることが多い.もちろん時間依存性が肘名なら偏微分方程式を使うし,一階とも限らないが,まずは一番簡単な方法で行う.
但し,変数が幾つになるかはわからないことが多いため,いわゆる力学の知識を使う.
相図とか,平衡点の安定性解析とか.
講義はこのあたりのダイナミクス解析を中心に,その後の演習ではpython環境構築だけだったので,カット.
強化学習
ロボティクスでは機械学習は様々に用いられる.代表的なのは,教師あり学習で,ちょっと前に話題になったdeep learningはここがメイン.分類や回帰のタスクを行う.この入力データ学習時のアルゴリズムがいっぱいあって,一つがNeural network(NN)を用いて学習するもの.このときの中間層or隠れ層が3層以上のものをDeepに分類する.
これ以上はまだ勉強していないので割愛.
対して教師なし学習はデータをクラスタリングする,次元削減を行う.データの特徴量を抽出してその構造を可視化する.
もう一つが強化学習.エージェントがある環境内で得られる報酬(reward)を最大化する行動(action)を決める方法.マルコフ決定過程(MDPs)という理論が大元になっている.環境が未知でもOK(モデルフリー)なのが特徴.ただ,状態と行動が多くなると事前にlookup table(=報酬関数)を用意することが困難になり,報酬関数が作れなくなる事がある.
そこで状態数が多くても報酬関数(Q関数)をNNで作ってしまおうというのがDeep reinforcement learning(DQN)である.この辺は表面をなぞっただけなのでもっと勉強してから正確にまとめてみたい.
でロボットの行動最適化とかは強化学習の分野.環境との相互作用の問題だし,ゴールに効率的に近づく=報酬の最大化という問題設定だから.
そこで,どうやって研究に用いるかを模索中.
Pybulletと強化学習
強化学習のオープンソースライブラリにはOpenAI Gymという有名な開発環境がある.
イーロン・マスク率いる非営利団体のOpenAIが作ったらしい.詳しくはググればたくさん記事がでてくるのでそちらを参照のこと.
で,gymは様々なテスト環境を用意してくれていて,この環境内でアルゴリズムの評価ができるようになっており,強化学習屋さんにとっては非常にありがたいものである.
OpenAIはRLアルゴリズムのライブラリも提供していて,それがOpenAI Baselines.
tensorflowをつかってDRLの開発もできるし,MuJoCoでの3Dシミュレーターの例もある.
ただ,アルゴリズム間のコード記述にばらつきがあるので,それを綺麗にしてまとめたのにstable-baselinesがある.
stable-baselines.readthedocs.io
他にもDRLアルゴリズムにはChainerRLとかがライブラリを出している.
Tensorflowは一番有名かな.
このあたりをまとめて何が使いやすいか=pybulletとの親和性を考えたい.
余談だが,pybulletはroboschoolやgym環境が使えるようにアップデートされている.MuJoCoはライセンス料高いからためらいがちだが,3Dで強化学習確認できるならpybulletかなりいいのでは?
GazeboはROSじゃないと動かないし,今後pybulletの波が来るのかも.