青本読んだ
読み直しました。
強化学習とは
まずはざっくり、強化学習って何をやろうとしているのかという話から始めます。
いまこの状態で何をすれば、最終的に得をするのか、それが知りたい、というのが出発点です。
理想的には、あらゆる状態を洗い出し、それぞれから起こりうる遷移をすべて調べ上げて、最終的に最も高い報酬が得られる行動を選びたいところです。理屈としては非常に真っ当です。
しかし、現実にはそんなことはできません。状態数は膨大ですし、遷移パターンも無限に近いほどあります。(無限という言葉を使用するのは憚られますが)
もし完璧なシミュレーターが存在し、あらゆるパターンを網羅的に試せるのであれば、その中で最善を選べば済む話です。そういう場合には、強化学習ではなく動的計画法(Dynamic Programming: DP)などを使うのが自然です。
わからないなりに、なんとかしたい。
その「わからないけどなんとかしたい」という枠組みのひとつが、強化学習だと私は思っています。
強化学習では、状態(state)と行動(action)という変数をもつ関数(価値関数や方策など)を、現実の状況にできるだけフィットさせるように作ります。
その関数をどうやって作るのか、あるいはその関数を使ってどう選択すればよいのか。
そのあたりを数学を使いながら考えるのが、この分野の基本的なスタンスです。
ベルマン方程式?
強化学習の本を開くと、だいたい最初に出てくるのがベルマン方程式(Bellman equation)です。
恐らく、様々の分野でこの単語は出てくる(と思う)のですが、強化学習の文脈においては、「今の価値は、いま即もらえる報酬と、次の状態の価値(割引付き)の合計ですよ」という再帰式です。
この式を何回も適用していけば最適方策が得られる、というのが強化学習の基本的な考え方です。
「え、本当にこれって収束するの?」
と疑問に出てくると思います。
このあたり、私の記憶では、Suttonの『Reinforcement Learning: An Introduction』を読んでも、さらっと流されています。(おそらくですが、あえて深入りしない設計だと思います。)
関数解析
ここで出てくるのが縮小写像(contraction mapping)という考え方です。
簡単に言えば、「この変換を何回も繰り返すと、だんだん距離が縮んでいって、最終的に一点に収束する」という性質です。(「距離ってなんやねん」と思うかもしれませんが、ここでの「距離」とは、ノルム空間における距離関数によって定義されるものであり、空間の構造としては、少なくとも完備なノルム線形空間、つまりバナッハ空間であることを前提としています。このあたりを厳密に追おうとするとややこしくなるので、ここでは詳細は省略します。)
このような性質をもつ写像については、バナッハの不動点定理(Banach fixed-point theorem)と呼ばれる定理があります。
ベルマン作用素(Bellman operator)を何度も何度も適用しているだけなのですが、このベルマン作用素が縮小写像であるため、何回繰り返しても暴走することはなく、必ず一点に収束します。
正直なところ、「ベルマン作用素は縮小写像で、だから収束する」という概念さえ押さえておけば、実用上はまず十分なのでは?と思います。
より深く理論を掘り下げたいなら、バナッハの不動点定理をきちんと勉強してみるのももちろん有意義です。
私自身、修士時代に「なんでこれって収束するんだろう?」と疑問に思いながらも、厳密な証明に必要な数学的準備は整っていませんでした。
それでも、「理屈としては通っていそうだな」という納得感があり、ある程度の安心感を持って使っていた記憶があります。
(自分は強化学習を“使う側”だったということもあります。一方で、収束性そのものが核心となるような理論研究をしている人にとっては、きちんと証明まで押さえることが重要だと思います。)
このくらいのほどよい距離感で理論と付き合うのも、悪くない選択肢だと思っています。
参入障壁を下げておくことって、大事だと思うので。
おわりに
強化学習がハードウェアを通じて直接お金を稼ぐ時代は、まだ少し先かもしれません。
しかし、ソフトウェアの世界ではすでに一部でデファクトスタンダードになりつつあるとも感じています。
この手の話、ネット上ではなかなか丁寧な解説が見つからず、「これはブルーオーシャンだ!」と思って書き始めたのですが……
Qiitaに、すでに同じことを書いている人がいました。
というわけで、二番煎じ+数式すら出てこないという、格落ち感あふれる記事となってしまいました。
とりあえず今日は、もう寝ます。
※本記事は何の信憑性もございません
Discussion