参考学习课程
David Silver Reinforcement Learning
李宏毅教授强化学习
文章目录
参考学习课程Value-based 与 Policy-basedPolicy Gradient (PG)基本原理PG的两个小技巧Proximal Policy Optimization (PPO)PG的不足On-policy 和 Off-policy基本原理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等算法。
比如,在一个游戏里,目前处于状态s,动作空间A为{a1, a2, a3},现在要对动作进行选择。
Value-based:比较a1, a2, a3三个个动作的期待值(Q-value),选取Q最大的那个作为本次选择的动作。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的奖励是r1=0r_{1} = 0r1=0,然后机器又观察画面,做出了fire的action,然后观察画面,发现有外星人被击落,然后获得reward r2=5r_{2} = 5r2=5。
经过很多轮(s,a,r)(s, a, r)(s,a,r),游戏结束了。从游戏开始到游戏结束被称为一个episode,将每一个episode的 reward 相加就能得到Total reward: R=∑t=1TrtR = \sum_{t=1}^{T}r_{t}R=∑t=1Trt 。我们希望通过训练更好的acrtor使得R可以尽可能的大。
把每一个episode的所有s和a的序列放在一起,就是Trajectory
通过以上可得知 π\piπ在参数为θ\thetaθ情况下时τ\tauτ发生的概率为:
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)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θ(a1∣s1)p(s2∣s1,a1)pθ(a2∣s2)p(s3∣s2,a2)...=p(s1)∏t=1Tpθ(at∣st)p(st+1∣st,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:
由于Eτ∼pθ(τ)[Rτpθ(τ)∇logpθ(τ)]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θ(τ)∇logpθ(τ)R_{\tau }p_{\theta}(\tau)\nabla logp_{\theta}(\tau)Rτpθ(τ)∇logpθ(τ),并求和取平均将Rτ(n)∇logpθ(τn)R_{\tau^(n) }\nabla logp_{\theta}(\tau^{n})Rτ(n)∇logpθ(τn)写为∑t=1TnRτ(n)∇logpθ(atn∣stn)\sum_{t=1}^{T^{n}}R_{\tau^(n) }\nabla logp_{\theta}(a_{t}^{n}|s_{t}^{n})∑t=1TnRτ(n)∇logpθ(atn∣stn)
观察最后的1N∑n=1N∑t=1TnRτ(n)∇logpθ(atn∣stn)\frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T^{n}}R_{\tau^(n) }\nabla logp_{\theta}(a_{t}^{n}|s_{t}^{n})N1∑n=1N∑t=1TnRτ(n)∇logpθ(atn∣stn),如果在stns_{t}^{n}stn下执行atna_{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(τ) ),然后将这些数据送入训练过程中计算∇logpθ(atn∣stn)\nabla logp_{\theta}(a_{t}^{n}|s_{t}^{n})∇logpθ(atn∣stn),并更新模型的参数θ\thetaθ。
PG的两个小技巧
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(τ)的期望接近的值。
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的不足
采样效率低PG采用MC采样方式,每次基于当前的策略对环境采样一个episode数据,然后基于这些数据更新策略,这个过程中数据仅仅被利用了一次就扔掉了,相比于DQN等离线学习算法,PG这种更新方式是对数据的极大浪费。训练不稳定
在强化学习中当前的动作选择会影响到将来的情况,不像监督学习的训练样本是相互独立的,如果某一批次的样本不好导致模型训练的很差,只要其他的训练数据没问题最终也能得到一个好的结果。但是在PG中,对于某次策略更新的太大或者太小,就会得到一个不好的Policy,一个不好的和环境交互就会得到一个不好的数据,用这些不好的数据更新的策略很大概率也是不好的。所以训练时候会有下图这种情况,训练过程中会忽然进入一个很差的状态。
On-policy 和 Off-policy
On-Policy方式指的是用于学习的agent与观察环境的agent是同一个,所以参数θ\thetaθ始终保持一致。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)的期望,其中xxx服从p(x)p(x)p(x)分布,可以通过变换,xxx可以从另外一个分布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∼px\sim px∼p的期望改写成x∼qx\sim qx∼q的期望。
PG中策略更新梯度为:∇Rθ=Eτ∼pθ(τ)[Rτpθ(τ)∇logpθ(τ)]\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θ(τ)∇logpθ(τ)]\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θ(τ)]
如果采样的分布ppp与真实的分布qqq差得很多,那么肯定会导致两个期望不一致。
先看等式左半边,在ppp里面取xxx,那么ppp的左半边被取的机率很高,然后左半边又都是正的,然后代入f(x)f(x)f(x),但是f(x)f(x)f(x)的左边都是负的,所以整个期望是负的。然后再看等式右边,在qqq里面取,qqq在右边被取得几率大,然后qqq大于ppp,所以pq\frac{p}{q}qp小于1,然后f(x)f(x)f(x)又是正的,所以为正,但事实果真如此吗?如果我现在sample到了一个左边的点,f(x)f(x)f(x)就为负了,而且pq>1\frac{p}{q}>1qp>1,这将影响整个右边的结果,可能为负,所以只有在取更多样本时,下面这个式子才越准确。
同时,最后方差的式子是不一样的,多了红框圈出的部分,也说明p与q不能差距太大。
我们希望能想办法约束θ\thetaθ与θ′\theta'θ′的差距不要过大,使用KL散度也叫相对熵,可以用来衡量两个分布之间的差异性。
最直接的办法,就是对目标函数增加一个约束条件让他的KL散度小于δ\deltaδ。也就Trust Region Policy Optimization (TRPO)
∇Rθ=Eτ∼pθ′(τ)[pθ(τ)pθ′(τ)Aθ′(s,a)]KL(θ,θ′)<δ\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(θ,θ′)<δ
但是直接求解TRPO这种带约束的问题是十分复杂的,PPO1将KL散度作为惩罚项,更加容易求解。
∇Rθ=Eτ∼pθ′(τ)[pθ(τ)pθ′(τ)Aθ′(s,a)]−βKL(θ,θ′)=∑(st,at)pθ(st,at))pθ′(st,at))Aθ′(st,at)−βKL(θ,θ′)\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(θ,θ′)
另外还有一种PPO2算法效果比PPO要好一些
∇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))\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'θ′的作用。