Q-learning

Q-learning是基于TD(0)TD(0)TD(0)的无模型强化学习算法。其采用的价值函数为动作价值函数Q(s,a)。
主要价值函数迭代公式为:
Qπ(st,at)=Qπ(st,at)+α(rt+1+γmaxaQ(st+1,at+1)−Q(st,a))Q_π(s_t,a_t)=Q_π(s_t,a_t)+\alpha(r_{t+1}+γmax_aQ(s_{t+1},a_{t+1})-Q(s_t,a))Qπ​(st​,at​)=Qπ​(st​,at​)+α(rt+1​+γmaxa​Q(st+1​,at+1​)−Q(st​,a))

Q-learning是离策略学习算法(off-policy),即评估动作价值函数所用的策略,和agent实际选择动作和环境交互的策略是不一样的。评估动作价值函数所用的策略是完全贪婪策略,即取动作价值最高的那个动作的价值函数值进行评估更新价值函数,而在实际探索用的策略是ϵ−greed\epsilon-greedϵ−greed策略,有概率随机选择其他动作,而不一定是选价值最高的动作。Q-learning探索策略采用ϵ−greed\epsilon-greedϵ−greed策略,保证了所有的状态-动作对都有非0的概率被访问到,保证Q-learning最终能够收敛,但是收敛速度可能会比较慢。

Sarsa

Sarsa和Q-learning很相似,主要区别在是Sarsa是在线策略(on-policy)学习,评估价值函数所用的策略和探索的策略是同一个。
主要的价值函数迭代公式:
Qπ(st,at)=Qπ(st,at)+α(rt+1+γQ(st+1,at+1)−Q(st,a))Q_π(s_t,a_t)=Q_π(s_t,a_t)+\alpha(r_{t+1}+γQ(s_{t+1},a_{t+1})-Q(s_t,a))Qπ​(st​,at​)=Qπ​(st​,at​)+α(rt+1​+γQ(st+1​,at+1​)−Q(st​,a))

Sarsa算法采用ϵ−greed\epsilon-greedϵ−greed策略进行探索,评估时也是采用在探索时选择的那个动作的价值函数进行更新迭代,与Q-learing的评估时采用的动作不一定是探索时的动作这点存在区别。
Sarsa,通过让ϵ\epsilonϵ随时训练步数增加,逐渐减少,探索到后面,已经学到了不少经验,减少探索比例,保证价值函数能够收敛。

在线策略和离线策略的优劣对比

在线策略
1.直接用样本自身属性去估计总体。
2.更简单,收敛性好。
3.数据利用率差(只能是Agent当前和环境交互的样本)
4.限定了学习过程策略是随机策略。
离线策略
1.一般采样是采用随机性策略,学习采用确定性策略
2.需要结合重要性采样才能使用样本估计总体(Q-learning不需要采用重要性采样)
3.方差更大,收敛性差,数据利用率高(可以采用其他智能体的采样数据)
4.采样策略要比学习策略能有探索性。

Sarsa(λ\lambdaλ)

Sarsa(λ\lambdaλ)采用的是TD(λ\lambdaλ)的思想。引入资格迹ES,实现每步进行更新。

Sarsa(λ\lambdaλ)在一步行动后,会对所有的动作价值函数进行更新,但是根据资格迹ES大小不同,更新的幅度不同。

Sarsa(λ\lambdaλ)和Sarsa(0)的对比。

假设一个格子世界,任务目标,从起点走到终点目标。越界时,不做改变,除了到达终点目标奖励值为1时,其他奖励为0。
初始化所有的状态-动作对的价值函数Q(s,a)Q(s,a)Q(s,a)为0,倘若,第一个episode,智能体找到了终点目标。
对于Sarsa(0)的价值函数更新情况:

Qπ(st,at)=Qπ(st,at)+α(rt+1+γQ(st+1,at+1)−Q(st,a))Q_π(s_t,a_t)=Q_π(s_t,a_t)+\alpha(r_{t+1}+γQ(s_{t+1},a_{t+1})-Q(s_t,a))Qπ​(st​,at​)=Qπ​(st​,at​)+α(rt+1​+γQ(st+1​,at+1​)−Q(st​,a))
由于初始时Q(s,a)Q(s,a)Q(s,a)为0,除了倒数第二步获得立即奖励,可以更新Q(s,a)不等于0时,其他Q(s,a)更新后还是0,即经过大量的探索后,更新的价值函数很少,在进行下一轮时,才会对倒数三步价值进行有效更新。
对于Sarsa(λ\lambdaλ):

由于有ES记录整个走过的状态价值对重要性,在最后一步时获得奖励时,更新过程:
δ=r+γQ(s′,a′)−Q(s,a)=1+0−0=1\delta=r+\gamma Q(s\prime,a\prime)-Q(s,a)=1+0-0=1δ=r+γQ(s′,a′)−Q(s,a)=1+0−0=1
更新所有状态-动作对的ES,进行所有的状态-动作价值函数的更新。
Q(s,a)=Q(s,a)+αδESQ(s,a)=Q(s,a)+\alpha \delta ESQ(s,a)=Q(s,a)+αδES
由于此时的δ\deltaδ不等于0,则所经历过的状态-动作对的价值函数都会根据资格迹的大小进行或大或小的更新。当然在这之前,也是每走一步就进行所有历史状态-动作价值函数的更新,但是由于之前的δ\deltaδ为0,更新后还是0,和sarsa(0)在早期的更新结果是一样的,但是在遇到一个有奖励,即δ\deltaδ不为0的时候,sarsa(0)只能对相邻的状态-动作价值进行有效的更新,而Sarsa(λ\lambdaλ)能够对之前历史所有的状态-动作价值进行有效的更新,更为高效。

总结

Q-learning和Sarsa算法都需要通过表来进行Q值的存储迭代,对于大规模的问题,s,a数量巨大,难以直接使用,需要用其他的形式,通过一些函数来拟合这个Q表。

参考:

https://zhuanlan.zhihu.com/p/79046204
https://zhuanlan.zhihu.com/p/79047776

Q-learning和Sarsa相关推荐

  1. 初学者的强化学习q learning和sarsa

    Reinforcement learning is a fast-moving field. Many companies are realizing the potential of RL. Rec ...

  2. 强化学习入门 : 一文入门强化学习 (Sarsa、Q learning、Monte-carlo learning、Deep-Q-Network等)

    最近博主在看强化学习的资料,找到这两个觉得特别适合入门,一个是"一文入门深度学习",一个是"莫烦PYTHON". 建议:看资料的时候可以多种资料一起参考,一边调 ...

  3. 强化学习之Q学习与SARSA

    ** Q学习路径规划与SARSA法路径规划 ** Q学习与SARSA学习简介 强化学习的历史可以用两条各自独立但丰富多彩的主线来追溯..一条主线聚焦 于研究最优化控制,以及使用价值函数动态规划等算法来 ...

  4. [强化学习实战]出租车调度-Q learning SARSA

    出租车调度-Q learning & SARSA 案例分析 实验环境使用 同策时序差分学习调度 异策时序差分调度 资格迹学习调度 结论 代码链接 案例分析 本节考虑Gym库里出租车调度问题(T ...

  5. [PARL强化学习]Sarsa和Q—learning的实现

    [PARL强化学习]Sarsa和Q-learning的实现 Sarsa和Q-learning都是利用表格法再根据MDP四元组<S,A,P,R>:S: state状态,a: action动作 ...

  6. 强化学习4——无模型控制model-free control (On-Policy learning:Sarsa和Off-policy learning:Q-learning)

    文章目录 前言 无模型控制 问题 思路 方法 On-Policy learning MC Sarsa Off-policy learning Q-learning On-Policy learning ...

  7. Deep Q learning: DQN及其改进

    Deep Q Learning Generalization Deep Reinforcement Learning 使用深度神经网络来表示 价值函数 策略 模型 使用随机梯度下降(SGD)优化los ...

  8. CNNs and Deep Q Learning

    前面的一篇博文介绍了函数价值近似,是以简单的线性函数来做的,这篇博文介绍使用深度神经网络来做函数近似,也就是Deep RL.这篇博文前半部分介绍DNN.CNN,熟悉这些的读者可以跳过,直接看后半部分的 ...

  9. Q学习(Q learning) 强化学习

    Q学习(Q learning) 强化学习的简单例子 Matlab实现 可视化_Morty 的挖坑记录-CSDN博客 强化学习(MATLAB) - 叮叮当当sunny - 博客园

  10. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(复杂迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(复杂迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

最新文章

  1. 浏览器的工作过程(转)
  2. 《javascript模式》 容易踩中的那些坑
  3. mysql utf8 和 utf8mb4 区别
  4. Android 反射 换一种方式编程
  5. p2p linux 开源项目,权威开源项目(linux系统、sip、live555)
  6. Spring4.2.6+SpringMVC4.2.6+MyBatis3.4.0 整合
  7. cookie记录了服务器相关的信息,使用cookie记录信息(精选).ppt
  8. Android 功耗(14)----Android功耗 问题debug处理
  9. 因在Java中不会优雅地判空,被CTO屌的快哭了。。。
  10. abp框架 mysql_ABP框架迁移到Mysql
  11. css实现w3cschool广告轮播图
  12. Django序列化器
  13. 【答读者问8】backtrader中多股票回测时停牌等缺失数据的处理方法
  14. Java项目:SSM酒店客房管理系统
  15. 微信小程序保存图片以及分享给朋友
  16. GitHub注册过程(图文详细讲解)
  17. linux中使用crontab出现crontab: installing new crontab
  18. java画太极加图片_新手初学java 尝试编程绘画太极图
  19. MVC 3.0 学习笔记(Razor CSHTML))
  20. 浅析Java代码审计中的SQL注入漏洞

热门文章

  1. .net程序员转战android第二篇---牛刀小试
  2. 国外值得关注的网站系列之一
  3. linux命令比较命令,Linux命令 比较文件
  4. javascript 绘制uml_Javascript 设计模式之面向对象与 UML 类图
  5. -webkit-padding-start: 40px;ul的padding-left:40px;问题
  6. js统计页面访问次数
  7. php算数组内值的总和,怎样使用array_sum() 计算数组元素值总和
  8. rabbitmq python 发送失败_RabbitMQ Python端发送消息给Java端 接受消息全数字问题
  9. 清华大学电机学答案_电机学清华大学答案
  10. 动物统计 nyoj286