強化学習:Introduction

はじめに

今回は、唐突ですが強化学習について整理します. これまで(といってもたったの数回ですが)私が記事で扱ってきたのは、教師あり学習でした.前回クラスの勉強をしている際、ふと強化学習に興味を持ってしまいましたので、理解を深めるため記事にまとめてアウトプットしていきたいと思います.

強化学習とは?

強化学習は、教師あり学習教師なし学習と同じく機械学習の一分野です.ただし、後者の2つがデータを必要とするのに対して、強化学習では学習を行うエージェント・制御器は自分で行動をしてデータを集めます.データには、自分が取った行動、その行動がよかったのか悪かったのかという評価が含まれます.また、その評価は行動後すぐ得られるものばかりではなく、多くの場合いくつかの行動を行った後に与えれることになります.

目標(ゴール)に対して、自分で試行錯誤しながら行動して学習する点がより人間らしいと考えることもできます.

強化学習の基本的なフレームワーク

f:id:shirakonotempura:20190122035140p:plain
Reinforcement Learning: An Introductionに加筆

強化学習の基本的な枠組みを示します.学習を行うエージェント(制御器などとも言いますが、以下、エージェントとします)は、環境(Environment)から、前の行動に対する報酬(Reward)と現在の状況(State)を獲得し、次の行動(Action)を計算します.

エージェントが環境から状態を獲得する方法は、問題の状況によりますが、例えばカメラによる周囲の画像などが状態となります.また後述の囲碁のケースでは、盤面の棋譜(を撮影した画像)が状態となります.報酬は良いと考えられる行動に対しては正の値で、悪い行動には負の値で与えることができます.

教師あり学習のおさらい

教師あり学習では、行動によって得られる経験の代わりに、正解ラベル付きデータセット[x _ {1}, x _ {2}, x _ {3}, \dots x _ {n}, y]で与えられます. 教師あり学習では、入力[tex:x}から出力[tex:yを予測する関数を学習します.

E.g.)顔の検出や識別

f:id:shirakonotempura:20190122042015p:plain

教師なし学習のおさらい

一方、教師なし学習では、ラベルyは与えられません.教師なし学習では、入力データのみから、データ間の深い関連性などを学習します.イメージがつかみにくい分、教師あり学習に比べて、少々難しい気がします.

E.g.)クラスタリング、次元削減 f:id:shirakonotempura:20190122042954p:plain

強化学習の学習手順

f:id:shirakonotempura:20190122035140p:plain

強化学習における学習手順について、上の図(再掲)を用いて説明します.

  • 時間ステップtごとに、エージェントは現在の状態を獲得.
  • 獲得した結果に基づき、次とるべき行動を選択.
  • 選択した行動は、エージェントに報酬(値)を受け取る.

この手順を繰り返すことで、長期的な収益(の期待)値を最大化する行動を選択する方法(ポリシー、\pi)を見つけることが強化学習の目的となります.

強化学習の主な特徴

強化学習の主な特徴を以下にまとめます.

  • エージェントは、どの行動を取るべきかは教えられません.その代わり、試行錯誤でどの行動をとることがよい結果につながったかを学習していきます.
    E.g. 例えばゲームを学習する場合、『ある状態においてはAボタンを押すべき』というような教師データは与えられません.何千回というシミュレーションで、この状態ならAを押すことが一番良い結果につながったということを自分で学習します.そのため、強化学習の学習初期は非常に一見意味のない誤った行動を何度も繰り返すことがよくあります.
  • (ほとんどの場合)環境は、確率的(stochastic)です.
  • (ほとんどの場合)報酬は遅れて与えられます.短期・即時の報酬だけで行動を決めていては、より大きな長期的な報酬を獲得できなくなることもあります.
  • エージェントは、探索と利用(Explore and Exploit)のバランスをとる必要があります.探索とは、これまでの学習結果によらない行動をとること、利用とはこれまでの学習で得られた知識を使うこと、つまり現在の状況で最もよいと思われる行動をとることを指します.

補足:探索と利用について

探索と利用の問題は、強化学習における重要な問題の1つであると言えます.

以下のRPG風シチュエーションで、利用と探索の問題について考えてみます.ちょっと無理やりですが勇者は、モンスターを倒すことが目標で、ひたすらそれを繰り返し、ある一定の時間に倒したモンスターが多いほど良いとでも仮定してください.(一回モンスターを倒すことを一試行とします)

f:id:shirakonotempura:20190122053639p:plain

もし、上の道を選んだ場合、素手でモンスターと戦うことになります.真ん中の道を選んだ場合、剣を獲得してモンスターに挑むことができます.下の道を選んだ場合、魔法使いを仲間にしてかつ剣を獲得してモンスターに挑むことができます.

もし、たまたま最初の試行でに下の道を選んだのであれば、その行動を繰り返すこと(つまり利用すること)が一番効率がいいのですが、もし最初にたまたま上や真ん中の道を選んだ場合、その行動が最もよいわけではないのですが、モンスターを倒すことで得られる報酬を獲得することになり、今選んだ道がベストな道だと勘違いしてしまうことになります. その勘違いを防ぐため、探索として、たまにちょっと違う行動をとらせることで、実は他にもっといい道があったんだということを自分で学習させることができます.

しかし、探索ばっかりしていては、学習した結果を使わないことになりますのでそれはそれで効率が悪くなります.ですので、  ε-greedy法のように、ある程度は学習結果を利用しつつ、たまには学習結果と無関係の行動をとる、といった工夫を行う必要があります.(  ε-greedy法については、次回バンディット問題の説明で詳しく説明します)

今回は、あえて報酬の数値を入れませんでしたが、実際は選んだ行動に対して、剣を獲得+10、魔法使いを仲間にした+20といったように、報酬が数値で与えられることになります.そのあたりは、次回以降で、もう少し詳しく説明していきます.

強化学習の成功例

強化学習が成功した例を紹介します.

補足:AlphaGoは教師あり学習と自己対戦による強化学習で学習を行っていたため、人間の対局データを学習データとして使用していました.
しかし、既にAlphaGo Zeroという後継システムでは、人間の棋譜データを使わずAI同士が数百万回対戦を行い、40日の学習で旧バージョンの能力を超えたとされています.

まとめ

強化学習の導入部分を整理しました. 次回は、強化学習の基本である、バンディット問題について整理しています.次回からはコーディングを入れていく予定です.

最後に、ちゃんとした参考書籍、参考記事を以下にまとめておきます.

抑えておくべき書籍:

とりあえず強化学習の勉強を始めるならコレという本(だと思う).

Reinforcement learning: An introduction(Second Edition)
by Richard S. Sutton and Andrew G. Barto
→けっこう前から改定のドラフトが公開されていたが、とうとう2nd Editionが出版されました.

Algorithms for Reinforcement Learning
by Csaba Szepesvari
→個人的には上の本より難しい気がするので、他の本で全体像を把握した上で読む方がいいかも.

上記2冊は、ハードカバーで買うこともできますし、PDFでよければ無料で見ることもできます.他にも強化学習の本はたくさんありますが、上の2タイトルを知っておいて損はないと思います.有料ですが日本語にも翻訳されています.ただ、Suttonの方は、初版の翻訳になりますので少し古いです.

素早く全体像を知ることができる記事:

強化学習に関する技術ブログは多々ありますが、とりあえず以下の記事あたりが鉄板でしょうか.

ゼロからDeepまで学ぶ強化学習 - Qiita

これから強化学習を勉強する人のための「強化学習アルゴリズム・マップ」と、実装例まとめ - Qiita

深層強化学習アルゴリズムまとめ - Qiita