参考学习课程
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等算法。
比如,在一个游戏里,目前处于状态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的奖励是
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:
- 由于 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θ(τ),并求和取平均
- 将 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θ(atn∣stn)
观察最后的 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
θ。
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)的期望,其中
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'
θ′的作用。