David Silver Reinforcement Learning
李宏毅教授强化学习
强化学习可以按照方法学习策略来划分成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},现在要对动作进行选择。
在强化学习中,环境与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θ(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:
观察最后的 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}) N1∑n=1N∑t=1TnRτ(n)∇logpθ(atn∣stn),如果在 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θ(atn∣stn),并更新模型的参数 θ \theta θ。
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
在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 x∼p的期望改写成 x ∼ q x\sim q x∼q的期望。
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散度也叫相对熵,可以用来衡量两个分布之间的差异性。
最直接的办法,就是对目标函数增加一个约束条件让他的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(θ,θ′)<δ
但是直接求解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(θ,θ′)
另外还有一种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' θ′的作用。