PPO、GAE笔记
一、 重要性采樣
TRPO和PPO主要思想的數學基礎是重要性采樣
- 重要性采樣: xix_ixi? 是從p(x)p(x)p(x)分布中采樣得到的, 但是p(x)p(x)p(x)的值往往無法直接獲得,需要通過其他分布q(x)q(x)q(x)進行間接采樣獲得。
Ex~p[f(x)]=∫f(x)p(x)dx=∫f(x)p(x)q(x)q(x)dx=Ex~q[f(x)p(x)q(x)]\begin{aligned} \mathbb{E}_{x\sim p}[f(x)] &=\int f(x)p(x) dx \\ &=\int f(x) \frac{p(x)}{q(x)}q(x)dx \\ &=\mathbb{E}_{x\sim q}[f(x)\frac{p(x)}{q(x)}] \end{aligned} Ex~p?[f(x)]?=∫f(x)p(x)dx=∫f(x)q(x)p(x)?q(x)dx=Ex~q?[f(x)q(x)p(x)?]?
-
條件:
- ppp分布與qqq分布需要相近,才能得到較好的效果。
-
用在強化學習里面:
- 由于策略梯度原始公式中的 新策略分布難以得到,因而使用舊策略進行間接采樣,以使得未知項變成可估計的已知項進行計算。
二、 梯度與參數更新
1. 回報的期望: 最大化全部采樣軌跡上的策略回報值
Rθˉ=∑τR(τ)pθ(τ)\bar{R_\theta}=\sum_\tau R(\tau)p_\theta(\tau) Rθ?ˉ?=τ∑?R(τ)pθ?(τ)
2. 回報的期望的梯度:(第三個等號用到的公式:?f(x)=f(x)?log?f(x)\nabla f(x) = f(x) \nabla \log f(x)?f(x)=f(x)?logf(x))
?Rθˉ=∑τR(τ)?pθ(τ)=∑τR(τ)pθ(τ)?pθ(τ)pθ(τ)=∑τR(τ)pθ(τ)?log?pθ(τ)=Eτ~pθτ[R(τ)?log?pθ(τ)]≈1N∑n=1NR(τn)?log?pθ(τn)=1N∑n=1N∑t=1TnR(τn)?log?pθ(atn∣stn)\begin {aligned} \nabla \bar{R_\theta}&=\sum_\tau R(\tau) \nabla p_{\theta}(\tau) \\ &= \sum_\tau R(\tau)p_\theta(\tau)\frac{\nabla p_\theta(\tau)}{p_\theta(\tau)} \\ &= \sum_\tau R(\tau)p_\theta(\tau){\nabla \log p_\theta(\tau)}\\ &= \mathbb{E}_{\tau \sim p_\theta{\tau}}[R(\tau){\nabla \log p_\theta(\tau)}] \\ &≈ \frac{1}{N} \sum_{n=1}^{N}R(\tau^n)\nabla \log p_{\theta}(\tau^n) \\ &=\frac{1}{N}\sum_{n=1}^{N} \sum_{t=1}^{T_n} R(\tau^n)\nabla \log p_\theta(a_t^n|s_t^n) \end {aligned} ?Rθ?ˉ??=τ∑?R(τ)?pθ?(τ)=τ∑?R(τ)pθ?(τ)pθ?(τ)?pθ?(τ)?=τ∑?R(τ)pθ?(τ)?logpθ?(τ)=Eτ~pθ?τ?[R(τ)?logpθ?(τ)]≈N1?n=1∑N?R(τn)?logpθ?(τn)=N1?n=1∑N?t=1∑Tn??R(τn)?logpθ?(atn?∣stn?)?
式中
-
NNN表示采樣了NNN條trajectory, TnT_nTn?表示每條trajectory的step數量。
-
關于pθ(τ)p_{\theta}(\tau)pθ?(τ)
pθ(τ)=p(s1)pθ(a1∣s1)p(s2∣s1,a1)pθ(a2∣s2)p(s3∣s2,a2)...=p(s1)∏t=1Tpθ(at∣st)p(st+1∣st,at)\begin{aligned} p_{\theta}(\tau) &= p(s_1)p_\theta(a_1|s_1)p(s_2|s_1,a_1)p_\theta(a_2|s_2)p(s_3|s_2,a_2) \space\space...\space\space \\ &=p(s_1) \prod_{t=1}^T p_{\theta}(a_t|s_t)p(s_{t+1}|s_t, a_t) \end{aligned} pθ?(τ)?=p(s1?)pθ?(a1?∣s1?)p(s2?∣s1?,a1?)pθ?(a2?∣s2?)p(s3?∣s2?,a2?)??...??=p(s1?)t=1∏T?pθ?(at?∣st?)p(st+1?∣st?,at?)?
由兩部分組成一部分是來自環境的 pθ(st+1∣st,a)p_\theta(s_{t+1}|s_t, a)pθ?(st+1?∣st?,a), 一部分是來自agent的 pθ(at∣st)p_\theta {(a_t|s_t)}pθ?(at?∣st?), 其中來自環境的部分不帶入計算,策略更新只考慮agent這部分。所以最后一步并沒有t+1t+1t+1這部分。
3. 參數更新:
θ=θ+η?Rθˉ\theta = \theta+\eta \nabla \bar{R_\theta} θ=θ+η?Rθ?ˉ?
三、 實際算法中對策略梯度的處理方法
1. 策略梯度方法:
加入baseline
?Rθˉ=1N∑n=1N(R(τn)?b)?log?pθ(τn)b≈E[R(τ)]\nabla \bar{R_\theta}=\frac{1}{N} \sum_{n=1}^{N}(R(\tau^n)-b)\nabla \log p_{\theta}(\tau^n) \\ b≈\mathbb{E}[R(\tau)] ?Rθ?ˉ?=N1?n=1∑N?(R(τn)?b)?logpθ?(τn)b≈E[R(τ)]
bbb 的加入保證reward不是恒大于0的,若reward一直大于0,則會導致未被采樣的action無法得到提升,但其實該action并不是不好而是未被采樣。
2. 狀態值函數估計軌跡回報:
R(τn)?bR(\tau^n)-bR(τn)?b 部分使用狀態值函數來替代
q(s,a)q(s,a) q(s,a)
3. 優勢函數估計軌跡回報(Actor-Critic):
R(τn)?bR(\tau^n)-bR(τn)?b 部分用以下Advantage function來替代
A(st,at)=q(s,a)?V(s)A(s_t,a_t)= q(s,a)-V(s) A(st?,at?)=q(s,a)?V(s)
4. TD-Error估計軌跡回報:
R(τn)?bR(\tau^n)-bR(τn)?b 部分用以下TD-Error 代替
r(st.at)+v(st+1)?v(s)?r(s_t. a_t)+v(s_{t+1})-v(s)? r(st?.at?)+v(st+1?)?v(s)?
四、GAE(Generalized Advantage Estimation)
GAE的作用
- GAE的意思是泛化優勢估計,因而他是用來優化Advantage Function優勢函數的。
- GAE的存在是用來權衡variance和bias問題的:
- On-policy直接交互并用每一時刻的回報作為長期回報的估計∑t′=tTγt′?trt′\sum_{t'=t}^{T} \gamma^{t'-t}r_{t'}∑t′=tT?γt′?trt′? 會產生較大的方差,Variance較大。
- 而通過基于優勢函數的AC方法來進行回報值估計,則會產生方差較小,而Bias較大的問題。
GAE 推導
滿足γ\gammaγ-just條件。(未完待續)
GAE形式
GAE的形式為多個價值估計的加權平均數。
TDError=δt=rt+γv(st+1)?v(st)TD Error=\delta_t=r_t+\gamma v(s_{t+1})-v(s_t) TDError=δt?=rt?+γv(st+1?)?v(st?)
運用GAE公式進行優勢函數的估計:
∑l=0∞(γλ)lδt+1V\sum_{l=0}^\infin(\gamma\lambda)^l \delta_{t+1}^V l=0∑∞?(γλ)lδt+1V?
? 為了快速估計序列中所有時刻的估計值,采用倒序計算,從t+1時刻估計t時刻:
At^GAE(γ,λ)=∑l=0∞(γλ)lδt+1V=δtV+γλA^t+1GAE(γ,λ)\hat{A_t}^{GAE(\gamma,\lambda)}=\sum_{l=0}^{\infin}(\gamma\lambda)^l \delta_{t+1}^V=\delta_t^V+\gamma\lambda\hat{A}_{t+1}^{GAE(\gamma,\lambda)} At?^?GAE(γ,λ)=l=0∑∞?(γλ)lδt+1V?=δtV?+γλA^t+1GAE(γ,λ)?
五、PPO關于策略梯度的目標函數
以上所述的策略梯度算法屬于on-policy的算法,而PPO屬于off-policy的算法
-
on-policy: 使用當前策略πθ\pi_\thetaπθ?收集數據,當參數θ\thetaθ更新后,必須重新采樣。
?Rθˉ=Eτ~pθτ[R(τ)?log?pθ(τ)]\nabla \bar{R_\theta}=\mathbb{E}_{\tau \sim p_\theta{\tau}}[R(\tau){\nabla \log p_\theta(\tau)}] ?Rθ?ˉ?=Eτ~pθ?τ?[R(τ)?logpθ?(τ)] -
off-policy: 可以從可重用的樣本數據中獲取樣本來訓練當前的策略πθ\pi _\thetaπθ?,下式用了重要性采樣。
?Rθˉ=Eτ~pθ′τ[pθ(τ)pθ′(τ)R(τ)?log?pθ(τ)]\nabla \bar{R_\theta}=\mathbb{E}_{\tau \sim p_{\theta^\prime}{\tau}}[\frac{p_\theta(\tau)}{p_{\theta^\prime}(\tau)} R(\tau){\nabla \log p_\theta(\tau)}] ?Rθ?ˉ?=Eτ~pθ′?τ?[pθ′?(τ)pθ?(τ)?R(τ)?logpθ?(τ)]
1. PPO目標函數
對于PPO而言,軌跡回報通過采用Advantage function的方式進行估計,因而其梯度更新方式為:
?Rθˉ=E(st,at)~πθ[Aθ(st,at)?log?pθ(atn∣stn)]=E(st,at)~πθ′[pθ(st,at)pθ′(st,at)Aθ′(st,at)?log?pθ(atn∣stn)]=E(st,at)~πθ′[pθ(at∣st)pθ′(at∣st)pθ(st)pθ′(st)Aθ′(st,at)?log?pθ(atn∣stn)]≈E(st,at)~πθ′[?pθ(at∣st)pθ′(at∣st)Aθ′(st,at)]\begin{aligned} \nabla \bar{R_\theta} &=\mathbb{E}_{(s_t,a_t)\sim\pi_\theta}[A^\theta(s_t,a_t)\nabla \log p_\theta({a_t^n|s_t^n})] \\ &=\mathbb{E}_{(s_t,a_t)\sim\pi_\theta^\prime}[\frac{p_\theta(s_t,a_t)}{p_\theta^\prime(s_t,a_t)}A^{\theta^\prime}(s_t,a_t)\nabla \log p_\theta({a_t^n|s_t^n})] \\ &=\mathbb{E}_{(s_t,a_t)\sim\pi_\theta^\prime}[\frac{p_\theta(a_t|s_t)}{p_\theta^\prime(a_t|s_t)}\frac{p_\theta(s_t)}{p_\theta^\prime(s_t)}A^{\theta^\prime}(s_t,a_t)\nabla \log p_\theta({a_t^n|s_t^n})] \\ &≈\mathbb{E}_{(s_t,a_t) \sim \pi_\theta^\prime}[\frac{\nabla p_\theta(a_t|s_t)}{p_\theta^\prime(a_t|s_t)}A^{\theta^\prime}(s_t,a_t)] \end{aligned} ?Rθ?ˉ??=E(st?,at?)~πθ??[Aθ(st?,at?)?logpθ?(atn?∣stn?)]=E(st?,at?)~πθ′??[pθ′?(st?,at?)pθ?(st?,at?)?Aθ′(st?,at?)?logpθ?(atn?∣stn?)]=E(st?,at?)~πθ′??[pθ′?(at?∣st?)pθ?(at?∣st?)?pθ′?(st?)pθ?(st?)?Aθ′(st?,at?)?logpθ?(atn?∣stn?)]≈E(st?,at?)~πθ′??[pθ′?(at?∣st?)?pθ?(at?∣st?)?Aθ′(st?,at?)]?
? 其中,從第二個等式用的是重要性采樣,第三到第四個約等式由于pθ(st)pθ′(st)\frac{p_\theta(s_t)}{p_\theta^\prime(s_t)}pθ′?(st?)pθ?(st?)?這一項來源于重要性采樣,前提假設兩個分布差別不大,近似為1,且不易計算,故省略,后面的?log?pθ(atn∣stn)\nabla \log p_\theta({a_t^n|s_t^n})?logpθ?(atn?∣stn?) ,根據公式?f(x)=f(x)?log?f(x)\nabla f(x) = f(x) \nabla \log f(x)?f(x)=f(x)?logf(x)轉換。
? 因而,定義目標函數為:
Jθ′(θ)=E(st,at)~πθ′[pθ(at∣st)pθ′(at∣st)Aθ′(st,at)]J^{\theta^{\prime}} (\theta)=\mathbb{E}_{(s_t,a_t) \sim \pi_\theta^\prime}[\frac{p_\theta(a_t|s_t)}{p_\theta^\prime(a_t|s_t)}A^{\theta^\prime}(s_t,a_t)] Jθ′(θ)=E(st?,at?)~πθ′??[pθ′?(at?∣st?)pθ?(at?∣st?)?Aθ′(st?,at?)]
2. PPO對于重要性采樣約束的處理
? 為了保證$p_\theta(s_t,a_t) $ 與 pθ′(st,at)p_\theta^\prime(s_t,a_t)pθ′?(st?,at?) 分布的差別不會太大,采用以下約束:
- TRPO: 使用約束 KL(θ,θ′)<δKL(\theta,\theta')<\deltaKL(θ,θ′)<δ,在分布上進行約束。
- PPO1(Adaptive KL):使用JPPOθ′(θ)=Jθ′(θ)?βKL(θ,θ′)J_{PPO}^{\theta'}(\theta)=J^{\theta'}(\theta)-\beta KL(\theta,\theta')JPPOθ′?(θ)=Jθ′(θ)?βKL(θ,θ′),在目標函數上加一個正則項進行約束,注意,這里KL散度衡量的是action之間的距離,而不是參數θ\thetaθ與θ′\theta'θ′之間的距離。
- PPO2 (Clip,論文中推薦的):使用JPPO2θ′(θ)=∑(st,at)min?{([pθ(at∣st)pθ′(at∣st)Aθ′(st,at)],[clip(pθ(at∣st)pθ′(at∣st),1??,1+?)Aθ′(st,at)])}J_{PPO_2}^{\theta'}(\theta)=\sum_{(s_t,a_t)}\min\{([\frac{p_\theta(a_t|s_t)}{p_\theta^\prime(a_t|s_t)}A^{\theta^\prime}(s_t,a_t)], [clip(\frac{p_\theta(a_t|s_t)}{p_\theta^\prime(a_t|s_t)},1-\epsilon,1+\epsilon)A^{\theta^\prime}(s_t,a_t)])\}JPPO2?θ′?(θ)=∑(st?,at?)?min{([pθ′?(at?∣st?)pθ?(at?∣st?)?Aθ′(st?,at?)],[clip(pθ′?(at?∣st?)pθ?(at?∣st?)?,1??,1+?)Aθ′(st?,at?)])}, 來約束分布距離。
3. 使用GAE對優勢函數進行優化
def get_gaes(self, rewards, v_preds, v_preds_next):"""GAE:param rewards: r(t):param v_preds: v(st):param v_preds_next: v(st+1):return:"""deltas = [r_t + self.gamma * v_next - v for r_t, v_next, v in zip(rewards, v_preds_next, v_preds)]#計算GAE(lambda = 1), 參見 ppo paper eq(11)gaes = copy.deepcopy(deltas)# 倒序計算GAEfor t in reversed(range(len(gaes) - 1)):gaes[t] = gaes[t] + self.gamma * gaes[t + 1]return gaes六、 PPO的目標函數
PPO的最終目標函數由三部分組成,可使用梯度下降求解,而不是像TRPO一樣使用共軛梯度法:
- 策略梯度目標函數: LtCLIP(θ)L_t^{CLIP}(\theta)LtCLIP?(θ)
- 值函數目標函數:LtVF(θ)=(Vθ(st)?Vttarget)2L_t^{VF}(\theta)=(V_\theta(s_t)-V_t^{target})^2LtVF?(θ)=(Vθ?(st?)?Vttarget?)2
- 策略模型的熵: S[πθ](st)S_[\pi_\theta](s_t)S[?πθ?](st?)
完整的形式如下:
LtPPO2(θ)=E^t[LtCLIP(θ)?c1LtVF(θ)+c2S[πθ](st)]L_t^{PPO_2}(\theta)=\hat{\mathbb{E}}_t[L_t^{CLIP}(\theta)-c_1L_t^{VF}(\theta)+c_2S_[\pi_\theta](s_t)] LtPPO2??(θ)=E^t?[LtCLIP?(θ)?c1?LtVF?(θ)+c2?S[?πθ?](st?)]
這部分相應的代碼如下:
總結
- 上一篇: 深澜系统服务器架构,S7510E-X结合
- 下一篇: 星载SAR的各项指标解读(史上最全)