強化学習

 情報制御工学特論という授業があって、発表の課題が出ている。月曜日には、作ったものを発表しなければならないのだけど、自分としては、何かプログラムを書いてデモをしたいのだ。
 授業で習った中で、強化学習の例にQ-learningを使って、マウスが迷路の経路を学習することが説明されていたので、ソコから入ってみる。
 まずは、Q-learningや強化学習。そのへんをキーワードに検索を開始。

http://www.fe.dis.titech.ac.jp/~gen/edu/RL_intro.html
強化学習とは,試行錯誤を通じて環境に適応する学習制御の枠組である.教師付き学習(Supervised learning)とは異なり,状態入力に対する正しい行動出力を明示的に示す教師が存在しない.かわりに報酬というスカラーの情報を手がかりに学習するが,報酬にはノイズや遅れがある.そのため,行動を実行した直後の報酬をみるだけでは,学習主体はその行動が正しかったかどうかを判断できないという困難を伴う.

つまり、入力に対して、それが正しいかどうかっていう変わりに、報酬という形の値を使って、学習する方法なのね。
「報酬」:餌を得る。
だけ与えておけば、迷路を動き回ったマウスは、餌を見つけて、報酬を得ることで学習する。それが伝播していって、経路の選択に役立つのだわ。


んで、実際に

http://www.fe.dis.titech.ac.jp/~gen/edu/Algorithms/Qlearning.jpg
Q-learningの図

こんな感じのアルゴリズムを使って、迷路の経路を学習させるプログラムを作ってみたんだけど、
見つけたテキストが言っていたのは、間違ってないのだけど、激しく難しい。
適当な数字でやってしまうと、時間がかかるし、なかなか終わらない。
デバッグ文を入れてみると、学習に凄い時間がかかるのもわかる。
とにかく、これをアプレットかなにかで視覚化して、デモにできるようにしないと。
制御にしても、ファジーな問題にしても、ニューラルネットにしても、どれも計算自体は単純そうでいて、すぐに指数的爆発にやられそうになる。
たぶん、こういうプログラムはあまり好きじゃないかも。