强化学习(Reinfment Learning) 简介
本文内容来自以下两个链接:
https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/
https://zhuanlan.zhihu.com/p/24446336?utm_source=weibo&utm_medium=social
Q-learning Algorithm:
整个算法就是一直不断更新 Q table 里的值, 然后再根据新的值来判断要在某个 state 采取怎样的 action. Qlearning 是一个 off-policy 的算法, 因为里面的 max
action 让 Q table 的更新可以不基于正在经历的经验(可以是现在学习着很久以前的经验,甚至是学习他人的经验).
Sarsa Algorithm:
整个算法还是一直不断更新 Q table 里的值, 然后再根据新的值来判断要在某个 state 采取怎样的 action. 不过于 Qlearning 不同之处:
- 他在当前
state
已经想好了state
对应的action
, 而且想好了 下一个state'
和下一个action'
(Q learning 还没有想好下一个action'
) - 更新
Q(s,a)
的时候基于的是下一个Q(s', a')
(Q learning 是基于max Q(s')
)
所以,我们Sarsa比Q learning更具有探索性,多了一个action。 现在我们来思考下,这个算法为什么叫做Sarsa?其实可以顾名思义,Sarsa的意思是State(s)-Action(a)-Reward(r)-State(s')-Action(a')。我们同样能从算法的名字中知道sarsa算法的更新方法了。
这种不同之处使得 Sarsa 相对于 Q learning, 更加的胆小. 因为 Qlearning 永远都是想着 maxQ
最大化, 因为这个 maxQ
而变得贪婪, 不考虑其他非 maxQ
的结果. 我们可以理解成 Qlearning 是一种贪婪, 大胆, 勇敢的算法, 对于错误, 死亡并不在乎. 而 Sarsa 是一种保守的算法, 他在乎每一步决策, 对于错误和死亡比较铭感. 两种算法都有他们的好处, 比如在实际中, 你比较在乎机器的损害, 用一种保守的算法, 在训练时就能减少损坏的次数.
-------------------------------------------------------------------------------------------------------------------------------
在传统的Q Learning中,Q值被储存在一个Q表格中,想象一个表格行为所有可能的 state 列为所有可能的 action。 这个方法可以很好的解决一些问题,尤其是 state 并不多,比如可以用几个量来表示的时候。但是在现实中,我们经常要用一些 raw image 来作为 state 的表示,一张10 × 10 像素 8 位的灰度图像就会有个不同 state, 我们不可能建立如此大的一个Q table,这也导致了Q Learning 很难被应用到现实问题中去.
那没法建立这么大的Q table 怎么办? 现在该是 Deep Q Learning登场的时候了。我们知道神经网络Neural Network可以很好对图片提取特征信息,进行抽象,分类等。那能否用Neural Network进行 Q 函数的模拟,让它去学习一副图片 state 所对应的 Q 值呢?
Deep Q learning Algorithm:
整个算法乍看起来很复杂, 不过我们拆分一下, 就变简单了. 也就是个 Q learning 主框架上加了些装饰.
这些装饰包括:
- 记忆库 (用于重复学习)
- 神经网络计算 Q 值
- 暂时冻结
q_target
参数 (切断相关性)
用模拟器不停地模拟采取各种动作,收到各种反馈,再用 Bell equation 不停的训练 Q Network,并且得到一个能相对准确的估计Q值的网络以后。
我们只要在给定Q值的情况下选择相应的策略即可,比如epsilon贪心策略
Policy Gradient
低配乞丐版 Policy Gradient Algorithm
Deep Q Learning的思维还是非常受Q Learning影响,基本的框架依然是Q Learning只是用神经网络去代替了Q Table,那还有一种更加 End to End的方法,叫做Policy Gradient。和 Deep Q Learning 用Q网络去估计Q 表然后在规定一种策略去依据Q值采取行动不同,Policy Gradient值的策略网络直接输出的就是策略,比如采取每一种行动的概率(对于离散控制问题),或者每一个动作的值(对于连续控制问题)。
Policy Gradient 相对于 Deep Q Learning有两个主要优点,
- 一来是这样更加的 End to End,不用借用强化学习的理论框架。
- 二来是这样既可以通过直接输出动作相应的连续量处理连续的控制量(比如对于汽车来说,油门的力度,刹车力度,转向角度),而用通过Q值选动作的方法则无法处理连续量。
在 Policy Gradient 中我们希望学会一个策略能够达到最大的期望回馈。用表示策略, 表示策略网络的weights,通过学习不断更新。目标函数可以表示为。David Silver在RL课程中为我们推导它对的导数:
由此导数,我们可以把每轮的折扣回馈看做该state真实价值的无偏估计。利用Gradient ascent的方法去, 的 learning rate,不停地更新训练一个能够达到最大期望回馈的策略网络。
Deep Deterministic Policy Gradient
高配 Deep Deterministic Policy Gradient Algorithm
Policy Gradient 听起来很美好是不是,但是呢,试试就发现,它基本没法学会任何东西啊!低配乞丐版的 Policy Gradient 理论上一切都好,但是实践中会有很多致命的问题让它很难收敛,例如:
- 反馈分配,反馈在大多时候都是不存在的,比如赛车游戏,只有游戏结束,例如到达终点或者撞墙而亡的时候才收到反馈,那如何将反馈很好的和之前进行的一系列策略和动作联系到一起去是一个很大的问题。
- 我们的算法有一个内在的假设,假设所有的抽样都是独立,并且处于相同分布的(independently and identically distributed, iid ), 但是实际上,在游戏进行的过程中,同一时间段前后的抽样是明显具有相关性的,这个iid假设并不成立,也就会影响到学习的效果。
- 在我们通过获取反馈,折扣,然后TD来更新Q值的方法,或者直接估计策略的方法中,这些反馈信号都有非常多的噪声,这些噪声可能会让整个网络很难收敛,甚至很容易发散。
我在尝试的过程中也确实遇到了基本所有的这些问题,经常怎么训练都没法看到整个网络开始收敛,直到发现这个更加高级的方法DDPG:Continuous control with deep reinforcement learning
在这个方法中,除了有一个动作网络 Actor Network 用于直接估计动作之外,还有一个校正网络 Critic Network 用来估计Q值,其中 Actor Network 就像低配版 Policy Gradient中的 Policy Network,输入State,输出动作值 Actions。而 Critic Network 则在输入 State 的同时还输入由Actor Network 产生的 Actions,输出相应的 Q 值,并不断的用 bellman equation来进行更新。Actor Network 则是从Critic Network 对应 Actions 输入计算出的导数来进行更新。
用上面文章中的定义,动作方程 actor function 表示为, 校正方程 critic function 表示为 , Cost function J 对于的导数为:
这个算法将对动作的Q值估计和策略估计给分离,让 agent 能够在探索更多的同时保持对一个确定策略的学习,让整个网络学习变得更容易。
除了将 Actor Network 和 Critic Network 分离以外,以下的一些小技巧也能更有利于网络的收敛(结果来看,这些小技巧才是重点……)。
Replay Buffer:这是一个近乎于无限大的缓存,每次进行动作以后得到的 状态-动作-反馈- 新状态都会被保存到这个缓存中去,不同于之前的方法直接拿游戏进行过程中得到的 来进行训练,采用了Replay Buffer 以后,训练采用的 sample 则从这个缓存中随机抽样,通过这样的方法,理论上可以打破抽样直接的相关性,解决iid假设不成立的困扰
Target Network : 在训练过程中,由于环境是相对混沌的,用于更新Q网络的反馈具有很大的噪声,直接训练一个网络会非常容易让它发散而非收敛。因此,在DDPG的文章当中,有一种叫做目标网络Target Network的方法,创建Actor和Critic网络的副本和来计算目标值,然后以的比例缓慢的跟随原网络更新。如此一来,目标值就会相对变得稳定许多,非常有利于学习的效果。
未完待续。。。
强化学习(Reinfment Learning) 简介的更多相关文章
- 强化学习之Q-learning简介
https://blog.csdn.net/Young_Gy/article/details/73485518 强化学习在alphago中大放异彩,本文将简要介绍强化学习的一种q-learning.先 ...
- 强化学习 reinforcement learning: An Introduction 第一章, tic-and-toc 代码示例 (结构重建版,注释版)
强化学习入门最经典的数据估计就是那个大名鼎鼎的 reinforcement learning: An Introduction 了, 最近在看这本书,第一章中给出了一个例子用来说明什么是强化学习, ...
- 强化学习(Reinforcement Learning)中的Q-Learning、DQN,面试看这篇就够了!
1. 什么是强化学习 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报. ...
- 深度学习-强化学习(RL)概述笔记
强化学习(Reinforcement Learning)简介 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予 ...
- Deep Learning专栏--强化学习之MDP、Bellman方程(1)
本文主要介绍强化学习的一些基本概念:包括MDP.Bellman方程等, 并且讲述了如何从 MDP 过渡到 Reinforcement Learning. 1. 强化学习基本概念 这里还是放上David ...
- 学习笔记TF053:循环神经网络,TensorFlow Model Zoo,强化学习,深度森林,深度学习艺术
循环神经网络.https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/re ...
- 【转】强化学习(一)Deep Q-Network
原文地址:https://www.hhyz.me/2018/08/05/2018-08-05-RL/ 1. 前言 虽然将深度学习和增强学习结合的想法在几年前就有人尝试,但真正成功的开端就是DeepMi ...
- 【强化学习】MOVE37-Introduction(导论)/马尔科夫链/马尔科夫决策过程
写在前面的话:从今日起,我会边跟着硅谷大牛Siraj的MOVE 37系列课程学习Reinforcement Learning(强化学习算法),边更新这个系列.课程包含视频和文字,课堂笔记会按视频为单位 ...
- 深度强化学习(DRL)专栏(一)
目录: 1. 引言 专栏知识结构 从AlphaGo看深度强化学习 2. 强化学习基础知识 强化学习问题 马尔科夫决策过程 最优价值函数和贝尔曼方程 3. 有模型的强化学习方法 价值迭代 策略迭代 4. ...
随机推荐
- 《Effective Java》读书笔记 - 10.并发
Chapter 10 Concurrency Item 66: Synchronize access to shared mutable data synchronized这个关键字不仅保证了同步,还 ...
- maven 报错 Cannot resolve plugin org.apache.maven.plugins:maven-war-plugin:2.1.1
主要原因是本地maven的配置文件和仓库地址不一致.
- @清晰掉 spi协议及工作原理分析
说明.文章摘自:SPI协议及其工作原理浅析 http://bbs.chinaunix.net/thread-1916003-1-1.html 一.概述. SPI, Serial Perripheral ...
- spring boot 和 mybatis集成
1.pom.xml 添加mybatis和mysql依赖 <!-- 添加 MyBatis --> <dependency> <groupId>org.mybatis. ...
- 浏览器端-W3School:HTML DOM cells 集合
ylbtech-浏览器端-W3School:HTML DOM cells 集合 1.返回顶部 1. HTML DOM cells 集合 HTML DOM Table 对象 定义和用法 cells 集合 ...
- apache-httpd2.4编译安装
centos 6 编译安装httpd-2.4 centos6yum安装的apr版本已经不适用httpd-2.4版本了.所以,需要源码编译apr以及apr-util1. 下载源码:cd /usr/loc ...
- 阶段3 1.Mybatis_03.自定义Mybatis框架_6.自定义Mybatis的编码-实现基于XML的查询所有操作
接下来就可以写创建代理对象的方法了 类加载器,代理谁,就用谁的加载器,因为这里用daoInterfaceClass.getClassLoader() 第二个代理谁就要和谁有相同的接口,daoInter ...
- c++读取utf-8格式中英文混合string
最近项目中用到需要给出每一个字在string中的索引,但是又因为中文字符跟英文字符长度不一样,得分开处理, 在这里记录一下. 想要达到的效果如下: 将 “测试3.1415engEng”分割开 代码: ...
- jupyter 服务器安装随笔
python3:python3 -m pip install --upgrade pip python3 -m pip install jupyterpkg install py36-pyzmq-18 ...
- <nginx.conf> nginx设置用户权限
问题在于,我们使用weblogic在前台系统获取其他系统的文件,然后保存在webloigc目录下,然后配置了nginx来当http服务器,这样,其他的系统可以来下载文件,但是访问的时候提示403错误, ...