六 基于策略梯度的强化学习

目录

1.策略函数的引入

2.常见的策略目标函数以及梯度上升

2.1 Softmax策略

2.2 高斯(Gaussian)策略

3.Actor-Critic算法


1.策略函数的引入

我们在之前已经学习过基于价值学习的强化学习方法,这种方法的应用场景也是非常多,但是这些方法存在一定的缺陷,在连续问题当中,基于价值学习的方法并不能很好地解决连续行为空间的问题。此外,在描述状态空间中的某一个状态时,可能由于观测个数的局限,导致不同的状态却有了相同的特征描述,从而陷入循环,达不到最优解。因此,我们需要找到一种适用于连续行为空间中的求解方法,由此,我们引入了基于策略的学习,也就是策略\pi_{\theta}是一个关于参数\theta的函数:

\pi_{\theta}(s,a)=P(a|s,\theta)

这个函数确定了在给定的状态s,确定的参数\theta时,采取所有行动的可能性,而参数\theta则确定了这个函数的最终形式。从而我们的问题转化为求参数\theta使得策略\pi_{\theta}获得最大的奖励,我们可以借鉴之前值函数逼近的方法来求解参数\theta,设定一个目标函数J(\theta),通过相应的算法来求解最优参数\theta,使得目标函数最大。

2.常见的策略目标函数以及梯度上升

对于一个能够形成完整状态序列的交互环境来说,由于策略\pi_{\theta}决定了个人与环境之间的交互,从而可以设计一个初始状态价值,也就是初始状态收获的期望:

J(\theta)=v_{\pi_{\theta}}(s)=E_{\pi_{\theta}}[G_1]                 (1)

对于一些没有确定初始状态或结束状态的问题来说,我们可以采用平均价值或每一时间步长平均奖励的方法来构造目标函数:

J(\theta)=\sum_s d^{\pi_{\theta}}(s)v_{\pi_{\theta}}(s)                  (2)

J(\theta)=\sum_s d^{\pi_{\theta}}(s)\sum_a \pi_{\theta}(s,a)R_s^a    (3)

其中的d^{\pi_{\theta}}(s)是基于策略\pi_{\theta}生成的关于状态s的静态分布。当我们找到策略目标函数时,我们下一步需要考虑的就是如何更新参数\theta,使得目标函数值最大,在函数逼近的方法中,我们的目标是为了找到参数使得目标函数最小,采用的是梯度下降方法,在这里我们需要将目标函数值最大,从而我们需要采用梯度上升的方法。

对J(\theta)中的每一个\theta_i求偏导,从而得到梯度\triangledown J(\theta),参数\theta的更新增量\Delta \theta=\alpha \triangledown J(\theta),从而\theta更新为\theta=\theta+\Delta \theta

假设存在一个单步马尔可夫问题,也即每进行一次交互就会产生一个回报R_s^a,并且可以形成一个完整的状态序列,从而根据公式(1)我们可以得到目标函数为:J(\theta)=E_{\pi_{\theta}}[r]=\sum_s d^{\pi_{\theta}}(s)\sum_a \pi_{\theta}(s,a)R_s^a

对J(\theta)进行求导,得到

\triangledown J(\theta)=\sum_sd^{\pi_{\theta}}(s)\sum_a \triangledown\pi_{\theta}(s,a)R_s^a=\sum_sd^{\pi_{\theta}}(s)\sum_a\pi_{\theta}(s,a)\triangledown log_{\theta}\pi_{\theta}(s,a)R_s^a

            =E_{\pi_{\theta}}[\triangledown log_{\theta}\pi_{\theta}(s,a)r]

上式中的\triangledown log_{\theta}\pi_{\theta}(s,a)称为分值函数,对于任意可微策略函数和上面的三个目标函数,他们的梯度都可以写成分值函数的形式:

{\color{Red} \triangledown J(\theta)=E_{\pi_{\theta}}[\triangledown log_{\theta}\pi_{\theta}(s,a)q_{\pi}(s,a)]}     (4)

分值函数在基于策略的学习过程中非常重要,下面以两个线性特征组合策略来说明。

2.1 Softmax策略

他是通过状态和行为的特征\phi(s,a)与参数\theta的线性组合来表示一个行为发生的概率:

\pi_{\theta}\propto e^{\phi(s,a)^T\theta},它对应的分值函数为

\triangledown_\theta log \pi_{\theta}(s,a)=\phi(s,a)-E[\phi(s,\cdot })]     (5)

假设行为空间有(a1,a2,a3)三个行为,在状态s下,采取这三个行动可获得的回报分别是1,10,2,在当前状态s,参数为\theta时,计算得到他们的组合值\phi(s,a)^T\theta分别是3,5,8,他们的平均值为8,计算得到三个行动的分值分别是-5,-3,0,在当下会采用分值最大的行动a3,然而理想的情况应该是采取a2。因此在状态s下,我们需要更改参数\theta,使得a2行动的分值增加到最大分值,更新的方法就是梯度上升。

2.2 高斯(Gaussian)策略

这个策略常用于连续行为空间,在这个策略下选择的行动是从高斯分布N(\mu,\delta^2)中产生,它的均值\mu=\phi(s,a)^T\theta,高斯策略的分值函数为:

\triangledown_\theta log \pi_{\theta}(s,a)=\frac{(a-\mu(s))\phi(s,a)}{\delta^2}                     (6)

因为在连续行为空间的每一个行为特征,由策略产生的对应该行为特征的特征向量都是服从正态分布的,从该分布中采样得到行为分量,结合多个行为分量从而形成一个行动,不同的行动对应不同的奖励。我们需要更新参数\theta,使得采样得到的行为尽可能的分布在高回报的行为上。

通过上面的方法,可以很容易的想到基于蒙特卡罗的策略梯度方法,但是这种方法必须要一个完整的序列才可以进行更新,并且用奖励来替代行为价值,存在着比较高的变异性,导致最后的梯度方向并不是朝着正确的方向。

3.Actor-Critic算法

这个算法既包含了策略函数,又包含了价值函数,策略函数就是actor,它生成行为与环境进行交互;价值函数是critic,它负责评价策略函数的表现,并指导后续的动作,Critic的价值函数是基于策略\pi_{\theta}的一个近似函数:

q_w(s,a)\approx q_{\pi_{\theta}}(s,a),所以它是基于一个近似的策略梯度进行学习:

\triangledown J(\theta)\approx E[\triangledown_\theta log\pi_\theta(s,a)q_w(s,a)],\Delta \theta\approx \alpha \triangledown_\theta log\pi_\theta(s,a)q_w(s,a)

由于参数w也需要调整,因此可以结合近似函数中的求解参数的方法来对w进行求解。从而有了基于行为价值Q的Actor-Critic算法:

Algorithm QAC
Input:γ,α,β,w,θ
Output:Optimized w and θ
initialize θ,w,s
sample action a~Π(s,a)
repeat:
    perform a,then get state s' and receive reward R from environment
    sample action a'~Π(s',a')
    δ=R+γQ(s',a')-Q(s,a)
    θ=θ+α▼J(θ)
    w=w+βδΦ(s,a)
    a⬅a',s⬅s'
until num of repeat reach limit.
    

上面的算法也是一个近似的估计,从而可能会引起梯度方向的错误,但是如果满足两个条件,

①对近似函数的梯度等于分值函数

②参数w可以最小化近似函数与价值函数之间的距离,也即E_{\pi_{\theta}}[q_\pi(s,a)-q_w(s,a)^2]

那么,策略梯度是满足

\triangledown J(\theta)=E_{\pi_{\theta}}[\triangledown log\pi_\theta(s,a)q_w(s,a)]

毫不意外地,在我们的使用过程中,不可能在所有的情况下都满足这些条件。从而,提出了一个不基于行为只基于状态的函数---基准函数B(s),它满足:

E_\pi_\theta[\triangledown log\pi_\theta(s,a)B(s)]=0

当采用基准函数后,就可以减少变异性且不改变期望值,我们之前学过的状态值函数v_\pi_{\theta}(s)就是一个比较好的基准函数,我们引入优势函数A_{\pi_\theta}(s,a),优势函数为

A_{\pi_\theta}(s,a)=q_{\pi_\theta}(s,a)-v_{\pi_\theta}(s)                      (7)

现在,我们可以将策略函数的梯度表示为

\triangledown J(\theta)=E_{\pi_\theta}[\triangledown log \pi_\theta(s,a)A(s,a)]                (8)

优势函数表示的行为值函数与状态值函数之间的差值,也就是在该状态下采取行动与保持在原状态之间的回报差值,他考虑的是价值的增量,从而提高了算法的稳定性。然而,优势函数由行为值函数和状态值函数构成,计算优势函数时,是否需要采取两套近似函数分别来估算行为值函数和状态值函数呢?当然是不需要的,我们之前所学的TD误差就是优势函数的一个无偏估计,从而我们将梯度改写成

\triangledown J(\theta)=E_{\pi_\theta}[\triangledown log \pi_\theta(s,a)\delta_{\pi_\theta}]                      (9)

我们可以使用参数w的近似状态值函数来估计TD误差,也即

\delta_{\pi_\theta}\approx\delta_w=r+\gamma v_w(s')-v_w(s)

回顾我们之前的知识,关于状态值函数的估计,对于不同的学习方法有着不同的更新公式

对于MC:\Delta w=\alpha(G_t-v_w(s))\phi(s)

对于TD(0):\Delta w=\alpha(r+\gamma v(s')-v_w(s))\phi(s)

对于前向TD(\lambda):\Delta w=\alpha(G_t^\lambda-v_w(s))\phi(s)

对于后向TD(\lambda):\Delta w=\alpha \delta e_t,其中\delta=r_{t+1}+\gamma v_w(s_{t+1})-v_w(s_t),e_t=\gamma \lambda e_{t-1}+\phi(s_t)

类似的,我们可以得到策略\pi_\theta(s,a)的参数\theta的更新方法:

对于MC:\Delta \theta=\alpha(G_t-v_w(s_t))\triangledown log\pi_\theta(s_t,a_t)

对于TD(0):\Delta \theta = \alpha (r+\gamma v_w(s_{t+1}-v_w(s_t)))\triangledown_\theta log \pi_\theta(s_t,a_t)

对于前向TD(\lambda):\Delta \theta = \alpha(G_t^\lambda-v_w(s_t))\triangledown_\theta log \pi_\theta(s_t,a_t)

对于后向TD(\lambda):\Delta \theta = \alpha \delta e_t,其中\delta=r_{t+1}+\gamma v_w(s_{t+1})-v_w(s_t),e_t=\gamma \lambda e_{t-1}+\triangledown log \pi_\theta(s_t,a_t)

得到参数增量以后,再使用梯度上升的方法,从而得到最好的策略\pi_\theta

  

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值