r_nsdのブログ

r_nsdのブログ

勉強したこと・調べたこと・思ったことを残しておくためのブログ

MENU

【強化学習】ベルマン方程式と価値関数

強化学習とはの記事で,強化学習の概要とマルコフ決定過程 (MDP) について触れました.

強化学習の目的は,長期的な報酬(割引報酬和)を最大化する方策を求めることでした.

この割引報酬和は即時報rと割引率\gammaを用いて次の式で表されるのでした.

G_{t} = r_{t+1} + \gamma r_{t+2} + \gamma^{2} r_{t+3} + \dots + \gamma^{T-t-1} r_{T} = \sum_{k=0}^{T-t-1} \gamma^{k} r_{t+k+1}

強化学習ではエージェント(行動する主体)は,状態sのときにどの行動aを選択するかを記述した方策\pi(a|s)に従って行動します.

ある状態sで方策\piに従って行動したときの割引報酬和の期待値を状態価値と呼び,以下のような状態価値関数 Vで表します.

V^{\pi}(s)=\mathbb{E}^{\pi} \big[G_{t}|s_{t} \big]=\mathbb{E}_{\pi} \bigg[\sum_{k=0}^{T-t-1} \gamma^{k} r_{t+k+1}|s_{t} \bigg]

良い方策を求めるためには,良い方策とは何かを評価する必要があります.つまり,ある方策のもとでの価値関数を求める必要があります.価値関数の式を見ればわかるように,価値関数を求めるには将来の即時報酬がわかっておく必要があります.しかし将来の即時報酬は未知であることが多いです.そこでベルマン方程式を用いて価値関数を再帰的な形で表します.これにより価値関数を算出することができます.

状態価値関数

ある状態sで方策\piに従って行動したときの状態価値関数 V^{\pi}(s) は次のように表されるのでした.

V^{\pi}(s)=\mathbb{E}^{\pi} \big[G_{t}|s_{t} \big]=\mathbb{E}_{\pi} \bigg[\sum_{k=0}^{T-t-1} \gamma^{k} r_{t+k+1}|s_{t} \bigg]

この状態価値関数の値を求めるためには,将来の即時報酬がわかっている必要があり,実際に行動を起こして報酬r_{t+1}, r_{t+2}, \dotsを算出しなければなりません.これだと,方策を変えるたびに全時刻ステップ実行しなければならないので,非効率です.


そこで,ベルマン方程式を用いて状態価値関数を再帰的に定義します.

まず状態価値関数を式変形すると次のようになります.

V^{\pi}(s) = \mathbb{E}^{\pi}\left[r_{t+1}+\gamma r_{t+2}+\gamma^{2} r_{t+3}+\cdots | s_{t} \right]

 = \mathbb{E}^{\pi}\left[r_{t+1} | s_{t}\right]+\mathbb{E}^{\pi}\left[\gamma r_{t+2}+\gamma^{2} r_{t+3}+\cdots | s_{t}\right]

 = \mathbb{E}^{\pi}\left[r_{t+1} | s_{t}\right]+\gamma \mathbb{E}^{\pi}\left[r_{t+2}+\gamma r_{t+3}+\cdots | s_{t}\right]


さらに式変形をするのですが,そもそもの強化学習の目的は,「長期的な報酬を最大化する方策を学習すること」でした.この長期的な報酬は,即時報酬の総和であり,割引率を用いて割引報酬和で表しました.そして割引報酬和は方策\pi(a|s)のもとで確率的な値をとるので期待値を扱ってました.

ここで即時報酬を,ある状態sで,ある行動aをとり,状態s'になったときにもらえる報酬として R(s, a, s') で書き直します.また遷移確率  P(s'|s,a)を用いて状態価値関数を式変形します.

V^{\pi}(s)  =\mathbb{E}^{\pi}\left[r_{t+1} | s_{t}\right] + \gamma \mathbb{E}^{\pi}\left[r_{t+2}+\gamma r_{t+3}+\cdots | s_{t}\right]

の第一項は次のように変換できます.
 \mathbb{E}^{\pi} \left[r_{t+1} | s_{t}\right] = \sum_{a} \pi(a|s) \sum_{s'} P(s'|s,a)R(s, a, s')

この式の意味は,ある状態sのときに取れうる行動すべてと,行動を取ったときに遷移する可能性のある状態について報酬を考えるということです.つまり即時報酬の期待値を表しています.

第二項は次のように変換できます.

 \gamma \mathbb{E}^{\pi}\left[r_{t+2}+\gamma r_{t+3}+\cdots | s_{t}\right]  = \gamma \sum_{a} \pi(a|s) \sum_{s'} P(s'|s,a) \mathbb{E}^{\pi}\left[r_{t+2}+\gamma r_{t+3}+\cdots | s_{t+1}=s' \right]

ここで,  \mathbb{E}^{\pi}\left[r_{t+2}+\gamma r_{t+3}+\cdots | s_{t+1}=s' \right] は,V^{\pi}(s')とみなすことができるので,最終的には次のような形になります.

\gamma \sum_{a} \pi(a|s) \sum_{s'} P(s'|s,a)V^{\pi}(s')

これらより状態価値関数は,次のように表すことができます.
V^{\pi}(s) = \sum_{a} \pi(a|s) \sum_{s'} P(s'|s,a) \bigl( R(s,a,s')+\gamma V^{\pi}(s') \bigr)

行動価値関数

状態価値関数は,ある状態sで方策\piに従って行動したときの価値を表すものでした. しかし時には,実際にとる行動から価値を求めたい場合もあります.

そこで行動価値関数 Q^{\pi}(s,a)というものを定義します,これは,ある状態sの時に,方策は考慮せず行動aをとり,その次からは方策\piに従って行動をとった場合の価値を表しています.

行動価値関数については,こちらの記事の説明がとてもわかりやすかったのでリンクを貼らせてもらいます.ぜひ参照してみてください.

qiita.com

行動価値関数は行動が決まった状態での価値を表すので,状態価値関数での方策に対して期待値を考えていた部分を消して,次のように表すことができます.

Q^{\pi}(s,a) = \sum_{s'} P(s'|s,a) \bigl( R(s,a,s')+\gamma V^{\pi}(s') \bigr)


また行動価値関数 Q^{\pi}(s,a)と,状態価値関数 V^{\pi}(s)は次のような関係にあります.

V^{\pi}(s) = \sum_{a} \pi(a|s) Q^{\pi}(s,a)

ある状態sにおいて行動aをとったときの価値である状態価値関数に対して,それぞれの行動が起こる確率を掛け合わせることで,ある状態sにおける価値,状態価値関数を求めることができます.

これを利用して,状態価値関数は次のように変形できます.

Q^{\pi}(s,a) = \sum_{s'} P(s'|s,a) \bigl( R(s,a,s')+\gamma V^{\pi}(s') \bigr)

Q^{\pi}(s,a) = \sum_{s'} P(s'|s,a) \bigl( R(s,a,s')+\gamma \sum_{a'} \pi(a'|s') Q^{\pi}(s',a') \bigr)

まとめ

これで価値関数をベルマン方程式の形で定義することができました.これにより,将来の即時報酬がわからなくても再帰的に価値関数の値を求めることができます.

強化学習マルコフ決定過程の問題では,長期的な報酬を最大化する方策を求めることを目的としていました.方策の更新,評価に価値を用います.つまり価値関数の値を求めることで,方策を求めることができます.