上一篇筆記認識了Sarsa,可以用來訓練動作價值函式\(Q_\pi\);本篇來學習Q-Learning,這是另一種 TD 演算法,用來學習 最優動作價值函式 Q-star,這就是之前價值學習中用來訓練 DQN 的演算法。
8. Q-learning
承接上一篇的疑惑,對比一下兩個演算法。
8.1 Sarsa VS Q-Learning
這兩個都是 TD 演算法,但是解決的問題不同。
Sarsa
- Sarsa 訓練動作價值函式 \(Q_\pi(s,a)\);
- TD target:\(y_t = r_t + \gamma \cdot {Q_\pi(s_{t+1},a_{t+1})}\)
- 價值網路是 \(Q_\pi\) 的函式近似,Actor-Critic 方法中,用 Sarsa 更新價值網路(Critic)
Q-Learning
-
Q-learning 是訓練最優動作價值函式 \(Q^*(s,a)\)
-
TD target :\(y_t = r_t + \gamma \cdot {\mathop{max}\limits_{a}Q^*(s_{t+1},a_{t+1})}\),對 Q 求最大化
注意這裡就是區別。
-
用Q-learning 訓練DQN
個人總結區別在於Sarsa動作是隨機取樣的,而Q-learning是取期望最大值
下面推導 Q-Learning 演算法。
8.2 Derive TD target
注意Q-learning 和 Sarsa 的 TD target 有區別。
之前 Sarsa 證明了這個等式:\(Q_\pi({s_t},{a_t})=\mathbb{E}[{R_t} + \gamma \cdot Q_\pi({S_{t+1}},{A_{t+1}})]\)
等式的意思是,\(Q_\pi\) 可以寫成 獎勵 以及 \(Q_\pi\) 對下一時刻做出的估計;
等式兩端都有 Q,並且對於所有的 \(\pi\) 都成立。
所以把最優策略記作 \(\pi^*\),上述公式對其也成立,有:
\(Q_{\pi^*}({s_t},{a_t}) = \mathbb{E}[{R_t} + \gamma \cdot Q_{\pi^*}({S_{t+1}},{A_{t+1}})]\)
通常把\(Q_{\pi^*}\) 記作 \(Q^*\),都可以表示最優動作價值函式,於是便得到:
\(Q^*({s_t},{a_t})=\mathbb{E}[{R_t} + \gamma \cdot Q^*({S_{t+1}},{A_{t+1}})]\)
處理右側 期望中的 \(Q^*\),將其寫成最大化形式:
-
因為\(A_{t+1} = \mathop{argmax}\limits_{a} Q^*({S_{t+1}},{a})\) ,A一定是最大化 \(Q^*\)的那個動作
解釋:
給定狀態\(S_{t+1}\),Q* 會給所有動作打分,agent 會執行分值最高的動作。
-
因此 \(Q^*({S_{t+1}},{A_{t+1}}) = \mathop{max}\limits_{a} Q^*({S_{t+1}},{a})\),\(A_{t+1}\) 是最優動作,可以最大化 \(Q^*\);
-
帶入期望得到:\(Q^({s_t},{a_t})=\mathbb{E}[{R_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({S_{t+1}},{a})]\)
左邊是 t 時刻的預測,等於右邊的期望,期望中有最大化;期望不好求,用蒙特卡洛近似。用 \(r_t \ s_{t+1}\) 代替 \(R_t \ S_{t+1}\);
-
做蒙特卡洛近似:\(\approx {r_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({s_{t+1}},{a})\)稱為TD target \(y_t\)。
此處 \(y_t\) 有一部分真實的觀測,所以比左側 Q-star 完全的猜測要靠譜,所以儘量要讓左側 Q-star 接近 \(y_t\)。
8.3 演算法過程
a. 表格形式
- 觀測一個transition \(({s_t},{a_t},{r_t},{s_{t+1}})\)
- 用 \(s_{t+1} \ r_t\) 計算 TD target:\({r_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({s_{t+1}},{a})\)
- Q-star 就是下圖這樣的表格:
找到狀態 \(s_{t+1}\) 對應的行,找出最大元素,就是 \(Q^*\) 關於 a 的最大值。
- 計算 TD error: \(\delta_t = Q^*({s_t},{a_t}) - y_t\)
- 更新\(Q^*({s_t},{a_t}) \leftarrow Q^*({s_t},{a_t}) - \alpha \cdot \delta_t\),更新\((s_{t},a_t)\)位置,讓Q-star 值更接近 \(y_t\)
b. DQN形式
DQN \(Q^*({s},{a};w)\)近似 $Q^*({s},{a}) $,輸入是當前狀態 s,輸出是對所有動作的打分;
接下來選擇最大化價值的動作 \({a_t}= \mathop{argmax}\limits_{{a}} Q^*({S_{t+1}},{a},w)\),讓 agent 執行 \(a_t\);用收集到的 transitions 學習訓練引數 w,讓DQN 的打分 q 更準確;
用 Q-learning 訓練DQN的過程:
- 觀測一個transition \(({s_t},{a_t},{r_t},{s_{t+1}})\)
- TD target: \({r_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({s_{t+1}},{a};w)\)
- TD error: \(\delta_t = Q^*({s_t},{a_t};w) - y_t\)
- 梯度下降,更新引數: \(w \leftarrow w -\alpha \cdot \delta_t \cdot \frac{\partial Q^*({s_t},{a_t};w)}{\partial w}\)