强化学习中的策略梯度算法及近端策略优化算法(DataWhale组队学习笔记)

  • Post author:
  • Post category:其他


我们首先总结一下之前学习到的知识:

强化学习术语 英文词汇及公式、符号表示 简单解释
智能体 agent 具有智能的实体

演员

actor 负责与环境交互
(环境)状态 (environment)state:
s_t

t
时刻,环境所达到的状态
策略

policy:
\pi

\pi(a|s)=p(a_t=a|s_t=s)

智能体根据状态产生的策略


t
时刻,状态
s
的条件下

根据概率
\pi(a|s)
选择动作
a

动作 action:
a_t

t
时刻,根据策略决定的下一步动作
奖励 reward:
r_t

t
时刻,根据做出的动作获得的奖励
模型 model 智能体对环境的状态的理解
状态转移函数 p(s_{t+1}=s'|s_t = s)
t
时刻到
t+1
时刻的状态转移概率
马尔可夫性质 p(s_{t+1}|s_{0:t})=p(s_{t+1}|s_t) 未来状态的条件概率仅依赖于当前状态
折扣回报

return:

G_t=\sum_{i\in\{0,\dots,T-t-1\}}\gamma^ir_{i+t+1}

具有折扣的奖励的逐步叠加
折扣因子 \gamma 对未来奖励的折扣(超参数)
状态价值函数 V_\pi(s)=\mathbb{E}_\pi[G_t|s_t=s] 基于策略的回报的期望
动作价值函数 Q_\pi(s,a)=\mathbb{E}_\pi[G_t|s_t=s,a_t=a] 状态
s
下采取动作
a
,可能得到的回报的期望

贝尔曼期望方程

V(s)=R(s)+\gamma\sum_{s'\in{S}}p(s'|s)V(s') 表示了当前状态与未来状态之间的关系
策略迭代

policy improvement

\pi_{i+1}(s)=\mathop{\arg\max}\limits_{a}Q_{\pi_i}(s,a)

通过最大化价值函数选取最优策略,来进行策略改进
价值迭代

value iteration

V(s)\leftarrow\mathop{\max}\limits_{a\in{A}}\left(R(s,a)+\gamma\sum_{s'\in{S}}p(s'|s,a)V(s')\right)

通过价值迭代得到最优
V^*(s)
,最后进行策略提取
动态规划 Dynamic Programming 针对有模型问题,对环境完全已知的情况下,进行的强化学习算法
蒙特卡洛算法 Monte Carlo Method 针对免模型问题,根据特定概率密度函数进行抽样,从而估计回报函数
时序差分方法

Temporal Difference

V(s_t){\leftarrow}V(s_t)+\alpha(r_{t+1}+{\gamma}V(s_{t+1})-V(s_t))

针对免模型问题,通过自举的方法在线估计回报,从而更新
V(s_t)
Sarsa Q(s_t,a_t){\leftarrow}Q(s_t,a_t)+\alpha[r_{t+1}+{\gamma}Q(s_{t+1},a_{t+1})-Q(s_t,a_t)] 同策略时序差分控制,单(n)步更新价值和策略
\pi
,使用更新后的策略
\pi
与环境交互
Q学习

\pi(s_{t+1})=\mathop{\arg\max}\limits_{a'}Q(s_{t+1},a')

Q(s_t,a_t){\leftarrow}Q(s_t,a_t)+\alpha[r_{t+1}+{\gamma}\mathop{\max}\limits_{a}Q(s_{t+1},a)-Q(s_t,a_t)]

异策略时序差分控制,

目标策略用来学习最优策略,

行为策略采用
\epsilon-
贪心算法来与环境交互



策略梯度算法

强化学习中的策略梯度算法,简单来说,就是最大化期望回报函数。

下面我们进行策略梯度的公式推导:

在一场游戏里面,环境是一个函数,演员在看到游戏画面以后,会做出动作,我们把环境输出的
s
与演员输出的动作
a
全部组合起来,就是一个轨迹:

\tau=\{s_1,a_1,s_2,a_2,\cdots,s_t,a_t\}

给定演员的参数
\theta
,轨迹
\tau
发生的概率记为
p_\theta(\tau)
,所对应的总奖励函数记为
R(\tau)

p_\theta(\tau)=p(s_1)\prod _{t=1}^Tp_\theta(a_t|s_t)p(s_{t+1}|s_t,a_t)

R(\tau)=\sum_{i=1}^Tr_i

给定演员参数
\theta
,奖励
r_\theta
的期望为:

\bar{R}_\theta=\sum_{\tau}R(\tau)p_\theta(\tau)=\mathbb{E}_{\tau{\sim}p_\theta(\tau)}[R(\tau)]

策略梯度的原理就是通过梯度上升来最大化期望奖励,从而得到最优策略。

我们对
\bar{R}_\theta
做梯度运算:

\begin{align*}\nabla\bar{R}_\theta&=\sum_{\tau}R(\tau){\nabla}p_\theta(\tau)\\&=\sum_{\tau}R(\tau)p_\theta(\tau)\frac{​{\nabla}p_\theta(\tau)}{p_\theta(\tau)}\\&=\sum_{\tau}R(\tau)p_\theta(\tau){\nabla}\log{p_\theta(\tau)}\\&=\mathbb{E}_{\tau{\sim}p_\theta(\tau)}[R(\tau){\nabla}\log{p_\theta(\tau)}]\end{align*}

通过采样的方式计算上述梯度:

\begin{align*}\mathbb{E}_{\tau{\sim}p_\theta(\tau)}[R(\tau){\nabla}\log{p_\theta(\tau)}]&\approx\frac{1}{N}\sum_{n=1}^NR(\tau_n){\nabla}\log{p_\theta(\tau_n)}\\&=\frac{1}{N}\sum_{n=1}^N\sum_{t=1}^{T_n}R(\tau_n){\nabla}\log{p_\theta(a_{n,t}|s_{n,t})}\end{align*}

通过梯度上升更新参数
\theta

\theta\leftarrow\theta+\eta{\nabla}\bar{R}_\theta

重复采样并更新参数,达到局部最优或全局最优。



策略梯度的常用技巧:

1、添加基线(baseline)

在梯度上升的展开公式中,我们对
\log{p_\theta(a_{n,t}|s_{n,t})}
求梯度,
R(\tau_n)
相当于这一项的权重,由于其总是一个正数,因此会使得所有 “动作状态对” 的概率都在提高。

如果采样的方式不好(例如总是采样到较差的 “动作状态对” ),反而会使得较差的动作的概率一直提升。

我们通过将均值归0化,来避免这个问题,使较好的动作权重为正,较差的动作权重为负:

\nabla\bar{R}_\theta\approx\frac{1}{N}\sum_{n=1}^N\sum_{t=1}^{T_n}(R(\tau_n)-b){\nabla}\log{p_\theta(a_{n,t}|s_{n,t})}

b\approx\mathbb{E}[R(\tau)]

训练时,我们不断记录轨迹
\tau
,计算
R(\tau)
的均值来更新参数
b
,从而达到之前的目的。

2、对动作进行加权

每一个轨迹
\tau
下,我们实际上想要着眼于每个动作
a_t
本身能获得的分数,而权重
R(\tau_n)
是所有奖励之和,我们通过去掉
t
时刻前的奖励,并对未来奖励进行折扣,从而着眼于当下的奖励:

\nabla\bar{R}_\theta\approx\frac{1}{N}\sum_{n=1}^N\sum_{t=1}^{T_n}(\sum_{t'=t}^{T_n}\gamma^{t'-t}r_{t'}^n-b){\nabla}\log{p_\theta(a_{n,t}|s_{n,t})}



同策略学习和异策略学习

需要学习的agent和与环境互动的agent相同时,称为on-policy(同策略),不是同一个agent时,称为off-policy(异策略)。在运用梯度上升算法求解最优期望奖励时,训练一个周期后,我们需要更新参数,然后需要重新训练、收集数据,数据的使用率很低,并且时间消耗很大。

因此考虑进行异策略学习,用actor与环境交互,获得的数据可以重复使用来训练agent,从而提高训练的效率。


重要性采样(Importance Sampling)

为了使用off-policy的方法,我们的运用actor(携带超参数
\theta'
)与环境交互,来训练agent(携带超参数
\theta
)。

由于
\theta
在训练前是未知的,我们不能运用其进行采样。我们通过actor与环境交互,运用超参数
\theta'
采样出轨迹
\pi
,再利用下述变换来保证梯度上升算法:

\mathbb{E}_{x{\sim}p}[f(x)]=\mathbb{E}_{x{\sim}q}[f(x)\frac{p(x)}{q(x)}]


近端策略优化(PPO)算法

在off-policy的训练过程中,超参数
\theta'
是我们事先选取的,如果它采样出的数据和
\theta
采样出的差距较大,那么就很难得到理想的结果。极端情况下
\theta

\theta'
采样到完全不同的数据区域,这样就会得到偏差很大的结果。利用足够多的抽样数据,理论上可以解决这个问题,但实际操作情况下效率不高。

因此我们利用PPO算法,引入
\theta

\theta'
的KL散度
KL(\theta,\theta')
来约束这两种采样的差异性。

注意,在PPO算法中,与环境交互的策略
\theta'
在一个小batch中是不变的,这个
\theta'
用的是旧的策略
\theta_{old}
,在更新多次
\theta
后才会更新这个
\theta'
,采样的过程中策略没有变化,学习的策略和采样的策略是同一个策略,因此

PPO是on-policy的算法

我们用
J^{\theta'}(\theta)
来表示我们需要训练的重要性采样期望函数:

J^{\theta'}(\theta)=\mathbb{E}_{(s_t,a_t)\sim\pi_{\theta'}}[\frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)}A^{\theta'}(s_t,a_t)]

通过迭代更新
\theta^k
,来优化采样差异:

J^{\theta^k}_{PPO}(\theta)=J^{\theta^k}(\theta)-{\beta}KL(\theta,\theta^k)


PPO-Penalty

PPO-Penalty算法通过动态调整超参数
\beta
来迭代更新:

如果
KL(\theta,\theta^k)>KL_{max}
,提高参数
\beta

如果
KL(\theta,\theta^k)<KL_{min}
,降低参数
\beta


PPO-Clip

PPO-Clip算法通过区间压缩,来逼近
\theta

J^{\theta^k}_{PPO}(\theta)\approx\sum_{(s_t,a_t)}\min\left(\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}A^{\theta^k}(s_t,a_t),clip(\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)},1-\varepsilon,1+\varepsilon)A^{\theta^k}(s_t,a_t)\right)


注:本文参考《蘑菇书EasyRL》第二章至第五章内容

来源:

蘑菇书EasyRL (datawhalechina.github.io)



版权声明:本文为Savarus原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。