本系列的完結篇,介紹了連續控制情境下的強化學習方法,確定策略 DPG 和隨機策略 AC 演演算法。
離散動作空間
連續動作空間
\(Action \ space \ \mathcal{A}=[0°,360°]×[0°,180°]\)
比如機械臂,如果具有兩個運動關節:
價值網路 DQN 可以解決離散動作控制的問題,因為 DQN 輸出的是有限維度的向量。
策略網路也同樣。
所以此前的方法不能簡單照搬到連續控制。要想應用到連續控制上,可以採用 連續空間離散化。
連續空間離散化:
另外還有兩個方法:
Deterministic Policy Gradient.確定策略梯度,可以用於解決連續控制問題。後續引入深度神經網路,就是著名的 DDPG。
DPG 是 Actor-Critic 方法的一種。結構圖如下:
策略網路 actor
價值網路 critic
訓練兩個神經網路,讓兩個網路越來越好。
用 TD 演演算法更新 價值網路:
觀測 transition:\((s_t,a_t,r_t,s_{t+1})\)
價值網路預測 t 時刻 的動作價值 \(q_t=q(s_t,a_t;w)\)
價值網路預測 t+1時刻的價值:\(q_{t+1}=q(s_{t+1},a'_{t+1};w)\)
注意這裡的 \(a'_{t+1}\) 是 策略網路 t+1 時刻預選出來的動作,尚未執行。
TD error:\(\delta_t=q_t-\underbrace{(r_t+\gamma\cdot q_{t+1})}_{TD \ target}\)
更新引數:\(w\leftarrow w-\alpha\cdot\delta_t \cdot \frac{\partial q(s_t,a_t;w)}{\partial w}\)
策略網路用 DPG 演演算法 更新
對 DPG 演演算法進行推導。
訓練價值網路的目標是,讓價值網路的輸出 q 越大越好。
而在DPG 的網路結構中,在給定狀態時,動作是確定的(策略網路會給出一個確定的動作),且價值網路固定,那麼影響輸出的就是策略網路的引數 \(\theta\)。
所以更新 θ 使價值 q 更大;
計算價值網路關於 θ 的梯度 DPG:\(g=\frac{\partial q(s,\pi(s;\theta))}{\partial\theta}=\frac{\partial a}{\partial\theta}\cdot\frac{\partial q(s,a;w)}{\partial a}\)
鏈式法則,讓梯度從價值 q 傳播到動作 a;再從 a 傳播到策略網路。
梯度上升更新 \(\theta\):\(\theta\leftarrow \theta+\beta\cdot g\)
上面的 DPG 是比較原始的版本,用 Target Network 可以提升效果。Target Network 在此前第11篇中講過,上文中的演演算法也會出現高估問題或者低估問題。
因為用自身下一時刻的估計來更新此時刻的估計。
Target Network 方法的過程是:
同樣,之前講過的其他改進也可以用於這裡,如經驗回放、multi-step TD Target 等。
DPG 使用的是 確定策略網路,跟之前的隨機策略不同。
\ | 隨機策略 | 確定策略 |
---|---|---|
策略函數 | $\pi(a | s;\theta)$ |
輸出 | 每個動作一個概率值,向量 | 確定的動作 |
控制方式 | 根據概率分佈抽樣a | 輸出動作並執行 |
應用 | 大多是離散控制,用於連續的話結構大有不同 | 連續控制 |
這部分來介紹怎麼在連續控制問題中應用隨機策略梯度。
構造一個策略網路,來做連續控制,這個策略網路與之前學過的相差很大,以機械臂為例:
先從一個簡單的情況研究起,自由度為1,這時動作都是實數 \(\mathcal{A}\subset \mathbb{R}\)
而機械臂的自由度通常是3或者更高,把自由度記為 d,動作 a 是一個 d 維的向量。
但是問題是,我們不知道 具體的 \(\mu , \sigma\),我們用神經網路來近似它們。
網路結構如下:
觀測到 狀態 s,輸入神經網路;
神經網路輸出 \(\hat\mu=\mu(s;\theta^\mu),\hat\rho=\rho(s;\theta^\rho)\),都是 d 維度
\(\hat\rho\) 計算 \(\hat\sigma_i^2=\exp(\hat\rho_i)\)
隨機抽樣得到動作 a :\(a_i\sim\mathcal{N}(\hat\mu_i,\hat\sigma_i^2)\)
這個正態分佈是假定的策略函數。
Auxiliary Network, 計算策略梯度時對其求導。
隨機策略梯度為:\(g(a)=\frac{\partial ln\pi(a|s;\theta)}{\partial\theta}\cdot Q_\pi(s,a)\)
計算 \(\pi\) 的對數。
策略網路為:\(\pi(A|s;\theta^\mu)=\Pi_{i=1}^d\frac{1}{\sqrt{6.28}}\cdot\exp(-\frac{(a_i--\mu)^2}{2\delta^2_i})\),輸出是一個概率密度,表示在某點附近的可能性大小
雖然可以算出來某個動作的概率,但實際上我們只需要知道 均值 和 方差,來做隨機抽樣即可,所以實際上我們用不到這個策略函數 \(\pi\)
由上面策略梯度公式知:我們需要策略 \(\pi\) 的對數,所以訓練時,我們會用到策略 \(\pi\) 的對數,而不是 \(\pi\) 本身:
由於神經網路輸出的時方差對數\(\rho_i\),而不是\(\delta^2_i\),所以做個替換:\(\delta_i^2=\exp\rho_i\)
\(\ln\pi(a|s;\theta^\mu,\theta^\rho)=\sum_{i=1}^d[-\ln\delta_i-\frac{(a_i-\mu_i)^2}{2\delta^2}]+const\\=\sum_{i=1}^d[-\frac{\rho_i}{2}-\frac{(a_i-\mu_i)^2}{2\exp(\rho_i)}]+const\)
這樣 神經網路的對數 就表示成了 \(\rho,\mu\) 的形式,記 \(\theta=(\theta^\mu,\theta^\rho)\)
把上式連加的一項記為 \(f(s,a;\theta)\),這就是輔助神經網路 Auxiliary Network.用於幫助訓練。
\(f(a,s;\theta)=\sum_{i=1}^d[-\frac{\rho_i}{2}-\frac{(a_i-\mu_i)^2}{2\exp(\rho_i)}]\)
f 的輸入是 s, a ,依賴於 \(\rho,\mu\),所以引數也是 \(\theta\)
結構如下:
輸入為 \(\underbrace{\mu,\rho}_{s},a\),輸出為一個實數 f;
f 依賴於折積層和全連線層的引數,所以接下來反向傳播,可以算出 f 關於全連線層 Dense 引數的梯度,再算出 關於折積層引數的梯度:
用 \(\frac{\partial f}{\partial \theta}\) 來表示梯度。
隨機策略梯度:\(g(a)=\frac{\partial ln\pi(a|s;\theta)}{\partial\theta}\cdot Q_\pi(s,a)\)
輔助神經網路:\(f(s,a;\theta)=\ln\pi(a|s;\theta)+const\)
可以注意到,f 的梯度和 \(\ln\pi\) 的梯度相同,可以用前者梯度代替後者,即
而 f 作為一個神經網路,成熟的 pytorch
等可以對其自動求導。
Q 還未知,需對其做近似
連續動作空間有無窮多種動作數量
解決方案包括:
離散動作空間,使用標準DQN或者策略網路進行學習,但是容易引起維度災難
使用確定策略網路進行學習
沒有隨機性,某些情境下不合適。
隨機策略網路(\(\mu\) 與 \(\sigma^2\))
隨機策略的訓練過程:
本系列完結撒花!