以前咱們提到過各類計算值函數的方法,好比對於 MDP 已知的問題可使用 Bellman 指望方程求得值函數;對於 MDP 未知的狀況,能夠經過 MC 以及 TD 方法來得到值函數,爲何須要再進行值函數近似呢?html
其實到目前爲止,咱們介紹的值函數計算方法都是經過查表的方式獲取的:web
可是對於大型 MDP 問題,上述方法會遇到瓶頸:算法
所以咱們須要有一種可以適用於解決大型 MDP 問題的通用方法,這就是本文介紹的值函數近似方法。即:
\[ \hat{v}(s, \mathbf{w}) \approx v_{\pi}(s) \\ \text{or } \hat{q}(s, a, \mathbf{w}) \approx q_{\pi}(s, a) \]網絡
那麼爲何值函數近似的方法能夠求解大型 MDP 問題?app
對於大型 MDP 問題而言,咱們能夠近似認爲其全部的狀態和動做都被採樣和計算是不現實的,那麼咱們一旦獲取了近似的值函數,咱們就能夠對於那些在歷史經驗或者採樣中沒有出現過的狀態和動做進行泛化(generalize)。函數
進行值函數近似的訓練方法有不少,好比:學習
此外,針對 MDP 問題的特色,訓練函數必須能夠適用於非靜態、非獨立同分布(non-i.i.d)的數據。優化
梯度降低再也不贅述,感興趣的能夠參考以前的博文《梯度降低法的三種形式BGD、SGD以及MBGD》google
咱們優化的目標函數是找到一組參數 \(\mathbf{w}\) 來最小化最小平方偏差(MSE),即:
\[J(\mathbf{w}) = E_{\pi}[(v_{\pi}(S) - \hat{v}(S, \mathbf{w}))^2]\]spa
經過梯度降低方法來尋優:
\[ \begin{align} \Delta\mathbf{w} &=-\frac{1}{2}\alpha\triangledown_{\mathbf{w}}J(\mathbf{w})\\ &=\alpha E_{\pi}\Bigl[\Bigl(v_{\pi}(S) - \hat{v}(S, \mathbf{w})\Bigr)\triangledown_{\mathbf{w}}J(\mathbf{w})\Bigr] \end{align} \]
對於隨機梯度降低(Stochastic Gradient Descent,SGD),對應的梯度:
\[\Delta\mathbf{w} = \alpha\underbrace{\Bigl(v_{\pi}(S) - \hat{v}(S, \mathbf{w})\Bigr)}_{\text{error}}\underbrace{\triangledown_{\mathbf{w}}\hat{v}(S, \mathbf{w})}_{\text{gradient}}\]
上述公式中須要真實的策略價值函數 \(v_{\pi}(S)\) 做爲學習的目標(supervisor),可是在RL中沒有真實的策略價值函數,只有rewards。在實際應用中,咱們用target來代替 \(v_{\pi}(S)\):
在獲取了值函數近似後就能夠進行控制了,具體示意圖以下:
動做價值函數近似:
\[\hat{q}(S, A, \mathbf{w})\approx q_{\pi}(S, A)\]
優化目標:最小化MSE
\[J(\mathbf{w}) = E_{\pi}[(q_{\pi}(S, A) - \hat{q}(S, A, \mathbf{w}))^2]\]
使用SGD尋優:
\[\begin{align} \Delta\mathbf{w} &=-\frac{1}{2}\alpha\triangledown_{\mathbf{w}}J(\mathbf{w})\\ &=\alpha\Bigl(q_{\pi}(S, A)-\hat{q}_{\pi}(S, A, \mathbf{w})\Bigr) \triangledown_{\mathbf{w}}\hat{q}_{\pi}(S, A, \mathbf{w}) \end{align}\]
略,感興趣的能夠參考David的課件。
隨機梯度降低SGD簡單,可是批量的方法能夠根據agent的經驗來更好的擬合價值函數。
優化目標:批量方法解決的問題一樣是 \(\hat{v}(s, \mathbf{w})\approx v_{\pi}(s)\)
經驗集合 \(D\) 包含了一系列的 <state, value> pair:
\[D=\{<s_1, v_1^{\pi}>, <s_2, v_2^{\pi}>, ..., <s_T, v_T^{\pi}>\}\]
根據最小化平方偏差之和來擬合 \(\hat{v}(s, \mathbf{w})\) 和 \(v_{\pi}(s)\),即:
\[ \begin{align} LS(w) &= \sum_{t=1}^{T}(v_{t}^{\pi}-\hat{v}(s_t, \mathbf{w}))^2\\ &= E_{D}[(v^{\pi}-\hat{v}(s, \mathbf{w}))^2] \end{align} \]
經驗回放(Experience Replay):
給定經驗集合:
\[D=\{<s_1, v_1^{\pi}>, <s_2, v_2^{\pi}>, ..., <s_T, v_T^{\pi}>\}\]
Repeat:
- 從經驗集合中採樣狀態和價值:\(<s, v^{\pi}>\sim D\)
- 使用SGD進行更新:\(\Delta\mathbf{w}=\alpha\Bigl(v^{\pi}-\hat{v}(s, \mathbf{w})\Bigr)\triangledown_{\mathbf{w}}\hat{v}(s, \mathbf{w})\)
經過上述經驗回放,得到最小化平方偏差的參數值:
\[\mathbf{w}^{\pi}=\arg\min_{\mathbf{w}}LS(\mathbf{w})\]
咱們常常聽到的 DQN 算法就使用了經驗回放的手段,這個後續會在《深度強化學習》中整理。
經過上述經驗回放和不斷的迭代能夠獲取最小平方偏差的參數值,而後就能夠經過 greedy 的策略進行策略提高,具體以下圖所示:
一樣的套路:
對於控制環節,咱們採起與Q-Learning同樣的思路:
略,感興趣的能夠參考David的課件。
[1] Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto, 2018
[2] David Silver's Homepage