Policy Gradient (PG)与Proximal Policy Optimization (PPO)算法详解

参考学习课程

David Silver Reinforcement Learning
李宏毅教授强化学习


Value-based 与 Policy-based

强化学习可以按照方法学习策略来划分成Value-based和Policy-based两种。而在深度强化学习领域将深度学习与基于值的Q-Learning算法相结合产生了DQN算法,通过经验回放池与目标网络成功的将深度学习算法引入了强化学习算法。其中最具代表性分别是Q-Learning与Policy Gradient算法,将Q-Learning算法与深度学习相结合产生了Deep Q Network,而后又出现了将两种方式的优势结合在一起的更为优秀Actor Critic,DPG, DDPG,A3C,TRPO,PPO等算法。
Value-based 与 Policy-based
比如,在一个游戏里,目前处于状态s,动作空间A为{a1, a2, a3},现在要对动作进行选择。

  1. Value-based:比较a1, a2, a3三个个动作的期待值(Q-value),选取Q最大的那个作为本次选择的动作。
  2. Policy-based:有一个计算此刻选择哪个动作的函数(actor),并得到概率概率p(s,a),根据概率p(s,a)选取动作。
    请添加图片描述
    value-based 的典型算法是DQN,policy-based是policy gradient

Policy Gradient (PG)

基本原理

在强化学习中,环境与reward function是不能控制的,你所能改的只有actor,也就是玩家的经验策略。
对于 Policy Based 强化学习方法下,Actor就是训练的模型,也就是玩家,是一个使用参数 θ \theta θ近似的 π θ ( s , a ) \pi_{\theta}(s, a) πθ(s,a),然后找出最好的 θ \theta θ

请添加图片描述
这里是李宏毅教授视频中的一个例子:
机器先观察画面,然后做出了一个action,向right移动,这个action的奖励是 r 1 = 0 r_{1} = 0 r1=0,然后机器又观察画面,做出了fire的action,然后观察画面,发现有外星人被击落,然后获得reward r 2 = 5 r_{2} = 5 r2=5
请添加图片描述
经过很多轮 ( s , a , r ) (s, a, r) (s,a,r),游戏结束了。从游戏开始到游戏结束被称为一个episode,将每一个episode的 reward 相加就能得到Total reward: R = ∑ t = 1 T r t R = \sum_{t=1}^{T}r_{t} R=t=1Trt 。我们希望通过训练更好的acrtor使得R可以尽可能的大。

请添加图片描述
把每一个episode的所有s和a的序列放在一起,就是Trajectory

请添加图片描述
通过以上可得知 π \pi π在参数为 θ \theta θ情况下时 τ \tau τ发生的概率为:
p θ ( τ ) = p ( s 1 ) p θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) p θ ( a 2 ∣ s 2 ) p ( s 3 ∣ s 2 , a 2 ) . . . = p ( s 1 ) ∏ t = 1 T p θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) 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})...\\ =p(s_{1})\prod_{t=1}^{T}p_{\theta}(a_{t}|s_{t})p(s_{t+1}|s_{t}, a_{t}) pθ(τ)=p(s1)pθ(a1s1)p(s2s1,a1)pθ(a2s2)p(s3s2,a2)...=p(s1)t=1Tpθ(atst)p(st+1st,at)

得到了概率之后我们就可以根据采样得到的回报值计算出数学期望:
R θ ‾ = ∑ τ p θ ( τ ) R τ = E τ ∼ p θ ( τ ) [ R τ ] \overline{R_{\theta}}=\sum_{\tau}p_{\theta}(\tau)R_{\tau}=E_{\tau\sim p_{\theta}(\tau)}[R_{\tau}] Rθ=τpθ(τ)Rτ=Eτpθ(τ)[Rτ]

为了使 R θ ‾ \overline{R_{\theta}} Rθ最大化,我们需要做gradient ascent:
请添加图片描述

  1. 由于 E τ ∼ p θ ( τ ) [ R τ p θ ( τ ) ∇ l o g p θ ( τ ) ] E_{\tau\sim p_{\theta}(\tau)}[R_{\tau }p_{\theta}(\tau)\nabla logp_{\theta}(\tau) ] Eτpθ(τ)[Rτpθ(τ)logpθ(τ)]是无法计算的,所以我们sample出N个 τ \tau τ,对每个 τ \tau τ R τ p θ ( τ ) ∇ l o g p θ ( τ ) R_{\tau }p_{\theta}(\tau)\nabla logp_{\theta}(\tau) Rτpθ(τ)logpθ(τ),并求和取平均
  2. R τ ( n ) ∇ l o g p θ ( τ n ) R_{\tau^(n) }\nabla logp_{\theta}(\tau^{n}) Rτ(n)logpθ(τn)写为 ∑ t = 1 T n R τ ( n ) ∇ l o g p θ ( a t n ∣ s t n ) \sum_{t=1}^{T^{n}}R_{\tau^(n) }\nabla logp_{\theta}(a_{t}^{n}|s_{t}^{n}) t=1TnRτ(n)logpθ(atnstn)

观察最后的 1 N ∑ n = 1 N ∑ t = 1 T n R τ ( n ) ∇ l o g p θ ( a t n ∣ s t n ) \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T^{n}}R_{\tau^(n) }\nabla logp_{\theta}(a_{t}^{n}|s_{t}^{n}) N1n=1Nt=1TnRτ(n)logpθ(atnstn),如果在 s t n s_{t}^{n} stn下执行 a t n a_{t}^{n} atn得到的 R τ ( n ) R_{\tau^(n)} Rτ(n)为正,则增加这个选择的概率,否则减少概率

请添加图片描述

请添加图片描述
在实际实验中,我们会让actor去和environment做互动,产生左边的数据。左边的方框是做sample,获得很多 ( s , a ) (s, a) (s,a) 的pair(代表在s下采取a,得到 R ( τ ) R(\tau) R(τ) ),然后将这些数据送入训练过程中计算 ∇ l o g p θ ( a t n ∣ s t n ) \nabla logp_{\theta}(a_{t}^{n}|s_{t}^{n}) logpθ(atnstn),并更新模型的参数 θ \theta θ

PG的两个小技巧

  1. Add a baseline
    请添加图片描述
    比如,在ideal case的第一张图,a和c的会使总的奖励变多,那么机器会倾向于执行a和c的操作,所以a和c的执行几率就变大了,相对的b的几率就减少了。然后我们再看看sampling那一行,b和c可能使我的总的奖励一直是正的,那么机器根本就不知道a的情况,万一a的操作更好呢??机器只会去学更positive的,b和c的几率也会越来越大,a只会越来越小。这时,我们需要引入一个baseline,将总的奖励减去一个b值,也就是某一步的奖励一定要达到某一个标准我才能说它好,否则就是不好。通常我们可以将这个b设为与 R ( τ ) R(\tau) R(τ)的期望接近的值。

  2. Assign suitable credit 请添加图片描述
    比如下面是一个简单的游戏,就三步,第一组(s,a)得到的奖励是+5,第二组是0,第三组是-2,然后最后的奖励是+3,如果我们用之前的那个损失函数,那么就默认了每一个(s,a)的组合的权重都是+3,这显然是不靠谱的,虽然总的奖励是正的,但是明显里面有些组合不靠谱,我们就可以给那些不靠谱的组合负的权重。于是我们将 R ( τ n ) R(\tau^{n}) R(τn)换成下图的样子。这样就可以对每一个组合的权重加以区分。
    请添加图片描述
    同时,我们再增加一个衰减因子 γ \gamma γ,意味着随着时间推移,组合越来越多,那么前面的组合对很后面的组合的影响就越来越小。然后我们将红框框住的那部分重新命名一个函数,叫Advantage function

Proximal Policy Optimization (PPO)

PG的不足

  1. 采样效率低
    PG采用MC采样方式,每次基于当前的策略对环境采样一个episode数据,然后基于这些数据更新策略,这个过程中数据仅仅被利用了一次就扔掉了,相比于DQN等离线学习算法,PG这种更新方式是对数据的极大浪费。
  2. 训练不稳定
    在强化学习中当前的动作选择会影响到将来的情况,不像监督学习的训练样本是相互独立的,如果某一批次的样本不好导致模型训练的很差,只要其他的训练数据没问题最终也能得到一个好的结果。但是在PG中,对于某次策略更新的太大或者太小,就会得到一个不好的Policy,一个不好的和环境交互就会得到一个不好的数据,用这些不好的数据更新的策略很大概率也是不好的。所以训练时候会有下图这种情况,训练过程中会忽然进入一个很差的状态。

On-policy 和 Off-policy

  1. On-Policy方式指的是用于学习的agent与观察环境的agent是同一个,所以参数 θ \theta θ始终保持一致。
  2. Off-Policy方式指的是用于学习的agent与用于观察环境的agent不是同一个,他们的参数 θ \theta θ可能不一样。

基本原理

在PG中,下图蓝线画的部分,表示的是在某个actor的情况下,或者说是某个参数θ的情况下,随机取样出来不同的 τ \tau τ的期望,然后我们利用梯度上升更新 θ \theta θ,但是 θ \theta θ只要一更新,这个期望就会变,也就是说当 θ \theta θ更新时,我们又必须重新计算期望。
请添加图片描述
在PPO中,使用Off-Policy能解决这个问题,我们使用 π θ ′ \pi_{\theta'} πθ去和环境做互动,我们可以得到在 θ ′ \theta' θ下所随机取出的样本的期望,然后让 π θ \pi_{\theta} πθ去利用这个这些样本去训练 θ \theta θ

Importance Sampling:
请添加图片描述我们要求 f ( x ) f(x) f(x)的期望,其中 x x x服从 p ( x ) p(x) p(x)分布,可以通过变换, x x x可以从另外一个分布 q ( x ) q(x) q(x)中采样,这时 f ( x ) f(x) f(x)就需要乘上一个重要性权重 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)。通过这种方式就可以从另外一个分布采样来计算原式,后面只需要乘上一个重要性权重就可以了。

回到PPO中,PG是model-free的所以不知道模型的概率,所以只能通过与真实环境数据的分布 P ( x ) P(x) P(x)中去采样加和平均求期望。但现在我们为了把它变成off-policy,就不能直接从 P ( x ) P(x) P(x)中去直接采样。然后使用Importance Sampling,可以把原来 x ∼ p x\sim p xp的期望改写成 x ∼ q x\sim q xq的期望。

PG中策略更新梯度为: ∇ R θ = E τ ∼ p θ ( τ ) [ R τ p θ ( τ ) ∇ l o g p θ ( τ ) ] \nabla R_{\theta}=E_{\tau\sim p_{\theta}(\tau)}[R_{\tau }p_{\theta}(\tau)\nabla logp_{\theta}(\tau) ] Rθ=Eτpθ(τ)[Rτpθ(τ)logpθ(τ)],而PPO中的策略更新梯度为: ∇ R θ = E τ ∼ p θ ′ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) R τ p θ ( τ ) ∇ l o g p θ ( τ ) ] \nabla R_{\theta}=E_{\tau\sim p_{\theta'}(\tau)}[\frac{p_{\theta}(\tau)}{p_{\theta'}(\tau)}R_{\tau }p_{\theta}(\tau)\nabla logp_{\theta}(\tau) ] Rθ=Eτpθ(τ)[pθ(τ)pθ(τ)Rτpθ(τ)logpθ(τ)]

如果采样的分布 p p p与真实的分布 q q q差得很多,那么肯定会导致两个期望不一致。

先看等式左半边,在 p p p里面取 x x x,那么 p p p的左半边被取的机率很高,然后左半边又都是正的,然后代入 f ( x ) f(x) f(x),但是 f ( x ) f(x) f(x)的左边都是负的,所以整个期望是负的。然后再看等式右边,在 q q q里面取, q q q在右边被取得几率大,然后 q q q大于 p p p,所以 p q \frac{p}{q} qp小于1,然后 f ( x ) f(x) f(x)又是正的,所以为正,但事实果真如此吗?如果我现在sample到了一个左边的点, f ( x ) f(x) f(x)就为负了,而且 p q > 1 \frac{p}{q}>1 qp>1,这将影响整个右边的结果,可能为负,所以只有在取更多样本时,下面这个式子才越准确。
请添加图片描述
同时,最后方差的式子是不一样的,多了红框圈出的部分,也说明p与q不能差距太大。请添加图片描述
我们希望能想办法约束 θ \theta θ θ ′ \theta' θ的差距不要过大,使用KL散度也叫相对熵,可以用来衡量两个分布之间的差异性。

  1. 最直接的办法,就是对目标函数增加一个约束条件让他的KL散度小于 δ \delta δ。也就Trust Region Policy Optimization (TRPO)
    ∇ R θ = E τ ∼ p θ ′ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) A θ ′ ( s , a ) ] K L ( θ , θ ′ ) < δ \nabla R_{\theta}=E_{\tau\sim p_{\theta'}(\tau)}[\frac{p_{\theta}(\tau)}{p_{\theta'}(\tau)}A^{\theta'}(s, a)]\\ KL(\theta, \theta')<\delta Rθ=Eτpθ(τ)[pθ(τ)pθ(τ)Aθ(s,a)]KL(θ,θ)<δ

  2. 但是直接求解TRPO这种带约束的问题是十分复杂的,PPO1将KL散度作为惩罚项,更加容易求解。
    ∇ R θ = E τ ∼ p θ ′ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) A θ ′ ( s , a ) ] − β K L ( θ , θ ′ ) = ∑ ( s t , a t ) p θ ( s t , a t ) ) p θ ′ ( s t , a t ) ) A θ ′ ( s t , a t ) − β K L ( θ , θ ′ ) \nabla R_{\theta}=E_{\tau\sim p_{\theta'}(\tau)}[\frac{p_{\theta}(\tau)}{p_{\theta'}(\tau)}A^{\theta'}(s, a)] - \beta KL(\theta, \theta')\\ =\sum_{(s_{t}, a_{t})}\frac{p_{\theta}(s_{t}, a_{t}))}{p_{\theta'}(s_{t}, a_{t}))}A^{\theta'}(s_{t}, a_{t}) - \beta KL(\theta, \theta') Rθ=Eτpθ(τ)[pθ(τ)pθ(τ)Aθ(s,a)]βKL(θ,θ)=(st,at)pθ(st,at))pθ(st,at))Aθ(st,at)βKL(θ,θ)

  3. 另外还有一种PPO2算法效果比PPO要好一些
    ∇ R θ = ∑ ( s t , a t ) m i n ( p θ ( s t , a t ) ) p θ ′ ( s t , a t ) ) A θ ′ ( s t , a t ) , c l i p ( p θ ( s t , a t ) ) p θ ′ ( s t , a t ) ) , 1 − ϵ , 1 + ϵ ) A θ ′ ( s t , a t ) ) \nabla R_{\theta}=\sum_{(s_{t}, a_{t})}min(\frac{p_{\theta}(s_{t}, a_{t}))}{p_{\theta'}(s_{t}, a_{t}))}A^{\theta'}(s_{t}, a_{t}), clip(\frac{p_{\theta}(s_{t}, a_{t}))}{p_{\theta'}(s_{t}, a_{t}))}, 1-\epsilon, 1+\epsilon)A^{\theta'}(s_{t}, a_{t})) Rθ=(st,at)min(pθ(st,at))pθ(st,at))Aθ(st,at),clip(pθ(st,at))pθ(st,at)),1ϵ,1+ϵ)Aθ(st,at))

利用clip函数将其固定在了一定的范围之内,同样也可以起到限制约束 θ \theta θ θ ′ \theta' θ的作用。
请添加图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Proximal Policy OptimizationPPO)是一种目前被广泛应用于强化学习领域的优化算法。它起源于OpenAI公司的研究者们的努力,旨在解决现有的基于策略梯度方法在采样效率和训练稳定性方面的问题。 在过去,基于策略梯度的方法在训练过程中存在一些挑战。首先,传统的策略梯度方法通常需要采样大量的样本来进行训练,导致训练的时间开销较大。其次,在训练过程中,梯度更新的幅度可能过大,导致策略的变化太过剧烈,进而影响训练的稳定性。 为了解决这些问题,OpenAI的研究者提出了PPO算法PPO算法通过引入“近端”以及“裁剪”机制来控制策略更新的大小,从而保证了训练过程的稳定性。具体来说,PPO算法通过在每一次训练迭代中进行多次策略更新,并使用一种近端优化方法来限制每次更新的大小。这样可以防止梯度的剧烈变化,同时提升采样效率。 PPO算法的提出为强化学习领域带来了重要的突破。它的优势在于训练过程中不仅更加稳定,而且具有较高的采样效率。这使得PPO算法成为了广泛应用于各类强化学习问题的解决方案。同时,PPO算法的思想也为其他相关的优化算法提供了启示,为这一领域的发展做出了重要贡献。 总而言之,PPO算法的起源源于OpenAI公司研究者们对基于策略梯度方法的改进探索,它通过引入近端优化和裁剪机制来提高训练稳定性和采样效率,为强化学习领域带来了重要的突破。 ### 回答2: Proximal Policy Optimization(简称PPO)是由OpenAI于2017年提出的一种强化学习算法。这个算法的灵感来自前人提出的TRPO(Trust Region Policy Optimization算法。TRPO算法是一种基于策略梯度的算法,它通过限制策略更新的步长,保持原始策略与更新策略的KL散度在可接受范围内,从而确保策略更新的稳定性。 然而,TRPO算法的计算复杂度较高,且在实际应用中存在一些不足之处。鉴于这些问题,OpenAI团队对TRPO进行改进而提出了PPO算法PPO算法提出了一个新的目标函数,在保证更新策略不会离原始策略太远的前提下,最大化策略梯度并通过剪切来调节步长。这样,PPO算法在计算效率和稳定性上都比TRPO有所提升。此外,PPO还引入了重要性比率修正项,用于抵消由采样引入的偏差,提高更新的准确性。 PPO算法的起源可以追溯到强化学习的研究和应用需求。在过去几年中,强化学习在各个领域取得了巨大的进展,包括机器人控制、游戏AI等。然而,现有的算法在性能和效率上仍然存在着一些问题。因此,PPO算法的提出是为了解决这些问题,进一步推动强化学习的发展。 总之,PPO算法的起源可以归结为对既有算法的改进和创新。通过提出新的目标函数和修正项,PPO算法在计算效率和稳定性上有了明显的改进,使得强化学习能够更好地应用于各个领域。 ### 回答3: Proximal Policy OptimizationPPO)是一种由OpenAI提出的强化学习算法,其起源可以追溯到自然策略梯度(Natural Policy Gradient算法和策略梯度定理。 自然策略梯度算法是一种基于策略梯度的方法,其主要思想是对策略进行优化,以最大化预期回报。然而,自然策略梯度算法在实际应用中存在一些问题,例如训练不稳定和采样效率低下。 为了解决这些问题,OpenAI团队在2017年提出了PPO算法PPO算法的核心观点是尽量改善策略,但同时保持策略的近似保持不变(approximately keeping policy)。 PPO的基本原理是,通过执行多个策略更新步骤,每个更新步骤都在同样的时间内执行多个策略,以最大限度地改善策略,并且通过一种称为"clipping"的技术来约束策略更新的幅度。"clipping"技术可以控制策略改进的幅度,以防止策略更新过大而导致训练不稳定。 通过这样的方式,PPO可以在保持较大的更新幅度的同时,避免过度更新策略,从而提高训练的稳定性和采样效率。 总结起来,Proximal Policy Optimization的起源可以追溯到对自然策略梯度算法的改进和优化。它通过多种策略更新步骤和"clipping"技术,使得训练更加稳定和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值