强化学习:策略梯度算法

策略梯度的公式推导

​ 学习参数化表示的策略 (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)\) 求梯度可得策略梯度 $_ { } J ( ) $ ,公式 (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}\]

参考链接