【总结】为什么对累积奖励减去baseline项能起到减小方差的作用?

2022-09-23 14:42:33 浏览数 (3)

深度强化学习实验室

官网:http://www.neurondance.com/

论坛:http://deeprl.neurondance.com/

来源:https://zhuanlan.zhihu.com/p/98506549

作者: 风清云

很多论文的工作都专注于减少policy gradient的方差,以得到更加优质且稳定的policy。其中一项最经典的工作就是对policy gradient的累积奖励减去一个baseline,但为什么减去一个baseline就可以达到减小方差,同时又不引入偏差的效果呢?

关于这个问题,Daniel Seita大佬在他的博客中有详细的讲解(链接给在最后),但笔者水平不够,仍然有部分未看明白的地方,强作此文说说自己的理解,希望有大佬看到并给出指导。

写在前面:符号约定

在强化学习的policy gradient中,通常会通过环境仿真出一系列的trajectories,以起到类似于对某种概率分布进行采样的作用,某个以时刻T为结束时刻的trajectory可以约定如下:

其中

分别代表状态,动作和奖励。接下来,本文将按照简单的结论->证明->结论的结构来探讨减小方差这个问题。

结论

对policy gradient的表达式中的累积奖励项减去一个baseline项,可以起到减小policy gradient的方差且同时不引入偏差的效果。如下式:

在实际工作中,通常把baseline取为状态

的状态-值函数,即

证明

首先需要写明两个技巧:

(1)log-derivative

此技巧是介绍如何将对数塞入对某个函数发f(x)的期望的梯度中去的。过程如下

这个过程看起来似乎十分简单直接,相当于乘了一项

,再把分母移动到微分项下 面,利用简单的复合函数求导:

就在积分里增加了对数项,最后根据期望的定义得到了最终的表达式。

但这里是有一个疑问的,那就是在第二个等式中,直接把微分号放入了积分号里面,这种直接交换微分和积分次序的变换应满足什么条件才成立?在这里是否成立?,笔者不甚理解,希望理解的朋友给予指导。

第二个等式就是简单的取对数运算。

第三个等式就是关于参数

的求微分运算,因为与参数

有关的项仅有

, 因此其他项对 参数

的导数为0。

接下来,应用这两个技巧看看期望奖励关于参数

的导数,即policy gradient的表达式。

begin{aligned} nabla_{theta} E_{tau sim pi_{theta}}[R(tau)] &=nabla_{theta} int p_{theta}(tau) R(tau) d tau \ &=int p_{theta}(tau) R(tau) nabla_{theta} log p_{theta}(tau) d tau \ &=int p_{theta}(tau) R(tau) nabla_{theta}left(sum_{t=0}^{T-1} log pi_{theta}left(a_{t} mid s_{t}right)right) d tau \ &=E_{tau sim pi_{theta}}left[R(tau) cdot nabla_{theta}left(sum_{t=0}^{T-1} log pi_{theta}left(a_{t} mid s_{t}right)right)right]_{overline{=}} end{aligned}

这里第一个等式即期望的定义式;

第二个等式即log-derivative技巧;

第三个等式即对trajectory

的对率求导的技巧;

第四个等式即写回期望。

在正式引入baseline之前,还需要对上式做一些变换:

begin{aligned} nabla_{theta} mathbb{E}_{tau sim pi_{theta}}[R(tau)] & stackrel{(i)}{=} mathbb{E}_{tau sim pi theta}left[left(sum_{t=0}^{T-1} r_{t}right) cdot nabla_{theta}left(sum_{t=0}^{T-1} log pi_{theta}left(a_{t} mid s_{t}right)right)right] \ & stackrel{(i i)}{=} mathbb{E}_{tau sim pi theta}left[sum_{t^{prime}=0}^{T-1} r_{t^{prime}} sum_{t=0}^{t^{prime}} nabla_{theta} log pi_{theta}left(a_{t} mid s_{t}right)right] \ & stackrel{(i i i)}{=} mathbb{E}_{tau sim pi theta}left[sum_{t=0}^{T-1} nabla_{theta} log pi_{theta}left(a_{t} mid s_{t}right)left(sum_{j,}^{T-1} r_{t^{prime}}right)right] end{aligned}

等式 (i) 是简单的替换

, 这里令折扣因子

; 等式 (ii) 是个难点。首先定义这个新冒出来的符号

, 这个代表以时刻

为最终时刻的

nabla_{theta} mathbb{E}_{left(s_{0}, a_{0}, ldots, s_{T}right)}left[r_{t^{prime}}right]=nabla_{theta} mathbb{E}_{left(s_{0}, a_{0}, ldots, s_{ell}right)}left[r_{t^{prime}}right]

上式成立是因为在时刻

, trajectory就已经结束,因此后续的状态和奖励的取值对 并无影 响, 从而期望相等。等式 (i) 想要得到等式 (ii),关键在于以下等式的成立:

nabla_{theta} mathbb{E}_{tau sim pi_{theta}}[R(tau)]=nabla_{theta} mathbb{E}_{tau sim pi_{theta}}left[sum_{t^{prime}-0}^{T-1} r_{t^{prime}}right]

这个等式的左边仍然是policy gradient的定义,右边却变成了以不同的时刻

为最终时刻的trajectories的奖励 的求和运算。为什么这个等式成立呢? 这里说说我的理解,不一定正确。直观上来看,等式右边就是的期望内容 是把以下trajectories的最后一个奖励求和了:

begin{array}{l} t^{prime}=0: quad s_{0}, a_{0}, r_{0} \ t^{prime}=1: quad s_{0}, a_{0}, r_{0}, s_{1}, a_{1}, r_{1} \ vdots \ t^{prime}=T-1: quad s_{0}, a_{0}, r_{0}, ldots, s_{T-1}, a_{T-1}, r_{T-1} \ sum_{t^{prime}=1}^{T-1} r_{t^{prime}}=r_{0} r_{1} ldots r_{T-1} end{array}
begin{array}{l} begin{aligned} E_{tau sim pi}left[sum_{t=0}^{T-1} r_{t}right] &=int_{s_{0}, a_{0}, ldots_{S-1}, q_{T-1}} pleft(s_{0}, a_{0}, ldots, s_{T-1}, a_{T-1}right) cdotleft(sum_{t=0}^{T-1} r_{t}right) quad(text { one trajectory }) \ &=int_{s_{0}, a_{0}} pleft(s_{0}, a_{0}right) r_{0} int_{s_{0}, a_{0}, 5, q_{1}} pleft(s_{0}, a_{0}, s_{1}, a_{1}right) r_{1} ldots end{aligned}\ int_{s_{0}, a_{0}, ldots,_{T-1}, a_{T-1}} pleft(s_{0}, a_{0}, ldots, s_{T-1}, a_{T-1}right) r_{T-1}\ text { (traiectories) } end{array}

理解了这一步转换,就可以开始下一步推导了。

begin{aligned} nabla_{theta} mathbb{E}_{tau sim pi_{theta}}[R(tau)] &=nabla_{theta} mathbb{E}_{tau sim pi_{theta}}left[sum_{t^{prime}=0}^{T-1} r_{t^{prime}}right] \ &=sum_{t^{prime}=0}^{T-1} nabla_{theta} mathbb{E}_{tau^{left(t^{prime}right)}}left[r_{t^{prime}}right] \ &=sum_{t^{prime}}^{T-1} mathbb{E}_{tau^{left(t^{prime}right)}}left[r_{t^{prime}} cdot sum_{t=0}^{t^{prime}} nabla_{theta} log pi_{theta}left(a_{t} mid s_{t}right)right] \ &=mathbb{E}_{tau sim pi_{theta}}left[sum_{t^{prime}}^{T-1} r_{t^{prime}} cdot sum_{t=0}^{t^{prime}} nabla_{theta} log pi_{theta}left(a_{t} mid s_{t}right)right] end{aligned}

第一个等式上面已经说明;

第二个等式,Daniel Seita的博客里提到了“Assume we can exchange the sum with the gradient,”也就是说,假设求和符号和微分符号位置可以互换,笔者不太明白为啥可以这样假设,但还是先假设下去吧。

第三个等式,这里就很直观了。再使用前面的两个技巧,就把微分符号变换进去咯;

第四个等式,这里需要注意,期望的下标已经发生变化了,相当于把trajectories变回了one trajectory,这里前面已有说明。

等式 (ii) 到这里就扯完了。现在来看等式 (iii) 。等式 (iii) 是个简单的将等式 (ii) 加和项进行 重组。把等式 (ii) 单项都拆开写,以符号

可以得到:

begin{array}{l} r_{0} f_{0} \ r_{1} f_{0} r_{1} f_{1} \ r_{2} f_{0} r_{2} f_{1} r_{2} f_{2} \ quad cdots \ r_{T-1} f_{0} r_{T-1} f_{1} r_{T-1} f_{2} cdots r_{T-frac{1}{*}} f_{T in 1} end{array}

将上面这个形似下三角的累加项逐列累加,则每一列的累加结果为:

, 再把每一列的 结果累加起来,就得到了等式 (iii) 的结果啦。

扯了这么多。终于可以开始减去baseline项了。基于上面最后一个等式给出的结果,对累加的期望减去baseline可以得到:

首先看引入了baseline以后,为什么不会引入偏差:

根据期望的线性性质,直接看baseline的期望:

第一个等式是简单的split,即把序列trajectory 拆分成两个互不交叠的部分,这个split成立的本 质还是积分/求和具有线性性质,这两部分的变量不一样当然可以写成这样; 第二个等式值得注意:这里的baseline 仅仅是关于状态 的函数,和后续的状态以及动 作无关。这和 是不一样的, 因为 是后续状态累积奖励的期望。所以此处可以把 作为常量提出; 第三个等式又是个难点。展开过程如下:

再次结论

参考文献

【1】Going Deeper Into Reinforcement Learning: Fundamentals of Policy Gradients

【2】Notes on Exact Inference in Graphical Models

本文来源自知乎博客:作者风清云

https://zhuanlan.zhihu.com/p/98506549

1 人点赞