- 简介
时间差分法主要基于时间序列的差分数据进行学习,其分为固定策略和非固定策略两种。固定策略时间差分法以Sarsa算法为代表;非固定策略以Q-Learning算法为代表。
- Sarsa算法
Sarsa(state-action-reward-state-action)算法的目的是估计动作值函数q(s,a),即估计在策略Π下对任意状态s上所有可能执行动作a的动作值函数qΠ(s,a)。其动作值函数表达式函数为:
image.png
式子中的Θ=rt+1+γq(st+1,at+1)——时间差分目标(Target);
Θ-q(st,at)——时间差分误差(Error)。
式子中的动作值函数的每一次更新都需要用到5个变量:当前状态s、当前动作a、环境反馈奖励r、下一时间步状态s’和下一时间步动作a’。这5个变量组合成(s,a,r,s’,a’),便是时间差分控制Sarsa算法的由来。其具体算法流程如下:
输入:随机状态s
输出:动作值函数q(s,a)
(1) 初始化:
(2)对于任意状态s,设置q(s,a)为任意值
(3)重复经验轨迹:
(4) 初始化状态s
(5) 根据动作值q,在状态s下执行动作a
(6) 重复经验轨迹中时间步t:
(7) 根据动作值q,在状态s下执行动作a
(8) 更新动作值函数:q(s,a)←q(s,a)+ɑ[r+γq(s’,a’)-q(s,a)]
(9) 记录新的状态和动作,s←s’,a←a’
(10) 直至终止状态s
(11)输出动作值函数q(s,a)
image.png
Sarsa算法首先随机初始化动作值函数q,随后迭代式地进行经验轨迹的采样。在采集某一条经验轨迹时,智能体首先根据贪婪策略(Greedy Policy),在状态s下选择并执行动作a;接下来在环境中进行学习,并更新动作值函数q(s,a),直至算法结束。
- Q-Learning算法
Q-Learning算法在动作值函数q(s,a)更新中,采用的是不同于选择动作时所遵循的策略。该算法动作值函数q(s,a)的更新如下:
image.png
与Sarsa算法相比较,区别在于Q-Learning算法更新Q值时,时间差分目标使用动作值函数最大值maxq(st+1,at),与当前选择动作所使用的策略无关,因此动作值Q往往是最优的。
其算法流程如下所示。与Sarsa类似,区别在进入重复经验轨迹的循环后,Q-Learning算法在初始化状态s后,直接进入该经验轨迹的迭代中,并根据贪婪策略在状态s’下选择动作a’。
输入:随机状态s
输出:动作值函数q(s,a)
(1)初始化:
(2)对于任意状态s,设置q(s,a)为任意值
(3)重复经验轨迹:
(4) 初始化状态s
(5) 重复经验轨迹中时间步t:
(6) 根据动作值q,在状态s下执行动作a
(7) 执行动作a,获得奖励和下一时间步的状态s’
(8) 更新动作值函数:q(s,a)←q(s,a)+a[r+γmaxq(s’,a)-q(s,a)]
(9) 记录新的状态,s←s’
(10) 直至终止时间步Ts
(11)输出动作值函数q(s,a)
image.png
- 总结
时间差分法与蒙特卡罗法类似,基于采样数据估计当前价值函数。不同的是时间差分法采用动态规划法中的提升算法(Boosting)计算当前价值函数,而蒙特卡罗是在每次采样结束之后才能计算当前的价值函数。
image.png
从算法来看,这就是他们两最大的不同之处了。因为Sarsa是说到做到型,所以也可以称之为on-policy,在线学习,可以学着自己在做的事情。而Q- learning是说到但并不一定做到,所以它也叫作Off-policy,离线学习。而因为有了maxQ,Q-learning也是一个特别勇敢的算法。为什么说他勇敢呢,因为Q-learning永远都会选择最近的一条通往目标的道路,不管这条路会有多危险。而Sarsa则是相当保守,他会选择规避特殊情况,达到目的是次要的,首先要保障安全性,这就是使用Sarsa方法的不同之处。