一文搞懂策略梯度(Policy gradient)算法(二)

前情回顾

在上文 一文搞懂策略梯度(Policy gradient)算法(一) 中,我们主要介绍了PG算法的目标函数以及策略梯度。
可知,在PG算法中,用 ∇ J ( θ t ) \nabla{J(\theta_t)} J(θt) 的近似来更新策略网络参数 θ \theta θ,从而增大目标函数。在策略梯度计算公式的最后推导中,我们得到策略梯度 ∇ J ( θ t ) \nabla{J(\theta_t)} J(θt) 的无偏估计

同时,留下了一个尾巴——如何得到动作价值函数 Q π Q_{\pi} Qπ

为了解决这个问题,本文将分别介绍 REINFORCE 算法和 Actor-Critic 算法,并进一步得到改进版的带基线的策略梯度算法,即 REINFORCE with baseline 以及 advantage actor-critic(A2C)

REINFORCE

用一句话来概括: REINFORCE 进一步对 Q π Q_{\pi} Qπ 做蒙特卡洛近似,将其替换为回报 u u u

蒙特卡洛的哲学思想——没有模型,上数据

在智能体和环境的交互中,定义 t t t 时刻的折扣回报为:

动作价值为回报的条件期望:

因此,可以使用蒙特卡洛近似上面的条件期望——
从时刻 t t t 开始,有 u t = ∑ k = t n γ k − t . r k u_t=\sum_{k=t}^n\gamma^{k-t}.r_k ut=k=tnγkt.rk。这里的 u t u_t ut 是随机变量 U t U_t Ut 的观测值,因此 u t u_t ut 是上面公式中期望的蒙特卡洛近似,可以使用 u t u_t ut 代替 Q π ( s t , a t ) Q_{\pi}(s_t,a_t) Qπ(st,at)。则随机梯度可以近似为:

这里的 g ~ \widetilde{g} g g g g 的无偏估计。进行梯度上升更新策略网络参数 θ \theta θ

以上,即为通过 REINFORCE 对策略网络进行训练的算法。

Actor-Critic

REINFORCE 中,通过实际观测的回报 u t u_t ut Q π Q_{\pi} Qπ 进行近似,而 Actor-Critic 算法则是用一个神经网络近似 Q π Q_{\pi} Qπ,这个神经网络被称为“价值网络”,记作 q ( s , a ; w ) q(s,a;w) q(s,a;w),这里的 w w w 为价值网络中可训练的参数。

如图所示,价值网络的输入为状态,输出为每个动作的价值。
——PS:由这里的价值网络可以合理推断,A-C算法针对的是离散动作。

Actor-Critic 翻译为“演员-评委”算法,顾名思义,策略网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(as;θ) 相当于演员,基于状态 s s s 做出动作 a a a ;价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 相当于评委,基于演员的动作进行打分,评价在状态 s s s 下动作 a a a 的好坏程度。
A-C算法中关系图如下所示:

训练策略网络(Actor)

已知,策略网络的无偏估计:

将上式的动作价值 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a) 近似为价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) ,得到近似策略梯度:

然后再进行梯度上升,对策略网络的参数进行更新:

训练价值网络(Critic)

上述对于策略网络的训练结果是让 演员 越来越迎合 评委,因此,在A-C算法中,评委的水平也很重要。只有当评委的打分 q ^ \widehat{q} q 真正的反映出动作价值 Q π Q_{\pi} Qπ ,演员的水平才能真正提高。
价值网络输出:

计算TD-target:

由于 y t ^ \widehat{y_t} yt 部分基于实际观测到的奖励,因此我们认为 y t ^ \widehat{y_t} yt q ( s t , a t ; w ) q(s_t,a_t;w) q(st,at;w) 更接近事实真相。固定 y t ^ \widehat{y_t} yt ,鼓励 q ( s t , a t ; w ) q(s_t,a_t;w) q(st,at;w) 去接近 y t ^ \widehat{y_t} yt 。定义损失函数:

损失函数梯度:

梯度下降,对 w w w 进行更新:

这样更新 w w w 后,可以让 q ( s t , a t ; w ) q(s_t,a_t;w) q(st,at;w) 更接近 y t ^ \widehat{y_t} yt

一个最简单的A-C算法,伪代码如下:

带基线的策略梯度算法

回顾策略梯度定理证明:

上面介绍的 REINFORCE 算法和 actor-critic 算法,主要就是在对 Q π Q_{\pi} Qπ 近似,区别在于方法不同。这两中方法在理论上是正确的,但是在实践中效果并不是很理想。由此引出本小节——带基线的策略梯度算法。

何谓基线?

b b b 为动作价值函数 Q π ( S , A ) Q_{\pi}(S,A) Qπ(S,A) 的基线(baseline),用 Q π ( S , A ) − b Q_{\pi}(S,A)-b Qπ(S,A)b 替换掉 Q π ( S , A ) Q_{\pi}(S,A) Qπ(S,A) b b b 是任意的函数,只要不依赖于动作 A A A 就可以。

上式说明 b b b 的取值不影响策略梯度的正确性,对于期望的结果无影响。
证明:

通常情况下,令 b = V π b=V_{\pi} b=Vπ

说了这么多,减去基线后,有什么好处呢?
上个图,就明白了:

总结:使用基线对 Q π Q_{\pi} Qπ 进行整体搬移,相对大小不变,结果不受影响,方差减小(收敛速度加快)!

REINFORCE with baseline

可知, REINFORCE 算法使用实际观测的回报 u u u 来代替动作价值 Q π Q_{\pi} Qπ,此处叠加基线操作,同时使用一个神经网络 v ( s ; w ) v(s;w) v(s;w) 近似状态价值函数 V π V_{\pi} Vπ,则有 g ( s , a ; θ ) g(s,a;\theta) g(s,a;θ)

此处以王树森老师PPT为例,贴出训练流程:

advantage actor-critic(A2C)

首先给出一个关系图:

结合上图,可以很明显的看出 A-C 算法和 A2C 的区别。
A2C属于A-C算法,两个神经网络的结构与上一节的完全相同,但是训练方法不同。

训练价值网络(Critic)

TD-target:

定义损失函数:

损失函数梯度:

梯度下降更新 w w w

训练策略网络(Actor)

近似策略梯度 g ( s t , a t ; θ ) g(s_t,a_t;\theta) g(st,at;θ)

对上面的期望做蒙特卡洛近似,得到:

进一步把状态价值函数替换为价值网络,得到:

有TD-target 和 TD-error:

g ~ \widetilde{g} g 可以写为:

更新网络参数:

训练流程:

参考资料

王树森——深度强化学习

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值