post Image
強化学習の基本 Qラーニングを直観的に理解するためのアニメーションによる可視化

経路探索問題を強化学習で解き、その過程をアニメーションで可視化しました。
↑↓で速度調節、Spaceで最速の学習、ドラッグ or タップで障害物の追加ができます。
これにより、強化学習で何をしているのか直観的に分かりやすくなりました。

問題設定

本アニメーションで可視化している問題の設定は、下記の通りです。

  • 条件

    • $n\times n$のマスからなる離散的なフィールド
      • 固定の初期位置と目標位置(⭐)、障害物が配置されている
    • 障害物(🔴)は、踏んだら死ぬ。初期位置からやり直し
    • 自機(👾)は単位時間に8方向のいずれかへ1マス移動できる
      • 横移動と斜め移動のコストは同じ
  • 得たい出力

    • 初期位置から目標位置までの、障害物を回避した最短経路

問題設定

この問題を強化学習のフレームワークに落とし込み、Qラーニングで求解しています。
詳細は後述します。

各インジケータの意味

本可視化の見方を説明します。
前節で述べた問題をQラーニングで解く過程を可視化しています。
各インジケータの意味

詳細

上記の可視化で表現したかった数式などを説明します。

問題を強化学習のフレームワークに落とし込む

強化学習の用語を先に説明した経路探索問題に当てはめると、下記の対応となります:

  • 状態 $s$ : 自機のいるマスの位置
  • 行動 $a$ : 上下左右斜め8方向の内、進む方向
  • 方策 $\pi(a|s)$ : あるマス目$s$において、どの方向$a$へ進むか = 進むべき経路を示す
  • 報酬 $R(s, a)$ : あるマス目$s$において、ある方向$a$に移動した結果の評価
    • 障害物を踏んだ → -100 の報酬を与える
    • 目標位置に到達した → +50 の報酬を与える
    • それ以外 → -1 の報酬を与える

この設定で強化学習を行うと、問題の解を得ることができます。
本可視化では、Qラーニングを用いて解いています。

数式で見る

各マスに表示されている緑パックマンのようなものは、行動価値関数$Q(s,a)$の値の大きさを示します。
本問題においては、状態$s$はマス目の位置、行動$a$は8方向のどれかを示します。

行動価値関数$Q$とは、ある時刻において状態が$s$のとき行動$t$を取ったときに以後得られるリターンの期待値を表します(なるほどわからん)。
とにかく、$Q(s,a)$が最大となる$a$こそが、今後のリターンが一番大きいということで、$s$における最適の行動であると言って良いでしょう。

実際、最適な行動価値関数$Q^*(s,a)$が求まれば、最適方策$\pi^*(a|s)$は直ちに


\def\argmax{\mathop{\rm arg~max}\limits}

\pi^*(a|s)= 
  \left\{
    \begin{array}{l}
      1\quad \mathrm{if}\; a=\argmax_a Q^*(s,a) \\
      0\quad \mathrm{otherwise}
    \end{array}
  \right.

と求めることができます。
方策 $\pi(a|s)$ とは、状態$s$のときに行動$a$を取る確率を表すものなので、全ての$s$についてそれぞれ行動価値関数が最大となる行動$a$を常に(確率=1)取ることが最適な方策というわけです。

実際、本可視化における$Q(s,a)$を見れば、進むと死ぬ方向や目標から遠ざかる方向は$Q$が小さく(薄く)なり、一方最短経路に従う方向は$Q$が大きく(濃く)評価されていることが見て取れますね。

ではどうすれば最適な$Q$を得られるんだという話になりますが、その一つの方法として下式に示すQラーニングを利用できます。

Q(s_t,a_t)+=\alpha[r+\gamma \max_a Q(s_{t+1},a)-Q(s_t,a_t)]

Qラーニングの解説記事はネットに沢山あるので、ここでは詳細を割愛することにします。
上式を実装してエピソードを重ねるうちに、$Q(s,a)$は最適な値へ収束していきます。
収束した後はただ最適経路をなぞるのみということは、もう見ていただけたでしょう。

この行動価値関数$Q$を学習していくというイメージを持っていれば、強化学習の話題がもう少しとっつきやすくなるはずです。
一般に多くの問題では$s$や$a$の空間が広大なので、今回のような$Q$のテーブルに頼った手法は使えません。
代わりに$Q$を連続な関数として扱い、その関数を近似します。その関数近似に深層ニューラルネットワークを用いたのがDQNです。
つまり、結局原理は同じなわけですね!

まとめ

  • 強化学習の一種であるQラーニングを用いて、経路探索問題を解いた
  • 解く過程をアニメーションで可視化することで、仕組みが分かりやすくなった(はず!)
  • ここで得られた強化学習のイメージは、古典的なQラーニングから割と最新のDQNにまで適用可能です

参考文献

  • UCLの講義資料

    • ゼロから説明されていて、分かりやすいです
    • Q学習に関連する話は第2回と第6回にあります

『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。