【强化学习算法】近端优化策略PPO

目录
  1. 基础知识
  2. Value-Based
  3. Policy-Based
  4. Actor Critic

基础知识

Value-Based

包括 Q-LearningDQN等方法。

(1)Q值与V值

  • V值:当前状态下,未来所有状态奖励的总和。(当前状态复制N份,每个状态根据策略选择不同的可能的行为,一直到最终状态,计算N个奖励的平均值) 计算的是当前策略选择动作的合理性
  • Q值:衡量动作节点的价值。(当前动作复制N份,每个动作一直与环境交互记录所获得的奖励,计算N个奖励的平均值) Q值与策略没有直接相关,而与环境的状态转移概率相关。

(2)蒙特卡洛

对于某一个状态,先根据当前状态走到头(策略可能生成不同的动作,分成不同的分支),计算所有的奖励 r,然后回溯计算G值。

  • G值:G=r+γGG=r+\gamma \cdot G,G值代表某个状态到最终状态的奖励总和
  • V值就是状态S的N个复制的G值的平均值。(和策略紧密相关,策略不同,N个状态S得到的动作A的概率不同)

**缺点在于每次都需要所有的状态都从头走到尾,可能需要较长时间才能更新G值。**因此考虑使用估算的方法:

V(St)=V(St)+α[GtV(St)]V(S_t)=V(S_t)+\alpha[G_t-V(S_t)]

也就是前一时刻估计的V值,利用超参数学习率,使V值向 GtG_t 值接近,这样只要任意一个状态走完返回G值,就可以更新一次。

但这种方式仍然需要分支走到最终状态才能进行更新。因此发明了时序查分(Temporal Difference,TD)算法

与蒙特卡洛不同,TD算法只需要走N步,就可以开始回溯更新。即假设N步之后就达到了最终状态。如果最终状态没有任何一个分支走过,则设状态为0,如果有分支走过这个状态,那么这个状态的V值就是当前值。

V(St)=V(St)+α[Rt+1+γV(St+1)V(St)]V(S_t)=V(S_t)+\alpha[R_{t+1}+\gamma V(S_{t+1})-V(S_t)]

其中 Rt+1+γV(St+1)R_{t+1}+\gamma V(S_{t+1}) 就相当于蒙特卡洛计算的 GtG_t 值,V(St+1)V(S_{t+1}) 代表N步之后的状态V值。

Policy-Based

(1)策略梯度

策略梯度PG的思想就是直接计算神经网络,输入state输出action,这个过程不计算Q。

PG的目的是最大化整个 episode 回合的 total reward,由于 actor 和 environment 都存在随机性,因此 Rθ=t=1TrtR_\theta=\sum^T_{t=1}r_t 是随机的,所以要最大化它的期望 Rθˉ\bar{R_\theta} 来衡量 actor 的好坏。

Rθˉ=τR(τ)P(τθ)1Nn=1NR(τn)\bar{R_\theta}=\sum_\tau R(\tau)P(\tau|\theta)\approx\frac{1}{N}\sum^N_{n=1}R(\tau^n)

其中 P(τθ)P(\tau|\theta) 是策略选择动作得到轨迹 τ\tau 的概率,对所有轨迹 τ\tau 得到的奖励求平均就是 Rθˉ\bar{R_\theta}

θ=argmaxθRθˉ\theta^*=\mathop{\arg\max}\limits_{\theta}\bar{R_\theta}

PG算法就是优化网络 θ\theta 使奖励期望最大,也就是利用梯度下降策略使 Rθˉ\bar{R_\theta}θ\theta 求导梯度下降来优化网络。

Rθˉ=τR(τ)P(τθ)=τR(τ)P(τθ)P(τθ)P(τθ)\nabla\bar{R_\theta}=\sum_\tau R(\tau)\nabla P(\tau|\theta)=\sum_\tau R(\tau)P(\tau|\theta)\frac{\nabla P(\tau|\theta)}{P(\tau|\theta)}

利用 log 函数的导数形式,写成:

=τR(τ)P(τθ)logP(τθ)1Nn=1NR(τn)logP(τnθ)=\sum_\tau R(\tau)P(\tau|\theta)\nabla logP(\tau|\theta)\approx\frac{1}{N}\sum^N_{n=1}R(\tau^n)\nabla logP(\tau^n|\theta)

其中 P(τθ)=p(s1)t=1Tp(atst,θ)p(rt,st+1st,at)P(\tau|\theta)=p(s_1)\prod^T_{t=1}p(a_t|s_t,\theta)p(r_t,s_{t+1}|s_t,a_t),也就是表示从 sts_tata_t 以及从 ata_tst+1s_{t+1} 的概率,连乘代表当前轨迹出现的概率。

又因为 log 会将连乘转换为连加,也就是

logP(τθ)=logp(s1)+t=1T[logp(atst,θ)+logp(rt,st+1st,at)]logP(\tau|\theta)=logp(s_1)+\sum^T_{t=1}[logp(a_t|s_t,\theta)+logp(r_t,s_{t+1}|s_t,a_t)]

因此其对 θ\theta 求导为:

logP(τθ)=t=1Tlogp(atst,θ)\nabla logP(\tau|\theta)=\sum^T_{t=1}\nabla logp(a_t|s_t,\theta)

Rθˉ1Nn=1NR(τn)logP(τnθ)=1Nn=1NR(τn)t=1Tlogp(atst,θ)=1Nn=1Nt=1TR(τn)logp(atst,θ)\nabla \bar {R_\theta}\approx\frac{1}{N}\sum^N_{n=1}R(\tau^n)\nabla logP(\tau^n|\theta)=\frac{1}{N}\sum^N_{n=1}R(\tau^n)\sum^T_{t=1}\nabla logp(a_t|s_t,\theta)=\frac{1}{N}\sum^N_{n=1}\sum^T_{t=1}R(\tau^n)\nabla logp(a_t|s_t,\theta)

也就是在 t 回合的 state 下,采取的 action ,如果得到的 total reward 是正的,就希望更新模型使得几率 p(atnstn,θ)p(a^n_t|s^n_t,\theta) 越大越好,反之亦然。

Actor Critic

可以使用两个网络,分别估计 Q 值和 V 值。

  • Actor:可以基于 PG,输入状态,输出策略,也就是选择动作(Policy Gradient RL)
  • Critic:输入状态,计算每个动作的分数(Value Based RL)

但如果使用两个网络,两个网络的参数都需要调整,会有更大的风险测不准。因此考虑只使用一个 V 值,而 Q 值使用 γV(s)+r\gamma\cdot V(s')+r 来代替,把 γV(s)+rV(s)\gamma\cdot V(s')+r-V(s) 这个差称为 TD-error(即 Q(s,a)V(s)Q(s,a)-V(s))。