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

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

强化学习术语 英文词汇及公式、符号表示 简单解释
智能体 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)

你可能感兴趣的:(深度学习,人工智能)