前回までで、機械学習における代表的な3つの手法のうち、「教師あり学習」「教師なし学習」の2つについて説明しました。今回は最後の1つ、「強化学習」と呼ばれる手法の概要を説明します。
強化学習は、一言で言うと「ある状態におけるさまざまな行動を評価し、より良い行動を自動的に学習する手法」です。特に、最近話題の囲碁・将棋といったゲームや、ロボットの動作を制御する上で高い性能を発揮します。
強化学習における「学習」とは?
強化学習は、「ある状態において次にどの行動をとるべきか」というルールを試行錯誤によって導き出す手法です。ある行動をとってみて、その結果の善し悪しに応じて「ある状態において次にどの行動をとるべきか」のルールを改善していくのです。これは人が経験則を作り上げる方法と似ています。
「次にどの行動をとるか」のルールは、「次にとれる各行動をとる確率」として表されます。これは例えば、左右どちらかに進める状況において「右に行く確率30%、左に行く確率70%」のようなものです。もし「右に行く確率30%、左に行く確率70%」というルールを保持している場合、コンピュータは左に行くことを選択することのほうが多いでしょう。そして左に行った結果、良くない状態になった場合は、自分の保持しているルールが良くないと判断し、左に行く確率を下げ、右に行く確率を上げるのです。
コンピュータはこのような試行を繰り返し、最終的に良い状態にたどり着く可能性の高い行動をとりやすくなるように行動の確率を調整していきます。これが、強化学習における「学習」です。「右に行くか左に行くか」を決めるのではなく、「右に行く確率と左に行く確率」を決める点に注意してください。
結果に応じて「行動の確率」を調整 |
では、コンピュータは「良い状態にたどり着く可能性の高い行動(価値のある行動)」をどのようにして見つけるのでしょうか。
私たちは、ある状態において何らかの行動をとった場合、次の状態へと移ります。そしてその状態でまた何らかの行動をとり、次の状態へと移る……というプロセスを繰り返します。例えば、お小遣いの残金が0円のときに大変なお手伝いをして500円のお小遣いをもらったら結構リッチな状態になりますし、楽なお手伝いをして100円のお小遣いをもらったらちょっとだけリッチな状態になるでしょう。
状態 | 行動 | 報酬 | 次の状態 |
---|---|---|---|
お金がない状態 | 大変なお手伝いをする | 500円 | 結構リッチな状態 |
お金がない状態 | 楽なお手伝いをする | 100円 | ちょっとだけリッチな状態 |
よりリッチな状態になりたい場合、この2つの行動のどちらがより「良い行動」でしょうか。当然、「結構リッチな状態」になれる「大変なお手伝いをする」という行動のほうが価値が高いと考えられます。
「ある行動によって引き起こされる次の状態が良ければOK」と考えるのであれば、この比較で十分でしょう。しかし、次の状態がほかと比べて多少悪かったとしても、最終的に最も良い状態になりたいと思うことのほうが現実には多いのではないでしょうか。
簡単な例で説明しましょう。
お手伝いの大変さに応じて10円から1,000円までのお小遣いがもらえ、保有しているお小遣いの額によって、「リッチ状態」が変化するとします。また、お手伝いのルートは、以下の図のように決まっているとします。
この状況で1つのルートしか通れないとしたら、ABCのうち、どのルートでお手伝いをすれば最もリッチな状態(最も多くのお小遣いを保有した状態)になれるでしょうか。
もし、今すぐお金が欲しいのであれば、すぐに100円がもらえるルートCが良いでしょう。しかし、長い目で見ると、累計1,020円もらえるルートAが一番たくさんのお小遣いをもらえます。強化学習で重要なのは、この「累積報酬」という考え方です。目先の利益ではなく、長い目で見たときに最も多くの報酬が得られるルートにたどり着けるように(最善だと思われる行動を取りやすいように)学習していくのです。