强化学习(六) -- 资格迹

我们之前讲过的蒙特卡洛方法和时序差分算法有一点不同点,当更新当前状态的值函数的时候,蒙特卡洛方法是使用整个轨迹来预估,而TD算法则是使用一段轨迹来预估,而这个一段轨迹一般是小于整条轨迹的。而通过利用不同的举例来估计,我就称为多步时序差分法也叫做 资格迹法。

而资格迹法一般又分为两个角度来计算。

一种前项视角,估计当前状态的值函数的时候,使用当前时刻以后的几个时刻来估计。

另一种是后项的视角来更新,就是使用当前时刻之前的数据来更新,资格迹是进行资格分配的方法,它是强化学习的一种基本机制。TD(λ)TD(\lambda)算法中的λ\lambda就是对资格迹的运用。包括Q-learning,sarsa等算法都可以借用这种方法提升效率。

多步TD评估

蒙特卡洛的估计公式是

V(st)<V(st)+α(GtV(st))(6.1)V(s_t) <- V(s_t)+\alpha(G_t-V(s_t)) \tag{6.1}

其中更新目标GtG_t为累计回报。

Gt=rt+1+γrt+2+γ2rt+3...G_t=r_{t+1}+\gamma r_{t+2}+\gamma^{2} r_{t+3}...

很容易知道,对于一步的TD更新目标

Gt1=rt+1+γV(st+1)G_{t}^{1}=r_{t+1}+\gamma V(s_{t+1})

很容易知道,对于两步的TD更新目标

Gt2=rt+1+γV(st+2)+γ2V(st+2)G_{t}^{2}=r_{t+1}+\gamma V(s_{t+2}) +\gamma^{2}V(s_{t+2})

以此类推我们就能知道n步的回报是如何表达。由上面的过程我们知道,其实如果我们的n大于轨迹长度,那么就是蒙特卡洛的算法,

前向算法

既然存在n步时序差分,那么这个n取值就是一个值得讨论的问题。
一种简单的方法是通过平均多个不同的n步回报进行更新,最后他们的权重之和为1。
下面我们来举个例子。
假如我们使用2步TD和4步TD相结合。每次更新的时候,2步TD权重是1/2,4步TD也是1/2作为最终的更新量。
前向视角的TD(λ)TD(\lambda)算法最主要的特点是平均化的操作运用。唯一特别是TD(λ)TD(\lambda)直接平均化所有步的回报。每个回报的权重是(1λ)λn1(1-\lambda)\lambda^{n-1},通过引用这个λ\lambda综合考虑步数的回报。
如果轨迹长度是T的时候,就有

Gtλ=(1λ)n=1Tt1λn1Gtn+λTt1Gt(6.2)G_{t}^{\lambda}=(1-\lambda) \sum_{n=1}^{T-t-1}\lambda^{n-1}G_{t}^{n}+\lambda^{T-t-1}G_{t} \tag{6.2}

值更新的公式如下

V(st)<V(st)+α(GtλV(st))(6.3)V_(s_t) <- V(s_t)+\alpha(G_{t}^{\lambda}-V(s_t)) \tag{6.3}

后向算法

刚刚讲的前向算法主要是需要当前时刻以后的几个时刻的状态,其实和蒙特卡洛的思想相近,当时无法直接实现。
我们需要一种无须等到实验结束就更新当前状态值函数的方法。这种增量式更新方法需要利用多步的时序差分的后向观点。它采用的明确的因果性递增机制来实现的。
后向视角,引入一个和每个状态都相关的额外变量(资格迹)。现在外面来讲个打死外星人的例子。外星人被连续的3次拳击和一次电击后死亡,那么我们在分析外星人死亡原因的时候,到底是拳击因素重要还是电击的因素重要呢?
实际进行资格迹分配的时候有两种方式,一种是频率启发式,将资格迹分配给最频繁的拳击方式,还有一种是最近启发式,也就是电击方式。
在t时刻状态s,对应的资格迹标记为Et(s)E_{t}(s)

Es=0E_{s}=0

Ets=γλEt1(s)+I(St=s)E_{t}^{s}=\gamma \lambda E_{t-1}(s)+I(S_t=s)

初始的资格迹,Es=0E_{s}=0,当下一个时刻,被访问到的状态,其资格迹为前一个时刻该状态资格迹Et1(s)E_{t-1}(s)乘以退化参数λ\lambda和衰减因子γ\gamma然后加1,表示当前该状态资格迹变大。其他未被访问的状态,其资格迹只是原有基础上乘以λγ\lambda \gamma,不用加1.那么我们来看看上文那个例子的更新过程。
在上面的场景中我们分别有两个状态拳击和电击分别是s1和s2,然后λ=0.9,γ=0.8\lambda=0.9,\gamma=0.8

当t=1的时候。

E1s1=γλE0(s1)+1=1E1s2=γλE0(s2)=0E_{1}^{s_1}=\gamma \lambda E_{0}(s_1)+1=1 \\ E_{1}^{s_2}=\gamma \lambda E_{0}(s_2)=0 \\

当t=4的时候

E4s1=γλE3(s1)+1=1.61E4s2=γλE3(s2)+1=1E_{4}^{s_1}=\gamma \lambda E_{3}(s_1)+1=1.61 \\ E_{4}^{s_2}=\gamma \lambda E_{3}(s_2)+1=1 \\

因此推测外星人的死是拳击的权重更大一些。

我们能够看出可以使用资格迹Et(s)E_{t}(s)来分配各值函数的资格,也就是说使用资格迹来衡量TD误差发生时,各个状态值函数更新会有多大影响。

δt=Rt+1+γVt(St+1)Vt(St)(6.4)\delta_t=R_{t+1}+\gamma V_{t}(S_{t+1}) -V_{t}(S_t) \tag{6.4}

结合资格迹更新状态价值

V(s)<V(s)+αδEt(s)(6.5)V(s) <- V(s)+\alpha \delta E_{t}(s) \tag{6.5}

前向Sarsa方法

将资格迹与Sarsa方法结合就形成了一个新的算法就是前向的Sarsa方法,与原始的Sarsa方法不同,需要学习的不是Vt(s)V_t(s),而是学习Q(s,a)Q(s,a),其主要思想同TD(λ)TD(\lambda)一致,通过每个回报赋予权重(1λ)λn1(1-\lambda)\lambda^{n-1}的平均多个Q回报进行更新。

这个时候的Q回报相对于累计回报GG,指的是状态行为对(s,a)(s,a)从t时刻开始往后所有回报的衰减的总和。

其中n步以后的Q回报就是

Qtn=rt+1+γrt+2...+γnQ(st+n,at+n)Q_{t}^{n}=r_{t+1} +\gamma r_{t+2}...+\gamma^{n} Q(s_{t+n}, a_{t+n})

对Q回报加权求和的λ\lambda回报QtλQ_{t}^{\lambda}

Qtλ=(1λ)n=1infλn1Qtn(6.6)Q_{t}^{\lambda}=(1-\lambda) \sum_{n=1}^{\inf} \lambda^{n-1}Q_{t}^{n} \tag{6.6}

那么最后的更新公式是

Q(S,A)=Q(St,At)+α(QtλQ(St,At))Q(S,A)=Q(S_t,A_t)+\alpha(Q_{t}^{\lambda}-Q(S_t,A_t))

后向Sarsa方法

后向的Sarsa方法引入资格迹,将当前的行为值函数误差按照比例抛给其他状态行为值函数,作为更新额依据。不同的是,资格迹不再是Et(s)E_t(s)而是Et(s,a)E_t(s,a),就是针对每一个状态行为都有一个资格迹

E0(s,a)=0Et(s,a)=γλEt1(s,a)+I(St=s,At=a)E_{0}(s,a)=0 \\ E_t(s,a)=\gamma \lambda E_{t-1}(s,a)+I(S_t=s,A_t=a)

其他的部分后后向的TD一样

Qt+1(s,a)=Qt(s,a)+αδtEt(s,a)Q_{t+1}(s,a)=Q_{t}(s,a)+\alpha \delta_t E_{t}(s,a)

Sarsa是一个在线算法,也就是采样的策略和评估改进的同一个策略,对于在线算法,算法更新方式很多,很简单就是依据当前的行为值函数估计值采用σ\sigma贪心算法更新。

前向的Watkin’s Q(λ)Q(\lambda)方法

常用的Qlearning是一个离线算法,就是产生的策略和评估的策略不是同一个策略,也就是我说需要依据带有σ\sigma贪心行为的轨迹来学习一个贪心策略。

在进行值函数更新的时候,Q-learning采用的更新公式

Q(s,a)=Q(s,a)+α(R+γ maxQ(s,a)Q(s,a)Q(s,a)=Q(s,a)+\alpha(R+\gamma\ max Q(s',a')-Q(s,a)

而Q-learning是一步更新,如何来进行多步更行的?
假设我们正在进行贪心策略在状态(s,a)的行为值函数,前两个时间步选择的行为是贪心的,但是第三个时间步行为是探索策略,那么有效的轨迹长度,最长就是第二个时间步,从第三个时间步往后的策略都不会理会,也就是说使用最近的一个探索策略对应的时间步长,所以在进行数据探索的时候,一旦发现有探索行为就立刻结束了,
Q回报的加权求和公式同公式6.6

更新公式为

Q(st,at)=Q(st,at)+α(QtλQ(st,at))Q(s_t,a_t)=Q(s_t,a_t)+\alpha(Q_{t}^{\lambda}-Q(s_t,a_t))

后向的Watkin’s Q(λ)Q(\lambda)方法

后向的Q(λ)Q(\lambda)的资格迹如何更新呢?

对位状态行为(s,a)的资格迹,更新分为两部分,首先如果当前的行为选择ata_t,是贪心行为,资格迹乘以系数λγ\lambda \gamma否则资格迹就是0,其次,对于当前在访问的(st,at)(s_t,a_t)其资格迹单独加1.资格迹的更新公式为。

\begin{equation} E_{t}(s,a)=I_{ss_{t}} I_{aa_{t}} + \left\{ \begin{aligned} \lambda \gamma E_{t-1}(s,a)\ \ 如果Q_{t-1}(s_t,a_t)=maxQ_{t-1}(s_t,a) \\ 0 \ \ \ \ \ \ \ \ 其他\\ \end{aligned} \right. \end{equation}

其中IsstIaatI_{ss_{t}} I_{aa_{t}}表示示例函数,IsstI_{ss_t}表示当s=sts=s_{t}其值为1.

假设当前正在访问的状态行为(s,at)(s,a_t),其中ata_t表示探索行为,状态行为对(s,a)(s,a)的资格迹为:Et(s,a)=0+0=0E_{t}(s,a)=0+0=0,与此同时,当前正在访问的状态行为(s,at)(s,a_t)的资格迹Et(st,a)=1+0=1E_{t}(s_{t},a)=1+0=1.

Qt+1(s,a)=Qt(s,a)+αδtEt(s,a)Q_{t+1}(s,a)=Q_{t}(s,a)+\alpha \delta_t E_t(s,a)

其中

δt=rt+1+γmaxQt(st+1,a)Qt(s,at)\delta_t=r_{t+1}+ \gamma max Q_t(s_{t+1},a')-Q_t(s,a_t)

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×