股票操作之强化学习基础(二)(Q-learning、Sarsa、Sarsa-lambda)

1. Q-learning

Q-learning是强化学习一个比较基础的算法,很多强化学习的升级算法都是在q-learning的基础上进行升级的。

举个简单的例子:一个人在位置1,他需要到位置6,每次可以向左或者向右移动,但是他不知道位置6在他最右边,他只能自己去摸索如何到位置6。已知条件有在各个状态下向左或向右可到达的位置,到达6位置可以获得10奖励。

那他该怎么去学习呢?

Q-learning的一个核心就是对Q-table的学习,Q其实是quality的缩写。Q-table其实就是在当前状态不同动作的价值评估矩阵。状态在这个例子中可以表示为人所在的位置,动作的话包括向左移动和向右移动两个动作。这个Q-table的初始化可以表示成如下:

Q-table中的值就是quality。那他怎样去学习这个Q-table呢。

Step 1:根据Q-table中各个动作的价值,采用贪婪策略选择动作,以一个概率选择一个动作(优先选价值高的动作),从当前状态移动到下一个状态。(如果在位置1向左移动则还在位置1)

Setp 2:更新Q-table

解释一下St 表示t时刻所在状态(state),at 表示t时刻动作(action),Q(St , at)表示在St 状态下at 动作的价值。R(St , at )表示在St 状态下通过动作at+1 可获得的奖励(reward),St+1 表示在St 状态下通过动作at+1 可到达的状态。max Q(St+1 , a) 表示在St+1 状态下不同动作的最大价值。gamma表示衰减率,其目的是为了让我们更加注重一个当下动作的价值;目前没有想到好的解释,可以设想一下如果gamma等于0或者1时我们的Q-table都是不好更新的。a其实就是学习率,可以理解为梯度下降算法中的学习率。

rt+1 + gammamax Q(St+1 , a) 其实就是一个期望的Q值,Q(St , at )就是一个当前Q值,rt+1 + gammamax Q(St+1 , a) - Q(St , at ) 就是期望Q值与当前Q值的差,通过不断的学习这个差值更新Q值。(有点像神经网络的反向传播算法 back-propagation)

Step 3:如果到达位置6获得奖励,一回合的更新结束进行下一回合更新,也就是重复step1和step2。

嗯可能比较难理解,大家可以看看其他参考资料,跑跑别人的Q-learning代码再自行理解。大家可以自行上网搜索Q-learning算法资料,也可以看昨天推荐莫烦的强化学习入门。

Q-learning的伪代码如下:

伪代码中选择下一步的动作是利用贪婪规则选取的,就是以一定概率先选取价值最大的那步,也有一定概率选择其他动作。

Q-learning是一种off-policy算法,翻译一下就是离线线学习,接下来介绍另外一种on-policy算法,翻译一下就是在线学习。这两者的区别可以看具体伪代码之间的区别。

Sarsa

Sarsa是一种on-policy算法。

其伪代码如下:

Sarsa算法和Q-learning算法相似,其目的都是为了求得Q-table的近似解。他们之间的区别可以看下面这幅图。

仔细看上图中的框出来的区别Sarsa的学习过程和Q-Learning基本一样,不同的地方是在于更新Q值时稍有差异。

Q-learning期望Q与当前Q的error为: rt+1 + gamma*max Q(St+1 , a) - Q(St , at)

Sarsa期望Q与当前Q的error为: rt+1 + gamma*max Q(St+1 , at+1) - Q(St , at)

Q-learning在计算error时取下一状态的最大Q值减去当前Q值,而Sarsa则需要将下一状态的动作先确定,再计算期望Q值。

Q-Learning在走下一步的时候是先看下一步应该走哪,但是最后不一定走,而Sarsa是决定完要走的步之后一定会去走那一步。换句话说,Q-Learning在更新当前位置的Q值的时候会参考表中收益最大的那个值,但下一步不一定会走到那个位置,而Sarsa是先选取下一步要走的位置的Q值来更新当前位置的Q值,当然,选完它下一步一定会去走那一步。

Sarsa虽然说是说到做到,但是由于它选取下一步的位置是严格按照已有学习到的经验来选择,所以它探索未知位置的能力就会很差,相对于说了不一定算的Q-Learning来说,反而Q-Learning更勇敢一些。(这段话引自[1])

我们可以理解成Q-learning 是一种贪婪, 大胆, 勇敢的算法, 对于错误, 死亡并不在乎. 而 Sarsa 是一种保守的算法, 他在乎每一步决策, 对于错误和死亡比较敏感. 两种算法都有他们的好处, 比如在实际中, 你比较在乎机器的损害,用一种保守的算法, 在训练时就能减少损坏的次数. (这段话引自[2]) 目前我自己也还不太理解为什么Sarsa更保守一些。

总结一下on-policy与 off-policy的本质区别,其本质区别在于:更新Q值时所使用的方法是沿用既定的策略(on-policy)还是使用新策略(off-policy)。[3]

Sarsa-lambda

Q-learning和 Sarsa都是单步更新的算法。单步更新的算法缺点有:虽然单步更新每一步都在更新,但是在没有获取到reward的时候,其每一步更新都是无用的,除此之外最重要一点当第一次获取到宝藏时只会更新获取宝藏的上一个位置的Q值。第二次获得宝藏时只会更新获得宝藏的前两步。第三次则前三步,以此类推。

Sarsa-lambda:为了解决单步更新算法的缺点,Sarsa-lambda(Sarsa的升级算法)加快Sarsa的收敛速度。

先大概看一看Sarsa-lambda的伪代码:

伪代码中加入了eligibility矩阵(伪代码中的E),eligibility翻译为合适,其用来记录在获得reward的过程中,其存在不可或缺的路径。

然后我们再分析一下伪代码的修改。

首先下图这一步与Sarsa类似,第一个区别在于,Sarsa-lambda计算出期望Q值与当前Q值的error后不进行更新而是将其记录在一个矩阵中;第二个区别在于记录这个状态下的某个动作的出现次数(出现次数+1)

然后再看新的更新步骤,与Sarsa的更新不同在于,Sarsa-lambda每进行一个动作之后,会对整个Q-tabel进行更新,而Sarsa算法只会对当前状态下进行的动作的Q值进行更新,这是不同之处一。不同之处二在于Sarsa-lambda在更新时除了要乘以学习率还要乘以E值(也就是不可或缺性)。除此之外E矩阵也会进行更新,下图中的gamma是衰减性,gamma值越小则越不看重之前步骤。lambda是Sarsa-lambda中的lambda,如果lambda=0,则会变成一个单步更新;如果lambda=1,则是回合更新。Lambda与gamma在这里的作用似乎有些相似。

总结

今天这篇文章比较偏理论,讲的比较简单,大家可以看看其他资料加强自己的理解,我也只是从算法的层次上写了自己的一点理解。当然今天讲的强化学习还未结合神经网络.

参考资料:

[1]https://www.jianshu.com/p/91fbc682fb3e

[2]https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/3-1-tabular-sarsa1/

[3]https://zhidao.baidu.com/question/2079619689603473628.html

对量化、数据挖掘、深度学习感兴趣的可以关注公众号,本人不定期分享有关这些方面的研究。

个人知乎:
https://www.zhihu.com/people/e-zhe-shi-wo/activities

股票操作之强化学习基础(二)(Q-learning、Sarsa、Sarsa-lambda)相关推荐

  1. 强化学习(二):Q learning 算法

    强化学习(一):基础知识 强化学习(二):Q learning算法 Q learning 算法是一种value-based的强化学习算法,Q是quality的缩写,Q函数 Q(state,action ...

  2. 强化学习基础知识梳理(4)

    顺序以周博磊老师强化学习纲要课程为主,增加王树森老师强化学习基础的知识补充,和蘑菇书的知识补充,作为学习记录 第四章:价值函数近似 主要内容包括: 价值函数近似基本原理介绍(Value Functio ...

  3. 【datawhale202207】强化学习:强化学习基础

    结论速递 强化学习是由两部分组成的:智能体和环境.在强化学习过程中,智能体与环境一直在交互.智能体在环境中获取某个状态后,它会利用该状态输出一个动作 (action),这个动作也称为决策(decisi ...

  4. 深度强化学习笔记(二)——Q-learning学习与二维寻路demo实现

    深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 文章目录 深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 前言 理论 什么是Q-Learning 算 ...

  5. 强化学习基础篇(五):Dyna-Q 算法

    强化学习基础篇(五):Dyna-Q 算法 (Dynamic Programming) 1. 简介 2. Dyna-Q 3. Dyna-Q 代码实践 4. 小结 文章转于 伯禹学习平台-动手学强化学习 ...

  6. 强化学习基础知识梳理(5)

    顺序以周博磊老师强化学习纲要课程为主,增加王树森老师强化学习基础的知识补充,和蘑菇书的知识补充,作为学习记录 第五章:策略优化基础 主要内容: 基于策略优化的强化学习 常见策略优化算法:Policy ...

  7. 强化学习(二)—— 价值学习(Value-Based)及DQN

    强化学习(二)-- 价值学习(Value-Based)及DQN 1. DQN介绍 2. TD算法介绍 3. 案例 1. DQN介绍 Deep Q Network 目标:最大化累计奖励(回报U) 通过神 ...

  8. 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法

    强化学习基础篇(三十四)基于模拟的搜索算法 上一篇Dyna算法是基于真实经验数据和模拟经验数据来解决马尔科夫决策过程的问题.本篇将结合前向搜索和采样法,构建更加高效的搜索规划算法,即基于模拟的搜索算法 ...

  9. 强化学习基础总结(三)

    强化学习基础总结(三) @(Machine Learning) 覆盖以下几个主题: Markov过程 Markov奖励过程 Markov决策过程 MDPs扩展 MDP简介 MDP是用于正式描述强化学习 ...

最新文章

  1. [BUUCTF-pwn]——bjdctf_2020_babyrop2
  2. Rails安全导读【一】
  3. iOS ReactiveCocoa 最全常用API整理(可做为手册查询)
  4. .和- 区别(C++)
  5. springboot细节挖掘(jar和war打包)
  6. html页面加载动画尺寸,6种CSS3加载动画
  7. linux java mysql 备份 runtime_Mysql如何在linux中实现定时备份
  8. 转: JavaScript判断浏览器类型及版本
  9. 微软开始受到越来越多尊重 谁是幕后功臣?
  10. Bitwise AND of Numbers Range
  11. WebAPI HelpPage出现Failed to generate the sample for media type 'application/x-www-form-urlencoded'. 错
  12. 家里计算机网络布局图,图解八种家庭网络常规布局优缺点
  13. 算王标准层的量如何计算机,算王软件常用功能技巧
  14. HWIDGen 激活出错 解决:输入错误: 没有文件扩展“.vbs”的脚本引擎
  15. linux下如何关闭端口占用,Linux端口被占用? -- Linux查看端口使用状态、关闭端口方法...
  16. linux系统线程通信的几种方式,Linux的进程/线程通信方式总结
  17. Oracle锁机制深度分析
  18. 如何使用CAD软件来修改表格中CAD字体颜色?
  19. 橙单微服务的权限部分之过滤规则
  20. xcode制作越狱后ipa安装文件

热门文章

  1. 计算机组成原理cop乘法器,COP2000实现乘法器和除法器
  2. 机器学习__03__机器学习之线性回归
  3. 大学生想做兼职应该怎么找,适合大学生的线上线下靠谱兼职推荐
  4. 中国智能识别充电设备市场行业发展动态与投资前景分析报告2022-2028年
  5. 2020世界年轻大学排名发布:中国高校蝉联世界第一!
  6. SAP成都研究院35岁以上的开发人员都去哪儿了?
  7. IE8浏览器下dom元素不区分name属性大小写问题
  8. 杨虎之:从Motion追随到Mixin - Mixin Network开发者访谈
  9. fair share用法
  10. 春校赛--求索溪边树下的小瓜