强化学习:策略梯度算法

策略梯度的公式推导

​ 学习参数化表示的策略 (Parameterized policy), 输入环境状态 $ S $ 来选择动作 $a$ ,这里使用 $\theta \in \mathbb { R } ^ { d }$ 来表示策略的参数向量,因此策略函数表示为

$$\pi ( a | s , \boldsymbol { \theta } ) = \operatorname { P_r } \left{ A _ { t } = a | S _ { t } = s , \boldsymbol { \theta } _ { t } = \boldsymbol { \theta } \right} \tag{1} $$

其中时刻 $t$ ,环境状态为 $s$ ,参数为 $\theta$ ,输出动作 $a$ 的概率为 $P_r$

因此生成马尔可夫决策过程的一个轨迹(trajectory)$\tau = (\mathbf { s } _ { 1 } , \mathbf { a } _ { 1 } , \dots , \mathbf { s } _ { T } , \mathbf { a } _ { T })$ 的概率为

$$\underbrace { p _ { \theta } \left( \mathbf { s } _ { 1 } , \mathbf { a } _ { 1 } , \ldots , \mathbf { s } _ { T } , \mathbf { a } _ { T } \right) } _ { \pi _ { \theta } ( \tau ) } = p \left( \mathbf { s } _ { 1 } \right) \prod _ { t = 1 } ^ { T } \pi _ { \theta } \left( \mathbf { a } _ { t } | \mathbf { s } _ { t } \right) p \left( \mathbf { s } _ { t + 1 } | \mathbf { s } _ { t } , \mathbf { a } _ { t } \right) \tag{2} $$

更一般地,将策略 $\pi$ 下生成轨迹 $\tau$ 的概率表示为

$$P ( \tau | \pi ) = \rho _ { 1 } \left( s _ { 1 } \right) \prod _ { t = 0 } ^ { T } P \left( s _ { t + 1 } | s _ { t } , a _ { t } \right) \pi \left( a _ { t } | s _ { t } \right) \tag{3}$$

​ 策略梯度方法的目标就是找到一组最佳的参数 $\theta ^ { \star }$ 来表示策略函数使得累计奖励的期望最大,即

$$\theta ^ { \star } = \arg \max _ { \theta } E _ { \tau \sim p _ { \theta } ( \tau ) } \left[ \sum _ { t } r \left( \mathbf { s } _ { t } , \mathbf { a } _ { t } \right) \right] \tag{4}$$

​ 令累积奖励为 $R ( \tau ) = \sum _ { t = 1 } ^ { T } r \left( s _ { t } , a _ { t } \right)$ ,设定优化目标 $J\left( \pi _ { \theta } \right)$ 优化策略参数使得奖励的期望值最大

$$J\left( \pi _ { \theta } \right) = \underset { \tau \sim \pi _ { \theta } } { \mathrm { E } } [ R ( \tau ) ]\tag{5} $$

对 $J\left( \pi _ { \theta } \right)$ 求梯度可得策略梯度 $\nabla _ { \theta } J ( \theta ) $ ,公式 (6) 的推导过程请参见链接

$$\begin{aligned} \nabla _ { \theta } J ( \theta ) &= \int \nabla _ { \theta } \pi _ { \theta } ( \tau ) r ( \tau ) d \tau \&= \int \pi _ { \theta } ( \tau ) \nabla _ { \theta } \log \pi _ { \theta } ( \tau ) r ( \tau ) d \tau \ &= E _ { \tau \sim \pi _ { \theta } ( \tau ) } \left[ \nabla _ { \theta } \log \pi _ { \theta } ( \tau ) r ( \tau ) \right]\end{aligned} \tag{6}$$

将策略 (1) 两边取 log 对数,然后带入梯度表达式 (6) ,推导策略梯度的公式请参考下图

根据策略 $\pi _ { \theta }$ 生成 $N$ 条轨迹如图所示

利用上图 $N$ 条轨迹的经验平均对策略梯度进行逼近,有公式 (7) (8)

$$J ( \theta ) = E _ { \tau \sim p _ { \theta } ( \tau ) } \left[ \sum _ { t } r \left( \mathbf { s } _ { t } , \mathbf { a } _ { t } \right) \right] \approx \frac { 1 } { N } \sum _ { i } \sum _ { t } r \left( \mathbf { s } _ { i , t } , \mathbf { a } _ { i , t } \right) \tag{7}$$

$$\nabla _ { \theta } J ( \theta ) \approx \frac { 1 } { N } \sum _ { i = 1 } ^ { N } \left( \sum _ { t = 1 } ^ { T } \nabla _ { \theta } \log \pi _ { \theta } \left( \mathbf { a } _ { i , t } | \mathbf { s } _ { i , t } \right) \right) \left( \sum _ { t = 1 } ^ { T } r \left( \mathbf { s } _ { i , t } , \mathbf { a } _ { i , t } \right) \right) \tag{8}$$

其中 $N$ 为轨迹的数量,$T$ 为一条轨迹的长度,假设已知策略 $\pi _ { \theta }$ ,那么就可以计算出策略的梯度 $\nabla _ { \theta } \log \pi _ { \theta } ( a | s )$。另一方面,根据策略 $\pi _ { \theta }$ ,在仿真环境 $E$ 中生成 $N$ 条轨迹的数据,即可计算出 (8),根据梯度上升 对参数 $\theta$ 进行一步更新,如公式 (9)

$$ \theta \leftarrow \theta + \alpha \nabla _ { \theta } J ( \theta ) \tag{9} $$

总结下来就是:

  • 增加带来正激励的概率
  • 减少带来负激励的概率

策略梯度蒙特卡罗 REINFORCE 算法

根据公式 (7) (8) (9) 可得蒙特卡罗 REINFORCE 算法流程

公式

写成伪代码形式

伪代码

Example: 高斯策略梯度算法

策略属于概率分布,可以用神经网络来表示这种概率分布,输入状态 $s$ ,神经网络将 $s$ 映射成向量 $μ$,然后网络输出概率 $p ( a | \mu )$ 和动作采样值 $a \sim p ( a | \mu )$,令 $r$ 为 log 标准差。

$$ \mathcal { N } \left( \text { mean } = \text { NeuralNet } \left( s ; \left{ W _ { i } , b _ { i } \right} _ { i = 1 } ^ { L } \right) , stdev = exp(r) \right) $$

其中 $\mu = [ \text { mean, stdev } ]$

在连续的运动空间中,通常使用高斯策略,假设方差为 $\sigma ^ { 2 }$ ,策略是高斯的,输入状态 $s$ 输出动作 $a$ 服从 $a \sim \mathcal { N } \left( \mu ( s ) , \sigma ^ { 2 } \right)$,那么 log 策略梯度为

$$ \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) = \frac { ( a - \mu ( s ) ) \phi ( s ) } { \sigma ^ { 2 } } \tag{10}$$

在实际使用高斯策略时,用神经网络来表示,即令 $f _ { neural\ network } \left( \mathbf { s } _ { t } \right) = \mu ( s _ t )$,那么策略 $\pi _ \theta$

$$\log \pi _ { \theta } \left( \mathbf { a } _ { t } | \mathbf { s } _ { t } \right) = - \frac { 1 } { 2 } \left| f \left( \mathbf { s } _ { t } \right) - \mathbf { a } _ { t } \right| _ { \Sigma } ^ { 2 } + const \tag{11}$$

策略的梯度

$$\nabla _ { \theta } \log \pi _ { \theta } \left( \mathbf { a } _ { t } | \mathbf { s } _ { t } \right) = - \frac { 1 } { 2 } \Sigma ^ { - 1 } \left( f \left( \mathbf { s } _ { t } \right) - \mathbf { a } _ { t } \right) \frac { d f } { d \theta } \tag{12}$$

然后反向传播,更新网络参数

$$- \frac { 1 } { 2 } \Sigma ^ { - 1 } \left( f \left( \mathbf { s } _ { t } \right) - \mathbf { a } _ { t } \right) \left( \sum _ { t } r \left( \mathbf { s } _ { t } , \mathbf { a } _ { t } \right) \right) \tag{13}$$

参考链接