0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈Q-Learning和SARSA时序差分算法

454398 来源:博客园 作者: 刘建平Pinard 2020-11-04 14:05 次阅读

Q-Learning这一篇对应Sutton书的第六章部分和UCL强化学习课程的第五讲部分。

1. Q-Learning算法的引入

Q-Learning算法是一种使用时序差分求解强化学习控制问题的方法,回顾下此时我们的控制问题可以表示为:给定强化学习的5个要素:状态集SS, 动作集AA, 即时奖励RR,衰减因子γγ, 探索率ϵϵ, 求解最优的动作价值函数q∗q∗和最优策略π∗π∗。

这一类强化学习的问题求解不需要环境的状态转化模型,是不基于模型的强化学习问题求解方法。对于它的控制问题求解,和蒙特卡罗法类似,都是价值迭代,即通过价值函数的更新,来更新策略,通过策略来产生新的状态和即时奖励,进而更新价值函数。一直进行下去,直到价值函数和策略都收敛。

再回顾下时序差分法的控制问题,可以分为两类,一类是在线控制,即一直使用一个策略来更新价值函数和选择新的动作,比如我们上一篇讲到的SARSA, 而另一类是离线控制,会使用两个控制策略,一个策略用于选择新的动作,另一个策略用于更新价值函数。这一类的经典算法就是Q-Learning。

对于Q-Learning,我们会使用ϵ−ϵ−贪婪法来选择新的动作,这部分和SARSA完全相同。但是对于价值函数的更新,Q-Learning使用的是贪婪法,而不是SARSA的ϵ−ϵ−贪婪法。这一点就是SARSA和Q-Learning本质的区别。

2. Q-Learning算法概述

Q-Learning算法的拓补图入下图所示:

首先我们基于状态SS,用ϵ−ϵ−贪婪法选择到动作AA, 然后执行动作AA,得到奖励RR,并进入状态S′S′,此时,如果是SARSA,会继续基于状态S′S′,用ϵ−ϵ−贪婪法选择A′A′,然后来更新价值函数。但是Q-Learning则不同。

对于Q-Learning,它基于状态S′S′,没有使用ϵ−ϵ−贪婪法选择A′A′,而是使用贪婪法选择A′A′,也就是说,选择使Q(S′,a)Q(S′,a)最大的aa作为A′A′来更新价值函数。用数学公式表示就是:

对应到上图中就是在图下方的三个黑圆圈动作中选择一个使Q(S′,a)Q(S′,a)最大的动作作为A′A′。

此时选择的动作只会参与价值函数的更新,不会真正的执行。价值函数更新后,新的执行动作需要基于状态S′S′,用ϵ−ϵ−贪婪法重新选择得到。这一点也和SARSA稍有不同。对于SARSA,价值函数更新使用的A′A′会作为下一阶段开始时候的执行动作。

下面我们对Q-Learning算法做一个总结。

3. Q-Learning算法流程

下面我们总结下Q-Learning算法的流程。

算法输入:迭代轮数TT,状态集SS, 动作集AA, 步长αα,衰减因子γγ, 探索率ϵϵ,

输出:所有的状态和动作对应的价值QQ1. 随机初始化所有的状态和动作对应的价值QQ. 对于终止状态其QQ值初始化为0.

2. for i from 1 to T,进行迭代。

a) 初始化S为当前状态序列的第一个状态。

b) 用ϵ−ϵ−贪婪法在当前状态SS选择出动作AA
c) 在状态SS执行当前动作AA,得到新状态S′S′和奖励RR
d) 更新价值函数Q(S,A)Q(S,A):

e) S=S′S=S′
f) 如果S′S′是终止状态,当前轮迭代完毕,否则转到步骤b)

4. Q-Learning算法实例:Windy GridWorld

我们还是使用和SARSA一样的例子来研究Q-Learning。如果对windy gridworld的问题还不熟悉,可以复习强化学习(六)时序差分在线控制算法SARSA第4节的第二段。

完整的代码参见我的github: https://github.com/ljpzzz/machinelearning/blob/master/reinforcement-learning/q_learning_windy_world.py

绝大部分代码和SARSA是类似的。这里我们可以重点比较和SARSA不同的部分。区别都在episode这个函数里面。

首先是初始化的时候,我们只初始化状态SS,把AA的产生放到了while循环里面, 而回忆下SARSA会同时初始化状态SS和动作AA,再去执行循环。下面这段Q-Learning的代码对应我们算法的第二步步骤a和b:

# play for an episode

def episode(q_value):

# track the total time steps in this episode

time = 0

# initialize state

state = START

while state != GOAL:

# choose an action based on epsilon-greedy algorithm

if np.random.binomial(1, EPSILON) == 1:

action = np.random.choice(ACTIONS)

else:

values_ = q_value[state[0], state[1], :]

action = np.random.choice([action_ for action_, value_ in enumerate(values_) if value_ == np.max(values_)])

接着我们会去执行动作AA,得到S′S′, 由于奖励不是终止就是-1,不需要单独计算。,这部分和SARSA的代码相同。对应我们Q-Learning算法的第二步步骤c:

next_state = step(state, action)

def step(state, action):

i, j = state

if action == ACTION_UP:

return [max(i - 1 - WIND[j], 0), j]

elif action == ACTION_DOWN:

return [max(min(i + 1 - WIND[j], WORLD_HEIGHT - 1), 0), j]

elif action == ACTION_LEFT:

return [max(i - WIND[j], 0), max(j - 1, 0)]

elif action == ACTION_RIGHT:

return [max(i - WIND[j], 0), min(j + 1, WORLD_WIDTH - 1)]

else:

assert False

后面我们用贪婪法选择出最大的Q(S′,a)Q(S′,a),并更新价值函数,最后更新当前状态SS。对应我们Q-Learning算法的第二步步骤d,e。注意SARSA这里是使用ϵ−ϵ−贪婪法,而不是贪婪法。同时SARSA会同时更新状态SS和动作AA,而Q-Learning只会更新当前状态SS。

values_ = q_value[next_state[0], next_state[1], :]

next_action = np.random.choice([action_ for action_, value_ in enumerate(values_) if value_ == np.max(values_)])

# Sarsa update

q_value[state[0], state[1], action] += \

ALPHA * (REWARD + q_value[next_state[0], next_state[1], next_action] -

q_value[state[0], state[1], action])

state = next_state

跑完完整的代码,大家可以很容易得到这个问题的最优解,进而得到在每个格子里的最优贪婪策略。

5. SARSA vs Q-Learning

现在SARSA和Q-Learning算法我们都讲完了,那么作为时序差分控制算法的两种经典方法吗,他们都有说明特点,各自适用于什么样的场景呢?

Q-Learning直接学习的是最优策略,而SARSA在学习最优策略的同时还在做探索。这导致我们在学习最优策略的时候,如果用SARSA,为了保证收敛,需要制定一个策略,使ϵ−ϵ−贪婪法的超参数ϵϵ在迭代的过程中逐渐变小。Q-Learning没有这个烦恼。

另外一个就是Q-Learning直接学习最优策略,但是最优策略会依赖于训练中产生的一系列数据,所以受样本数据的影响较大,因此受到训练数据方差的影响很大,甚至会影响Q函数的收敛。Q-Learning的深度强化学习版Deep Q-Learning也有这个问题。

在学习过程中,SARSA在收敛的过程中鼓励探索,这样学习过程会比较平滑,不至于过于激进,导致出现像Q-Learning可能遇到一些特殊的最优“陷阱”。比如经典的强化学习问题“Cliff Walk”。

在实际应用中,如果我们是在模拟环境中训练强化学习模型,推荐使用Q-Learning,如果是在线生产环境中训练模型,则推荐使用SARSA。

6. Q-Learning结语

对于Q-Learning和SARSA这样的时序差分算法,对于小型的强化学习问题是非常灵活有效的,但是在大数据时代,异常复杂的状态和可选动作,使Q-Learning和SARSA要维护的Q表异常的大,甚至远远超出内存,这限制了时序差分算法的应用场景。在深度学习兴起后,基于深度学习的强化学习开始占主导地位,因此从下一篇开始我们开始讨论深度强化学习的建模思路。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Q-Learning
    +关注

    关注

    0

    文章

    5

    浏览量

    8105
  • 深度学习
    +关注

    关注

    73

    文章

    5500

    浏览量

    121113
  • SARSA
    +关注

    关注

    0

    文章

    2

    浏览量

    1318
收藏 人收藏

    评论

    相关推荐

    基于演化算法的PID参数优化算法

    PID 参数优化是自动控制领域研究的一个重要问题. 提出了一种演化算法的PID参数优化算法, 同时, 为了增强算法的易用性, 对
    发表于 06-20 10:19 25次下载

    基于Q-Learning的认知无线电系统感知管理算法

    认知无线电系统不仅是一个自适应系统,更应该是一个智能系统。该文将智能控制中的Q-Learning 思想引入到认知无线电系统中,用于解决感知任务在认知用户之间的分配问题,给出了
    发表于 03-06 10:46 9次下载

    基于LCS多机器人的算法介绍

    在各种增强式学习中,Q-learning 或改进的Q-learning 应用的最多。JonathanH.Connell 和Sridhar Mahadevan 在Robot Learning一书
    发表于 10-17 17:43 15次下载
    基于LCS多机器人的<b class='flag-5'>算法</b>介绍

    兼具动态规划DP和蒙特卡洛MC优点的TD Learning算法

    TD Learning(Temporal-Difference Learning时序学习指的是一类无模型的强化学习方法,它是从当前价
    发表于 06-29 17:16 3472次阅读

    基于Q-learning的码率控制算法

    的发展趋势。 HAS采用码流切换技术动态调整码率,整个过程由自适应算法负责。可用带宽估算和码率选择是客户端码率自适应算法的2个核心功能。根据媒体片段的TCP平均下载吞吐量估算网络带宽。码率决策从视频码率集中选择低于估算网络可用带宽的最大码率等级。这种码率选
    发表于 01-10 10:29 0次下载
    基于<b class='flag-5'>Q-learning</b>的码率控制<b class='flag-5'>算法</b>

    强化学习究竟是什么?它与机器学习技术有什么联系?

    Q-learningSARSA是两种最常见的不理解环境强化学习算法,这两者的探索原理不同,但是开发原理是相似的。Q-learning是一种离线学习
    的头像 发表于 04-15 10:32 1.4w次阅读

    关于TD Learning算法的分析

    人工智能之机器学习主要有三大类:1)分类;2)回归;3)聚类。今天我们重点探讨一下TD Learning算法。TD Learning时序
    发表于 06-27 17:43 1894次阅读

    Q Learning算法学习

    Q Learning算法是由Watkins于1989年在其博士论文中提出,是强化学习发展的里程碑,也是目前应用最为广泛的强化学习算法
    发表于 07-05 14:10 3654次阅读

    浅谈时序的在线控制算法SARSA

    在强化学习(五)用时序分法(TD)求解中,我们讨论了用时序分来求解强化学习预测问题的方法,但是对控制算法的求解过程没有深入,本文我们就对
    的头像 发表于 10-29 15:04 2281次阅读
    <b class='flag-5'>浅谈</b><b class='flag-5'>时序</b><b class='flag-5'>差</b><b class='flag-5'>分</b>的在线控制<b class='flag-5'>算法</b>—<b class='flag-5'>SARSA</b>

    强化学习的双权重最小二乘Sarsa算法

    Sarsa,DWLSrsa)。 Dwls-sarsa算法将两权重通过一定方式进行关联得到目标权重,并利用 Sarsa方法对时序
    发表于 04-23 15:03 5次下载
    强化学习的双权重最小二乘<b class='flag-5'>Sarsa</b><b class='flag-5'>算法</b>

    基于双估计器的Speedy Q-learning算法

    Q-learning算法是一种经典的强化学习算法,更新策略由于保守和过估计的原因,存在收敛速度慢的问题。 SpeedyQ-learning算法
    发表于 05-18 15:51 2次下载

    可改善小区网络通信干扰问题的HSARSA算法

    功率的RPABS子帧技术,在保证宏基站自身通信性能的同时减小MBS基站对pico边缘用户的干扰,并运用基于启发函数的改进 HSARSA(λ)算法与环境进行交互,以配置RP-ABS子帧密度与功率大小,达到干扰协调的目的。仿真结果表明,改进 HSARSA算法与原始
    发表于 05-27 15:08 2次下载

    7个流行的强化学习算法及代码实现

    作者:Siddhartha Pramanik 来源:DeepHub IMBA 目前流行的强化学习算法包括 Q-learningSARSA、DDPG、A2C、PPO、DQN 和 TRPO。这些
    的头像 发表于 02-03 20:15 1104次阅读

    7个流行的强化学习算法及代码实现

    作者:SiddharthaPramanik来源:DeepHubIMBA目前流行的强化学习算法包括Q-learningSARSA、DDPG、A2C、PPO、DQN和TRPO。这些算法
    的头像 发表于 02-06 15:06 1510次阅读
    7个流行的强化学习<b class='flag-5'>算法</b>及代码实现

    浅谈Q-Learning在Agent的应用

    经典的文字模型我们已经很熟悉了:训练时,模型不停的预测下一个 token 并与真实语料比较,直到模型的输出分布非常接近于真实分布。
    的头像 发表于 12-02 16:53 895次阅读
    <b class='flag-5'>浅谈</b><b class='flag-5'>Q-Learning</b>在Agent的应用