今さら聞けない強化学習（3）：行動価値関数とBellman方程式

# はじめに
前回、前々回と、強化学習を基礎から理解していくことにしました。

- [今さら聞けない強化学習（1）：状態価値関数とBellman方程式](https://qiita.com/triwave33/items/5e13e03d4d76b71bc802)

-  [今さら聞けない強化学習（2）：状態価値関数の実装](https://qiita.com/triwave33/items/3bad9f35d213a315ce78)

　マルコフ決定過程での格子世界を題材に、**方策$\pi$のときに、ある状態$s$にいる価値**を状態価値関数**$V^\pi(s)$**で表しました。

# 状態価値関数のBellman方程式とダイアグラム

状態価値関数の復習として、結果を乗せておきます。

```math
V^\pi(s) = E_\pi\{R_t|s_t = s\} = \sum_a\pi(s,a)\sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma V^{\pi}(s')]　\quad (1)
```
導出のイメージは下図から

<img width="674" alt="IMG_B853F69CDEC9-1.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/233208/0d06c29a-042f-62e1-b92e-943c0b4f48b1.jpeg">

この式と図の関係は、[前々回の記事](https://qiita.com/triwave33/items/5e13e03d4d76b71bc802)で説明しています。

# 行動価値関数
　　さて、上記ではある状態の価値を求めましたが、強化学習に期待する機能はなんでしょう。個人的には、**ある状態$s$が与えられたときに最適な行動$a$を知りたい**ことだと思います。意思決定がしたいんです。

　これを実現するには、どうすればよいでしょうか？
　
　$V^\pi(s_{t})$は変数$a$をもっておらず、特定の行動についての情報が直接含まれていません。状態$s$を起点に、そこから取りうるすべての行動についての総和をとっているからです。

しかし、ない袖は振れません。状態価値関数$V^\pi$を用いて表すと

- 時刻tである行動をとったあとの状態価値関数$V^\pi(s_{t+1})$を求める
- 時刻tで別の行動をとったあとの状態価値関数$V^\pi(s_{t+1})$を求める
- 全ての行動について繰り返す
- 結果的に最も高い$V^\pi(s_{t+1})$を示した行動を採用する

というやりかたで、やることができそうです。
基本的にはこのやり方でいいのですが、計算結果を$V^\pi(s)$の形でしか表せないのは不便ですね。

やはり、行動$a$を関数の引数（変数）に明示的に取り入れた価値関数があったほうが都合が良いです。

つまり、
**状態価値関数 $V^\pi(s)$**：状態$s$にあるときに、方策$\pi$に従ったときの価値

に、行動$a$の条件を加えて

**行動価値関数 $Q^\pi(s,a)$**：状態$s$にあるときに、行動$a$を取った後に、方策$\pi$に従った時の価値

を定義します。

ここで、一つ強調しておきますが
**行動価値関数の行動$a$は方策$\pi$に従ったものではない**ことに注意してください。

例えるなら

*「今はこうしろって決められてるんだけど、そんなん知らねえよ。おれはこうしたいんだよ！それが正しかったかどうかはその後の結果（収益）と合わせて判断してくれよ！」*

ていう感じですね。

つまり、状態$s$のとき最初の一回だけ、自分で勝手に行動$a$を決めるわけです。その代わり、その後はおとなしく方策に従います。
行動aをとるということ以外を共通化することで、別の行動を取った時と比較できるわけです。
なんだか論理的なパンク野郎って感じです。
方策には従うので、行動価値関数は方策$\pi$に依存する関数です。
ちゃんと$Q^\pi(s,a)$の肩に$\pi$の文字がありますね。

## 行動価値関数の定式化 

さて、それでは行動価値関数$Q^\pi(s,a)$を定式化しましょう。

上述したように、$Q^\pi(s,a)$の導出過程は以下の通りです。

- 方策$\pi$があります
- 今は時刻$t$にいます
- 時刻$t$の時に**あえて**方策$\pi$に従わず、行動$a$をとります。
- その結果、時刻$t+1$で状態$s'$に遷移します。
- その後は、おとなしく方策に従います（**勝手な行動はしません**）

これを下図と共に見ていきましょう

<img width="707" alt="IMG_8EBD73C1C905-1.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/233208/ee52f72a-57cc-2d33-37c2-1c5ef4eaf973.jpeg">

　時刻$t$の時の状態（$s$）の価値関数$V^\pi(s)$は今は考えません。その後、行動$a$を取った時の状態価値関数$Q^\pi(s,a)$がスタート時点です。

　行動$a$をとりますが、ある遷移確率$P^a_{ss'}$で各状態${s'}$に遷移しますので枝分かれしています。そこでの価値が$V^\pi(s')$です。

　さて、その後の枝分かれを考える必要はあるでしょうか？答えはNoですね。なぜなら、状態価値関数$V^\pi(s')$自体がその後の枝分かれを全て総和した収益であるからです。ですのでここで打ち止めです。

これをまとめると

```math
Q^\pi(s,a) = \sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma V^{\pi}(s')]　\quad (2)
```

になります。ただし、$R^a_{ss'}$は状態$s$から行動$a$をとり新たな状態$s'$になったときの報酬です。
遷移状態に従いダイアグラムが枝分かれしているので、状態遷移確率$P^a_{ss'}$をかけて足し合わせて期待値をとっています。

## 状態価値関数から見てみる

さて、先ほどはスルーしてしまった、状態価値関数$V^\pi(s)$の側から$Q^\pi(s,a)$を見てみましょう。

<img width="615" alt="IMG_37D0C08277B9-1.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/233208/40f3bd57-1931-3569-e6c2-94cb87371f33.jpeg">

　状態価値関数$V^\pi(s)$から、方策$\pi(s,a)$に従って行動が取られます。つまり枝分かれしています。方策には従ってはいますが、**結果的にある行動aをとった**あとの価値は$Q^\pi(s,a)$となります。このことから

```math
V^\pi(s) = \sum_{a}\pi(s,a)Q^{\pi}(s,a)　\quad (3)
```

が成り立ちます。

## 行動価値関数同士の関係

　式(3)を式（2）に代入してみましょう。代入するときに1ステップ進んでいることに注意します。

```math
\begin{align}
Q^\pi(s,a) &= \sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma V^{\pi}(s')]　 \\
&= \sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma\sum_{a}\pi(s',a')Q^{\pi}(s',a')]　\quad (4) \\
\end{align}
```


　これが、ある時刻の行動価値関数と次の時刻の行動価値関数をつなぐ数式です。図でも理解しておきましょう。

<img width="622" alt="IMG_A0C7B02E94D0-1.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/233208/83d91b79-efdd-c346-a514-2461003b673f.jpeg">

図の枝分かれと、式のΣが対応しています。

## まとめ

導出した価値関数の式をまとめておきます。

### 状態価値関数

```math
V^\pi(s) = \sum_a\pi(s,a)\sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma V^{\pi}(s')]　\quad (1)
```
### 行動価値関数


```math
Q^\pi(s,a) = \sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma V^{\pi}(s')]　\quad (2)\ 
```
```math
V^\pi(s) = \sum_{a}\pi(s,a)Q^{\pi}(s,a)　\quad (3)
```

```math
Q^\pi(s,a) = \sum_{s'}P_{ss'}^a[R_{ss'}^a + \gamma\sum_{a'}\pi(s',a')Q^{\pi}(s',a')]　\quad (4) 
```

それぞれ

- $Q^\pi$からみた$V^\pi$ 　・・・(2)
- $V^\pi$からみた$Q^\pi$ 　・・・(4)
- $Q^\pi$からみた（次のタイムステップの）$Q^\pi$ 　・・・(3)

になります。
　式を暗記するのではなく、頭の中でダイアグラムをイメージすれば自然に導出できるはずです。

 次回は格子世界について、行動価値関数を求めてみたいと思います。

### 次の記事
[今さら聞けない強化学習（4）：行動価値関数の実装](https://qiita.com/triwave33/items/669a975b74461559addc)