強化学習の基礎(その1)
このシリーズでは、強化学習の基礎と、ある程度の実装の基本みたいなところを紹介できればいいな〜と思っています。 全3回くらいを予定しています。
第1回となる今回は、機械学習と強化学習の基礎(概念)のさらっとした説明をします。
機械学習とは
目的
機械学習の目的は、超ざっくり言いますと、
何かしら入力が与えられた際、そこに適当な演算等をして望ましい出力を出すこと
です。
(例)手書き文字をスキャンして活字化する、みたいなプログラムの場合、以下のような感じになります。
- 入力 : 手書き文字の画像
- 出力 : 文字
「学習」
上の例のようなプログラムは、口で言うのは簡単ですが、じゃあどうやって作るのか、という話になります。
入力に対して何らかの演算をして出力を求めるわけですが、機械学習では、その演算の内容を自動的に調整して、望みの出力が得られるようにします。この作業を「学習」と言います。
その学習に、機械学習では「データ」を用います。 活字化プログラムの例で言えば、色々な人が書いた色々な文字の画像を大量に用意する感じです。
このデータがどんなデータかにより、機械学習は大きく3つに分類されます。
機械学習の種類
教師あり学習
「データを入力とした時に、プログラムが出すべき『正解』」も一緒にデータとして与えられている場合、これを使うのが教師あり学習です。
さっきの活字化プログラムはこれを想定しています。 つまり、例えば100人が書いた「芸」という文字の画像と共に、「これらの字は『芸』である」という正解データを与えるわけです。 こうすれば、他の人が書いた「芸」の字の画像もそんなにデータと違わないはずなので、プログラムは「芸」と出力できるようになる、という感じです。
教師なし学習
先ほど説明した「正解データ」がなく、本当にただデータがあるだけの場合、これになります。 正解が分からないので、データだけから分かるはずの情報しか出せないと思います(教師なし学習は全然分からないので自信ない)。 具体的な使用例としては、与えられた入力を何個かのグループに分類する、みたいなのがあります。
強化学習
はい、前置きがものすごく長くなりましたが、メインの強化学習です。
強化学習は、ある意味で上2つの中間みたいなやつです。 基本的に教師なし学習っぽい感じ(データに正解がない)なのですが、違うのは「報酬」という概念がある点です。 ある入力に対し、何かしらを出力するわけですが、それに対し「報酬」が与えられる場合があります。 当然報酬を貰えた方がいいので、報酬を貰える出力は正解に近い、と考えることができるわけです。
ただ、ここで注意しなければならないのは、報酬を貰えたとしても、その出力が最善かどうかは分からない、ということです。 別の出力をすればもっと多くの報酬を貰えたかもしれません。 また、報酬を貰えるまでにタイムラグがある場合もあり、報酬が貰えた瞬間の出力が良いかどうかは確実には分からないわけです。
ここまでが強化学習の概要になりますが、具体的な例を見ないと分かりにくい部分が多分にあると思われます。 なので具体例を挙げようと思ったのですが、長くなってしまったのでここからは次回の記事に回そうと思います。