上一节主要讲了Monte-Carlo learning,TD learning,
但是我们的目标是想得到最优策略,所以我们这一讲就是为了通过价值函数,反过来改进策略。两者互相迭代改进,最终收敛到最优策略与最优价值函数。策略评估与策略改进的思想可以参考强化学习第三讲的内容。
强化学习第三讲的策略优化过程分为两个部分,一个是策略评估,一个是策略改进。从一个策略
上面说的交替迭代是在模型已知的情况下进行的。那么对于模型未知的情况,是否还能使用呢?答案是不能。模型未知的情况下无法知道当前状态的所有可能的后续状态。进而无法确定在当前状态下应该采取哪个动作是最好的。解决这个问题是利用Q(s,a)来代替V(s)。这样即使不知道当前状态的所有后续状态,我们也可以根据已有的动作来选择。这样策略评估与策略改进就变成:从一个策略
不过利用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;
。。。
这种情况下,打开右侧门是否就一定是最好的选择呢?答案显而易见是否定的。因此完全使用贪婪算法改善策略通常不一定会得到最优策略。所以需要引入一个随机机制,以一定的概率选择当前的最好策略,同时也有一定的概率选择其他的动作。这就是
在强化学习第四讲中我们知道,蒙特卡罗学习需要完整的episode才能更新,而TD learning可以做到单步更新。因此,我们可以讲上面讲的在线蒙特卡罗控制改成在线时序差分学习。下面讲的Sarsa就是在线时序差分学习。
Off-policy: Learn about 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/