Eligibility Traces

Eligibility Traces是强化学习中很基本很重要的一个概念。几乎所有的TD算法可以结合eligibility traces获得更一般化的算法,并且通常会更有效率。

Eligibility traces可以将TD和Monte Carlo算法统一起来。之前我们见过n-step方法将二者统一起来,eligibility traces 优于n-step的主要地方在于计算非常有效率,其只需要一个trace向量,而不需要储存n个特征向量。另外,eligibility trace的学习是逐步的,而不需要等到n-steps之后。

Eligibility traces机制是通过一个短期的向量得到的,这个向量称为eligibility trace \(\pmb{z_t} \in R^d\)。正好呼应算法中的权重向量\(\pmb{w_t}\in R^d\). 大致的思想是这样的:当权重向量的某些分量参与到估计价值当中,那么与之相对应的eligibility trace分量也会立即变化,然后变化会慢慢的消失。

强化学习的很多算法都是‘向前看’的算法,即当前状态或动作的价值更新是依赖于未来状态或动作的,这样的 算法称为‘前向视角’。前向视角实施起来多少有些不方便,毕竟未来的事,当前并知道。还有另外一种思路是所谓的‘后向视角’,通过eligibility trace来考虑最近刚刚访问过的状态或动作。

The \(\lambda\)-return

之前定义过n-steps return为最初n rewards加上n步之后的状态的价值估计的总和:

\[G_{t:t+n} \dot = R_{t+1} + \gamma R_{t+2} + ... + \gamma^{n-1}R_{t+n} + \gamma^n \hat v(S_{t+n}, w_{t+n-1})
\]

其实一个有效的更新不一定只依赖于n-steps return,可能依赖于多个n-step return的平均会更好,比如:

\[\frac{1}{2}G_{t:t+2} + \frac{1}{2}G_{t:t+4}
\]

\(\lambda\)-return 可以理解为一种特殊的平均多个n-step return,它平均所有n-step return:

\[G_{t}^{\lambda}\dot = (1- \lambda)\sum_{n=1}^{\infty}\gamma^{n-1}G_{t:t+n} = (1-\lambda)\sum_{n=1}^{T-t-1}\lambda^{n-1}G_{t:t+n} + \lambda^{T-t-1}G_{t}
\]

基于\(\lambda\) return 的学习算法比如off-line \(\lambda\)-return algorithm:

\[w_{t+1}\dot = w_t + \alpha [ G_t^{\lambda} - \hat v(S_t, w_t)]\nabla \hat v(S_t,w_t), t = 0,..., T-1.
\]

以上其实就是一种前向视角:

TD(\(\lambda\))

TD(\(\lambda\))是上面off-line \(\lambda\)-return算法的改进,主要有三点:一是它每步更新,二是因为每步更新,它的计算过程分布在每一时间步上,三是它可以应用于连续过程而不仅限于episodic problems。

如上所述,eligibility trace 通过一个向量\(\pmb{z_t}\in R^d\) 实现,其与\(\pmb{w_t}\)维度相同,\(\pmb{w_t}\)可看作是长时记忆,而eligibility trace则是短时记忆。

\[z_{-1}\dot = 0, \qquad z_t\dot = \gamma \lambda z_{t-1} +\nabla\hat v(S_t,w_t),\qquad 0 \le t\le T
\]

其中\(\gamma\)是discount rate,\(\lambda\) 是trace decay参数。Eligibility trace记录权重向量各成分在近期状态价值评估中的贡献。

TD error:

\[\delta_t \dot = R_{t+1} +\gamma\hat v(S_{t+1},w_t)- \hat v(S_t,w_t)
\]

那么权重向量的更新:

\[w_{t+1} \dot = w_t+\alpha \delta_t z_t
\]

# semi-gradient TD(lambda) for estimating v_hat = v_pi
Input: the policy pi to be evaluated
Input: a differentiable function v_hat: S_plus x R^d --> R such that v_hat(terminal,.) = 0
Algorithm parameters: step size alpha > 0, trace decay rate lambda in [0,1]
Initialize value-function weights w arbitrarily (e.g. w = 0)
Loop for each episode:
Initialize S
z = 0
Loop for each step of episode:
Choose action A based on pi(.|S)
Take A, observe R,S'
z = gamma * lambda *z + grad V(S,w)
delta = R + gamma v_hat(S',w) - v_hat(S,w)
w = w + alpha delta z
S = S'
until S' is terminal

TD(\(\lambda\))是时间上反向的,从当前状态,向后考虑已经经历过的状态。

易知,当\(\lambda = 0\) \(TD(\lambda)\)退化成为one step semi-gradient也就是TD(0);当\( = 1\lambda = 1\)时,TD(1)则表现出MC的特征。

n-step Truncated \(\lambda\)-return Methods

线下的\(\lambda-return\)算法具有很大的局限性,因为\(\lambda\)-return要在最后才知道,在连续状态情况下,甚至永远得不到。我们知道,一般\(\gamma\lambda<1\),因此太长时间的状态价值的影响就会消失掉,那么可以想到一种近似\(\lambda\)-return的方法称为Truncated \(\lambda\)-return方法:

\[G_{t:h}^{\lambda}\dot = (1-\lambda)\sum_{n =1}^{h-t-1} \lambda^{n-1}G_{t:t+n} + \lambda^{h-t-1}G_{t:h},\qquad 0 \le t<h\le T
\]

同理可以推广出truncated TD(\(\lambda\))(TTD(\(\lambda\))):

\[w_{t+n}\dot = W_{t+n-1} + \alpha [G_{t:t+n}^\lambda - \hat v(S_t,w_{t+n-1})]\nabla \hat v(S_t,w_{t+n-1})
\]

此算法可以以一种比较有效率的方式来改写,使其不依赖于n(当然,背后的理论关系还是依赖n的):

\[G_{t:t+k}^{\lambda} = \hat v(S_t,w_{t-1}) + \sum_{i = t}^{t+k-1} (\gamma \lambda)^{i-t}\delta_i'
\]

其中\(\delta_t' \dot = R_{t+1} + \gamma\hat v(S_{t+1},w_t) -\hat v(S_t,w_{t-1})\).

Redoing Updates: The On-line \(\lambda\)-return Algorithm

TTD(\(\lambda\))中n的选取是要有取舍的,n可以很大,这样更接近off-line \(\lambda\)-return algorithm;或者很小这样更新参数不用等很久。这两种好处增加一些计算复杂度可以都得到。

其思想是这样的:在每一步时,都会得到新的数据,然后从头重新更新。

\[w_{t+1}^h \dot = w_t^h + \alpha [G_{t:h}^h - \hat v(S_t,w_t^h)]\nabla \hat v(S_t,w_t^h),\qquad 0\le t\le h\le T.
\]

\(w_t \dot = w_t^t\)此即为on-line \(\lambda\)-return algorithm.

True On-line TD(\(\lambda\))

借助eligibility trace,将on-line \(\lambda\) -return 的前向视角转变成后向视角即成为true on-line TD(\(\lambda\)).

\[w_{t+1}\dot = w_t + \alpha \delta_t z_t + \alpha(w_t^Tx_t - w_{t-1}^Tx_t)(z_t - x_t)
\]

其中$\hat v(s,w) = w^T x(s),\ x_t\dot = x(S_t),\ \delta_t \dot = R_{t+1} +\gamma\hat v(S_{t+1},w_t)- \hat v(S_t,w_t),\ z_t = \dot = \gamma\lambda z_{t-1}+(1-\alpha \gamma\lambda z_{t-1}^Tx_t)x_t $.

# True On-line TD(lambda) for estimating w^T x = v_pi
Input: the policy pi to be evaluated
Input: a feature function x: S_plus --> R such that x(terminal,.) = 0
Algorithm parameters: step size alpha > 0, trace decay rate lambda in [0,1]
Initialize value-function weights w in R Loop for each episode:
Initialize state and obtain initial feature vector x
z = 0
V_old = 0
Loop for each step of episode:
choose A from pi.
take action A, observe R, x'(feature vector of the next state)
V = w^T x
V' = w^T x'
delta = R + gamma V' - V
z = gamma lambda z + (1- alpha gamma z^T x)x
w = w + alpha(delta + V- V_old)z - alpha (V-V_old) x
V_old = V'
x = x'
until x' = 0(signaling arrival at a terminal state)

这里的eligibility trace 称为 dutch trace, 还有一种称为replacing trace:

\[z_{i,t} \dot =\left\{\begin{array}\\ 1\qquad if\quad x_{i,t} = 1,\\
\gamma\lambda z_{i,t-1} \qquad otherwise.\end{array}\right.
\]

Dutch Traces in Monte Carlo Learning

Eligibility traces也可应用于Monte Carlo 相产算法之中。

在梯度Monte Carlo算法的线性版本中:

\[w_{t+1} \dot = w_t +\alpha [G - w_t^Tx_t]x_t,\qquad 0 \le t \le T.
\]

其中G是在episode结束后得到的奖励,因此没有下标,也没有折扣因子。因为MC方法只能在episode结束后更新参数,这个特点我们不试图改进,而是在尽力将计算分布在各个时间步上。

\[\begin{array}\\
w_T& =& w_{T-1} + \alpha(G - w_{T-1}^Tx_{T-1})x_{T-1}\\
&=& w_{T-1} +\alpha x_{T-1}(-x_{T-1}^Tw_{T-1})+\alpha Gx_{T-1}\\
&=& (I - \alpha x_{T-1}x_{T-1}^T)w_{T-1}+\alpha Gx_{T-1}\\
&=& F_{T-1}w_{T-1}+\alpha Gx_{T-1}
\end{array}
\]

其中\(F_t \dot = I - \alpha x_t x_t^T\)是一个遗忘矩阵或称衰退矩阵(forgetting or fading matrix), 可以递归得到。

Sarsa(\(\lambda\))

Sarsa(\(\lambda\))是一个TD方法,与TD(\(\lambda\))类似,只不过,Sarsa(\(\lambda\))是针对state-action pair的:

\[w_{t+1}\dot = w_t +\alpha \delta_t z_t
\]

其中:

\[\delta \dot = R_{t+1}+\gamma \hat q(S_{t+1},A_{t+1},w_t) - \hat q(S_t,A_t,w_t)
\]

而:

\[\begin{array}\\
z_{-1} &=& 0,\\
z_t&=& \gamma \lambda z_{t-1}+\nabla\hat q(S_t,A_t,w_t),\qquad 0\le t\le T.
\end{array}
\]

# Sarsa(lambda) with binary features and linear function approximation for estimating # w^T x q_{pi} or q*
Input: a function F(s,a) returning teh set of (indices of ) active features for s,a
Input: a policy pi (if estimating q_pi)
Algorithm parameteres: step size alpha > 0, trace decay rate lambda in [0,1]
Initialize: w= (w1,...,wd)^T in R^d z = (z1,...,z_d)^T in R^d Loop for each episode:
Initialize S
Choose A from pi(.|S) or e-greedy according to q_hat(S,.,w)
z = 0
Loop for each step of episode:
take action A, observe R,S'
delta = R
Loop for i in F(S,A):
delta = delta - w_i
z_i = z_i + 1 (accumulating traces)
or z_i = 1 (replacing traces)
If S' is terminal then:
w = w + alpha delta z
Go to next episode
Choose A' in pi(.|S) or near greedily q_hat(S',.,w)
Loop for i in F(S',A'): dleta = delta + gamma w_i
w = w + alpha delta z
z = gamma lambda z
S = S', A = A'
# True Online Sarsa(lambda) for estimating w^Tx = q_pi or q*
Input: a feature function x: s_plus x A = R^d such that x(terminal,.) = 0
Input: a policy pi (if estimating q_pi)
Algorithm parameters: step size alpha >0, trace decay rate lambda in [0,1]
Initialize: w in R^d Loop for each episode:
Initialize S
Choose A from pi(.|S) or nearly greedily from S using w
x = x(S,A)
z = 0
Q_old = 0
Loop for each step of episode:
Take action A, observe R,S'
Choose A' from pi(.|S') or near greedily from S' using w
x' = x(S',A')
Q = w^Tx
Q' = w^Tx'
delta = R + gamma Q' - Q
z = gamma lambda z + (1 - alpha gamma lambda z^T x) x
w = w + alpha(delta + Q - Q_old )z - alpha(Q - Q_old) x
Q_old = Q'
x = x'
A = A'
until S' is terminal

Off-policy Eligibility Traces with Control Variates

Watkins's Q(\(\lambda\)) to Tree-Backup(\(\lambda\))

Stable Off-policy Methods with Traces

强化学习(八):Eligibility Trace的更多相关文章

  1. 强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces)

    强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces) 学习笔记: Reinforcement Learning: An Introduction, Richard S. S ...

  2. 强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    在强化学习(十七) 基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基 ...

  3. 【转载】 强化学习(八)价值函数的近似表示与Deep Q-Learning

    原文地址: https://www.cnblogs.com/pinard/p/9714655.html ------------------------------------------------ ...

  4. 强化学习(八)价值函数的近似表示与Deep Q-Learning

    在强化学习系列的前七篇里,我们主要讨论的都是规模比较小的强化学习问题求解算法.今天开始我们步入深度强化学习.这一篇关注于价值函数的近似表示和Deep Q-Learning算法. Deep Q-Lear ...

  5. 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)

    强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...

  6. adaptive heuristic critic 自适应启发评价 强化学习

    https://www.cs.cmu.edu/afs/cs/project/jair/pub/volume4/kaelbling96a-html/node24.html [旧知-新知   强化学习:对 ...

  7. 【强化学习RL】model-free的prediction和control —— MC,TD(λ),SARSA,Q-learning等

    本系列强化学习内容来源自对David Silver课程的学习 课程链接http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html 本文介绍了在m ...

  8. 强化学习(十九) AlphaGo Zero强化学习原理

    在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...

  9. 强化学习(五)用时序差分法(TD)求解

    在强化学习(四)用蒙特卡罗法(MC)求解中,我们讲到了使用蒙特卡罗法来求解强化学习问题的方法,虽然蒙特卡罗法很灵活,不需要环境的状态转化概率模型,但是它需要所有的采样序列都是经历完整的状态序列.如果我 ...

随机推荐

  1. Hadoop大数据学习视频教程 大数据hadoop运维之hadoop快速入门视频课程

    Hadoop是一个能够对大量数据进行分布式处理的软件框架. Hadoop 以一种可靠.高效.可伸缩的方式进行数据处理适用人群有一定Java基础的学生或工作者课程简介 Hadoop是一个能够对大量数据进 ...

  2. 20175205 2018-2019-2 《Java程序设计》第五周学习总结

    20175205 2018-2019-2 <Java程序设计>第五周学习总结 教材学习内容总结 接口:使用关键字interface定义接口 接口声明:interface 接口名 接口体:接 ...

  3. mysql知识点汇总

    1. 数据库的安装 2. 数据库设计需要注意什么 3. SQL语句优化 4. 怎样处理慢查询? 5. 怎样更好的利用数据库索引? 6. 事务隔离级别有哪些?怎么实现的? 7. 数据库锁有哪些? 8. ...

  4. AtomicStampedReference源码分析

    public class Snippet { //修改的是AtomicStampedReference对象里面的值了. public static void main(String[] args) { ...

  5. Python hasattr() 函数

    hasattr() 函数用于判断对象是否包含对应的属性.(has attribute) hasattr(object, name) 参数 object -- 对象. name -- 字符串,属性名. ...

  6. PHP CURL 账号密码 添加授权Authorization头Header

    <?phpfunction http_request_xml($url,$data = null,$arr_header = null){ $curl = curl_init(); curl_s ...

  7. Xcode9,cocoaPod执行pod install时报错,一行命令即可解决。

  8. 除了使用new关键字,还有什么方法可以创建Java对象呢?

    今天来盘点一下除了使用 "new" 关键字创建对象,还有什么方法可以创建Java对象呢? 因为是创建对象,所以这里ioc容器不在范围内 我们先看一下常用的new关键字创建 Clas ...

  9. linux下ifconfig命令看不到IP centos7——ens33

    当前环境VMware15+centos7  在终端输入ifconfig后没有开到IP地址: 解决方法:root用户执行命令 cd /etc/sysconfig/network-scripts/ vi ...

  10. HTTP请求与接收get/post方式

    //get方式 public string HttpGet(string Url, string postDataStr) { HttpWebRequest request = (HttpWebReq ...