読者です 読者をやめる 読者になる 読者になる

教養のための強化学習

人工知能 哲学 機械学習

強化学習は機械学習の一分野である、というと一般の人は敬遠しそうな気がしますが、このように考えてみてください。機械学習というのは汎化の理論です。つまり観測したデータから有用で一般的な法則を発見しよう、というだけの話なのです。そして強化学習というのは「過去の経験から汎化によって最適な行動を学習する」というものです。このように考えるだけで、強化学習がいかに僕たちの実生活と密接に関わっているかが分かると思います。

 

それでは強化学習のモデルを紹介します。これは下図のように、実はとてもシンプルなのです。

f:id:futsaludy:20161109143736p:plain

まずagentはあなた自身だと思ってください。Environmentはあなたの周りの世界です。あなたはある時点tにおいて何かしらの行動(action)を起こします。そのactionは世界に働きかけて、あなたはその結果をstateとして認識します。それと同時に、あなたは世界から何かしらのrewardを受け取ります。Rewardは必要に応じて好きなように捉えて良いです。脳の報酬系でもいいし、お金でもいいし、幸福でもいいです。そうするとあなたはstateの情報をもとに次のactionを考えて実行します。これをずっと繰り返すとしたら、あなたが取るべき最適な行動の選択(action policy)はどのようなものになるでしょうか?明らかに答えは現在から未来におけるrewardの総和を最大化するものです。なので、このようなaction policyを見つけ出すことが目標になります。

 

しかし、このままだと問題が複雑すぎるので、ちょっと話を簡単にしてみましょう。

①まず、rewardは幸福でも何でもいいですが、数値化して考えます。そこはうまく考えてください。

②また、今回は話を簡単にするためにstateactionの種類は有限であるとしておきましょう。実はこの仮定は強化学習の可能性を制限するよりは、むしろ役に立つ方が多いようです。例えば0~1kmの間の任意の地点をstateとすればこれは無限集合になりますが、実際問題としては{0, 100m, 200m, … 1km}のように地点を分割して有限にして考えることによって話が単純になるだけでなく、無駄に細かい情報をそぎ落とすことができます。

③最後にvalue functionという考えを導入しましょう。これはstateとaction policyを引数にとって、そのstateからaction policyに従って行動した場合に得られるrewardの総和の期待値を返す関数です。イメージとしてはその後得られるrewardの平均値を求めている感じです(本質的には同じです)。これによってaction policyの評価ができるので、どんどん改善していくことが可能になります。つまり強化学習は基本はvalue functionを求める→action policyを改善する→value funtionを求める→…の繰り返しになります。今回のように有限性を仮定すれば、何回かこれを繰り返すことで最適なaction policyが確実に求まります。

 

f:id:futsaludy:20161109154653p:plain

 

さて、それでは具体的にどのようにvalue functionの推定とaction policyの改善を繰り返せば良いでしょうか?いくらでも方法はありますが、その前に強化学習で最も重要とも言える方針について説明します。これだけでも理解していただければ今回は嬉しいです。

 

方針:探索(explore)と搾取(exploit)をうまく組み合わせる。

 

例えば毎晩の献立を考えてみてください。あなたはハンバーグが一番の好物で、ハンバーグを食べればかなりの満足(10くらい)を得られることがわかっています。この情報をもとにハンバーグを食べ続けることを「搾取」と呼びます。しかし、これをずっと続けるだけでは、ハンバーグより好きな料理が何かしらあった場合、最適な方針とは言えません。なので、たまには(10日に1度くらい)別の食べ物にチャレンジすることにしたとしましょう。これを探索(explore)と呼びます。もちろんめちゃくちゃ苦手なものを食べてしまって、満足を損なう可能性はあります。しかし、実はパスタを食べるとより大きな満足(12くらい)が得られることがわかったとします。そうすると、パスタを食べる方が長期的に見て満足の総和を高められます。

 

余談:しかし、もしかしたらパスタみたいにハンバーグより満足できるものは存在しなくて、ハンバーグを食べ続ければ確実に10の満足を得られるのに、10回に一度exploreを行うことによってむしろ最適なaction policyを見失うのではないか、と思われるかもしれません。しかし、exploreを行うことによるメリットは次のようなものがあります。

①だいたいの場合、パスタみたいなものは存在します。最適なpolicyが最初からわかってるなんてことはないはずです。

②味の好みが変わってきた場合(例えばハンバーグに飽きてきたとか)でも、exploreすることによってうまく対応できます。余談終わり

 

それでは具体的な方法をちょっとだけ紹介しましょう。まず、あるaction policyとそのvalue functionがあったとします。これをもとに、action policyを改善したい訳です。あるstateを選んで、そこからaction policyに従わないactionを選んでみましょう(つまりexploreする)。そしてそれ以降はもとのaction policyに従う、ということにします。ほとんど変わりませんが、これによって新しいaction policyを生み出すことができます。もしも新しいaction policyの方が良いのであれば、それに乗り換えることで改善することができます。これを繰り返す、という感じです。

 

もちろん、実際にはもっと色々な方法があるし、そもそもvalue functionの推定法も説明していないし、僕もこれから勉強していきたいところですが、アイデアはこんな感じです。

 

最後に、今回の記事のタイトルと趣旨を説明をしましょう。僕はこの強化学習のアイデアがとても素晴らしいし、実生活でも有用だと思うのです。別の言い方をすれば、強化学習はexploreとexploitをうまく組み合わせることの有用性を数学的に証明したことにもなる、と僕は感じています。そういう意味での「教養」です。

 

なので探索と搾取はうまく使い分けましょう。好きなことはどんどんやっちゃえばいいと思います。そしてたまには普段やらない変わったこと(リスクは考えた方がいいですが)もやり続けた方がいいです。多分これによって、最適な生き方に近づけるはずです。人によっては、あるいは運によってはそれでもうまく行かないかもしれません。でも、せめて最善を尽くせば後悔はしないはずです。

 

長くなってすみません。この記事はRichard SuttonらによるReinforcement Learning: An Introductionという本を大いに参考にしています。