[强化学习] off-policy和on-policy、Q-learning和Sarsa的区别、Sarsa-lambda、Q-lambda

看了莫凡大神(link)关于Q-learning和Sarsa的视频之后,大概了解了Q-learning和Sarsa,但是对其区别还是有点懵懵懂懂,这篇博客便是后续对其理解的过程记录。

Q-learning和Sarsa都是时序差分模型,这部分后面将再次介绍。提到Q-learning和Sarsa的区别,避免不了提到“off-policy”和“online-policy”策略,下面我将首先介绍“off-policy”和“on-policy”,然后再讲Q-learning和Sarsa的区别,最后介绍下Sarsa-lambda和Q-lambda的思想。

注: 这篇文章需要对Q-learning和Sarsa有所了解,莫凡大神的视频已经把原理+代码很好的讲解了,这里就不再重复,不了解的请移步上述链接观看(因为莫凡大大的文章中已有代码分析,这里不再重复,看代码有利于更好的了解流程)。

一、off-policy和on-policy

off-policy和on-policy的行为策略(behavior policy,即选择action的策略)都是相同的,其主要区别在于其目标选择策略(target policy,即选择下一个action用于计算Q的策略),对于off-policy其目标选择策略是greedy策略(也就是直接选择最优的action)。而on-policy的目标选择策略除了考虑最优值之外,还考虑带来explore作用的值,比如 ε \varepsilon ε-greedy便是on-policy选择策略的一种:其思想是以 ε \varepsilon ε的概率选择最优的action,而以 1 − ε 1-\varepsilon 1ε的概率随机选择值(这个性质我们可以将其叫做explore,正是因为其随机性,可以探索到各个action)。

在Sutton的《Reinforcement learning: An introduction》给出的off-policy和on-policy的有一段描述特别好理解,内容如下(内容略长,请耐心读完):

All learning control methods face a dilemma: They seek to learn action values conditional on subsequent optimal behavior, but they need to behave non-optimally in order to explore all actions(to find the optimal actions). How can they learn about the optimal policy while behaving according to an exploratory policy? The on-policy approach in the preceding section is actually a compromise—it learns action values not for the optimal policy, but for a near-optimal policy that still explores. A more straightforward approach is to use two policies, one that is learned about and that becomes the optimal policy, and one that is more exploratory and is used to generate behavior. The policy being learned about is called the target policy, and the policy used to generate behavior is called the behavior policy. In this case we say that learning is from data “off” the target policy, and the overall process is termed off-policy learning.

On-policy methods are generally simpler and are considered first. Off-policy methods require additional concepts and notation, and because the data is due to a different policy, off-policy are often of greater variance and are slower to converge. On the other hand, off-policy methods are more powerful and general. They include on-policy methods as the special case in which the target and behavior policies are the same.

二、Q-learning和Sarsa

Q-learning和Sarsa都是时序差分方法,其基本公式为:

Q ( s t , a t ) = Q ( s t , a t ) + α ( r t + 1 + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ) \begin{aligned} Q(s_t, a_t ) =Q(s_t, a_t ) + \alpha(r_{t+1} + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t )) \end{aligned} Q(st,at)=Q(st,at)+α(rt+1+γQ(st+1,at+1)Q(st,at))

这里, r t + 1 r_{t+1} rt+1为当前奖赏, Q ( s t + 1 , a t + 1 ) Q(s_{t+1}, a_{t+1}) Q(st+1,at+1)为下个动作对的值函数,我们使用 r t + γ Q ( s t + 1 , a t + 1 ) r_t + \gamma Q(s_{t+1}, a_{t+1}) rt+γQ(st+1,at+1)来近似等于 R R R,即累积奖赏 R R R近似等于当前奖赏和下个(state, action)奖赏之和。通过这种方法,我们可以对模型进行增量更新。

那么 a t + 1 a_{t+1} at+1如何选取呢?这就涉及到上述提到的on-policy和off-policy了。

一种策略是使用off-policy的策略,其使用当前的策略,为下一个状态计算一个最优动作,对应的便是Q-learning算法。令一种选择的方法是使用on-policy的策略,即使用的采样轨迹是在下一个状态上实际执行的动作,对应的便是Sarsa算法。

伪代码如下,这里使用莫凡大神的图:

从上面的伪代码可以看出,Q-learning和Sarsa在行为策略部分都使用了类似于 ε \varepsilon ε-greedy的算法(Choose a from s using policy derived from Q(e.g., epsilon-greedy))。而在目标策略值评估时,Q-learning使用了off-policy的方法,即选择了下一时刻使得价值最大的行动(但是实际上,下一时刻的行为可能并不是价值最大的行动),即算法的 m a x a ′ Q ( s ′ , a ′ ) max_{a'}Q(s', a') maxaQ(s,a)部分;在Sarsa算法中,目标策略仍然使用的是类似于 ε \varepsilon ε-greedy的算法,这使得Sarsa是on-policy的算法,在伪代码中是Choose a‘ from s’ using policy derived from Q(e.g., epsilon-greedy)

简单来说,Q-learning和Sarsa算法的不同主要体现在值函数的评估上(目标策略)。Q-learning使用的是贪婪思想,直接选取下一时刻价值最大的行动(尽管真实的行动并不一定是价值最大的行动)。而Sarsa是根据下一步的真实行动来进行价值估计,即Q函数的更新。

三、Sarsa的改进版Sarsa-lambda

Sarsa-lambda是Sarsa的改进版,其可以增加Sarsa的速度,它和Sarsa的主要区别是:

在每次take action获得reward后,Sarsa只对前一步Q(s,a)进行更新(Q-learning也是只对前一步进行更新),Sarsa-lambda则会对获得reward之前的步进行更新。

伪代码如下:

在Sarsa-lambda中需要维护一张E表,用来记录之前走的路的贡献价值。这里仔细看,TD偏差仍然是 δ = R + γ Q ( S ′ , A ′ ) − Q ( S , A ) \delta=R+\gamma Q(S', A') - Q(S,A) δ=R+γQ(S,A)Q(S,A) ,只是在更新的时候,我们在 δ \delta δ后面乘以了一个系数 E ( s , a ) E(s,a) E(s,a),即加入了重要程度。而对于 E ( s , a ) E(s,a) E(s,a)采用了衰减更新思想, γ \gamma γ便是其衰减因子。 E ( S , A ) = E ( S , A ) + 1 E(S,A) =E(S,A)+1 E(S,A)=E(S,A)+1表示当前步为 ( S , A ) (S, A) (S,A),所以我们把 E ( S , A ) E(S,A) E(S,A)加1,使其权重变大,但是若之后一直都不走这一步,因为后续有 E ( s , a ) ← γ λ E ( s , a ) E(s,a) \leftarrow \gamma \lambda E(s,a) E(s,a)γλE(s,a)所以 E ( s , a ) E(s,a) E(s,a)的值会不断衰减,也就是和当前的reward距离越大,对当前的重要程度越低。

为了防止 E ( S , A ) = E ( S , A ) + 1 E(S,A) =E(S,A)+1 E(S,A)=E(S,A)+1会使得 E ( S , A ) E(S,A) E(S,A)的值过大, 可以采用下面的策略替代上述 E ( S , A ) = E ( S , A ) + 1 E(S,A) =E(S,A)+1 E(S,A)=E(S,A)+1

E ( s , a ) = { 1 s = S , s = A 0 o t h e r \begin{aligned} E(s,a) = \left\{\begin{matrix} 1 & s= S, s= A \\ 0 & other \end{matrix}\right. \end{aligned} E(s,a)={10s=S,s=Aother

四、Q-lambda

网上有很多提到Sarsa-lambda的算法,那有没有关于Q-lambda的算法呢?答案是有的,但是好像大家用的不是很多。下图是参考文章[7]中Sarsa-lambda和Q-lambda的伪代码。和Sarsa-lambda一样,Q-lambda也是在更新的时候考虑到了之前走过的步。具体细节请参考[7]。


参考文章:
[1] Sutton R S, Barto A G. Reinforcement learning: An introduction[M]. MIT press, 2018.
[2] [StackExchange] what-is-the-difference-between-off-policy-and-on-policy-learning
[3] 笪庆,曾安详. 强化学习实战
[4] 冯超. 强化学习精要
[5] 郭宪, 方勇纯. 深入浅出强化学习:原理入门
[6] 莫凡:强化学习
[7] Gupta K M. Performance Comparison of Sarsa (λ) and Watkin’s Q (λ) Algorithms[J]. nd): n. pag. Print.

Q-learningSARSA都属于时序差分强化学习方法,而不是蒙特卡洛强化学习方法。 时序差分强化学习是一种结合了动态规划和蒙特卡洛方法的强化学习方法。它通过使用经验数据进行增量式的更新,同时利用了当前和未来的估计值来逼近最优值函数。 具体来说,Q-learningSARSA都是基于Q值函数的时序差分强化学习算法。 1. Q-learning:Q-learning是一种基于动态规划的无模型强化学习算法。它使用了时序差分(TD)方法,通过不断迭代更新Q值函数的估计值,使其逼近最优的Q值。Q-learning算法通过将当前状态和动作的估计值与下一个状态和动作的最大估计值相结合,来更新Q值函数的估计值。 2. SARSASARSA是一种基于时序差分的强化学习算法,也是一种模型-free的强化学习算法。SARSA算法使用了时序差分的方法,通过不断迭代更新Q值函数的估计值。与Q-learning不同的是,SARSA算法采用了一个策略(Policy)来决定下一个动作,并在更新Q值时使用下一个动作的估计值。 时序差分强化学习方法与蒙特卡洛强化学习方法相比,具有更高的效率和更好的适应性。它可以在每个时间步骤中进行更新,不需要等到任务结束后才进行更新,从而更快地收敛到最优策略。而蒙特卡洛强化学习方法则需要等到任务结束后才能获取完整的回报信息,进行全局更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值