Policy Gradient

一、介绍

回顾以下以前 value-based的方法:在value-based方法中,他们都是去学习一个动作的价值函数,然后根据这个动作的价值函数作出下一步选择。以至于这个方法高度依赖动作价值函数,如果没有动作价值函数,也就不知道如何为下一步作出抉择。
在本文中,我们提出一种新的想法来解决Reinforcement Learning 中的决策问题。即直接去训练这么一个策略,它能直接给出下一步动作是什么。当然,这个策略肯定是带参数的。我们最直接的目标就是优化策略的参数,使之能够很好的做出准确的决策。换句话说,以前 value-based方法是找出每一个状态下的每一个动作的价值函数,而 Policy Gradient 的方法是找出每一个状态下该采取哪个动作的函数。前者是 状态动作到价值的映射,后者是状态到动作的映射。显然后者更简单粗暴点。后者这种方法就叫做policy-based.

为了表示出Policy Gradient中的策略,我们记 θ \theta θ 为策略的参数向量。因此策略可以用如下概率表示:
π ( a ∣ s , θ ) = P r { A t = a ∣ S s , θ t = θ } \pi(a|s, \theta) = Pr\{A_t = a | S_s, \theta_t = \theta\} π(as,θ)=Pr{At=aSs,θt=θ}

image.png

即在时间 t 时,在状态 s 下选取某一个动作的概率。
实际上,我们定义了一个某一个状态下关于动作的概率分布。有了这个概率分布,决策时在这个分布中采样就可以了。

当然policy gradient 也可以处理连续空间问题,如下图所示,但本文主要以离散动作空间做例子:
image.png

二、优化策略

OK,那问题来了,策略 π ( a ∣ s , θ ) \pi(a|s, \theta) π(as,θ) 有了,该怎么优化这个策略呢?如果能找到最优的策略,那不管环境给你怎样的状态,我们都能从策略中得到当前状态下关于动作的分布,最后采样结果就是抉择的结果。但是前提是这个策略是靠谱的,所以我们下面研究如何优化这个策略。

这里要提出一个优化方法:梯度下降

首先,我们要有一个衡量策略结果好坏的函数,把它叫做目标函数,记 J ( θ ) J(\theta) J(θ),其中 θ \theta θ是参数向量。这个目标函数值越大,说明我们的策略越好,反之越差。所以实际上问题就转化为最大化目标函数。而最大化该函数的方法就是用梯度下降。
应用梯度下降方法求解最大化函数问题,简单地讲就是求偏导,最后的参数更新有如下形式:
θ t + 1 = θ t + α ∇ J ( θ t ) \theta_{t+1} = \theta_t + \alpha \nabla J(\theta_t) θt+1=θt+αJ(θt)

这个一个非常一般的一种形式,不同的目标函数催生出不同的算法。但是,只要可以表示成上面这种形式的表达式,都属于 Policy Gradient 方法。

那么,该怎么计算 ∇ J ( θ ) \nabla J(\theta) J(θ) 以及 π ( a ∣ s , θ ) = P r { A t = a ∣ S s , θ t = θ } \pi(a|s, \theta) = Pr\{A_t = a | S_s, \theta_t = \theta\} π(as,θ)=Pr{At=aSs,θt=θ}呢?
实际上,这两个的计算方法都依赖于其本身的定义。例如:对于离散动作空间下,策略 π \pi π可以用 soft-max 分布表示
π ( a ∣ s , θ ) = e h ( s , a , θ ) ∑ b e h ( s , b , θ ) \pi(a|s, \theta) = \frac{e^{h(s, a, \theta)}}{\sum_b e^{h(s, b, \theta)}} π(as,θ)=beh(s,b,θ)eh(s,a,θ)
其中 h ( s , a , θ ) h(s, a, \theta) h(s,a,θ)是状态-动作对的参数化表示,可以用一个神经网络去近似它:
h ( s , a , θ ) = θ T x ( s , a ) h(s,a, \theta) = \theta^T x(s,a) h(s,a,θ)=θTx(s,a)
其中 θ \theta θ 是网络中去权重的向量, x ( s , a ) x(s,a) x(s,a)表示状态和动作的特征。

至于如何计算 ∇ J ( θ ) \nabla J(\theta) J(θ)? 计算前必须先定义好 J ( θ ) J(\theta) J(θ)。假设环境能产生一段完整的 episode, 那么我们可以用初始状态的价值去表示目标函数:
J ( θ ) = v π θ ( s 0 ) J(\theta) = v_{\pi_\theta}(s_0) J(θ)=vπθ(s0)

J ( θ ) = v π θ ( s 0 ) J(\theta) = v_{\pi_\theta}(s_0) J(θ)=vπθ(s0) 求偏导,其偏导结果有定理Policy Gradient Theorem给出
image.png

有了上面的求导结果,就可以导出第一个 policy-gradient 算法了:Monte Carlo Policy Gradient
从上面公式看, ∇ J ( θ ) \nabla J(\theta) J(θ) 结果与 ∑ μ ( s ) ∑ a ∇ π ( a ∣ s ) q π ( s , a ) \sum \mu (s) \sum_a \nabla \pi (a|s) q_\pi (s,a) μ(s)aπ(as)qπ(s,a) 成正比,进一步写成:
∇ J ( θ ) ∝ ∑ μ ( s ) ∑ a ∇ π ( a ∣ s ) q π ( s , a ) \nabla J(\theta) \propto \sum \mu (s) \sum_a \nabla \pi (a|s) q_\pi (s,a) J(θ)μ(s)aπ(as)qπ(s,a)
= E π [ ∑ a q π ( S t , a ) ∇ π ( a ∣ S t , θ ) ] = E_\pi[ \sum_a q_\pi (S_t , a) \nabla \pi (a|S_t, \theta)] =Eπ[aqπ(St,a)π(aSt,θ)]
实际上我们可以把 ∇ J ( θ ) \nabla J(\theta) J(θ) ∑ μ ( s ) ∑ a ∇ π ( a ∣ s ) q π ( s , a ) \sum \mu (s) \sum_a \nabla \pi (a|s) q_\pi (s,a) μ(s)aπ(as)qπ(s,a) 之间画上等号,因为我们在更新参数 θ \theta θ 的时候会乘上一个学习数率 α \alpha α,这个参数可以消去这两个项之间的比例系数。所以,放心画上等号后:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \nabla J(\thet…

现在就能导出 monte carlo 的 policy gradient 的更新公式了:
θ ( t + 1 ) = θ t + α G t ∇ π ( A t ∣ S t , θ ) \theta_(t+1) = \theta_t + \alpha G_t \nabla \pi(A_t | S_t , \theta) θ(t+1)=θt+αGtπ(AtSt,θ)

三、算法框架

image.png

  1. 初始化状态 s 0 s_0 s0
  2. 将状态 s 0 s_0 s0 传入 RL 算法,得到各个动作的概率
  3. 根据概率分布采样,得到下一步动作 a 0 a_0 a0
  4. 环境对 Agent 作出的动作 a 0 a_0 a0 给予相应的奖励 r 1 r_1 r1, Agent 到达下一个状态 s 1 s_1 s1

经过上面步骤后,得到数据集: { s 0 , a 0 , r 1 , s 1 } \{s_0, a_0, r_1, s_1\} {s0,a0,r1,s1}, 如果 a 0 a_0 a0 不是终止动作,上面的步骤还必须继续进行,直到遇到终止动作,一段 episode 就说是结束了。

最后收集的数据: { s 0 , a 0 , r 1 , s 1 , a 1 , r 2 , s 2 , . . . . . . , s T − 1 , a T − 1 , r T , s T } \{ s_0, a_0, r_1, s_1, a_1, r_2, s_2 , ... ..., s_{T-1}, a_{T-1}, r_T, s_T \} {s0,a0,r1,s1,a1,r2,s2,......,sT1,aT1,rT,sT}

有了数据后才进行算法的更新。

image.png

这是 sutton 的《Reinforcement learning 》书中所叙的算法。下面再贴上 Devil 的算法:
image.png

这两个算法差别不大,可以说基本差不多。注意 Devil 版本的算法中的更新公式中有一项是 v t v_t vt,这个 v t v_t vt实际上还是用 G t G_t Gt去估计。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值