1. 前言

我们前面介绍了第一个Model Free的模型蒙特卡洛算法。蒙特卡罗法在估计价值时使用了完整序列的长期回报。而且蒙特卡洛法有较大的方差,模型不是很稳定。本节我们介绍时序差分法,时序差分法不需要完整的序列,并且利用Bellman公式和动态规划进行迭代

2. 时序差分和蒙特卡洛比较

前面提到蒙特卡罗的计算方法由于使用了完整的采样得到了长期回报值,所以在价值的估计上的偏差更小,但同时它需要收集完整序列的信息,而序列存在一定的波动,所以价值的方差会比较大。

而时序差分法只考虑了当前一步的回报值,其余的计算均使用了之前的估计值,所以当整体系统没有达到最优时,这样的估计都是存在偏差的,但是由于它只估计了一步,所以它在估计值方面受到的波动比较小,因此方差也会相应减小许多

所以前人发现,蒙特卡罗法和TD算法象征着两个极端:一个为了追求极小的误差使方差变大,一个为缩小方差使误差变大

3. SARAS法

SARAS是时序差分法的一种。

SARAS假设前一时刻的状态价值的值是最优的\(q_{t-1}(s_{t-1},a_{t-1})\),利用当前的行动状态值\(q_{t-1}(s_t,a_t)\)和奖励值\(r_t\)来更新\(q_{t}(s_{t},a_{t})\),公式如下:

\[q_{t}(s_{t},a_{t}) = q_{t-1}(s_{t-1},a_{t-1}) + \frac{1}{N}(r_t + \gamma*q_{t-1}(s_t,a_t) - q_{t-1}(s_{t-1},a_{t-1}))
\]

从上面的公式可以看出SARAS的字母的意思,分别代表了\(s_{t-1},a_{t-1},r_t,a_t,s_t\)这5个状态值。

4. SARAS代码介绍

SARAS的强化学习的过程也分为策略评估和策略提升

策略提升和之前的Model Base都差不多,借鉴策略迭代和价值迭代。

策略评估中有比较大的区别,下面给出策略评估的代码,完整代码GitHub

# sarsa的策略评估
def sarsa_eval(self, agent, env):
state = env.reset()
prev_state = -1
prev_act = -1
while True:
act = agent.play(state, self.epsilon)
next_state, reward, terminate, _ = env.step(act)
if prev_act != -1:
# SARSA的迭代公式
return_val = reward + agent.gamma * (0 if terminate else agent.value_q[state][act])
agent.value_n[prev_state][prev_act] += 1
agent.value_q[prev_state][prev_act] += (return_val - agent.value_q[prev_state][prev_act]) / agent.value_n[prev_state][prev_act] prev_act = act
prev_state = state
state = next_state if terminate:
break

5. 总结

SARSA法和动态规划法比起来,不需要环境的状态转换模型(Model Free),和蒙特卡罗法比起来,不需要完整的状态序列,因此比较灵活。在传统的强化学习方法中使用比较广泛。

但是SARSA算法也有一个传统强化学习方法共有的问题,就是无法求解太复杂的问题。在SARSA算法中,\(q(s,a)\)的值使用一张大表来存储的,如果我们的状态和动作都达到百万乃至千万级,需要在内存里保存的这张大表会超级大,甚至溢出,因此不是很适合解决规模很大的问题。当然,对于不是特别复杂的问题,使用SARSA还是很不错的一种强化学习问题求解方法。

强化学习-时序差分算法(TD)和SARAS法的更多相关文章

  1. 强化学习(十七) 基于模型的强化学习与Dyna算法框架

    在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...

  2. 【强化学习】DQN 算法改进

    DQN 算法改进 (一)Dueling DQN Dueling DQN 是一种基于 DQN 的改进算法.主要突破点:利用模型结构将值函数表示成更加细致的形式,这使得模型能够拥有更好的表现.下面给出公式 ...

  3. 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)

    强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...

  4. 强化学习(五)用时序差分法(TD)求解

    在强化学习(四)用蒙特卡罗法(MC)求解中,我们讲到了使用蒙特卡罗法来求解强化学习问题的方法,虽然蒙特卡罗法很灵活,不需要环境的状态转化概率模型,但是它需要所有的采样序列都是经历完整的状态序列.如果我 ...

  5. 强化学习4-时序差分TD

    之前讲到强化学习在不基于模型时可以用蒙特卡罗方法求解,但是蒙特卡罗方法需要在每次采样时生产完整序列,而在现实中,我们很可能无法生成完整序列,那么又该如何解决这类强化学习问题呢? 由贝尔曼方程 vπ(s ...

  6. 强化学习(七)时序差分离线控制算法Q-Learning

    在强化学习(六)时序差分在线控制算法SARSA中我们讨论了时序差分的在线控制算法SARSA,而另一类时序差分的离线控制算法还没有讨论,因此本文我们关注于时序差分离线控制算法,主要是经典的Q-Learn ...

  7. 【转载】 强化学习(七)时序差分离线控制算法Q-Learning

    原文地址: https://www.cnblogs.com/pinard/p/9669263.html ------------------------------------------------ ...

  8. 【转载】 强化学习(五)用时序差分法(TD)求解

    原文地址: https://www.cnblogs.com/pinard/p/9529828.html ------------------------------------------------ ...

  9. 强化学习(三)—— 时序差分法(SARSA和Q-Learning)

    1.时序差分法基本概念 虽然蒙特卡洛方法可以在不知道状态转移概率矩阵的前提下,灵活地求解强化学习问题,但是蒙特卡洛方法需要所有的采样序列都是完整的状态序列.如果我们没有完整的状态序列就无法用蒙特卡洛方 ...

随机推荐

  1. 本地创建 Git 仓库并关联 Phabricator

    前提条件: 1.熟悉 Git 操作. 2.在搭建好的 Phabricator 上已注册账号,并开通相关权限. 方法一: 1.在本地创建Git仓库. 2.ssh-keygen -t rsa生产公钥私钥, ...

  2. Serializers 序列化组件

    Serializers 序列化组件   为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转 ...

  3. 给有C或C++基础的Python入门 :Python Crash Course 4 操作列表 4.4 -- 4.5

    上接前一篇文章. 4.4 使用列表的一部分 一,切片 切边,顾名思义,就是处理列表的部分元素. 我们可以联系一下C++的一段语句:for(int i = 0; i < n-2; ++i) cou ...

  4. AGC 027D.Modulo Matrix(构造 黑白染色)

    题目链接 \(Description\) 给定\(n\),要求构造一个\(n\times n\)的矩阵,矩阵内的元素两两不同,且任意相邻的两个元素\(x,y\),满足\(\max(x,y)\ \mat ...

  5. IntelliJ IDEA classpath包含哪些文件夹以及如何把文件(夹)添加到classpath下

    在IDEA中,标为蓝色的文件夹被认定为包含在classpath中,例如上图中的resources.src文件夹.把文件位置以"classpath:applicationContext.xml ...

  6. python3.6.5 + selenium +VS Code 运行报错:Unable to find a matching set of capabilities的解决

    在python3.6.5 + selenium +VS Code 环境中,在class的__init__ 方法初始化火狐浏览器时出现以下错误: 发生异常: selenium.common.except ...

  7. Math.round()

    在 JAVA 中四舍五入采用 Math.round(T a) 函数,函数返回的是一个 long 类型的长整型,参数 a 可以是 double 也可以是 float. 查看 JDK 源码: public ...

  8. oracle 分析函数 keep(dense_rank first/last)

    SQL : select * from crisis_sales where dept_id = 'D02' order by sale_date; DEPT_ID  SALE_DATE  GOODS ...

  9. An entry point cannot be marked with the 'async' modifier

    I copied below code from this link.But when I am compiling this code I am getting an entry point can ...

  10. docker dcm4chee

    The received images should show up in the UI of the Archive at http://localhost:8080/dcm4chee-arc/ui ...