介绍了基于价值函数和基于策略梯度的两种强化学习框架,并介绍了四种强化学习算法:Q-learning,DQN,REINFORCE,Actot-Critic

1 强化学习问题建模

上图中,智能体agent处于状态st下,执行动作at后,会由于周围环境的作用进入下一个状态st+1,同时获得奖励rt。

马尔可夫决策过程MDP建模了上图过程:

我们定义策略Pi为一个从状态s到动作a的函数,表示在状态s下采取什么样的动作a。

而我们的目标是,找到一个最好的策略pi,使得整个过程中累计的奖励值最大:

比较正式的表达是:

2 Q-learning算法

(1)价值函数与Q-价值函数

对于一个给定的策略pi,只要我们给定初始状态s0,就能产生序列

那么,只要给定一个策略pi,就能计算出在状态s下所产生的累积奖励的期望,也就是价值函数:

注意,价值函数评价了给定策略pi下状态s的价值,由策略pi和当前状态s所唯一确定。

类似的,Q-价值函数则评价了给定策略pi下,在状态s下采取动作a后,所能带来的累积奖励期望:

Q-价值函数由策略pi和当前状态s和当前动作a所唯一确定。

(2)贝尔曼方程

现在我们固定当前状态s和当前动作a,那么目标就是要选择最优策略pi,使得Q-value函数最大,这个最优的Q-value函数被记为Q*:

理解一下Q*,也就是在当前状态s下采取动作a后,所能达到的最大累积奖励期望。显然Q*仅与s和a有关。

而强化学习方法Q-learning的核心公式——贝尔曼方程,则给出了Q*的另一种表达形式:

对公式的理解为:当我们在状态s下采取动作a后,环境会反馈给我们一个奖励r,以及下一时刻的状态s'。记下一时刻的动作为a',这样我们就能递归地使用Q*函数。

(3)Q-learning

现在让我们来看一种经典的强化学习算法,Q-learning。

Q-learning中,我们需要一张称为Q-table的查找表,该表第i行第j列的元素表示Q*(si, aj)的值。

然而我们并不知道Q*的具体形式以及值,我们只能一开始使用全0初始化Q-table,然后进行游戏,每执行一个动作后,使用贝尔曼方程去更新Q-table的值,理论研究表明当迭代次数足够多后,Q-table的值将会收敛为真实的Q*值。这也被称为值迭代算法:

Qi和Qi+1分别表示更新前和更新后的Q-table。

Q-learning的完整算法过程为:

3  深度强化学习----Deep Q-learning

传统的Q-learning算法当遇到状态空间很大时(例如状态是一个游戏画面的所有像素),我们不可能用表Q-table来枚举出所有的状态及其对应的动作a的所有q值。而Q*这个函数是我们最终要学习的,并且它很复杂。很自然地,我们想到用一个神经网络来表示Q*,并且在游戏中去不断的学习它!

前向传播和反向传播表示为:

直接这样还不能有效的学习。原因有两点:

因此我们使用一个叫做Experience Replay的机制,每次将生成的(st, at, rt, st+1)元组放入一个表中,然后每次训练Q网络时,从该表中随机取一批mini batch进行训练。

完整的Deep Q-learning算法为:

注意这里我们每次有一定概率去随机的行动,这样做的目的是探索更大的状态空间。

4 策略梯度

(1)引入策略梯度

为什么要用策略梯度:基于价值函数的方法,当状态空间很大时,价值函数会很复杂以至于难以学习。而策略函数(已知当前状态下各个动作的条件概率分布)则会比较简单。因此我们这里会去学习一个策略网络,而不是价值网络。

策略网络的定义如下:

表示策略网络的参数为θ,所有参数的可能取值构成了所有可能的策略。

对一个给定的策略,其价值定义为:

那么,我们要找到最优的参数θ,使得上面的J(θ)最大。即:。显然要使用gradient ascent的方法,那么如何来计算策略参数的梯度呢?

(2)REINFORCE 计算策略梯度

这样,我们就可以采样出若干个轨迹τ,来估计策略梯度。注意这里的估计是一个无偏估计。

(3)直观上理解策略梯度的表达式

注意看,这一项表示当前的梯度方向是使得各个时间步的动作出现似然增大的梯度方向,前面再加一个权重r(τ)。则当r(τ)高时,对应于该轨迹的各个动作似然要相对增大,当r(τ)低时,对应于该轨迹的各个动作似然要相对减小。很符合我们的直观感受。

cs231n---强化学习的更多相关文章

  1. (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)

    本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 201 ...

  2. 深度强化学习资料(视频+PPT+PDF下载)

    https://blog.csdn.net/Mbx8X9u/article/details/80780459 课程主页:http://rll.berkeley.edu/deeprlcourse/ 所有 ...

  3. 【整理】强化学习与MDP

    [入门,来自wiki] 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的 ...

  4. 强化学习之 免模型学习(model-free based learning)

    强化学习之 免模型学习(model-free based learning) ------ 蒙特卡罗强化学习 与 时序查分学习 ------ 部分节选自周志华老师的教材<机器学习> 由于现 ...

  5. (译) 强化学习 第一部分:Q-Learning 以及相关探索

    (译) 强化学习 第一部分:Q-Learning 以及相关探索 Q-Learning review: Q-Learning 的基础要点是:有一个关于环境状态S的表达式,这些状态中可能的动作 a,然后你 ...

  6. 强化学习读书笔记 - 02 - 多臂老O虎O机问题

    # 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...

  7. 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)

    强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...

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

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

  9. 强化学习之Q-learning ^_^

    许久没有更新重新拾起,献于小白 这次介绍的是强化学习 Q-learning,Q-learning也是离线学习的一种 关于Q-learning的算法详情看 传送门 下文中我们会用openai gym来做 ...

  10. 强化学习 - Q-learning Sarsa 和 DQN 的理解

    本文用于基本入门理解. 强化学习的基本理论 : R, S, A 这些就不说了. 先设想两个场景:  一. 1个 5x5 的 格子图, 里面有一个目标点,  2个死亡点二. 一个迷宫,   一个出发点, ...

随机推荐

  1. Python 爬虫从入门到进阶之路(十八)

    在之前的文章我们通过 scrapy 框架 及 scrapy.Spider 类做了一个<糗事百科>的糗百爬虫,本章我们再来看一下相较于 scrapy.Spider 类更为强大的 CrawlS ...

  2. Spring MVC源码(一) ----- 启动过程与组件初始化

    SpringMVC作为MVC框架近年来被广泛地使用,其与Mybatis和Spring的组合,也成为许多公司开发web的套装.SpringMVC继承了Spring的优点,对业务代码的非侵入性,配置的便捷 ...

  3. python基础认识(一)

    这些日子以来,新闻铺天盖地的都是人工智能,那么借着这股潮流,python也随之火起来了,现在的python不仅仅可以进行人工智能领域的开发.还可以进行web.爬虫等领域的运用.因此,我认为作为一个紧跟 ...

  4. Git使用小技巧之免密登录

    想要获取更多文章可以访问我的博客 - 代码无止境. 小代同学在使用Git的过程中发现,每次向远程仓库推送代码的时候都需要输入账号密码.做为一个程序员,多多少少都会有偷懒的思维.那么如何才能避免每次都要 ...

  5. [Usaco2007 Open]Fliptile 翻格子游戏题解

    问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec  内存限制: 128 MB 题目描述 Farmer John knows that an intell ...

  6. Golang 高效实践之并发实践

    前言 在我前面一篇文章Golang受欢迎的原因中已经提到,Golang是在语言层面(runtime)就支持了并发模型.那么作为编程人员,我们在实践Golang的并发编程时,又有什么需要注意的点呢?下面 ...

  7. py+selenium+unittest遇到HTMLTestRunner_cn文件报错:ZeroDivisionError: float division by zero【已解决】

    问题:遇到HTMLTestRunner_cn文件报错:ZeroDivisionError: float division by zero HTMLTestrunner_cn.py是从网上下的,照理说应 ...

  8. C#3.0新增功能10 表达式树 07 翻译(转换)表达式

    连载目录    [已更新最新开发文章,点击查看详细] 本篇将介绍如何访问表达式树中的每个节点,同时生成该表达式树的已修改副本. 以下是在两个重要方案中将使用的技巧. 第一种是了解表达式树表示的算法,以 ...

  9. Python基础总结之第四天开始【格式化‘字符串’】(新手可相互督促)

    年薪20万... 字符串格式化: 先看小案例-------: a = 'hello,my name is %s,I like %s.'%('XiaoHong','football') #在字符串中,[ ...

  10. TCP三次握手抓包理解

    TCP建立连接需要三次握手,分手需要四次握手,平时在网上看到很多次,但是还没有很理解.为什么分手要多一次?可能是刚开始追求女生的时候比较容易,到分手的时候就比较麻烦了吧... 了解某个东西要从它的基础 ...