强化学习-4-时序差分
强化学习-4-时序差分
FrWalker强化学习的笔记、理解、感悟及代码实现,仅按个人思维进行精华总结和记录,使用的教程:动手学强化学习
时序差分
单步时序差分
蒙特卡洛增量更新方法:
将
其中,
多步时序差分
蒙特卡洛方法利用当前状态之后每一步的奖励而不使用任何价值估计,时序差分算法只利用一步奖励和下一个状态的价值估计,两者结合可以得到多步时序差分:使用n步的奖励,然后使用之后状态的价值估计。
即将
Sarsa算法
单步Sarsa算法
算法用到了当前状态s、当前动作
每一步根据
实验
1 | import matplotlib.pyplot as plt |
多步Sarsa算法
单步更新公式为:
相应的有:
实验
1 | """多步时序差分更新""" |
Q-learning算法
Q-learning 的时序差分更新方式为:
算法流程:
实验
相比单步sarsa算法,q-learning更新价值函数、计算时序差分误差时直接选取下一状态的动作最大值self.Q_table[s1].max()(贪心/最优略),而sarsa算法则是依靠当前策略选取动作的价值,多出一个a’的输入。
- 单步sarsa算法:
1 | def update_Q(self, s0, a0, r, s1, a1):#s0表示当前状态s,s1表示下一个状态s' |
- 改动后q-learning算法:
1 | def update_Q(self, s0, a0, r, s1):#s0表示当前状态s,s1表示下一个状态s' |
总结
-
Sarsas算法使用
策略来采样数据,也使用 策略来更新价值函数,采样数据的策略(行为策略)和利用数据更新的策略(目标策略)必须相同,是在线策略算法。 -
Q-learning算法使用
策略(也可以使用其他策略)来采样数据,使用贪心策略即最优策略来更新价值函数,采样数据的策略(行为策略)和利用数据更新的策略(目标策略)可以不同,是离线策略算法。 -
判断二者的核心在于计算时序差分误差使用的数据是否来自当前的策略,如果是,则是在线策略算法,否则是离线策略算法。
-
Sarsas算法估计的是当前
策略的动作价值函数,Q-learning算法则是基于贝尔曼最优方程估计最优动作价值函数。故Sarsas算法比较保守,适合动态、风险环境,更平稳、更新速度慢但稳定(探索和利用的平衡);Q-learning算法更冒险,适合静态环境和寻找最优解(最优但不一定安全),更高效、更新速度快但不稳定。 -
无论是Sarsas算法还是Q-learning算法,最终执行路线都是顺着Q(s,a)最大的序列得到。比较多步sarsa、单步sarsa、q-learning算法的实验结果可知,智能体选择的路线逐渐从远离悬崖到靠近悬崖,路线从保守到冒险,但最终都能到达悬崖(符合算法的预期)。