本文内容来自以下两个链接:

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) 简介的更多相关文章

  1. 强化学习之Q-learning简介

    https://blog.csdn.net/Young_Gy/article/details/73485518 强化学习在alphago中大放异彩,本文将简要介绍强化学习的一种q-learning.先 ...

  2. 强化学习 reinforcement learning: An Introduction 第一章, tic-and-toc 代码示例 (结构重建版,注释版)

    强化学习入门最经典的数据估计就是那个大名鼎鼎的  reinforcement learning: An Introduction 了,  最近在看这本书,第一章中给出了一个例子用来说明什么是强化学习, ...

  3. 强化学习(Reinforcement Learning)中的Q-Learning、DQN,面试看这篇就够了!

    1. 什么是强化学习 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报. ...

  4. 深度学习-强化学习(RL)概述笔记

    强化学习(Reinforcement Learning)简介 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予 ...

  5. Deep Learning专栏--强化学习之MDP、Bellman方程(1)

    本文主要介绍强化学习的一些基本概念:包括MDP.Bellman方程等, 并且讲述了如何从 MDP 过渡到 Reinforcement Learning. 1. 强化学习基本概念 这里还是放上David ...

  6. 学习笔记TF053:循环神经网络,TensorFlow Model Zoo,强化学习,深度森林,深度学习艺术

    循环神经网络.https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/re ...

  7. 【转】强化学习(一)Deep Q-Network

    原文地址:https://www.hhyz.me/2018/08/05/2018-08-05-RL/ 1. 前言 虽然将深度学习和增强学习结合的想法在几年前就有人尝试,但真正成功的开端就是DeepMi ...

  8. 【强化学习】MOVE37-Introduction(导论)/马尔科夫链/马尔科夫决策过程

    写在前面的话:从今日起,我会边跟着硅谷大牛Siraj的MOVE 37系列课程学习Reinforcement Learning(强化学习算法),边更新这个系列.课程包含视频和文字,课堂笔记会按视频为单位 ...

  9. 深度强化学习(DRL)专栏(一)

    目录: 1. 引言 专栏知识结构 从AlphaGo看深度强化学习 2. 强化学习基础知识 强化学习问题 马尔科夫决策过程 最优价值函数和贝尔曼方程 3. 有模型的强化学习方法 价值迭代 策略迭代 4. ...

随机推荐

  1. 使用http-server在本地搭建一个HTTP服务器

    安装http-server 在控制台中输入 npm install http-server -g 进行全局安装 共享资源 进入需要共享资源的目录,比如 D:\,然后在控制台中输入 http-serve ...

  2. Chrome 抓包:快速定位HTTP协议问题

    标签(空格分隔): 快速定位HTTP协议问题 Chrome:快速定位HTTP协议问题 快捷键:control+shift+i(windows),command+option+i(mac) 控制器: 控 ...

  3. legend3---lavarel中使用qq邮箱发送邮件

    legend3---lavarel中使用qq邮箱发送邮件 一.总结 一句话总结: 第一步:配置邮箱做服务器,比如qq邮箱,网易163邮箱 第二步:配置lavarel的配置文件 第三部:写邮件发送代码就 ...

  4. 前后端分离&接口API设计学习报告

    接口API设计学习报告 15331023 陈康怡 什么是API? API即Application Programming Interface.API是一种通道,负责一个程序与另一个程序的沟通.而对于w ...

  5. wpf 非窗体类中 异步调用窗体与控件

    App.Current.Dispatcher.Invoke((Action)(() => { MessageBoxWindow mwb = ); mwb.ShowDialog(); return ...

  6. 手把手教你搭建一个 Elasticsearch 集群

    为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? 高可用性 Elasticsearch 作为一个搜索引擎, ...

  7. 社工 - By源码托管平台|云盘 - GitHub - 汇总

    搜索规则 ()默认搜索是从master分支搜索代码 ()只有小于384k的代码才是可以搜索到的 ()搜索语句不能有特殊字符如. , : ; / \ ` ' " = * ! ? # $ &am ...

  8. docker--docker仓库

    8 docker仓库 Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的地方. 8.1 docker hub 1.打开https://hub.docker.com ...

  9. 100+ Python挑战性编程练习(2)

    熟能生巧,多撸代码多读书 https://github.com/zhiwehu/Python-programming-exercises/blob/master/100+%20Python%20cha ...

  10. ant buid.xml 模板

    <?xml version="1.0" encoding="UTF-8"?> <project name="ant" de ...