蒙特卡洛方法是非迭代式的方法(至少要完成一个episode后再行更新),TD是迭代式的方法(不需要完成一个完整的episode),TD方法是一个大类,里面包含很多变体的算法,所以TD算法可以特指基础的TD算法,也可以指一类算法。
一、引出TD算法
从RM算法解决几个问题推出基础的TD算法
- 问题1
求解:
其中为随机变量,
为变量。
可以改写成如下形式,这个的含义就是估计值与期望值的偏差:
问题就转变为求解:
若可以满足RM算法的三个条件,那就可以采用RM算法求解:
属于观测值(估计值与期望值的偏差的观测值),那么具体到一个step如何定义这个观测值?
定义为:截止到当前步的估计值-当前步的随机变量值
其在数值上还等于与误差
的和,故:
所以,最终该问题的迭代求解形式为:
- 问题2
求解:
其中为随机变量,
为变量,
为函数。
同样可以进行改写:
用RM算法求解:
- 问题3
求解:
其中为随机变量,
为变量,
为函数,
为常数。
进行改写:
用RM算法求解:
从最后一个例子可以看出来,如果进行如下对应:
代表奖励,
代表状态,
代表折扣因子,
代表
状态的V值
那问题3就变成了求解贝尔曼公式,若满足三个条件,那么这个贝尔曼公式就可以用RM算法求解,这就引出了基础的TD算法。
二、基础TD算法
基础TD算法是在求解一个给定的policy的V值(求解贝尔曼公式),即policy evaluation。
考虑一个step:上一步迭代完成后的关于状态的V值函数为;步的初始状态为
;状态转移后的状态为
;过程中获取到的奖励为
;系数
我认为是根据状态出现的次数来变化的,但存疑。
把想象成一张表格,
就是对
的新估值,即更新表格。
要明确的是每步TD算法都是对所有的状态进行V值的更新,只不过只有一个状态的V值变化,而其他的保持不变,但也算更新了。这样不断地迭代下去,直到把所有状态的V值迭代出来。
基础TD算法的局限性: 基础的TD算法只能针对一个确定的policy,在model free的情境下,通过收集的数据来估计出每个状态的V值。但它不能估计出Q值,也不能改进policy。
三、Sarsa算法
Sarsa算法把“估计Q值”和“更新policy”这两个步骤结合到了一起,不断进行估计与策略更新,与MC算法由相似之处,但也有区别。
这里有一个问题是Q的表达式与V的表达式好像不一样,直接套用迭代是不是有问题的?那个公式能不能描述不同动作a之间的q值的关系呢?
找出
与
的关系:
所以
计算的并不是
而是
所以公式有问题,并不符合原始公式,非常怪异,但可以理解为用
对
进行近似,以减少计算量。
(1)改进策略依赖的是action_value(Q值)而不是state_value(V值),故Sarsa首先是求解Q:
(2)求解Q值之后,可以采用epsilon-greedy的方法或其他的方法更新策略:
其中A(s)是状态s下的动作a合集,|A(s)|就是a的数量。
四、Expected Sarsa
Expected Sarsa是Sarsa的一个“改进算法”,但其实它更像是由贝尔曼公式推演过来的原始算法。
对比n-step Sarsa,Expected Sarsa是“横着算”。
五、n-step Sarsa
采用截断的思想,可以将Sarsa与MC算法统一成n-step Sarsa。Sarsa采用一步一迭代的方式改进策略,而n-step Sarsa采用多步一迭代的方式改进策略,MC采用一轮一迭代的方式改进策略。
针对(TD target)的估计:
- Sarsa:
- MC:
- n-step Sarsa:
所以n-step Sarsa公式为:
n-step Sarsa的特点或问题:公式虽然摆在那,但是在t时刻的那个步骤中,后续步骤的r我都不知道,就没法在那一步进行更新Q值,必须等必要的数据采完了行。也就是很多步之后才能更新,即其真实应用公式为:
更新Q值之后才能更新policy。推测最后算法的效果很像“滑动窗口”。
六、有关Sarsa算法的小总结
从Sarsa到Expected Sarsa,再到n-step Sarsa,以及MC算法,我们可以看到它们就是在变化公式中TD-target部分的形式,从而演化出不同的算法。
Sarsa系列的算法与MC算法本质上都在求解稍微不同的贝尔曼公式。
后面的Q-learning也是差不多的思路。