###### tags: `reinforcement learning`
# 深度強化學習 Ch3.1 : TD learning
## 1. 簡介
TD-learning (Temporal-Difference Learning) 是強化學習中很重要的方法類
旗下延伸包含了許多不同的演算法,像 Q-learning、 Sarsa 等。
此方法結合了 [蒙地卡羅方法] 和 [動態規劃] 兩種想法誕生,
因為動態規劃通常會需要一個規律模型,但在強化學習中有太多不確定情況,無法直接取得模型
所以使用了蒙地卡羅方法來做不停地嘗試尋找規律來得出模型。
:::spoiler :secret:動態規劃簡介
:::warning
動態規劃可以將一個問題分解成許多子問題,並找出其解決規律模型
:::info
ex : 解階層問題 $n!$ 可以寫成 $a_n=n!=1*2*3*...n$
如果將它進行動態規劃可以發現
$a_2=2!=1*2$
$a_3=3!=a_2 * 3=1*2*3$
最後可以得到
$a_n=n!=a_{n-1}*n$
所以要解決階層問題就不用重算一遍,把之前的 $a_{n-1}$ 值拿出來用就好了
:::
:::spoiler :secret:蒙地卡羅方法簡介
:::warning
蒙地卡羅方法在這邊也可以理解為[試誤學習]
也就是大量的嘗試,在錯誤中學習規律
:::
<br>
<br>
:::
TD learning 是由以下元素組成 :
- ==**TD Target**== : 要學習的目標,會希望動作價值函數 Q 可以近似此目標
- ==**TD error**== : 與 Target 的差距
- ==**Update**== : 更新 Q 值,也就是演算法本身
<br>
TD learning 又分成兩類型
- **On Policy** : 會從資料當中學習到同一種策略($\pi$),再進行改進 **ex : Sarsa($\pi$** 為 $\epsilon$ 貪婪策略)
- **off Policy** : 沒有固定策略,會利用學習到的經驗根據當前狀態推斷出動作的價值,
也就是其學習到的策略是獨立於訓練資料 ex : Q-learning
---
<br>
## 2. Sarsa 演算法
Sarsa 是 on-Policy 的 TD learning 經典演算法,使用當前回報和下一時刻的估計來計算目標
### (1). TD target
動作價值函數 Q 反映了 [ 動作,狀態對 ] 的價值,TD target 就是要估計下一時刻的 Q
並讓現在的 Q 近似預測的 Q,找出預測的 Q 叫做 Target
:::warning
<font size=4 color=red>**TD target : $y_t = r_{t+1}+{\gamma}*Q_{\pi}(s_{t+1}, A_{t+1})$**</font>
- $r_{t+1}$ : 當前動作得到的 reward
- $s_{t+1}$, $A_{t+1}$ : State, Action
- $Q$ : 動作價值函數
解釋 : TD target 就是之後要學習近似的目標
:::
:::spoiler :secret:**數學推導**
:::info
**數學推導** :
- 因為要計算未來 Q ,先整理一下 $U_t$ (Return)
$U_t=R_{t+1}+{\gamma}R_{t+2}+{\gamma}^2R_{t+3}...
=R_{t+1}+{\gamma}*(R_{t+2}+{\gamma}R_{t+3}+...)$
$U_t=R_{t+1}+{\gamma}*U_{t+1}$
- 計算動作價值函數
$Q_{\pi}(a_t,s_t)=E(U_t\mid s_t,a_t)=E(R_{t+1}+{\gamma}U_{t+1}\mid s_t,a_t)$
$Q_{\pi}(a_t,s_t)=E(R_{t+1}\mid s_t,a_t)+E({\gamma}U_{t+1}\mid s_t,a_t)$
$Q_{\pi}(a_t,s_t)=E(R_{t+1}\mid s_t,a_t)+{\gamma}Q_{\pi}(S_{t+1},A_{t+1})$
- 後方的 ${\gamma}Q_{\pi}(S_{t+1},A_{t+1})$ 雖然做過期望了,但是 是對 $S_{t+2},A_{t+2}...$ 執行,
剩下的 $S_{t+1},A_{t+1}$ 還是未知所以還可放進 $a_t,s_t$ 中求期望
$Q_{\pi}(a_t,s_t)=E(R_{t+1}+{\gamma}Q_{\pi}(S_{t+1},A_{t+1})\mid s_t,a_t)$
- 但要直接求出此期望太過困難(能直接求就不用近似啦!),所以使用蒙地卡羅近似求期望
$Q_{\pi}(a_t,s_t)\longleftarrow y_t=r_{t+1}+{\gamma}Q_{\pi}(s_{t+1},A_{t+1})$
:::
<br>
:::
### (2). TD Error
TD error 其實只是 Q 與 TD target 的差距
:::warning
<font size=4 color=red>**TD Error : $\delta_t = y_t-Q_{\pi}(a_t,s_t)$**</font>
- $y_t$ : TD target
- $Q_{\pi}$ : 當前實際 Q 值
:::
<br>
### (3). Update
這個步驟會更新 $Q_{\pi}$,用當前 $Q_{\pi}$ 減去 error 做更動
通常演算法會直接用此式表示
:::warning
$Q_{\pi}(a_t,s_t)\longleftarrow Q_{\pi}(a_t,s_t)-{\alpha}*{\delta}_t$
<font size=4 color=red>**$Q_{\pi}(a_t,s_t)\longleftarrow Q_{\pi}(a_t,s_t)-{\alpha}(r_{t+1}+{\gamma}Q_{\pi}(s_{t+1},A_{t+1})-Q_{\pi}(a_t,s_t))$**</font>
- $\alpha$ : 學習率
- :bangbang: 在最左邊的 $Q_{\pi}(a_t,s_t)$ 是指更新後的 Q,其餘右邊的 $Q_{\pi}(a_t,s_t)$ 是當前 Q
:::
整個 Sarsa 可以下圖結構表示 (利用未來預測 Q 來影響更新當前 Q)
當 Q 更新越來越大,回饋也就提升。
![](https://i.imgur.com/uPtrGu5.jpg =350x400)
---
<br>
## 3. Q-Learning
Q-learning 與 Sarsa 的原理非常相似,只差在未來選擇動作 $a_{t+1}$ 時
Sarsa 只有一種選擇策略並做出一動作,
而 Q learning 會選出多個動作,並挑出其中 Q 值最大的動作
### (1). TD target
:::warning
<font size=4 color=red>**TD target : $y_t = r_{t+1}+{\gamma}*\mathop{max}\limits_{a}Q^{*}(s_{t+1}, A)$**</font>
- $r_{t+1}$ : 當前動作得到的 reward
- $s_{t+1}$ : 未來的 State
- $A$ : 動作空間
- $Q^*$ : 最大動作價值函數
:::
:::spoiler :secret:**數學推導**
:::info
**數學推導** :
- 前面步驟都與 Sarsa 相同,得到此式
$Q_{\pi}(a_t,s_t)=E(R_{t+1}+{\gamma}Q_{\pi}(S_{t+1},A_{t+1})\mid s_t,a_t)$
- 因為要求多個 action 下的 max 值
$Q^*(a_t,s_t)=E(R_{t+1}+{\gamma}Q^*(S_{t+1},A_{t+1})\mid s_t,a_t)$
- 動作 $A_{t+1}$ 會取得最大回饋,可以寫成以下公式
$A_{t+1}=\mathop{argmax}\limits_{a}Q^*(S_{t+1},A)$
$Q^*(S_{t+1},A_{t+1}) =\mathop{max}\limits_{a}Q_{\pi}(S_{t+1},A)$
- 接著代換 $Q^*(a_t,s_t)$ 公式
$Q^*(a_t,s_t)=E(R_{t+1}+{\gamma}\mathop{max}\limits_{a}Q_{\pi}(S_{t+1},A)\mid s_t,a_t)$
- 使用蒙地卡羅近似求期望
$Q_{\pi}(a_t,s_t)\longleftarrow y_t=r_{t+1}+{\gamma}\mathop{max}\limits_{a}Q_{\pi}(s_{t+1},A)$
:::
<br>
:::
### (2). TD Error
:::warning
<font size=4 color=red>**TD Error : $\delta_t = y_t-Q_{\pi}(a_t,s_t)$**</font>
- $y_t$ : TD target
- $Q_{\pi}(a_t,s_t)$ : 當前實際 Q 值
:::
<br>
### (3). Update
:::warning
<font size=4 color=red>**$Q_{\pi}(a_t,s_t)\longleftarrow Q_{\pi}(a_t,s_t)-{\alpha}(r_{t+1}+{\gamma}\mathop{max}\limits_{a}Q_{\pi}(s_{t+1}, A)-Q_{\pi}(a_t,s_t))$**</font>
- $\alpha$ : 學習率
- $\mathop{max}\limits_{a}Q_{\pi}(s_{t+1}, A)$ : 未來狀態預測出的最大動作價值
- :bangbang: 在最左邊的 $Q_{\pi}(a_t,s_t)$ 是指更新後的 Q,其餘右邊的 $Q_{\pi}(a_t,s_t)$ 是當前 Q
:::
下圖為 Q-learning 結構,可以看到每使用策略($\pi$)找出多個 action 後
再用貪婪策略選出有最大 Q 的動作,利用此期望回饋影響當前 Q
![](https://i.imgur.com/wfCgyvI.jpg =400x400)
---
<br>
Reference
- [Temporal-Difference (TD) Learning](https://towardsdatascience.com/temporal-difference-learning-47b4a7205ca8)
- [强化学习基础之TD-learning](https://zhuanlan.zhihu.com/p/75622421)
- [Sarsa算法 (TD Learning 1/3) | Shusen Wang](https://www.youtube.com/watch?v=-cYWdUubB6Q)
- [Q-Learning算法 (TD Learning 2/3) | Shusen Wang](https://www.youtube.com/watch?v=Ymy2w3DGn2U)