でもQ学習すら難しい

# はじめに
強化学習の学習を進める際にQ学習の理解は避けては通れない道です。
それでは早速一言で言ううと、Q学習とは行動価値関数を学習するためのTD法を用いたオフ方策の価値ベースの手法なのです!
何がなんやらと言った感じです。
この記事のChapter０を読み終わる頃にはこの呪文を完璧に理解できると思います。

今回はHugging Faceのチュートリアルを通して感動的にQ学習を理解することができたため、是非この感動を共有したく本記事作成に至りました。
Hugging Faceのチュートリアルがものすごく分かりやすいので是非一度読んでいただきたいですが、英語が苦手な方はこの記事を一度読んでいただき概要を把握していただけたら幸いです。
Q学習が何かを知る(上の呪文を解読する)ために前提知識が少々必要になります(Chapter0-a~e)。
逆にこの前提知識させ分かればなんてことないことだったのだなとなると思いますので少しご辛抱をと思います。
それでは早速見ていきましょう！

# 0. Q学習を学ぶ前に
そもそも強化学習の目的とは？
A.累積報酬を最大化するような最適な方策$π^*$を見つけること

この目的を達成するために2つの方法が存在します。
1.方策ベースの手法
2.価値ベースの手法
まずはこのマクロな視点で2つの手法を見ていきたいと思います。

# 0-a. 2つの手法
1.方策ベースの手法
与えられた状態に対して行動を選択する方策を直的的に学習する手法となっております。

2.価値ベースの手法
状態の価値や状態と行動のペアの価値を出力する価値関数を学習させることで間接的に完了します。
状態の価値や状態と行動のペアの価値を学習することが間接的に最適な行動を選択すること(最適な方策)につながるというイメージです。

Q学習は価値ベースの手法に位置付けされるため、こちらの方法を具体的に見ていきます。
そして価値ベースの手法は更に2つの手法に分類することができます。

# 0-b. 2つの価値ベースの手法
### 1.状態価値関数
以下が状態価値観数の定義となります。
```math
V_{\pi}(s) = E_{\pi} [G_t|S_t=s] 
```
この数式が言いたいことは状態$s$の価値は、エージェントが状態$s$から方策$\pi$によって動いた際に想定される累積報酬$G_t$であると言うことになります。
ここで言う累積報酬とは以下で表されます。
```math
G_t = R_{t+1}+{\gamma}*R_{t+2}+{\gamma}^2*R_{t+3}+...
```
つまり将来想定される報酬を表したものとなります。
$\gamma$は割引率と呼ばれており0以上1以下の値をとります。
$\gamma$が1であれば将来の報酬を即時報酬と同程度に重要と捉え、逆に1より小さい数を取ればより近い将来の報酬を重要視することになります。
例えば$\gamma$を0.9と設定すると以下の様になります。
```math
G_t = R_{t+1}+0.9*R_{t+2}+0.81*R_{t+3}+...
```
以上のように時刻$t+1$で得られる報酬は時刻$t+2$や時刻$t+3$で得られる報酬より重く考えられていることが分かると思います。



### 2.行動価値関数
以下が行動価値観数の定義となります。
```math
Q_{\pi}(s, a) = E_{\pi} [G_t|S_t=s, A_t=a] 
```
この数式が言いたいことは状態$s$の時に行動$a$をとる価値は、エージェントが状態$s$から行動$a$をとり、その後方策$\pi$によって動いた際に想定される累積報酬$G_t$であると言うことになります。

今回見るQ学習は、こちらの行動価値関数となります。
ここで問題となるのがどちらの方法を使うにせよ、各状態に対してこれらを計算することは計算量を膨大にし、お気づきの方もいるとは思いますが何より無駄が大きいいです。
そこでベルマン方程式が登場することになります。


# 0-c. ベルマン方程式の役割
ベルマン方程式は状態価値の計算の無駄な部分を省いてくれます。
```math
V_{\pi}(s) = E_{\pi} [R_{t+1}+\gamma*V_{\pi}(S_{t+1})|S_t=s] 
```
つまり、状態$s$の価値とは、エージェントが状態$s$から方策$\pi$によって動いた時に想定される即時的な報酬$R_{t+1}$と割引き$\gamma$された次の状態価値$V_{\pi}(S_{t+1})$の和によって表すことができるというわけです。
各状態に対して価値の合計を計算するという冗長な計算の代わりに即時報酬と次の状態の割引報酬の和として表せるということがベルマン方程式のなすところです。


# 0-d. 2つの学習アプローチ
強化学習では、モンテカルロ法とTemporal Difference(TD)法という2つのアプローチが存在します。
これらは方策ベース、価値ベースの両方に対応している手法なのですが、今回はQ学習で使われている価値ベースに焦点を当てて説明をしていこうと思います、

### 1.モンテカルロ法
モンテカルロ法は、簡潔に述べるとエピソード全体を使用し学習を行う手法となります。
```math
V(s_t) = V(s_t)+{\alpha}[G_t-V(s_t)]
```
ある時刻$t$での状態の価値を更新するために時刻$t$以降に期待される累積報酬を用いるということがこの式の意味となります。
大抵の場合各々の状態の価値$V(s_t)$は0から始まりますのであるエピソードで累積報酬$G_t$が大きければ$G_t$と$V(s_t)$の差は大きくなりますので大幅に$V(s_t)$は更新されます。


### 2.TD法
一方、TD法は1つのステップ$(s_t, a_t, r_{t+1}, s_{t+1})$を使用して学習を行う手法となります。
```math
V(s_t) = V(s_t)+{\alpha}[R_{t+1}+{\gamma}V(s_{t+1})-V(s_t)]
```
ある時刻$t$での状態の価値を更新するために即時報酬$R_{t+1}$と状態価値$V(s_{t+1})$を割り引いたものの和からと状態価値$V(s_t)$を引いたものを使って更新を行います。これは、正にワンステップ分の誤差のみを用いて状態の価値を更新していると考えて良いと思います。



# 0-e. 最後におさらい
強化学習の2つの手法
    &emsp;1.方策ベースの学習
    &emsp;2.価値ベースの学習
    &emsp;　　2-a.状態価値関数
    &emsp;　　2-b.行動価値関数

2つのアプローチ
    &emsp;1.モンテカルロ法
    &emsp;2.TD法

# 1. いよいよQ学習とは
ではもう一度Q学習の定義を確認したいと思います。
Q学習とは行動価値関数を学習するためのTD法を用いたオフポリシーの価値ベースの手法です。

一つずつ整理します。
価値ベース: 価値関数を学習させることで間接的な学習
行動価値関数: $Q_{\pi}(s, a) = E_{\pi} [G_t|S_t=s, A_t=a] $
TD法: TD法は1つのステップを使用して学習を行う手法。
オフポリシー: ここでは一旦無視してください🙇

### 価値ベースで行動価値関数な側面
Q学習は状態と行動のペアをQ関数(Q-table)に入力し、その価値を出力します。
行動価値関数はまさに下記のQ関数であることが分かると思います。
実際に例を見てみましょう。
今回はネズミが毒を避けてチーズを回収するシナリオを考えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700075/bfdce6c1-f998-b52b-8a69-9078084efd64.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700075/1c4ee00a-63a1-9f6f-248a-9b47a72178bb.png)

Q関数を学習することは、ここではQ-tableの数値を最適なものに近づけていくことであり、
学習の完了時には最適のQ関数(Q-table)が完成します。
そして最適なQ関数(Q-table)はまさに最適な方針${\pi}^*$つまり強化学習の目的である将来の累積報酬を最大化するものを作ることと同義なのです！
```math
{\pi}^*(s) = \underset{a}{\operatorname{argmax}}Q^*(s,a)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700075/0078aa2d-286b-252f-62d9-e4458a144846.png)

### TD法な側面
ここまででQ学習が価値ベースで行動価値関数を学習していることが分かったと思います。
次に具体的にアルゴリズムを見ることでTD法であり、オフ方策であることを確認していきたいと思います。

![スクリーンショット 2023-10-01 21.32.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700075/aa4cce65-3fdd-4685-6f85-630ffb71d995.png)

```math
Q(s_t, a_t) = Q(s_t, a_t)+{\alpha}[R_{t+1}+{\gamma}Q(s_{t+1}, a_{t+1})-Q(s_t, a_t)]
```
下から三行目のQ値の更新に先ほど上でお見せしたようなTD法と同じような更新方法をしていることが分かると思います。(すぐ上の式はChapter.0-dのTD法の式を行動価値関数として書き直したものです)
ここで気になるのが$max_a$の部分かなと思います。

### オフポリシーとオンポリシー
強化学習のアルゴリズムとしてオフポリシーとオンポリシーなものがあります。
オフポリシーは、行動選択の際とQ値のアップデートの際に異なる方策を使用することになります。
一方オンポリシーなものは同じものを使用するということです。

1.行動選択のとき
記載の通り$\epsilon-greedy$な方針で行動を選択します。
これは行動選択の際には、活用と探索の役割が必要になるからです。
学習の初期の段階ではできるだけ多くの情報を集めれるように探索をし、ある程度の情報が集まってきたらそれらの情報を活用し最適な解のみを選びたいからです。
```math
1-\epsilon:活用
```
```math
\epsilon:探索
```
初期は大きい値を取り、徐々に小さくなるようにしていきます。

2.Q値のアップデートのとき

Q値のアップデート時には探索は必要ありません。なので毎回時刻$t+1$ステップ以降で毎回最適な行動をとった場合を比較対象とするため$max_a$がついているのです。
これは行動選択の時と違う方針ですね！

# まとめ
以上がQ学習の中身の部分となります。
価値ベース、行動価値関数、TD法、オフポリシーの4つを意識しながらアルゴリズムのステップとQテーブルを見ていただけるとQ学習がどの様なことをしているか分かると思います。
分解して考えるとなんてことないものだと分かればもう安心です！

# おわりに
自分もまだまだ学習途中ではありますが、みなさまにお力添えのできる記事を投稿していきたいと思っていますので修正のコメントなどバンバンお待ちしております！

# 参考
[1]Huggin Face Deep RL course
https://huggingface.co/learn/deep-rl-course/unit2/introduction

[2]Richard S. Sutton and Andrew G. Barto. 2018. Reinforcement Learning: An Introduction. MIT Press. http://incompleteideas.net/book/the-book.html