强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)

第七章:n-step Bootstrapping

这一章中我们把蒙特卡洛算法(MC)和一步差分算法(one-step TD)统一起来。MC算法和一步TD算法都不可能永远是最好的。这两个方法都是比较极端的形式,可能使用它们中间形式会更好一些。另一个看待n步TD算法的优势的角度是它解决了固定时间步骤的缺点。比如一步TD算法固定了每次选择动作和更新值的时间间隔。很多应用中想要把发生的改变快速更新到值函数中,但是bootstrap方法对于一个长时间段发生的重大状态变化又是最好的方法。一步TD法中固定了更新时间间隔是一步,所以需要妥协更新的速度和bootstrap的优势。但是n步TD算法可以在多步后进行bootstrap,这就解决了固定一步时间间隔的缺点。

n步更新的方法通常是eligibility traces方法的一个介绍。这里我们只考虑n步更新方法本身,后面再介绍资格迹(eligibility traces)。和以前一样先介绍prediction的方法然后介绍control的算法。

7.1 n-step TD Prediction

先考虑更新V值函数的蒙特卡洛算法。MC算法根据一个完整的episode序列,观察当前状态以后所有状态的反馈来用作对当前状态值函数的更新。一步TD算法确实基于下一步的反馈以及对一步后的状态的自举作为再往后状态的一个估计而用来更新值函数。而它们俩之间的算法会是基于大于一步的反馈加上剩下的自举作为值更新的目标。比如两步TD算法会基于采取动作后的两个反馈值以及两步后的值函数作为更新目标。三步更新也是类似。可以把他们的backup diagrams画出来如下:

强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第1张图片

这种使用了n步更新的方法依然是TD算法因为它使用了对之前某个状态的估计与其的差来更新那个状态的值函数。这种方法叫做n步TD法。更正式的,考虑一个状态值序列,S_{t},R_{t+1},S_{t+1},R_{t+2},...,R_{T},S_{T},MC方法中对值函数的估计是从时间t之后所有R的discounting的和也就是G_{t}\doteq R_{t+1}+\gamma R_{t+2}+\gamma^{2}R_{t+3}+...+\gamma^{T-t-1}R_{T}。而一步TD算法是使用下一步的反馈和下一个状态的估计值,即G_{t:t+1} \doteq R_{t+1}+\gamma V_{t}(S_{t+1})。下标t:t+1表示的是只计算到t+1时间的反馈值。对于n步TD算法而言,其估计值为:

G_{t:t+n}\doteq R_{t+1}+\gamma R_{t+2}+\gamma^{2}R_{t+3}+...+\gamma^{n-1}R_{t+n}+\gamma^{n}V_{t+n-1}(S_{t+n})

这个值也就是n步TD算法对于状态S_{t}值函数的估计值,因此n步TD算法的更新公式为:

V_{t+n}(S_{t})\doteq V_{t+n-1}(S_{t})+\alpha \[G_{t:t+n}-V_{t+n-1}(S_{t})\]

此时其它状态的值函数都不变,即V_{t+n}(s)=V_{t+n-1}(s)对所有的s\neq S_{t}而言。因为在时间1到n-1之间都没有状态得到更新,因此会在结束状态补偿n-1个时间步。

强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第2张图片

n步TD算法利用了V_{t+n-1}来代表在时间步骤t+n之后的反馈值的期望。这种方法会保证这种估计值的期望与真实值的误差远远小于V_{t+n-1}与其真实值的误差,即

max_{s}|E_{\pi}[G_{t:t+n}|S_{t}=s\]-v_{\pi}(s)| \leq \gamma^{n}max_{s}E_{\pi}[V_{t+n-1}(s)-v_{\pi}(s)|

叫做n步反馈的误差缩减效应。

练习7.3 较大的n需要较多步来产生效果。 有可能。 较小的n表现的更好。变化的间隔,反馈的设计等等。

 

7.2 n-step Sarsa

n步Sarsa算法很自然的将n步反馈加入到Sarsa算法中,实现了n步Sarsa。n步Sarsa算法主要也还是对值函数更新的改变,其backup diagrams如下,和n步TD类似,只不过起始状态和结束状态都变成了动作。

强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第3张图片

定义动作值函数版本的n步反馈为

G_{t:t+n}\doteq R_{t+1}+\gamma R_{t+2}+...+\gamma^{n-1}R_{t+n-1}(S_{t+n}, A_{t+n}), n\geq 1, 0\leq t < T-n

所以值函数的更新为

Q_{t+n}(S_{t},A_{t}) \doteq Q_{t+n-1}(S_{t},A_{t})+\alpha \[G_{t:t+n}-Q_{t+n-1}(S_{t},A_{t})\], 0\leq t < T

其它不相关的状态在时间步骤增加的时候值函数一直不变。

强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第4张图片

对于expected Sarsa算法的n步版本,只是把G的最后一项的Q改为所有动作的加权值V,即

\overset{-}{V(s)} \doteq \sum_{a}\pi(a|s)Q_{t}(s,a)

 

7.3 n-step Off-policy Learning

使用off-policy的策略时,为了使用行为策略产生的数据,必须计算进两个策略的差异。这种差异使用相对概率来计算。比如计算一个简单的off-policy版本的TD算法,更新值函数的时候可以直接加上相对概率作为系数,即

V_{t+n}(S_{t}) \doteq V_{t+n-1}(S_{t})+\alpha \rho_{t:t+n-1}[G_{t:t+n}-V_{t+n-1}(S_{t})], 0\leq t < T

其中多加的系数叫做Importance sampling ratio,实在两个策略下采取n个动作的相对概率 

\rho_{t:h}\doteq \prod_{k=t}^{min(h,T-1)}\dfrac{\pi(A_{k}|S_{k})}{b(A_{k}|S_{k})}

而如果策略b下产生的动作不会被策略\pi产生,那么他们的相对概率就会得到0。同样的,对于n步Sarsa算法来说也可以简单地转到off-policy的形式:

Q_{t+n}(S_{t},A_{t}) \doteq Q_{t+n-1}(S_{t},A_{t})+\alpha\rho_{t+1:t+n}[G_{t:t+n}-Q_{t+n-1}(S_{t},A_{t})]

值得注意的是,因为这里更新的是状态动作对的值函数,因此其Importance sampling ratio比n步TD算法往后移一步。而对于expected Sarsa算法来说,由于估值计算时最后一步是期望的形式,因此最后一步的相对概率为1,于是在更新的公式里importance sampling ratio改为\rho_{t+1:t+n-1}

强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第5张图片

 

7.5 Off-policy Learning Without Importance Sampling: The n-step Tree Backup Algorithm

Q-learning和expected Sarsa都是不需要importance sampling的一步off-policy的例子,本章介绍一种多步的例子强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第6张图片,叫做tree-backup algorithm。这个想法可以用一个三步tree-backup的backup diagrams来说明。

右图展示了一个三步更新的采样的例子,从最顶上的动作开始转移到最后。中轴外边悬挂的动作是没有被选到的动作(最后一个状态的三个动作都被看作没选)。对于没有选到的动作我们没有采样的结果,因此直接使用它们的估计值来组成更新的目标值。之前我们都是把前几步的采样的反馈加上最后一步的估计值结合组成更新的目标值,但是这里的更新值不仅包括前几步采样的反馈,还包括左右悬挂的动作状态的估计值。因为它是从这个树型上的每一个部分来组成更新,因此叫做tree-backup更新。

准确的说,更新值是由树上叶子结点的动作值函数的估计组成的,内部非叶子结点的部分没有参与。每个叶子结点的动作值估计前的系数都正比于策略采取该动作的概率。一步返回的形式和expected Sarsa的形式一致,即G_{t:t+1}\doteq R_{t+1}+\gamma \sum_{a}\pi(a|S_{t+1})Q_{t}(S_{t+1},a),那么两步更新的形式为G_{t:t+2}\doteq R_{t+1}+\gamma\sum_{a\neq A_{t+1}}\pi(a|S_{t+1})Q_{t+1}(S_{t+1},a)+\gamma\pi(A_{t+1}|S_{t+1})(R_{t+2}+\gamma\sum_{a}\pi(a|S_{t+2})Q_{t+1}(S_{t+2},a))\\=R_{t+1}+\gamma\sum_{a\neq A_{t+1}}\pi(a|S_{t+1})Q_{t+1}(S_{t+1},a)+\gamma\pi(A_{t+1}|S_{t+1})G_{t+1:t+2}

而根据两步更新的形式我们可以推断出n步反馈的迭代等式为

G_{t:t+n}\doteq R_{t+1}+\gamma\sum_{a\neq A_{t+1}}\pi(a|S_{t+1})Q_{t+n-1}(S_{t+1},a)+\gamma\pi(A_{t+1}|S_{t+1})G_{t+1:t+n}

有了n步反馈那么很容易得到更新的公式为

Q_{t+n}(S_{t},A_{t})\doteq Q_{t+n-1}(S_{t},A_{t})+\alpha[G_{t:t+n}-Q_{t+n-1}(S_{t},A_{t})]

强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第7张图片

7.6 A Unifying Algorithmm: n-step Q(\sigma)

下图中可以看出,n步Sarsa有所有的采样状态转移,n步expected Sarsa除了最后一步是期望形式前面都使用的采样反馈,而tree backup算法使用了每一步的反馈采样加上其他动作值的估值。有一种方法可以把它们统一起来,下面介绍。

强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第8张图片

上图中最右的图显示了一种把这几种算法统一起来的方法,它可以在每一步选择是采取期望形式还是采样的形式,这个方法叫做Q(\sigma),其中每个状态或者每个动作或者每个状态动作对都有一个0到1之间的值\sigma_{t},其中0表示在该状态采用期望形式,而1表示该状态采用采样形式。首先我们写出n步tree-backup算法的反馈形式,h=t+n:

强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第9张图片

那么Q(\sigma)的反馈形式可以写为

强化学习(RLAI)读书笔记第七章n步自举(n-step Bootstrapping)_第10张图片

7.7 Summary

本章介绍了介于MC算法和一步TD算法之间的一系列TD算法。我们重点关注的是n步TD算法,所有的n步TD算法在更新本状态值之前都要继续前进n步。这些算法的一个缺点就是比前面的算法要求更大的计算量。和一步算法相比,n步算法同样也需要更多的内存来存储状态、动作、反馈和一些其它的变量。

尽管n步算法比使用eligibility traces的算法更复杂,但是它有更加清晰的理论解释。我们利用这一点尝试了两个n步off-policy的算法。其中一个是使用Importance Sampling的方法,它很简单但是方差很大。如果两个策略区别很大那么这个方法很不实用。第二是使用tree-backup算法,它不使用Importance Sampling但是对于两个策略区别很大的话,bootstrapping可能只能延伸很短几步。

你可能感兴趣的:(强化学习)