三、表格型方法
Sarsa
MDP问题可以表示为四元组(S,A, R,P)。S为状态,A为动作,R为奖励,P为转移概率。也可以在四元组的基础上再加一个衰减因子γ表示为五元组。如果我们知道这些状态转移概率和奖励函数的话,就说这个环境是已知的,因为我们是用这两个函数去描述环境的。
我们用价值函数V,V是状态S的函数,来代表这个状态是好的还是坏的。然后用 Q 函数来判断说在什么状态下做什么动作能够拿到最大奖励,用 Q 函数来表示这个状态-动作值。
Q(s,a) | a1 | a2 |
---|---|---|
s1 | 0 | -90 |
s2 | 0 | 10 |
状态动作对的价值用上面的表格来表示,左侧栏是状态栏,最上面的横栏是动作栏,表格中的数字就是状态动作对的Q函数值。很明显,对于状态s1,Q(s1,a1)=0明显要大于Q(s1,a2)=-90,这就说明在状态s1下,采取动作a2的效果比a1要好。
这张表格里面 Q 函数的意义就是我选择的这个动作,对于我最后成功达到某个目的有多少帮助,这个Q函数值并不是只有当前的reward,它还包括后续slot的总收益。根据这个原则,我选择某个动作是因为我未来可以拿到的那个价值会更高一点。
那么为什么可以用未来的总收益来评价当前这个动作是好是坏呢?举个例子,有一个路口是红灯,假设平常我们出去玩碰到这种红灯,闯红灯的收益是-10,因为闯红灯会扣分会给我们带来负面影响,但这只是对当前时刻来说的。要是我们的车上有一个病情十分严重的病人呢,虽然闯红灯会有负面收益-10,但要是闯了红灯以后把病人送到医院(相当于成功达到了最后某个目的),病人因此得救,我们获得了正面的收益=100,很明显考虑未来总收益是要明显优于只考虑当前收益的,这也是博大精深的“欲扬先抑”。
这也是为什么强化学习需要去学习远期的收益,因为在现实世界中奖励往往是延迟的,是有 delay 的。所以我们一般会从当前状态开始,把后续有可能会收到所有收益加起来计算当前动作的 Q 的价值,让 Q 的价值可以真正地代表当前这个状态下,动作的真正的价值。
但有的时候你把目光放得太长远不好,因为如果事情很快就结束的话,你考虑到最后一步的收益无可厚非。如果是一个持续的没有尽头的任务,即 持续式任务(Continuing Task) ,你把未来的收益全部相加,作为当前的状态价值就很不合理。股票的例子就很典型了,我们要关注的是累积的收益。可是如果说十年之后才有一次大涨大跌,你显然不会把十年后的收益也作为当前动作的考虑因素。那我们会怎么办呢,有句俗话说得好,对远一点的东西,我们就当做近视,就不需要看得太清楚,我们可以引入这个衰减因子γ来去计算这个未来总收益,γ∈[0,1],越往后,γ^n就越小,也就是说越后面的收益对当前价值的影响就会越小
对于Q函数值的更新有多种方式,上面图中就是Sarsa的方式,Sarsa其实就是五个变量的首字母缩写,就是在当前 t 时刻的状态St,采取动作At,进入状态St+1获得的奖励Rt+1,以及在t+1时刻采取的动作At+1。要用这算法进行更新,就必须知道这五个变量的值,因此得名Sarsa。
S
t
,
A
t
,
R
t
+
1
,
S
t
+
1
,
A
t
+
1
S~t, A~t, R~t+1, S~t+1,A~t+1
S t,A t,R t+1,S t+1,A t+1
这个公式就是说可以拿下一步的 Q 值Q(St+1, At+1)来更新我这一步的 Q 值Q(St, At)。为了理解这个公式,如图所示,我们先把Rt+1 + γQ(St+1, At+1)当作是一个目标值,就是Q(St, At)想要去逼近的一个目标值。我们想要计算的就是 Q(St, At)。因为最开始 Q 值都是随机初始化或者是初始化为零,它需要不断地去逼近它理想中真实的 Q 值,我们就叫 target 。Target 就是未来收益的总和大概有多少,而且是带衰减的那个。
on-policy和off-policy
Sarsa 是一种 on-policy 策略。Sarsa 优化的是它实际执行的策略。它直接拿下一步会执行的 action 来去优化 Q 表格,所以 on-policy 在学习的过程中,只存在一种策略,它用一种策略去做 action 的选取,也用一种策略去做优化。
而 off-policy 在学习的过程中,有两种不同的策略。第一个策略是我们希望学到一个最佳的目标策略,另外一个策略是探索环境的策略,它可以大胆地去探索到所有可能的轨迹,然后喂给这个目标策略去学习。而且喂给目标策略的数据中并不需要At+1,而 Sarsa 是有At+1的。典型的off-policy就比如Q-learning。
Q-learning
比如目标策略优化的时候,Q-learning 才不管你下一步去往哪里探索,会不会掉悬崖,我就只选我收益最大一个最优的策略。探索环境的策略,我们叫做 behavior policy(行为策略) ,它像是一个战士,可以在环境里面探索所有的动作和轨迹和经验,然后把这些经验交给目标策略去学习。 Target policy(目标策略) 就像是在后方指挥战术的一个军师,它可以根据自己的经验来学习最优的策略,不需要去和环境交互。
上面是Q-learning更新Q值时的公式。
我们通过对比的方式来去理解 Q-learning 。Q-learning 是 off-policy 的时序差分学习方法,Sarsa 是 on-policy 的时序差分学习方法:
- Sarsa 在更新 Q 表格的时候,它用到的 A’ 。我要获取下一个 Q 值的时候,A’ 是下一个 step 一定会执行的 action 。这个 action 有可能是 ε-greedy 方法 sample 出来的值,也有可能是 max Q 对应的 action,也有可能是随机动作。但是就是它实实在在执行了的那个动作。
- 但是 Q-learning 在更新 Q 表格的时候,它用到这个的 Q 值Q(s’,a’)对应的那个 action ,它不一定是下一个 step 会执行的实际的 action,因为你下一个实际会执行的那个 action 可能会探索。Q-learning 默认的 action 不是通过 behavior policy 来选取的,它是默认 A’ 为最优策略选的动作,所以 Q-learning 在学习的时候,不需要传入 A’,即at+1