【入門】 :強化学習とは 〜簡単な例を用いて〜

強化学習をシンプルな例を用いて説明します。
図を多用しているので、予備知識0でも理解できると思います。

強化学習とは

強化学習を一言で説明すると、
試行錯誤を繰り返して、得られる報酬の最大化を目指し、最適な行動パターンを学習するアルゴリズムの総称です。
つまり、いろいろ試してみて、最も高い報酬を得られる行動を見つけていく学習方法です。

簡単な例を用いて説明しましょう。

ネズミが最適な行動を強化学習によって学習する例です。

ネズミには2つの選択肢があります。
しかし、どちらが良いかネズミはわかりません。 なので、とりあえず試してみます。

まず、ネズミは右を選択したとします。
右を選択すると普通にチーズを得ることができました。
強化学習ではこのチーズを報酬と言います。
ネズミは「右を良い」と思い、「右をなるべく選択しよう」と考えるはずです。
そして、右を選択する確率が高くなります。
これを強化と言います。
強化学習でいう学習の部分です。

次にネズミが試しに左を選択するとします。
すると、トラップにひっかかり怪我をしました。
ネズミは「左を危ない」と思い「左はなるべく選択しないほうが良い」と考えるはずです。
そして、左を選択する確率は小さくなります。
これを負の強化と言います。

このように試行錯誤を繰り返すとネズミはひたすら右を選択するようになっていきます。
これを強化学習といいます。

シンプルな強化学習アルゴリズムと実装

シンプルな強化学習アルゴリズム

次は実装するために先程の例を強化学習アルゴリズムとして考えています。

ネズミは各選択肢に対して、Q値(期待報酬)を保持しています。
Q値は「各選択によってどれだけ報酬が得られそうか」を表す値です。
強化学習ではこのQ値を実際に得られる報酬値に近づけることを目指して学習していきます。

ネズミはQ値を元に行動を選択します。
今回はε-greedy行動選択によって行動選択するとします。
ε-greedy行動選択では、

  • εの確率でランダムで行動選択
  • それ以外の確率(1-ε)で最もQ値が高い行動を選択

εは小さな値を用いるのが一般的です。例えば0.1等

今回は両選択肢ともにQ値は0なので、とりあえず右を選択したとします。
すると報酬を得ました。
この報酬を用いて選択した行動a/のQ値Q(a)/を最もシンプルな更新式では以下のように更新します。

f:id:ttt242242:20190901175840g:plain

上の式では得られた報酬(reward)と期待している報酬値(Q値)の差分だけ修正していきます。
修正量は学習率alpha/によって調整します。
学習率は0〜1の間の値をとります。
この値が高ければ高いほど敏感に反応します。

では実際に上記の式に値を代入して、計算します。

後は上述したような手順を繰り返し、Q値を最適化していきます。
この問題ではQ値がQ(左) < Q(右)になれば正しく学習できていることになります。

実装してみる

pythonというプログラミング言語を用いて実装します。
pythonは機械学習ではよく用いられるプログラミング言語です。

上述した例をオブジェクト指向的に書いていきます。
(これから強化学習をやる人にはけっこう重要になってくるので)

ソースコード

ネズミ(強化学習)クラスのソースコード

まず、ネズミ(強化学習)を実装します。
基本的にはソースコードのコメントを読めばわかると思います。

環境クラスのソースコード

環境はネズミがとった行動に対して、報酬を返却します。
今回は左を選択したら-100、右を選択したら+100の報酬を返します。

実験用のソースコード

実行用のソースコードです。
ネズミ(mouse)が試行回数分(nb_max_steps)行動選択を行わせます。

ソースコードの全体像

上述したすべてのコードをまとめました。
以下のコードを実行すると、学習後のネズミのQ値と、
実際に選択した行動を出力します。

終わりに

今回は非常にシンプルな例を用いて、強化学習を紹介しました。

次回以降は有名な強化学習手法であるQ学習(Qラーニング)を紹介します。

参考文献(教科書)

1.最も古典的な強化学習の教科書です。

強化学習強化学習

2.最近出版された強化学習の教科書です。

強化学習アルゴリズム入門 「平均」からはじめる基礎と応用

3.最近の強化学習の研究等を紹介しています。 教科書としては微妙かもしれませんが、様々な強化学習の発展分野について紹介しています。

これからの強化学習

コメント

  1. […] 強化学習とは […]

  2. […] 詳細は以下の記事にまとめています。 強化学習入門 […]

タイトルとURLをコピーしました