Datawhale – Task02:策略梯度算法

目录

一、概要

二、策略函数

1. 离散动作的策略函数——softmax函数

2. 连续动作的策略函数

三、策略目标函数

四、策略梯度算法

1. 基于轨迹的梯度推导

2. 基于级联的梯度推导

五、REINFORCE算法/Mento Carlo策略梯度算法

六、策略梯度法的评价


        本文为Datawhale《深度强化学习基础与实践(二)》学习总结第二期。

        以下为本文写作时查阅的相关资料:

  1. Datawhale的JoyRL Book:https://github.com/datawhalechina/joyrl-book
  2. 相关数学原理推导的证明:【强化学习】策略梯度方法-策略近似_哔哩哔哩_bilibili
  3. Reinforcement Learning for Sequential Decision and Optimal Control | SpringerLink
  4. Reinforcement Learning: An Introduction

一、概要

        上一篇所提到的DQN,以及更为基础的Mento Carlo算法、时间差分算法、Q-Learning算法等,依赖于贝尔曼方程对价值函数进行建模和估计,再计算最优策略,我们将其称之为基于价值(valued-based)的算法,资料3中也称为间接性强化学习(Indirect RL)。

        本篇将开始介绍策略梯度( policy-based )算法,或者说直接式强化学习(Direct RL),这类算法直接对策略本身进行近似优化。具体来说,我们将策略描述为含参数θ的连续函数,其输入为某个状态,输出为对应的动作概率分布pi_{	heta}(a | s),这个概率分布不再是(近)确定性策略,而是随机性策略。所要做的便是通过优化预定义的目标函数来搜索最优策略。

二、策略函数

1. 离散动作的策略函数——softmax函数

        假设状态-动作对数值偏好为h(s, a, 	heta),一般采用softmax函数将其转换为动作概率分布,即

$pi_{	heta}(s, a) = dfrac{e^{h(s, a, 	heta)}}{sumlimits_{b} e^{h(s, a, 	heta)}}$

2. 连续动作的策略函数

        对于连续动作空间,通常策略对应的动作采用正态概率密度参数化,即

$pi_{	heta}(a|s) = dfrac{1}{sqrt{2 pi} sigma(s, 	heta)} expleft{- dfrac{(a - mu(s, 	heta))^{2}}{2sigma^{2}(s, 	heta)}
ight}$

其中,mu: S 	imes mathbb{R}^{d'} 	o mathbb{R}sigma: S 	imes mathbb{R}^{d'} 	o mathbb{R}^{+}为函数近似。

        一般来说,将策略的参数向量分成两个部分,即	heta = [	heta_{mu}, 	heta_{sigma}]^{mathrm{T}}。例如,均值可以近似为一个线性函数,而考虑到标准差非负,采用线性函数的指数近似,即

$ mu(s, 	heta) = mu(s, 	heta_{mu}) = 	heta_{mu}^{mathrm{T}} phi_{mu}(s), qquad sigma(s, 	heta) = sigma(s, 	heta_{sigma}) = exp(	heta_{sigma}^{mathrm{T}} phi_{sigma}(s)) $

三、策略目标函数

1. 稳态分布

        我们使用马尔科夫链来说明稳态分布。马尔科夫链的稳态分布是指这样一个分布向量d(s) = [d(s_{1}), cdots, d(s_{n})]^{mathrm{T}},其满足

d(s) = P d(s)

其中,P为状态转移矩阵。这意味着,若马尔科夫链在某个时刻达到稳态分布,则其自此以后将保持为稳态分布。我们也可以用写出稳态分布的分量表达式

$d(s_{i}) = sum_{s in S} d(s_{i}) p_{ij}$

        对于马尔可夫决策过程来说,其状态转移除了与当前状态有关,还与当前动作有关,故其稳态分布的每个分量i应满足

$d(s_{i}) = sum_{s in S} d(s) sum_{a in A} pi(a|s) p(s_{i} | s, a)$

2. 总回报目标函数

        后文主要采用此目标函数说明。

$J(	heta) = Eleft[sum_{	au=t}^{T} gamma^{	au - t} r_{	au}
ight]$

3. 平均回报目标函数

$J(	heta) = lim_{N 	o infty} dfrac{1}{N} Eleft[ sum_{	au = t}^{t + N - 1} r_{	au} 
ight]$

四、策略梯度算法

        Datawhale提供的资料里首先给出了基于轨迹的推导,而后给出了基于稳态分布的另一种推导方式。在参考资料3中,前者称为基于轨迹概念的梯度推导(Gradient Derivation from Trajectory Concept),后者称为基于级联概念的梯度推导(Gradient Derivation from Cascading Concept)。

1. 基于轨迹的梯度推导

        相关内容可见参考资料1、3。

        基于轨迹的目标函数可以表示为

$J(	heta) = E_{mathcal{T} sim 
ho_{	heta}}[R(mathcal{T})] = sum_{mathcal{T}} 
ho_{	heta}(mathcal{T}) R(mathcal{T})$

其中,
ho_{	heta}(mathcal{T})为轨迹mathcal{T} = {s_{t}, a_{t}, cdots, s_{T-1}, a_{T-1}, s_{T}}的生成的概率,其值为

$ egin{aligned} 
ho_{	heta}(mathcal{T}) &= d(s_{t}) pi_{	heta}(a_{t} | s_{t}) p(s_{t+1} | s_{t}, a_{t}) pi_{	heta}(a_{t+1} | s_{t+1}) p(s_{t+2} | s_{t+1}, a_{t+1}) cdots \ &= d(s_{t}) prod_{	au = t}^{T-1} pi_{	heta}(a_{	au} | s_{	au}) p(s_{	au + 1} | s_{	au}, a_{	au}) end{aligned}$

       简单期间,忽略折扣因子gamma,则轨迹mathcal{T}的累积奖励为

$R(mathcal{T}) = sum_{	au = t}^{T-1} r_{	au}$

        现在我们要对目标函数关于参数	heta求导,含参数	heta的仅有
ho_{	heta}(mathcal{T}),故只需考虑
ho_{	heta}(mathcal{T})关于参数	heta的梯度。采用对数微分技巧,即

$
abla_{	heta} 
ho_{	heta}(mathcal{T}) = 
ho_{	heta}(mathcal{T}) dfrac{
abla_{	heta} 
ho_{	heta}(mathcal{T})}{
ho_{	heta}(mathcal{T})} = 
ho_{	heta}(mathcal{T}) 
abla_{	heta} log 
ho_{	heta}(mathcal{T})$

        由此,问题从求
ho_{	heta}(mathcal{T})的梯度变成了求log 
ho_{	heta}(mathcal{T})的梯度,将
ho_{	heta}(mathcal{T})展开,即得

$ egin{aligned} 
abla_{	heta} log 
ho_{	heta}(mathcal{T}) &= 
abla_{	heta} log d(s_{t}) + sum_{	au=t}^{T-1} (
abla_{	heta} log pi_{	heta}(a_{	au} | s_{	au}) + 
abla_{	heta} log p(s_{	au + 1} | s_{	au}, a_{	au})) \ &= sum_{	au=t}^{T-1} 
abla_{	heta} log pi_{	heta}(a_{	au} | s_{	au}) end{aligned} $

        根据上面的分析,我们可以很容易地求出目标函数的梯度,即

$ egin{aligned} 
abla_{	heta} J(	heta) &= 
abla_{	heta} E_{mathcal{T} sim 
ho_{	heta}}[R(mathcal{T})] = 
abla_{	heta} sum_{	au} 
ho_{	heta}(mathcal{T}) R(mathcal{T}) = sum_{mathcal{T}} 
ho_{	heta}(mathcal{T}) 
abla_{	heta} log 
ho_{	heta}(mathcal{T}) R(mathcal{T}) \ &= E_{mathcal{T} sim 
ho_{	heta}}[
abla_{	heta} log 
ho_{	heta}(mathcal{T}) R(mathcal{T})] = E_{mathcal{T} sim 
ho_{	heta}}left[ sum_{	au=t}^{T-1} 
abla_{	heta} log pi_{	heta}(a_{	au} | s_{	au}) R(mathcal{T}) 
ight] \ &= E_{mathcal{T} sim 
ho_{	heta}}left[ sum_{	au=t}^{T-1} 
abla_{	heta} log pi_{	heta}(a_{	au} | s_{	au}) sum_{	au=t}^{T-1} r_{	au} 
ight] end{aligned} $

2. 基于级联的梯度推导

        基于级联的目标函数可以表示为

$J(	heta) = sum_{s_{t}} d(s_{t}) V_{pi_{	heta}}(s_{t})$

        其中,d表示平稳分布。具体推导过程略。相关内容可见参考资料2、3、4。

        由此可得策略梯度定理

$ egin{aligned} 
abla_{	heta} J(	heta) &propto sum_{s} d(s) sum_{a} Q_{pi_{	heta}}(s, a)
abla_{	heta} pi_{	heta}(a | s) ) \ &= E_{s sim d}[E_{a sim pi_{	heta}} [Q_{pi_{	heta}}(s, a) 
abla_{	heta} log pi_{	heta}(a|s) ]] \ &= E_{pi_{	heta}}[Q_{pi_{	heta}}(s, a) 
abla_{	heta} log pi_{	heta}(a|s) ] end{aligned}$

五、REINFORCE算法/Mento Carlo策略梯度算法

        采用Mento Carlo方法对轨迹采样,并使用梯度上升法更新梯度。具体来说,主要有两个步骤:在第一步中,环境从初始状态-动作对开始,产生多个轨迹,将多个轨迹的回报平均作为真实动作值函数的估计值;在第二步中,利用不同状态-动作对的所有可用梯度来计算策略梯度。

        以下为参考资料3给出的伪代码。

六、策略梯度法的评价

1. 值函数近似法和策略梯度法的区别

  • 值函数近似法适用于基于价值的方法,策略梯度法适用于基于策略的方法
  • 值函数近似法仅支持离散动作空间,而策略梯度法可以支持连续动作空间

2. 基于价值和基于策略的算法各有什么优缺点?

基于价值:

  • 优点
    • 简单易用,只需要学习值函数,收敛性往往也更好
  • 缺点
    • 受限于离散动作
    • 当存在多个等价最优策略时,基于价值的方法可能会不停切换

基于策略:

  • 优点
    • 直接优化策略,所以可能容易找到更好的策略
    • 采用随机性策略,适用性更广,如在纸牌游戏、战争中虚张声势
  • 缺点
    • 高方差
    • 收敛缓慢,并且可能收敛到局部最优