15年OpenAI发表了TRPO算法,一直策略单调提升的算法;17年DeepMind基于TRPO发表了一篇Distributed-PPO,紧接着OpenAI发表了这篇PPO。可以说TRPO是PPO的前身,PPO在TRPO的基础上进行改进,使得算法可读性更高,实操性更强。
论文地址,点这里
有关TRPO的论文解读,可参考我的另一篇论文笔记之TRPO
PPO作为目前比较火热的model-free类强化学习算法,在许多环境中取得了不错的效果,因此是有必要去学习的。
论文解读参考:
①OpenAI PPO强化学习算法解读
②TRPO和PPO(下)
③强化学习笔记(五)–PPO
④PPO
⑤TRPO与PPO
Note:
略
PPO和TRPO都是用来解决策略梯度算法中的学习率问题的,因此他们都属于策略梯度算法(PG):
∇ J ( θ ) = E ( s , a ) ∼ ρ π [ ∇ θ log π θ ( a ∣ s ) ⋅ A π θ ( s , a ) ] (1) \nabla J(\theta)=\mathbb{E}_{(s,a)\sim\rho^\pi}[\nabla_\theta\log\pi_\theta(a|s)\cdot A^{\pi_\theta}(s,a)]\tag{1} ∇J(θ)=E(s,a)∼ρπ[∇θlogπθ(a∣s)⋅Aπθ(s,a)](1)
有关TRPO的论文解读,可参考我的另一篇论文笔记之TRPO。
TRPO的目标函数以及约束为:
m a x i m i z e θ E ( s t , a t ) ∼ ρ π θ o l d [ π θ ( s t , a t ) π θ o l d ( s t , a t ) A π θ o l d ( s t , a t ) ] (3) \mathop{maximize}\limits_{\theta}\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[\frac{\pi_\theta(s_t,a_t)}{\pi_{\theta_{old}}(s_t,a_t)}A^{\pi_{\theta_{old}}}(s_t,a_t)]\tag{3} θmaximizeE(st,at)∼ρπθold[πθold(st,at)πθ(st,at)Aπθold(st,at)](3) s . t . E ( s t , a t ) ∼ ρ π θ o l d [ K L [ π θ o l d ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] (4) s.t.\,\,\,\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[KL[\pi_{\theta_{old}}(\cdot|s_t),\pi_\theta(\cdot|s_t)]]\tag{4} s.t.E(st,at)∼ρπθold[KL[πθold(⋅∣st),πθ(⋅∣st)]](4)Note:
理论上TRPO开始也是将 K L KL KL散度作为奖惩项的:
m a x i m i z e θ E ( s t , a t ) ∼ ρ π θ o l d [ π θ ( s t , a t ) π θ o l d ( s t , a t ) A π θ o l d ( s t , a t ) − β K L [ π θ o l d ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] (5) \mathop{maximize}\limits_{\theta}\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[\frac{\pi_\theta(s_t,a_t)}{\pi_{\theta_{old}}(s_t,a_t)}A^{\pi_{\theta_{old}}}(s_t,a_t)-\beta KL[\pi_{\theta_{old}}(\cdot|s_t),\pi_{\theta}(\cdot|s_t)]]\tag{5} θmaximizeE(st,at)∼ρπθold[πθold(st,at)πθ(st,at)Aπθold(st,at)−βKL[πθold(⋅∣st),πθ(⋅∣st)]](5)Note:
这是PPO的Clip版本。OpenAI的作者提出用Clip技术替代 K L KL KL散度的作用,即限制参数 θ o l d → θ \theta_{old}\to\theta θold→θ步伐过大。
记IS修正因子 r t ( θ ) = π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) r_t(\theta)=\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} rt(θ)=πθold(at∣st)πθ(at∣st)。TRPO优化的目标是一种替代目标,他不直接优化 η θ n e w \eta_{\theta_{new}} ηθnew,而是优化它的一个下界。整个优化过程Kakada称之为CPI(Conservation Policy Iteration),故真正优化的目标函数称之为CPI函数: L C P I ( θ ) = E ( s t , a t ) ∼ ρ π θ o l d [ π θ ( s t , a t ) π θ o l d ( s t , a t ) A π θ o l d ( s t , a t ) ] = E [ r t ( θ ) A π θ o l d ( s t , a t ) ] (6) L^{CPI}(\theta)=\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[\frac{\pi_\theta(s_t,a_t)}{\pi_{\theta_{old}}(s_t,a_t)}A^{\pi_{\theta_{old}}}(s_t,a_t)]=\mathbb{E}[r_t(\theta)A^{\pi_{\theta_{old}}}(s_t,a_t)]\tag{6} LCPI(θ)=E(st,at)∼ρπθold[πθold(st,at)πθ(st,at)Aπθold(st,at)]=E[rt(θ)Aπθold(st,at)](6)
可以见得,如果不存在一个约束的话, θ o l d → θ \theta_{old}\to\theta θold→θ将会很大,会导致策略提升失效,从而无法解决PG算法的学习率大小问题。
那么PPO的Clip版本的替代函数是什么呢?
PPO的Clip版本的优化的目标也是基于TRPO的优化目标(式(6)),本质上两者都是CPI函数,优化的都是真正回报 η θ n e w \eta_{\theta_{new}} ηθnew的近似。
记Clip超参数 ϵ = 0.2 \epsilon=0.2 ϵ=0.2,则PPO优化目标:
L C L I P ( θ ) = E ( s t , a t ) ∼ ρ π θ o l d [ min { r t ( θ ) A π θ o l d , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A π θ o l d } ] (7) L^{CLIP}(\theta)=\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[\min\{r_t(\theta)A^{\pi_{\theta_{old}}},clip(r_t(\theta), 1-\epsilon,1+\epsilon)A^{\pi_{\theta_{old}}}\}]\tag{7} LCLIP(θ)=E(st,at)∼ρπθold[min{rt(θ)Aπθold,clip(rt(θ),1−ϵ,1+ϵ)Aπθold}](7)
C l i p Clip Clip目标函数有2大特征:
①用下图即可说明PPO设置 C l i p Clip Clip的意义:用一句话概括就是 C l i p Clip Clip的存在是为了限制 θ o l d → θ \theta_{old}\to\theta θold→θ更新幅度过大,这个更新方向可能使得 π \pi π是增大的,也可能是减小的,这取决于Critic和0的关系。根据PG理论: A ≥ 0 A\ge0 A≥0,则鼓励 θ \theta θ的更新朝着 π θ \pi_\theta πθ增大的方向移动; A ≤ 0 A\leq0 A≤0,则鼓励 θ \theta θ的更新朝着 π θ \pi_\theta πθ减小的方向移动。
Note:
②: L C L I P L^{CLIP} LCLIP可作为选取目标函数的一个保守的下界。如下图所示:图中横坐标可以理解为参数从开始更新到更新完毕的过程。纵坐标为 K L ( θ o l d ∣ ∣ θ ) KL(\theta_{old}||\theta) KL(θold∣∣θ)值。从图中可看出以 L C L I P L^{CLIP} LCLIP为目标对于参数更新步伐的控制较强,更新“保守”。
第三节讲述了PPO的 C l i p Clip Clip版本,这一节讲述PPO的另一个版本——采用可调节的 K L KL KL散度因子。
算法的大致步骤为:
Note:
回顾一下:第三节介绍了基于TRPO的 L C L I P L^{CLIP} LCLIP算法;第四节介绍了基于TRPO的 L K L P E N L^{KLPEN} LKLPEN算法。这一节开始介绍完整的PPO算法。
PPO算法的完整目标函数:
L t C L I P + V F + S ( θ ) = E ( s t , a t ) ∼ ρ π θ o l d [ L t C L I P ( θ ) − c 1 L t V F ( θ ) + c 2 S [ π θ ] ( s t ) ] (9) L_t^{CLIP+VF+S}(\theta)=\mathbb{E}_{(s_t,a_t)\sim\rho^{\pi_{\theta_{old}}}}[L_t^{CLIP}(\theta)-c_1L_t^{VF}(\theta)+c_2S[\pi_\theta](s_t)]\tag{9} LtCLIP+VF+S(θ)=E(st,at)∼ρπθold[LtCLIP(θ)−c1LtVF(θ)+c2S[πθ](st)](9)Note:
优势函数的估计基于以下式子:
A t = − V ( s t ) + [ r t + γ t + 1 + ⋯ + γ T − t − 1 r T − 1 + γ T − t V ( s T ) ] (10) A_t=-V(s_t)+[r_t+\gamma_{t+1}+\cdots+\gamma^{T-t-1}r_{T-1}+\gamma^{T-t}V(s_T)]\tag{10} At=−V(st)+[rt+γt+1+⋯+γT−t−1rT−1+γT−tV(sT)](10)Note:
这一小节用于对比三种替代目标函数 L C P I 、 L C L I P 、 L K L P E N L^{CPI}、L^{CLIP}、L^{KLPEN} LCPI、LCLIP、LKLPEN,其中 L K L P E N L^{KLPEN} LKLPEN还包括固定和自动调节的 β \beta β。
实验设置:
超参数:除了 c l i p clip clip版本有专属的 ϵ \epsilon ϵ,奖惩 K L KL KL版本有专属的 ( β , d t a r g ) (\beta,d_{targ}) (β,dtarg),其余都一样的设置:
网络设置:用神经网络来表示策略。
其他:实验环境来自于OpenAI-Gym的Mujoco仿真模拟器。一共涉及7种环境,每种环境设置3个随机种子。评价指标为7*3=21个结果的平均值。
这一小节是将PPO算法与其他算法在同一环境是的比较。
上一轮胜出的是 c l i p clip clip版本的PPO,所以这一节拿 c l i p clip clip版本的PPO与其余5种算法对比,实验结果如下:从实验结果来看,显然PPO的表现力要好于其余5位。
这一节是测试PPO(自动调节 β \beta β版本)在高维连续动作空间环境Humanoid上的表现效果。实验分三种难度,从低到高分别是:①RoboschoolHumanoid-v0②RoboschoolHumanoidFlagrun-v0③RoboschoolHumanoidFlagrunHarder
实验所涉及到的超参数如下:
实验效果图如下:
实验结果如下:
从实验结果来看,PPO在高维连续空间task的表现力还是不错的,面对高维task的时候,PPO是一个不错的baseline。
这一节测试的是PPO算法和其余2种算法A2C、ACER在Atari环境中的表现对比。
一共测试49种Atari游戏。PPO的超参数如下:其余2种算法的超参数已经调节到最好效果了。
实验分2个评价指标,评价值是49局游戏里获胜的次数,实验结果如下:
从实验结果来看,PPO在Atari领域还是可行的一种算法。
On-policy
的随机策略算法。