Sideswipe

情報工学、計算論的神経科学など、真面目なこと書くブログ。お仕事の話は Twitter: @kazoo04 にお願いします。

強化学習

これは 人工知能アドベントカレンダー の14日目の記事です。

人工知能アドベントカレンダーも半分以上終わりました。今回は筆者の体調が最近思わしくないため、短めでいきます(後日加筆修正があるとおもいます)。

強化学習(reinforcement learning)は、教師ありでも教師なし学習でもない第3の機械学習アルゴリズムです*1

強化学習とは

強化学習は、

  • エージェント
  • 環境
  • 行動
  • 報酬

が与えられた時に、報酬を最大化するように学習していく(これを方策という)方法です。

f:id:kazoo04:20151214011440p:plain
強化学習の模式図。エージェントは環境を観測して行動を選択する。行動すると環境から報酬が得られたり、罰が得られたり、なにも起きなかったりする。このフェーズを繰り返して、報酬が最大化されるような方策を得ることが目的になる。

昔テレビかなにかで見たイタズラで、「右足を上げるとテレビがつく」ようにして何も知らない人がテレビの前を通ったときにイタズラをしかけるというものがありました。
最初、被験者はテレビが付いたり消えたりするのを不思議そうに見ますが、じっと見てると(両足が地面についてるので)テレビは消えてしまいます。色々試行錯誤したのち、右足を上げて片足立ちすることでテレビが見られることに気づく、というわけです。これは簡単そうで意外と難しい問題で、その時に可能な行動は無数にあるのに、ごく少ない試行回数で「右足を上げておく」というベストな解に到達できるわけです。このときは、「環境」はそのまま実験環境を指し、「行動」は身体を動かすこと、「報酬」は「テレビがつく」ということにあたります。このときの最適な方策は、「右足を上げ続ける」です。「エージェント」はもちろん被験者自身のことです。

動物行動学や心理学などでは、ネズミやネコやサルやもちろんヒトを使って様々な実験がされるわけですが、「ある行動をする(レバーを引くなど)をすると、ご褒美(ジュースや餌やお金)がもらえたり、罰(電流が流れる、お金を取られる)が与えられたりする」タイプの実験が多く見受けられます*2。このような実験を動物に行うと、最初はどうすれば良いことが起きるかわからないので適当に行動し、ある報酬が貰えると「どうすればもらえるのか?」ということを試行錯誤して、最終的にルールに気づきます*3

f:id:kazoo04:20151214011609p:plain
強化学習の具体例。環境は様々な要因からなり、なにをすればどうなるのかはエージェント(ラット)はなにもわからない。何度か経験を繰り返していくと、効率よく報酬のジュースを得ることができるようになる。最適な方策は最初わからないので、とにかく適当に動くしか無い。この場合だと、「ランプが付いている状態でスピーカーから音が出たときにだけレバーを引くとジュースがもらえるが、それ以外のときにレバーを引くと床に電流が流れる」、とかかもしれない。可能な行動は無数にあり、環境も無数の可能性のもとに成り立っているが、動物はこのような不確定要素が多い環境でも素早く最適な方策を得ることができる。

このような学習は、哺乳類はもちろん、脊椎動物全般に見られ、イカやタコなどの無脊椎動物でも見られる*4ことから、進化の初期段階で得られた原始的かつ重要な学習方法だと考えられています。

学習方法

では、このような学習をどのようにコンピュータで実現すればよいでしょうか?強化学習には様々な手法がありますが、ほとんどのアルゴリズムは以下の様な流れになります。

  • 最初はなにをしたらいいかわからないので、とにかくランダムに動いてみる
  • 報酬が与えられたら、「どのような状態のとき」「何をしたか」について、「このときこうしたら良いことがあった」と記憶しておく*5
  • 次からはランダムさは残しつつ、先ほどの記憶を頼りに良くなりそうな行動もしてみる
  • 良くなりそうな行動をしてみて、予想通り報酬が受け取れたら、また「どのような状態のとき」「なにをしたか」を覚える(あるいは強化する)

このようにたくさん経験を積むことで「こういうときに、こうすれば、良いことが起きる」という環境と行動のペアが得られます。これを元に、報酬が最大化されるような方策を得るというのが基本的な考えです。

ここでは、特に有名かつ現在もよく用いられている代表的なふたつの手法、Q学習とActor-Criticを紹介します。

Q学習

Q学習はもっとも一般的に用いられているアルゴリズムで、考え方も簡単です。状態sと行動aと「状態sのときに行動aをしたときにどれくらい良さそうか」Q(s, a)の3つを考えます。

最初は、どのようなQ(s,a)も同じ値かランダムな値にしておきますが、ある条件のときに報酬が得られたらQ(s, a)を更新します。先ほどの図の例で言えば、「ブザーが鳴ったときにレバーを引いたらジュースがもらえた」とすると、Q(ブザーが鳴っている, レバーを引く)の値を大きくします。その後も、「ランダムに動くけど、Q値が高い状態と行動の組み合わせが可能なら、そっちを優先する」ような行動を続けると、Q値がどんどん更新されていき、最終的には良い方策が得られるというわけです。

Actor-Critic

Actor-Criticは他の様々なアルゴリズムとはちょっと性質が違って、行動を決めるActorと、今の状態がどれくらい良さそうか*6を決めるCriticという2つが組み合わさっています。

この方法が非常に優れている点は、行動が連続値を取る場合でも自然に計算が可能、という点です。どういうことかというと、Q学習はチェスのように「このコマをここに動かす」のような離散的で有限個しかない行動は簡単に扱えるのですが*7、身体の向きを◯度回転させる、のような行動の場合だと実数値になってしまうので無数の行動がとれることになってしまいます。

Q学習だと無限個の行動を管理しなければならず計算できない*8という欠点を、Actor-Criticでは正規乱数を使って、Actorは行動をランダムに選択することで回避します。Criticは正規乱数の平均や標準偏差を調整して、Actorがとる行動を変化させていきます。

おわりに

非常にざっくりとした説明で終わってしまいましたが、強化学習がなにか、という点についてはお分かりいただけたかと思います。こうしてみると生き物の行動はかなり強化学習で説明できる感じがしますよね。ロボットに強化学習の機能をもたせるだけでずいぶん知的に動いてくれる感じがします。もちろん実際はそんなに簡単な話ではないのですが…。

動物の脳では本当に強化学習をしているのでしょうか?また、しているとしたらどのようなアルゴリズムを採用しているのでしょうか?Q学習やActor-Criticが使われているのでしょうか?これらの点に関しては、また後日見ていきましょう。

*1:教師あり学習と教師なし学習の中間の方法、と言うこともあるが、これは半教師あり学習というアルゴリズムがあるので、あまり適切な表現とはいえない

*2:良いことが起きることで行動が強化されるのを「正の強化」、嫌なことがなくなるのを「負の強化」、悪いことが起きるのを「罰」と呼ぶ。実際にはもっと細かく「正の弱化」や「負の罰」などもあるが、ここではそこまで細かくは触れない。強化学習の文脈では、「報酬」しか存在せず、良いか悪いかは報酬の値の正負で決める。ただわかりやすく「罰」と呼ぶこともあり、厳密には決まっていない

*3:行動心理学的には、オペラント条件づけと呼ばれる

*4:ここでいう学習はオペラント条件付けであって、古典的条件付けではないことに注意

*5:負の報酬(良くないこと)が起きることもあるので、そのときも同様に「悪いことがあった」ことを記憶する

*6:具体的にはTD誤差を計算するのだが、疲れているのでここでは詳しく説明しない

*7:実際は離散的であってもチェスの場合はものすごく状態数が多いので結局扱いきれない。このようなときには別途回避策をとる

*8:たとえば行動の空間を圧縮したり離散化したりして扱いやすくしてからQ学習する方法もある。というかそれが一般的