強化学習:行動価値関数(Action Value Function)(実装・写経)
今回は、前2回で整理した状態価値関数と同じ価値関数である行動価値関数(Action Value Function)について整理していきます.
以下を参考にしています.以下の記事はかなり丁寧に書かれていますが、だいぶはしょっていきます. qiita.com
行動価値関数と状態価値関数
状態価値関数は、状態が持つ価値を表していました.
各状態の価値が分かれば、その状態を選ぶ行動がベストな行動なわけなのですが、は、変数に行動を持っておらず、直接取るべき行動が示されているわけではありません.
一方、今回勉強する行動価値関数は、状態での行動を評価する関数であり、ある状態が与えられたとき、どの行動が最適な行動なのか、ということを知ることができます.
定義:
以下に、2つの価値関数の定義を示します.
状態価値関数:状態にあるときに、方策に従ったときの価値
行動価値関数:状態において、行動を取った後、方策に従ったときの価値
行動価値関数の行動は方策に従ったものではありません.つまり、状態における最初の行動は方策に従わずに決めます.
行動価値関数の定式化
を定式化していきます. 導出にあたり設ける仮定を以下に示します.
- 方策が決まっている
- 現在の時刻では、方策に従わず、行動を取り時刻で状態に遷移する
- 時刻後の行動は、方策に従って行動する
ダイアグラムを以下に示します.
時刻における状態価値関数については、今は無視します.状態、時刻でとった行動に対する行動価値関数を起点に考えます.
行動を選択した後、遷移確率によって確率的に遷移します(図中青で示した分岐).その遷移後の状態価値がです.
図中では、その後さらにポリシーで分岐、遷移確率での分岐と枝分かれが続いていますが、行動価値関数の数式にその先を考える必要はありません.状態価値がに枝分かれ以降で得られる報酬の総和(収益)になっているからです.以下に状態価値を使った行動価値関数の計算式を示します.
$$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ステップ先の行動価値関数
次に、行動価値関数同士(現在と次の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)$$
上式の関係は以下のダイアグラムのようになります.
式のまとめ
行動価値関数と前回導出した状態価値関数の数式を以下にまとめます.
状態価値関数(前回求めたもの)
$$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ステップ先まで考慮しています.なお、ポリシーはあくまでランダム(上下左右等確率)です.
結果
以下に行動価値関数の計算結果を示します.コードを使わせてもらったら、図の出力まで完璧でした.こんな図が描けるようになりたい・・・.
各状態に対して上下左右4つの行動がありますので、も1つのグリッドに対して4つ計算されています.グリッドAおよびBにおいては、どの行動をとっても得られる報酬と次の状態が同じであるため、Q(s,a)に差はありません.
各状態において、最も大きな値の行動が、その状態でとる計算上のベストな行動になります.Q値が大きい行動を赤矢印にしたものが以下になります.
まとめ
- 行動価値の定式化を行いました
- Grid Worldの問題に行動価値の計算を実装し、ランダムに動くポリシーの元での行動価値関数を求めました.
繰り返しになりますが、今回の計算もあくまでポリシー自体は固定(ランダム移動)で行っています.強化学習の目的は『長期的に得られる収益を最大化する方策』を見つけることですが、まだポリシーを改善したわけではないのです.
今回、ある方策のもとでのベストな行動は得る方法は分かりましたので、各状態のベスト行動を方策にしてまた行動価値を求めてという計算を繰り返し続ければ、いずれ最適な方策が得られそうな気はします.まあそれでは計算回数が多くなりそうですね.