logo

機械学習における強化学習とは? 📂機械学習

機械学習における強化学習とは?

定義

強化学習とは、エージェント環境と相互作用して累積報酬を最大化するポリシーを見つけることができるようにすることである。

説明1

強化学習を構成する要素は次のとおりである。

  • エージェントagent: 与えられた状態において、ポリシーに従って行動を決定する。
  • ステートstate, 状態: エージェントが置かれている状況を指す。
  • アクションaction, 行動: エージェントが与えられた状態で選ぶことができる選択肢を指す。
  • ポリシーpolicy, 方針: エージェントが与えられた状態で行動を決定する戦略を指す。
  • リワードreward, 報酬: エージェントが与えられた状態で選んだ行動によって得られる点数を指す。エージェントが達成すべき目標と見なすことができる。
  • 環境environment: エージェントが与えられた状態でどのような行動を決定すれば、MDPに従って次の状態とそれに伴う報酬を決定するか。
  • エピソードepisode: エージェントと環境の相互作用が始まった時から終わるまでを指す。

これをさまざまな状況に例えると次のようになる。

強化学習試験勉強囲碁
エージェント学生囲碁の棋士
ステート試験まで残り日数碁盤
アクション勉強、飲酒、ゲームなど着手
ポリシー日付別勉強計画戦略
リワード試験点数勝敗
エピソード試験期間一局

強化学習の問題:グリッドモデル

強化学習を説明するための代表的な例としてグリッドワールドgrid worldがある。これから次のグリッドモデルを例に各要素を具体的に説明する。一度に上下左右の4方向のうち一つに一マスずつ動けるロボットが下記のような4×44 \times 4のグリッドで動く場合を考えてみよう。スタート地点は 2 \boxed{\ 2\ }から15\boxed{15}まで任意に決められ、ロボットが 1 \fcolorbox{black}{darkgray}{\ 1\ }または16\fcolorbox{black}{darkgray}{16}まで最短距離で行くことが目標とする。

エージェント

強化学習におけるエージェントは学習する主体として説明されるが、実際には存在しない。後述する他の概念が確率変数などで定義されるのに対し、エージェントには明確な数学的定義がない。したがって、強化学習に関する理論的な勉強はエージェントという対象がなくても可能であり、実際にそうである。強化学習理論において本質的にエージェントを意味するのはポリシーである。しかし直感的には、学習する対象があると考える方が便利なため、「エージェントが行動する」「エージェントの状態が変わった」といった表現を用いる。エージェントは単にコンピュータシミュレーション(特にゲーム)においてキャラクターのように学習しているように見えるものに過ぎない。たとえば、グリッドモデルではエージェントが下の右側の図のように移動するのは、単純に状態の列挙で表すこともできる。  3  2  1  \boxed{\ 3\ } \to \boxed{\ 2\ } \to \fcolorbox{black}{darkgray}{\ 1\ } 3,2,13, 2, 1を順番にprintするだけでよい。強化学習の最終的に私たちが得たいのは本質的にポリシーであるため、エージェントというものを定義しなくても学習することができる。一言で言えば、エージェントはポリシーの視覚化(実現化)であると言える。

もちろん、上記の話は理論やコンピュータシミュレーションでの話であり、自動運転のような実際の応用では、ポリシーに従って実際に動くドローンや自動車が必要である。この場合、ドローンや自動車などのロボットや機械がエージェントとなり、それがなければポリシーの学習は不可能である。

状態

1.PNG

状態state確率変数であり、stateの頭文字をとってSSと表記する。エピソードは時間に沿って順次進行するため、インデックスとしてttを使用する。したがって、タイムステップがttのときのステート関数をStS_{t}と表記する。初期ステートは通常t=0t=0で表される。まとめると、StS_{t}は時間がttのとき、各グリッドに対して次のような関数値を与える関数である。

St(N)=n,1n16 S_{t} \left( \boxed{ N } \right) = n,\quad 1\le n \le 16

このとき、可能なすべての状態値(状態関数の関数値)の集合をSR\mathcal{S}\subset \mathbb{R}と表記し、その要素をssと表記する。

S={s1,s2,} \mathcal{S} = \left\{ s_{1}, s_{2},\dots \right\}

それでは上記の格子モデルに対する状態関数は次のようになります。

St:{ 1 , 2 ,,15,16}SSt( n )=sn=n,1n16 S_{t} : \left\{ \fcolorbox{black}{darkgray}{\ 1\ } , \boxed{\ 2\ }, \dots, \boxed{15}, \fcolorbox{black}{darkgray}{16} \right\} \to \mathcal{S} \\ S_{t} \left( \boxed{\ n\ } \right) = s_{n} = n,\quad 1\le n \le 16

それでは時間がttのときの状態値がs6s_{6}から次のタイムステップで状態値がs10s_{10}に変わる確率は次のようになります。

P(St+1=s10St=s6) P \left( S_{t+1} = s_{10} | S_{t} = s_{6} \right)

到達した瞬間にエピソードが終了する状態をターミナルステートterminal stateと呼びます。上記の格子モデルではターミナルステートは1,16\fcolorbox{black}{darkgray}{1}, \fcolorbox{black}{darkgray}{16}です。

行動

行動actionとはエージェントが現在の状態で取ることができる選択肢のことであり、これもまた確率変数です。actionの頭文字を取ってAtA_{t}と表記します。上記の格子モデルの例では、2\boxed{2} ~ 15\boxed{15}の各々で上下左右を選択することができます。可能な全ての行動値(行動関数の関数値)の集合をAR\mathcal{A}\subset \mathbb{R}と表記し、その要素をaaと表記します。

A={a1,a2,} \mathcal{A} = \left\{ a_{1}, a_{2}, \dots \right\}

それではタイムステップttでの行動関数は次のようになります。

At:{,,,}A{At()=a1At()=a2At()=a3At()=a4 A_{t} : \left\{ \uparrow, \rightarrow, \downarrow, \leftarrow \right\} \to \mathcal{A} \\ \begin{cases} A_{t}(\uparrow) = a_{1} \\ A_{t}(\rightarrow) = a_{2} \\ A_{t}(\downarrow) = a_{3} \\ A_{t}(\leftarrow) = a_{4} \end{cases}

エージェントは与えられた状態で確率に従って行動を決定します。例えばタイムステップがttのときの状態値がs6s_{6}で行動a1a_{1}を選択した確率は次のようになります。

P(At=a1St=s6) P(A_{t} = a_{1} | S_{t} = s_{6})

方針

方針policyとは状態ssで行動aaを決定する確率を全てのssaaに対して明記したものを言い、π\piで表記します。ゲームや戦争に例えると戦略です。格子モデルの例で行動を決定する確率が14\dfrac{1}{4}で全て同じだとすると、方針π\piは次のようになります。

π{P(a1s2)=14P(a2s2)=14P(a3s2)=14P(a2s15)=14P(a3s15)=14P(a4s15)=14orπ:S×A[0,1] \pi \begin{cases} P(a_{1} | s_{2}) = \dfrac{1}{4} \\ P(a_{2} | s_{2}) = \dfrac{1}{4} \\ P(a_{3} | s_{2}) = \dfrac{1}{4} \\ \vdots \\ P(a_{2} | s_{15}) = \dfrac{1}{4} \\ P(a_{3} | s_{15}) = \dfrac{1}{4} \\ P(a_{4} | s_{15}) = \dfrac{1}{4} \end{cases} \quad \text{or} \quad \pi : \mathcal{S} \times \mathcal{A} \to [0,1]

もちろんこれは最適化された方針ではありません。簡単に2\boxed{2}の場合だけ考えても、上に行くと格子の外に出てしまうため、上に行く確率自体が全く無い方がより良い方針です。したがって、下の図でπ1\pi_{1}よりもπ2\pi_{2}がより良い方針だと言えます。

2.PNG

強化学習アルゴリズムの目標は最適な方針を見つけることです。では、最適な方針をどのように見つけるかというと、方針の良さを評価する価値関数value functionを通じて見つけることができます。

報酬

報酬rewardとは、与えられた状態でエージェントが選択した行動に対して実数をマッピングする関数であり、rewardの頭文字を取ってRtR_{t}と表記します。全ての報酬値(報酬関数の関数値)の集合をRR\mathcal{R} \subset \mathbb{R}と表記し、その要素をrrと表記します。

R={r1,r2,}Rt=S×AR \mathcal{R} = \left\{ r_{1}, r_{2}, \dots \right\} \\ R_{t} = \mathcal{S} \times \mathcal{A} \to \mathcal{R}

報酬は一回のタイムステップごとに一回ずつ受け取り、一回のエピソードで受け取った総報酬、つまり蓄積された報酬が最も大きくなるような方針を見つけることが強化学習の究極的な目標です。

では、なぜ各タイムステップの報酬よりも蓄積された報酬が大きくなるようにするのか疑問に思うかもしれません。これは試験勉強に例えると簡単に理解できます。試験期間中に毎晩勉強する代わりにお酒を飲んだり遊んだりゲームをした場合、当面は勉強するよりも楽しいでしょう。しかし、蓄積された報酬、つまり試験の成績は散々なものになります。したがって、今は勉強することが疲れて大変だとしても、将来の大きな報酬のために勉強する方が良いと判断し、試験勉強をするわけです。

報酬は人が設定するハイパーパラメータです。したがって、エージェントが行うべき仕事に応じて適切に設定する必要があります。例えば、格子モデルの例で格子が迷路であり、エージェントが迷路を脱出するロボットである場合、一マス移動するごとに1-1の報酬、ターミナルステートに到達した場合は+10+10の報酬を与えるなどの設定ができます。格子が公園であり、エージェントがペットの散歩をするロボットである場合、一マス移動するごとに00の報酬、ターミナルステートに到達した場合は+10+10の報酬を与えるなどの設定ができます。

環境

環境environmentとはエージェントが与えられた状態で選択した行動に応じて次の状態と報酬を決定する関数、すなわちf:(s,a)(s,r)f : (s,a) \mapsto (s^{\prime},r)です。したがって、常に現実にぴったりと当てはまる比喩を見つけるのは難しいです。

タイムステップがttのときの状態をsts_{t}sts_{t}で選択した行動をata_{t}とします。これにより、環境が決定した次の状態をst+1s_{t+1}、報酬をrt+1r_{t+1}とすると次のように表されます。

f(st,at)=(st+1,rt+1) f(s_{t}, a_{t}) = (s_{t+1}, r_{t+1})

格子モデルの例について具体的に説明すると、エージェントが7\boxed{7}\uparrowを選択し、環境が次の状態3\boxed{3}と報酬1-1を決定した場合は、次のような数式で

表されます。

f(s7,a1)=(s3,1) f(s_{7}, a_{1}) = (s_{3}, -1)

エージェントが行動を決定する戦略を方針と呼ぶならば、環境が次の状態と報酬を決定することをMDPmarkov decision process, マルコフ決定プロセスと言います。エージェントと環境の相互作用を図で表すと次のようになります。

3.PNG

エピソード

エージェントと環境が相互作用しながら決定された状態、行動、報酬の数列を経路trajectory, 軌跡または履歴historyと言います。経路が有限の場合をepisode taskと言います。上で例に挙げた試験期間、囲碁、格子モデルもこれに該当します。

s0,a0,s1,r1,a1,s2,r2,,aT1,sT,rTor(s0,)a0(s1,r1)a1(s2,r2)a2aT1(sT,rT) s_{0}, a_{0}, s_{1}, r_{1}, a_{1}, s_{2}, r_{2}, \dots, a_{T-1}, s_{T}, r_{T} \\ \text{or} \\ (s_{0},) \overset{a_{0}}{\to} (s_{1}, r_{1}) \overset{a_{1}}{\to} (s_{2}, r_{2}) \overset{a_{2}}{\to} \cdots \overset{a_{T-1}}{\to} (s_{T}, r_{T})

経路が無限の場合をcontinuing taskと言います。ただし、非常に長い時間にわたって続くエピソードは無限の場合とみなされることもあります。

s0,a0,s1,r1,a1,s2,r2,,at1,st,rt,at,st+1,rt+1,or(s0,)a0(s1,r1)a1(s2,r2)a2at1(st,rt)at(st+1,rt+1)at+1 s_{0}, a_{0}, s_{1}, r_{1}, a_{1}, s_{2}, r_{2}, \dots, a_{t-1}, s_{t}, r_{t}, a_{t}, s_{t+1}, r_{t+1},\dots \\ \text{or} \\ (s_{0},) \overset{a_{0}}{\to} (s_{1}, r_{1}) \overset{a_{1}}{\to} (s_{2}, r_{2}) \overset{a_{2}}{\to} \cdots \overset{a_{t-1}}{\to} (s_{t}, r_{t}) \overset{a_{t}}{\to} (s_{t+1}, r_{t+1}) \overset{a_{t+1}}{\to} \cdots


  1. オ・イルソク, 機械学習(MACHINE LEARNING). 2017, p466-480 ↩︎