強化学習:行動価値関数(Action Value Function)(実装・写経)

f:id:shirakonotempura:20190131003939p:plain

今回は、前2回で整理した状態価値関数V^\pi(s)と同じ価値関数である行動価値関数(Action Value Function)について整理していきます.

以下を参考にしています.以下の記事はかなり丁寧に書かれていますが、だいぶはしょっていきます. qiita.com

行動価値関数と状態価値関数

状態価値関数V^\pi(s)は、状態sが持つ価値を表していました.

各状態の価値が分かれば、その状態を選ぶ行動がベストな行動なわけなのですが、V^\pi(s)は、変数に行動aを持っておらず、直接取るべき行動が示されているわけではありません.

一方、今回勉強する行動価値関数は、状態sでの行動aを評価する関数であり、ある状態sが与えられたとき、どの行動が最適な行動なのか、ということを知ることができます.

定義:

以下に、2つの価値関数の定義を示します.

状態価値関数V^\pi(s):状態sにあるときに、方策\piに従ったときの価値

行動価値関数Q^\pi(s, a):状態sにおいて、行動aを取った後、方策\piに従ったときの価値

行動価値関数の行動aは方策\piに従ったものではありません.つまり、状態sにおける最初の行動は方策に従わずに決めます.

行動価値関数の定式化

Q^\pi(s, a)を定式化していきます. 導出にあたり設ける仮定を以下に示します.

  • 方策\piが決まっている
  • 現在の時刻tでは、方策\piに従わず、行動aを取り時刻t+1で状態s'に遷移する
  • 時刻t+1後の行動は、方策\piに従って行動する

ダイアグラムを以下に示します. f:id:shirakonotempura:20190130094415p:plain

時刻tにおける状態価値関数V^\pi(s)については、今は無視します.状態s、時刻tでとった行動aに対する行動価値関数Q^\pi(s, a)を起点に考えます.

行動aを選択した後、遷移確率P^a_{ss'}によって確率的に遷移します(図中青で示した分岐).その遷移後の状態価値がV^\pi(s')です.

図中では、その後さらにポリシー\piで分岐、遷移確率Pでの分岐と枝分かれが続いていますが、行動価値関数Q^\pi(s, a)の数式にその先を考える必要はありません.状態価値がV^\pi(s')に枝分かれ以降で得られる報酬の総和(収益)になっているからです.以下に状態価値V^\pi(s')を使った行動価値関数Q^\pi(s, a)の計算式を示します.

$$Q^\pi(s,a) = \sum{s'} P^a_{ss'}[R^a_{ss'} + \gamma V^\pi(s')] \qquad \cdots \qquad (2)$$

R^a_{ss'}は、状態sで行動aをとり、次の状態s'に遷移したときの報酬を示します.

状態価値関数から見た行動価値関数

先ほど、『今は無視します』とした現時刻における状態価値V^\pi(s)を起点にみた場合の、行動価値関数との関係を考えてみます.以下にダイアグラムを示します.

f:id:shirakonotempura:20190131000309p:plain

状態価値関数V^\pi(s)から、方策\pi(s,aに従って行動が選択されていますので、以下のような式で表すことができます.

$$V^\pi(s) = \sum_{a} \pi(s,a) Q^\pi(s,a) \qquad \cdots \qquad (3)$$

1ステップ先の行動価値関数

次に、行動価値関数同士(現在と次のSTEP)の関係を考えてみます.これは、上で説明した式(2)を式(3)に代入すれば表すことができます.

$$Q^\pi(s,a) = \sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma\sum_{a}\pi(s',a')Q^{\pi}(s',a')] \qquad \cdots \qquad (4)$$

上式の関係は以下のダイアグラムのようになります. f:id:shirakonotempura:20190131002232p:plain

式のまとめ

行動価値関数と前回導出した状態価値関数の数式を以下にまとめます.

状態価値関数(前回求めたもの)

$$V^\pi(s) = \sum_a\pi(s,a)\sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma V^{\pi}(s')] \quad \cdots \qquad (1)$$

行動価値関数

$$Q^\pi(s,a) = \sum{s'} P^a_{ss'}[R^a_{ss'} + \gamma V^\pi(s')] \qquad \cdots \qquad (2)$$

状態価値関数と行動価値関数の関係

$$V^\pi(s) = \sum_{a} \pi(s,a) Q^\pi(s,a) \qquad \cdots \qquad (3)$$

1ステップ先の行動価値関数(更新式)

$$Q^\pi(s,a) = \sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma\sum_{a}\pi(s',a')Q^{\pi}(s',a')] \qquad \cdots \qquad (4)$$

実装

では、こちらのコードを写経させてもらい実際にAction Valueの計算を行ってみました.
問題設定は、これまでと同じGrid Worldを使用し、枝分かれは10ステップ先まで考慮しています.なお、ポリシー\piはあくまでランダム(上下左右等確率)です.

結果

以下に行動価値関数Q^\pi(s,a)の計算結果を示します.コードを使わせてもらったら、図の出力まで完璧でした.こんな図が描けるようになりたい・・・.
各状態sに対して上下左右4つの行動がありますので、Q^\pi(s,a)も1つのグリッドに対して4つ計算されています.グリッドAおよびBにおいては、どの行動をとっても得られる報酬と次の状態が同じであるため、Q(s,a)に差はありません.

f:id:shirakonotempura:20190131005834p:plain

各状態において、最も大きな値の行動が、その状態でとる計算上のベストな行動になります.Q値が大きい行動を赤矢印にしたものが以下になります.

f:id:shirakonotempura:20190131005934p:plain

まとめ

  • 行動価値Q^\pi(s,a)の定式化を行いました
  • Grid Worldの問題に行動価値の計算を実装し、ランダムに動くポリシー\piの元での行動価値関数Q^\pi(s,a)を求めました.

繰り返しになりますが、今回の計算もあくまでポリシー自体は固定(ランダム移動)で行っています.強化学習の目的は『長期的に得られる収益を最大化する方策』を見つけることですが、まだポリシーを改善したわけではないのです.

今回、ある方策のもとでのベストな行動は得る方法は分かりましたので、各状態のベスト行動を方策にしてまた行動価値を求めてという計算を繰り返し続ければ、いずれ最適な方策が得られそうな気はします.まあそれでは計算回数が多くなりそうですね.