看了莫凡大神(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的行为策略(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 ( 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') maxa′Q(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-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
网上有很多提到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.