强化学习(五):Sarsa算法与Q-Learning算法

上一节主要讲了Monte-Carlo learning,TD learning, TD(λ) 。这三个方法都是为了在给定策略下来估计价值函数V(s)。只不过Monte-Carlo learning需要得到一个完整的episode才能进行一次v值更新,而TD learning则不用,它可以每走一步就更新一次v值。
但是我们的目标是想得到最优策略,所以我们这一讲就是为了通过价值函数,反过来改进策略。两者互相迭代改进,最终收敛到最优策略与最优价值函数。策略评估与策略改进的思想可以参考强化学习第三讲的内容。


On-Policy Monte-Carlo Control

强化学习第三讲的策略优化过程分为两个部分,一个是策略评估,一个是策略改进。从一个策略 π 和v函数开始,先利用当前策略 π 估算v值,然后通过v值来更新策略 π 。交替迭代,最后会收敛到最优策略和最优价值函数。

上面说的交替迭代是在模型已知的情况下进行的。那么对于模型未知的情况,是否还能使用呢?答案是不能。模型未知的情况下无法知道当前状态的所有可能的后续状态。进而无法确定在当前状态下应该采取哪个动作是最好的。解决这个问题是利用Q(s,a)来代替V(s)。这样即使不知道当前状态的所有后续状态,我们也可以根据已有的动作来选择。这样策略评估与策略改进就变成:从一个策略 π 和初始的Q开始,先利用当前策略 π 估算q值,然后通过q值来更新策略 π 。交替迭代,最后会收敛到最优策略和最优价值动作函数。

不过利用Q(s,a)来代替V(s)有一个问题是,因为不知道当前状态能够执行的所有动作,所以只选择当前最好的动作可能会陷入局部最优。所以需要偶尔去尝试新的动作,这就是探索(exploration)。

举个例子:
如下图,在你面前有两扇门,考虑如下的行为、奖励并使用贪婪算法改善策略:
这里写图片描述
你打开左侧门得到即时奖励为0:V(left) = 0;
你打开右侧门得到即时奖励1:V(right) = +1;
在使用贪婪算法时(也就是选择Q(s,a)值最大的那个动作),接下来你将会继续打开右侧的门,而不会尝试打开左侧门。
你打开右侧门得到即时奖励+3:V(right) = +2;
你打开右侧门得到即时奖励+2:V(right) = +2;
。。。
这种情况下,打开右侧门是否就一定是最好的选择呢?答案显而易见是否定的。因此完全使用贪婪算法改善策略通常不一定会得到最优策略。所以需要引入一个随机机制,以一定的概率选择当前的最好策略,同时也有一定的概率选择其他的动作。这就是 ϵgreedy 算法。

On-policy Temporal-Difference Control

强化学习第四讲中我们知道,蒙特卡罗学习需要完整的episode才能更新,而TD learning可以做到单步更新。因此,我们可以讲上面讲的在线蒙特卡罗控制改成在线时序差分学习。下面讲的Sarsa就是在线时序差分学习。


Sarsa

这里写图片描述

  • 注意颜色加深那部分,在observe 到s’之后,又在状态s’下选择了一个动作a’。而s’ 和a’作为下一次循环的状态s和动作a。也就是说,策略产生的动作,会在下一次循环中使用。

Sarsa(λ) 算法

这里写图片描述

  • λ 的理解跟强化学习第四讲 TD(λ) 是一样的思想。
  • 注意这里,每走一步之后,都要对之前的所有经历过的状态进行更新。

Q-Learning


这里写图片描述

  • 上图是Q-Learning算法的伪代码。一般来说,episode并不是已经有了之后我们才来迭代(Q-Learning和Sarsa都是属于TD-Learning),而是每走一步就更新一次Q(s,a)。所以,伪代码中的迭代就是for each step of episode。
  • Choose a from s using policy derived from Q: 这个语句是为了在状态s下选择一个动作a来执行。那么用什么方法来选呢?括号里面举了一个例子: ϵgreedy 贪婪策略,也就是在状态s下所有可执行的动作a中选择Q(s,a)最大的那个动作。
  • Take action a, observe r, s’: 上一步选择了动作之后,就执行该动作,这样会得到当前reward r,并进入下一个状态s’。
  • 接下来就是更新Q(s,a)了,更新Q(s,a)时利用了状态s‘下所有可执行的动作a’中Q(s‘,a’)值最大的那个,比如Q(s’,a1)。但是下次迭代时,在状态s’下不一定会选择动作a1,这一点跟Sarsa的区别就在这。

On and Off policy Learning

  • On-policy: Learn about policy π from experience sampled from π 。On-policy是指产生数据的策略与评估和要改善的策略是同一个策略。比如,agent采用策略 π 采样,得到了一些episodes,然后就可以估算出v值了,然后再利用v值来改进这个策略。
  • Off-policy: Learn about policy π from experience sampled from μ 。Off-policy是指产生数据的策略与评估和改善的策略不是同一个策略。我们用 π 表示用来评估和改进的策略,用 μ 表示产生样本数据的策略。比如一个机器人可以通过学习其他机器人或者学习人类的做法来评估和改进自己的策略。

  • Sarsa是在线(On-policy)算法而Q-Learning是离线(Off-policy)算法。
    关于Q-Learning与Sarsa的Python代码实现,可以参考我的github:
    sarsa算法
    sarsa(lambda)算法
    Q-Learning 算法


参考资料:
David Silver强化学习公开课

https://zhuanlan.zhihu.com/p/28108498

https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/3-3-A-sarsa-lambda/