开头先附上强化学习(reinforcement learning)的学习视频:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/,赶紧进行强化学习吧!

1.强化学习就是程序或智能体(agent)通过与环境不断地进行交互学习一个从环境到动作的映射,学习的目标就是使累计回报最大化。

2.强化学习是一种试错学习,因其在各种状态(环境)下需要尽量尝试所有可以选择的动作,通过环境给出的反馈(即奖励)来判断动作的优劣,最终获得环境和最优动作的映射关系(即策略)。

马尔可夫决策过程(MDP)

马尔可夫决策过程(Markov Decision Process)通常用来描述一个强化学习问题。

智能体agent根据当前对环境的观察采取动作获得环境的反馈,并使环境发生改变的循环过程

蒙特卡洛强化学习

1.在现实的强化学习任务中,环境的转移概率、奖励函数往往很难得知,甚至很难得知环境中有多少状态。若学习算法不在依赖于环境建模,则称为免模型学习,蒙特卡洛强化学习就是其中一种。

2.蒙特卡洛强化学习使用多次采样,然后求取平均累计奖赏作为期望累计奖赏的近似。

蒙特卡洛强化学习:直接对状态动作值函数Q(s,a)进行估计,每采样一条轨迹,就根据轨迹中的所有“状态-动作”利用下面的公式对来对值函数进行更新。

每次采样更新完所有的“状态-动作”对所对应的Q(s,a),就需要更新采样策略π。但由于策略可能是确定性的,即一个状态对应一个动作,多次采样可能获得相同的采样轨迹,因此需要借助ε贪心策略:

蒙特卡洛强化学习算法需要采样一个完整的轨迹来更新值函数,效率较低,此外该算法没有充分利用强化学习任务的序贯决策结构。

Q-learning算法结合了动态规划与蒙特卡洛方法的思想,使得学习更加高效。

深度强化学习(DRL)

传统强化学习:真实环境中的状态数目过多,求解困难。

深度强化学习:将深度学习和强化学习结合在一起,通过深度神经网络直接学习环境(或观察)与状态动作值函数Q(s,a)之间的映射关系,简化问题的求解。

Deep Q Network(DQN)

Deep Q Network(DQN):是将神经网略(neural network)和Q-learning结合,利用神经网络近似模拟函数Q(s,a),输入是问题的状态(e.g.,图形),输出是每个动作a对应的Q值,然后依据Q值大小选择对应状态执行的动作,以完成控制。

自主学习Flappy Bird游戏

深度强化学习

2013年,Deep Mind团队在NIPS上发表《Playing Atari with Deep Reinforcement Learning》一文,在该文中首次提出Deep Reinforcement Learning一词,并且提出DQN(Deep Q-Networt)算法,实现了从纯图像输入完全通过学习来玩Atari游戏。

Flappy Bird自主学习程序基本框架

训练过程

训练过程过程主要分为以下三个阶段:

1.观察期(OBSERVE):程序与模拟器进行交互,随机给出动作,获取模拟器中的状态,将状态转移过程存放在D(Replay Memory)中;

2.探索期(EXPLORE):程序与模拟器交互的过程中,依据Replay Memory中存储的历史信息更新网络参数,并随训练过程降低随机探索率ε;

3.训练器(TRAIN):ε已经很小,不再发生改变,网络参数随着训练过程不断趋于稳定。

1.打开游戏模拟器,不执行跳跃动作,获取游戏的初始状态

2.根据ε贪心策略获得一个动作(由于神经网络参数也是随机初始化的,在本阶段参数也不会进行更新,所以统称为随机动作),并根据迭代次数减小ε的大小

3.由模拟器执行选择的动作,能够返回新的状态和反馈奖励

4.将上一状态s,动作a,新状态s’,反馈r组装成(s,a,s‘,r)放进Replay Memory中用作以后的参数更新

5.根据新的状态s‘,根据ε贪心策略选择下一步执行的动作,周而复始,直至迭代次数到达探索期

探索期与观察期的唯一区别在于会根据抽样对网络参数进行更新。

1.迭代次数达到一定数目,进入探索期,根据当前状态s,使用ε贪心策略选择一个动作(可以是随机动作或者由神经网络选择动作),并根据迭代次数减小ε的值

2.由模拟器执行选择的动作,能够返回新的状态和反馈奖励

3.将上一状态s,动作a,新状态s’,反馈r组装成(s,a,a‘,r)放进Replay Memory中用作参数更新

4.从Replay Memory中抽取一定量的样本,对神经网络的参数进行更新

5.根据新的状态s‘,根据ε贪心策略选择下一步执行的动作,周而复始,直至迭代次数到达训练器

相关库的介绍和安装

tensorflow库

TensorFlow是谷歌2015年开源的一个人工智能学习系统。主要目的是方便研究人员开展机器学习和深度神经网络方面的研究,目前这个系统更具有通用性,也可广泛用于其他计算领域。

TensorFlow
支持多种前端语言,包括python(python也是tensorflow支持最好的前端语言),因此一般大家利用python实现对tensorflow的调用。

安装:conda install tensorflow

openCV库

OpenCV是一个开源的跨平台的计算机视觉库,实现了大量的图像处理和计算机视觉方面的通用算法。

本实验采用opencv对采集的游戏画面进行预处理

安装:Mac+anaconda安装opencv3非常麻烦,如需安装请查看我的另一篇文章。

PyGame库

Pygame是一个跨平台的模块,专为电子游戏设计。

Pygame相当于是一款游戏引擎,用户无需编写大量的基础模块,而只需完成游戏逻辑本身就可以了。

本实验游戏模拟器采用Pygame实现。

安装:conda install pygame

tensorflow库的基本使用

理解TensorFlow

1.使用图(graph)来表示计算任务;

2.在被称之为会话(Session)的上下文(context)中执行图;

3.使用tensor(张量)表示数据;

4.通过变量(variable)维护状态;

5.使用feed和fetch可以为任意的操作(arbitrary operation)赋值或者从其中获取数据。

6.TensorFlow是一个编程系统,使用图来表示计算任务。图中的节点被称作op(Operation),op可以获得0个或多个tensor,产生0个或多个tensor。每个tensor是一个类型化的多维数组。例如:可以将一组图像集表示成一个四维的浮点数组,四个维度分别是[batch,height,weight,channels]。

7.图(graph)描述了计算的过程。为了进行计算,图必须在会话中启动,会话负责将图中的op分发到cpu或gpu上进行计算,然后将产生的tensot返回。在python中,tensor就是numpy.ndarray对象。

8.TensorFlow程序通常被组织成两个阶段:构建阶段和执行阶段。

构建阶段:op的执行顺序被描述成一个图;

执行阶段:使用会话执行图中的op

例如:通常在构建阶段创建一个图来表示神经网络,在执行阶段反复执行图中的op训练  神经网络。

9.交互式会话(InteractiveSession):为了方便实用Ipython之类的python交互环境,可以使用交互式会话(interactiveSession)来代替Session,使用类似Tensor.run()和Operation.eval()来代替Session.run(),避免使用一个变量来持有会话。

10.feed操作:

前面的例子中,数据均以变量或常量的形式进行存储。Tensorflow还提供了Feed机制,该机制可以临时替代图中任意操作中的tensor。最常见的用例是使用tf.placeholder()创建占位符,相当于是作为图中的输入,然后使用Feed机制向图中占位符提供数据进行计算,具体使用方法见接下来的样例。

自主学习flappy bird实例程序编写

转自:https://www.jianshu.com/p/42507aa63b05

强化学习之原理详解、算法流程及Python代码相关推荐

  1. 基于强化学习的智能机器人路径规划算法研究(附代码)

    目录 一.摘要 二.路径规划技术的研究进展 1.研究现状 2.算法分类 2.1 全局路径规划算法 2.2 局部路径规划算法 三.本文采用的路径规划算法--强化学习 1. 概念 2. 与其他机器学习方式 ...

  2. python压缩算法_LZ77压缩算法编码原理详解(结合图片和简单代码)

    前言 LZ77算法是无损压缩算法,由以色列人Abraham Lempel发表于1977年.LZ77是典型的基于字典的压缩算法,现在很多压缩技术都是基于LZ77.鉴于其在数据压缩领域的地位,本文将结合图 ...

  3. python图片压缩原理_LZ77无损压缩算法原理详解(结合图片和简单代码)

    LZ77算法是无损压缩算法,由以色列人Abraham Lempel发表于1977年.LZ77是典型的基于字典的压缩算法,现在很多压缩技术都是基于LZ77.鉴于其在数据压缩领域的地位,本文将结合图片和源 ...

  4. ASM原理详解,以及使用附代码,AOP利器

    少年,git代码,带你快速理解:https://github.com/singgel/eight-sorting-algorithms/tree/master/src/test/java/com/hk ...

  5. 一文详解层次聚类(Python代码)

    本篇想和大家介绍下层次聚类,先通过一个简单的例子介绍它的基本理论,然后再用一个实战案例Python代码实现聚类效果. 首先要说,聚类属于机器学习的无监督学习,而且也分很多种方法,比如大家熟知的有K-m ...

  6. 深度学习-VGG16原理详解

    1.网络结构 根据卷积核大小和卷积层数,VGG共有6中配置,分别为A,A-LRN,B,C,D,E,其中D和E两种最为常用,即i我们所说的VGG16和VGG19.看下图红色框所示.具体为: 1. 卷积- ...

  7. CRC原理详解(附crc16校验代码)

    CRC原理详解 算法原理 查表法 反向算法 附录1:crc16校验表及用法 算法原理 Cyclic Redundancy Check循环冗余检验,是基于数据计算一组效验码,用于核对数据传输过程中是否被 ...

  8. 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)

    论文原文:[Yifan Wu, George Tucker, Ofir Nachum: "Behavior Regularized Offline Reinforcement Learnin ...

  9. 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BEAR算法原理详解与实现

    论文信息:Stabilizing Off-Policy Q-Learning via Bootstrapping Error Reduction 本文由UC Berkeley的Sergey Levin ...

最新文章

  1. 日报 18/06/04
  2. Exploiting “BadIRET” vulnerability (CVE-2014-9322, Linux kernel privilege escalation)
  3. 如何在 C# 中使用只读的 Collections
  4. java-String类
  5. android python .xlsx_python读写xlsx
  6. Linux添加浮动路由,Linux路由配置详情
  7. 如何在windows下把硬盘格式化成EXT3格式?
  8. android平台的一款mud工具,论剑mud脚本
  9. 求和函数java_java函数求和要怎么写?java求和代码实现
  10. Servlet容器和IOC容器
  11. 【IT项目管理】第4章 习题
  12. html添加外链图片代码,web 外链图片 403 解决方案(http referrer)
  13. R语言水文序列突变点检验之滑动平均差法
  14. dart pub私有仓库搭建、私有仓库上传方法、上传工具定制
  15. C++异常机制的实现方式和开销分析(作者:白杨)
  16. 90后电子工程师暴力拆解“华强北版AirPods”
  17. 2021_01_04
  18. 为什么要学量化,因为证券的黄金十年要来了
  19. C++vector用法总结
  20. 如何建设人工智能教学体系

热门文章

  1. 前端python和go_Python_前端网页+前后端交互-Go语言中文社区
  2. 蛮力法求最大字段和时间复杂度_只需十个字,让你掌握推拿手法的秘诀
  3. 【新星计划】Python print输出带颜色 总结
  4. 计算机ai听课记录,ai ei ui评课稿听课记录
  5. drtek收音机使用说明_一百年前的便携式矿石收音机长啥样?这台1919年产品给你答案...
  6. mysql主键创建非聚集索引_什么是聚集索引,非聚集索引,索引覆盖,回表,索引下推...
  7. mysql x64界面配置版下载_MySQL下载安装、配置与使用(win7x64)
  8. 关闭自动更新_Win10系统关闭自动更新方法
  9. Caffe代码导读(1):Protobuf例子
  10. HTML 标签 参考手册