実践・実装の前に押さえておきたい強化学習入門 その1

2019.01.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも、DI部の貞松です。

昨年のAWS re:Invent 2018でSagemaker RLやDeep Racerが発表されたこともあり、「強化学習」について、更に注目が集まっています。

近年、オープンソースの強化学習用フレームワークやシミュレーション・評価環境も登場しており、Sagemaker RLのようなクラウドサービスを加えてますます一般的にサービス・アプリケーションへの組み込みが進むことが考えられます。

その他の機械学習手法と同じく、扱うのが容易になってきたとはいえ、手法自体の基礎を押さえておかなければ、その手法を採用すべきか否かの判断や他者への説明、性能改善などで非常に苦戦を強いられることになりがちです。

※機械学習の基礎について、全般的に押さえておきたいという方は以下の記事がオススメです。
機械学習とかDeep Learningを学ぶ前に知っておくべき基礎の基礎

本記事では、強化学習とは何ができるものか、どういったケースで使う手法なのか等、入門的内容について解説します。

おしながき

本記事は以下のトピックに沿って強化学習の解説を進めていきます。

  1. 強化学習とは
  2. 強化学習の構成要素
  3. 強化学習の適用領域
  4. 強化学習のメリット・デメリット
  5. まとめ

1. 強化学習とは

強化学習とは、機械学習における学習手法の一つです。

  • 機械学習の学習手法
    • 教師あり学習
    • 教師なし学習
    • 強化学習

教師あり学習と教師なし学習が与えられた「データ」を対象として学習するのに対して、強化学習は与えられた「環境」を対象として学習を行います。ここでいう「環境」とは「行動」とそれに応じた「状態」を持っており、目的の状態への到達(あるいは到達までの行動)に対して「報酬」が与えられる空間と定義されます。

強化学習に与えられた環境に対する行動の開始から終了までの期間を1エピソードと呼びます。 強化学習では、この1エピソード内での単体の行動で得られる報酬(即時報酬)ではなく、1エピソード全体で得られる報酬(累積報酬)を最大化することが目的となります。 これにより、強化学習では与えられた環境に対する最適な行動を獲得することができます。

2. 強化学習の構成要素

強化学習で環境に対して判断、行動し、学習をする対象をエージェントやプレイヤーと呼びます。 エージェント(プレイヤー)は以下の要素によって構成されます。

  • 環境における現在の状態を認識する機能
  • 現在の状態を評価し、行動を選択する機能
  • 選択された行動とその時の状態に対して報酬を与える機能

これらの機能それぞれについて、適切なアルゴリズム選択やパラメータ設定を行うことにより、任意の環境(タスクや課題と言い換えることもできる)に対する適切な行動を学習できるようにします。

環境における現在の状態を認識する機能

状態を認識する機能の実装については、対象とする問題によって異なります。 例えば将棋であれば、ある時点での盤面に対して、どこに何の駒が置かれているかを状態として持つことになります。 迷路を解くような問題の場合、迷路自体の構造に加えて、迷路を解くエージェント(プレイヤー)が現在の位置から認識できる範囲(視界)を限定する場合があります。この場合はこの限定された情報を認識して次の行動を選択することになります。

現在の状態を評価し、行動を選択する機能

基本的にエージェントが1回行動する毎に環境の状態が変化します。その都度状態を評価し、次の行動を決定する必要があります。 評価方法については、環境に対する現在の状態から見たその後の行動の評価と、現在の状態からある行動を取った場合にその後の状態にどう影響を及ぼすかという2つの視点があります。 実際には、使用する手法(アルゴリズム)に応じて、状態評価関数(現在の状態に対して、方策に基づいて以降の一連の行動を評価)や行動評価関数(現在の状態に対して、ある行動を取った場合に以降の状態にどう影響を及ぼすかを試算)などを用いることで評価を行います。

次の行動に対する評価を行なった上で、実際に取る行動を選択する手法も様々なものがあります。

  • 単純に評価の高いものを選ぶ(greedy法)
  • 基本的には評価の高いものを選びつつ、一定の確率でランダムな選択をする(ε-greedy法)
  • 確率的に評価の高いものが「選ばれやすい」ような選択を行う(ルーレット選択法)

選択された行動とその時の状態に対して報酬を与える機能

適用する問題に応じて、ある行動を取った際に与えられる報酬を設定する必要があります。
具体的には以下のようなケースについて報酬の与え方を考える必要があります。

  • 目的の状態になった(もしくは近づいた)場合に正の報酬を与える
  • 目的の状態から遠ざかるような行動を取った場合に負の報酬を与える
  • 正の報酬を与えられた場合に、その行動に到るまでの行動についても報酬を割り振る

3. 強化学習の適用領域

ここまでの説明の通り、強化学習では環境に対する累積報酬を最大化するように学習を行うことで最適な行動を獲得することができる手法です。その為、強化学習の適用領域としては以下のようなものが考えられます。

  • ゲームAI
  • 機械の動作制御
    • 自動運転
    • ロボットのアーム制御や歩行制御 など
  • 対話型インターフェースの最適化
    • 商品・コンテンツの推薦(リコメンド)
    • スマートスピーカーやチャットボットの応答 など

ゲームAIや機械の動作制御については、必ずしも1エージェントで完結するとは限らない(ゲーム上の敵プレイヤーが複数存在する、複数の機械が連動して1つの作業を実行する必要がある等)為、マルチエージェント環境の考慮が必要になります。実際マルチエージェント環境に対する強化学習の研究も盛んに行われており、多数の論文が存在します。

4. 強化学習のメリット・デメリット

メリット

強化学習は学習の過程で行動の評価方法自体を学習する為、1度の行動に対する評価尺度の定義が難しい問題についても扱うことができます。 例えば、教師あり学習で、画像の分類などを行う場合は、ある画像を分類した結果が実際の分類と合っているか否かで評価することができますが、将棋の学習をする際に、ある一局で勝利した打ち手のそれぞれが本当に良いものか(モデルとして強いか)どうかを評価するのは非常に難しいものになります。そういう面において、強化学習は、評価尺度を定義するのが難しい問題、あるいは未知の環境に対する適応が期待できます。

デメリット

上述の通り、行動の評価方法自体を学習することによるメリットがある反面、どのような評価方法で、どのような行動を学習するかは実際の学習モデル任せになってしまいます。結果的に人間が意図しない(理解できない)ような行動をとったり、性能改善の為にどのように手を加えるべきかを調査するのが困難になる可能性があります。

5. まとめ

本記事の内容について、以下にまとめます。

  • 強化学習は機械学習手法の一つ
  • 1エピソード全体で得られる報酬(累積報酬)を最大化することが目的
  • エージェントは状態、行動、報酬の3つの要素で構成される
  • ゲームAIや機械の動作制御、対話型インターフェースの最適化に適用される
  • 行動の評価方法自体を学習する為、評価尺度定義の難しい問題を扱うことができる反面、どのような評価方法で、どのような行動を学習するかが学習モデル任せになってしまう

本記事でどこまで踏み込むか随分悩みましたが、一般的に使用される関数やアルゴリズムについては、何かしらの実装を交えて別途解説できればと考えております。

その2では、深層学習(Deep Learning)との組み合わせやAWSにおける強化学習について触れていきます。