【RL从入门到放弃】【二 表格型RL】
1、Q_learning
探索者游戏,从开始位置左右移动到终点位置,结束的时候奖励值为1,其余时刻奖励值为0
q_table/值函数矩阵
states + actions
choose action
Left或者right,how to choose action?
行动策略(action policy)是ε-greedy策略,引入的一个参数是epsilon greedy,
Left:0 right:0.1 此时action为right
#产生一个随机数#print(np.random.uniform() )if (np.random.uniform() > EPSILON) or ((state_actions == 0).all()):action_name = np.random.choice(ACTIONS)print("radom: "+action_name)else: # act greedy 90%action_name = state_actions.idxmax() 最大动作值函数/行为值函数
ε-greedy 可以参考【RL入门到放弃】【一】
Reward
magbe you can saw env feedback
Rt:0/Rt:1 when r=1
Gt:0/Gt:1
When s_ is terminal R=1 otherwise R=0 including it is wall
def get_env_feedback(S, A):# This is how agent will interact with the environmentif A == 'right': # move rightif S == N_STATES - 2: # terminateS_ = 'terminal'R = 1else:S_ = S + 1R = 0else: # move leftR = 0if S == 0:S_ = S # reach the wallelse:S_ = S - 1return S_, R
fade code
arbitrarily : 随机地
Episode : 回合/幕【经验】
Q( s, a ) : 状态值函数
TD : TD差分目标
r : 立即回报
目标策略:贪婪策略
q 值更新
mdp:(S, A, P, R,γ)
N_STATES : 5
ACTIONS = [‘left’, ‘right’]
EPSILON = 0.9
ALPHA = 0.1
GAMMA = 0.9【0~1】
One episode
* = 0 + 0.1*[1+0.9*0 - 0] = 0.1
Two episode
* = 0 + 0.1*[0+0.9*0.1 - 0] = 0.009
* = 0.1 + 0.1[1+0.9*0 – 0.1] = 0.19
完整code可见
https://github.com/feifeiyuan/Reinforcement-learning-with-tensorflow/tree/master/contents/1_command_line_reinforcement_learning
结果:
训练1000次,可以看到动作值函数是收敛的【这里可能错了,因为我是直接对所有的q值求和,应该是直接append计算的那个q值】
探索者游戏里面的三个图像数据如下:
在网格一下子天堂一下子地狱的问题里面
特点:异策略+时间差分
off-policy
就是指行动策略和评估策略不是同一个策略,行动策略采用了贪心的ϵ-greedy策略(第5行),
而评估策略采用了maxπQ(s,a)贪心策略(第7行)!
时间差分
上面提到的TD目标
反思
1、为什么选择q值最大的action会是最优的策略,因为q值是评价S价值的标准
2、为什么s-greedy策略,因为要顾及探索性
3、何时终止探索,给出最优的序列呢?其实后面例子看多了,也就会了。
2、sarsa
一般sarsa算法和q_learning算法需要相互比较
依旧是网格,一念天堂一念地狱的游戏
3、TD(lambda)
更新当前值函数,用到了下一个状态的值函数
利用第二步值函数来估计当前值函数可以表示为
以此类推,利用第n步的值函数更新当前值函数可表示
可以利用n步值函数来估计当前值函数,也就是说当前值函数有n种估计方法。
在乘上加权因子需要加权的原因如下:
利用 更新当前状态的值函数的方法称为 的方法。一般可以从两个视角理解
前向视角
第一个视角是前向视角,该视角也是 的定义。
假设一个人坐在状态流上拿着望远镜看前面,前面是将来的状态。估计当前状态的值函数时,从
的定义中可以看到,它需要用将来时刻的值函数。也就是说,前向观点通过观看将来状态的值函数来估计当前的值函数
利用 的前向观点估计值函数时,的计算用到了将来时刻的值函数,因此需要整个试验结束后才能计算,这和蒙特卡罗方法相似。是否有某种更新方法不需要等到试验结束就可以更新当前状态的值函数?有!这种增量式的更新方法需要利用的后向观点。
后向视角
人骑坐在状态流上,手里拿着话筒,面朝已经经历过的状态流,获得当前回报并利用下一个状态的值函数得到TD偏差后,此人会向已经经历过的状态喊话,告诉这些状态处的值函数需要利用当前时刻的 TD偏差更新。此时过往的每个状态值函数更新的大小应该与距离当前状态的步数有关。假设当前状态为 ,TD偏差为 ,那么 处的值函数更新应该乘以一个衰减因子,状态 处的值函数更新应该乘以 ,以此类推。
更新过程如下。
首先,计算当前状态的TD偏差
其次,更新适合度轨迹
最后,对于状态空间中的每个状态s,更新值函数
前向和后向视角的异同
sarsa(N)的伪代码
也是网格游戏,一念天堂,一念地狱。
采用:self.eligibility_trace.loc[s, a] += 1
采用:
self.eligibility_trace.loc[s, :] *= 0
self.eligibility_trace.loc[s, a] = 1
实际上一直都没有理解那个最后的终止条件到底是什么意思!!!!
【RL从入门到放弃】【二 表格型RL】相关推荐
- 深化学习(RL)概念应用以及基于表格型、神经网络型、策略梯度、连续动作空间求解RL
深化学习(RL)概念应用以及基于表格型.神经网络型.策略梯度.连续动作空间求解RL 目录 一.概念以及应用 二.基于表格型求解RL--Sarsa和learning 表格型方法--Sarsa 1. Sa ...
- Hive从入门到放弃——Hive表DML的艺术性(八)
背 景 HiveQL语法和MySQL的语法很像,当然Hive本身作为大数据的数据仓库,本身对数据的修改和删除并不铭感,虽然Hive支持通过ORC为存储文件实现数据的删除和修改,但是这个功能相对比较 ...
- Hive从入门到放弃——HiveQL表级别DDL设计的艺术性(五)
HiveQL数据库中的表DDL操作 博客Hive从入门到放弃--HiveQL数据库级别DDL设计的艺术性(四)聊完了数据库的基本操作,我们再来聊聊Hive内表的操作. 创建表 官方推荐建表的结 ...
- FlaskWeb开发从入门到放弃(二)
第5章 章节五 01 内容概要 02 内容回顾 03 面向对象相关补充:metaclass(一) 04 面向对象相关补充:metaclass(二) 05 WTforms实例化流程分析(一) 06 WT ...
- 【RL从入门到放弃】【一】
1.RL和ML和DL之间的关系 2.马尔卡夫 马尔卡夫性: 系统的下一个状态St+1仅与当前状态St相关 定义:状态st 是马尔科夫的,当且仅当P[st+1 |st ]=P[st+1 |s1 ,-,s ...
- 【RL从入门到放弃】【十四】
alphazero下五子棋,code赏析 1.play 之前直接开始就开始train,结果导致学习mcts的时候,觉得甚是复杂,所以这里先讲如何去玩 play class Play(object):d ...
- keras从入门到放弃(二十二)一维卷积处理 RNN文本分类
什么是一维卷积 一维卷积 • 图中的输入的数据维度为8,过滤器的维度为5.与二维卷积类似,卷积后输出的数据维度为8−5+1=48−5+1=4. • 如果过滤器数量仍为1,输入数据的channel数量变 ...
- 【RL从入门到放弃】【八】
1.[gym]环境中添加自定义的环境 1.将定义的class文件放在这个下面mdp.py C:\Users\xxxx\AppData\Local\Continuum\anaconda3\Lib\sit ...
- Swift3.0从入门到放弃(二)
Swift中的数组 Swift中数组的定义 Swift中数组的操作 Swift中数组的遍历 Swift中数组的合并 Swift中的字典 Swift中字典的定义 Swift中字典的操作 Swift中字典 ...
最新文章
- [vue]饿了么的element-ui修改样式后不生效
- cpu负载过高案例,解决方法记录
- sklearn快速入门教程:(二)线性回归
- 使用iframe+postMessage跨域操作和通信
- CCNA考试中实验题精讲(RIP,OSPF,VLAN)
- 的mvc_简述PHP网站开发的MVC模式
- 图片 富文本 粘贴_用C++实现富文本控件(中): 撤销
- Kafka设计解析(一)- Kafka背景及架构介绍
- SQL结构化数据查询语言培训讲义
- 百面机器学习—9.前馈神经网络面试问题总结
- pycharm用社区版还是专业版?看下两者的区别吧!
- SLAM_局部束调整(local Bundle Adjustment, BA)步骤与代码示例
- [2018.07.31 T2] 第二题
- linux系统vmd软件如何使用,科学网—VMD (linux下分子可视化软件) - 刘雪静的博文...
- SqlServer数据库(可疑)解决办法4种
- 马哥 python培训
- LA 5713 Qin Shi Huang's National Road System 最小生成树
- opencv--normalize函数详解
- wordwrap() 函数
- OS学习笔记-4(清华大学慕课)mooc实验一
热门文章
- <input>:1: UserWarning: The .grad attribute of a Tensor that is not a leaf Tensor is being accessed.
- OpenFeign 简单使用
- unity学习笔记-实现版本更新
- 人工智能AI讲师NLP培训讲师叶梓:人工智能之最新NLP自然语言处理技术与实战-23
- VC 关于CEdit基本用法
- LoRa SX1278通信代码开发学习
- 只读ppt如何获得可编辑版本?
- 苹果系统虚拟机无usb服务器,win10系统苹果电脑运行虚拟机后无法识别显示U盘的详细方案...
- HR面必问问题——和HR斗智斗勇(数字IC,FPGA,计算机,JAVA,算法,C++,产品,芯片通用)
- mt2503 [ShapeEngine]泰语音标字符发生偏移