DRL in Action :

Dynamic Programming

把目标分解为一组更易于解决的子目标,同时保存子目标的所有的解决方案,以便在次遇到该子问题时,可以直接查找到之前的解决方案,不用重新计算.

# 计算斐波那楔数列
def fib(n):if n <= 1:return nelse:return fib(n - 1) + fib(n - 2)
fib(7)
13

fib(4)的计算分解:

  1. fib(4)
  2. fib(3)+fib(2)
  3. fig(2)+fib(1)+fib(0)+fib(1)

fib()函数是递归调用的,其中有一些计算被重复执行多次,例如’fib(2),fib(1)’,如果采用动态编程的方法,把需要重复计算的子运算存储起来,就可以提高效率,同时也需要一小部分的内存开销.

# 用字典存储子运算的结果
mem = {0:0, 1:1}def fib_mem(n):if n not in mem:mem[n] = fib(n - 1) + fib(n - 2)return mem[n]
fib_mem(7)
13

Time Performance

%timeit fib(35)
5.04 s ± 83.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit fib_mem(35)
The slowest run took 4.40 times longer than the fastest. This could mean that an intermediate result is being cached.
504 ns ± 382 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)

解决连续决策过程的两个极端:

  • 动态编程
  • 随机试错:从环境中进行随机抽样
  • 混合策略:一定数量的随机试错,同时对已经熟知的环境直接利用,解决简单的子目标.

小结:

  1. 强化学习是机器学习的一个子集,强化学习的目标是为了在某些环境中获得最大化的奖励,尤其是涉及控制决策类的问题,强化学习非常有用,原则上强化学习算法可以采用任何统计学习模型,但是神经网络模型很流行也很有效.为什么:因为深度学习算法可以学习抽象出状态的重要特征,深度学习算法虽然参数很多但是是有限的,因此我们可以用它来将任何可能的状态压缩为可以有效处理的状态,然后使用压缩后状态表示形式进行决策,例如 Atari DQN仅有1792个参数(16x8x8,32x4x4,256个节点全链接隐藏层),而不是要存储26528228265^{28228}26528228个(key/value)状态空间.
  2. agent是强化学习的核心,它也是强化学习算法的一部分,感受环境的变化采取下一步的行动.
  3. env是agent所在的环境,为agent生成输入的数据.
  4. state就是env在某一时刻的快照,agent根据state做出下一步决策.环境通常是不断变化的,所以可以通过在特定的时间点采样给agent提供环境的状态信息.
  5. action是agent做出的动作/决策,该动作会引发环境的变化.
  6. reward是在agent采取了’良好’的动作后,环境给予agent的一个积极信号.有奖励就有惩罚,当agent做出了’不良’的行为,会收到一个消极的信号,强化学习的目标就是奖励最大化.
  7. RL的Pipeline是一个循环,agent接收输入环境的state,agent评估输入,输出下一步的操作,执行动作后,环境发送改变,环境将(奖|惩)信号发送给agent,以上过程重复进行.当agent为神经网络模型时,每次迭代都会基于信号评估损失函数,通过反向传播算法更新权重提高agent的表现.

DRL实战 : Dynamic Programming相关推荐

  1. ADPRL - 近似动态规划和强化学习 - Note 7 - Approximate Dynamic Programming

    Note 7 - 近似动态规划 Approximate Dynamic Programming 7. 近似动态规划 (Approximate Dynamic Programming) 7.1 近似架构 ...

  2. 一道有关动态规划(Dynamic Programming)的网易面试题

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:机器学习算法实验室 最近遇到一道很经典的有关动态规划的网 ...

  3. ADPRL - 近似动态规划和强化学习 - Note 5 - Banach Fixed Point Theorem in Dynamic Programming

    动态规划中的巴拿赫不动点定理 5. Banach Fixed Point Theorem in Dynamic Programming 5.1 巴拿赫不动点定理定理 (Banach fixed poi ...

  4. 强化学习(二)- 动态规划(Dynamic Programming)

    3.动态规划 3.1 介绍 术语动态规划(DP:Dynamic Programming) 指的是一个算法集合,可以用来计算最优策略,给定一个完美的环境模型,作为马尔可夫决策过程(MDP).经典的DP算 ...

  5. LeetCode 动态规划(Dynamic programming)系列题目--C++,Python解法

    LeetCode上有许多态规划(Dynamic programming)的题目,我在这里整合一下 本文章不再更新,请看LeetCode 所有题目总结 LeetCode 所有题目总结:LeetCode ...

  6. 数据结构与算法(C++)– 动态规划(Dynamic Programming)

    动态规划(Dynamic Programming) 理解动态规划的好文:https://www.sohu.com/a/153858619_466939 1.基础 **定义:**递归算法经常会有一些重复 ...

  7. 动态规划(Dynamic Programming)例题步骤详解

    文章目录 动态规划(Dynamic Programming)浅学 - 学习笔记 题目特点: 1.选择硬币组合问题:(Coin Change) 动态规划题四个核心步骤: 一.确定状态 二.转移方程 三. ...

  8. 动态规划 dynamic programming

    动态规划dynamic programming June,7, 2015 作者:swanGooseMan 出处:http://www.cnblogs.com/swanGooseMan/p/455658 ...

  9. 论文阅读 - Beat Tracking by Dynamic Programming

    文章目录 1 概述 2 总体框架 3. 计算Onset Strength Envelope 4 计算全局的Tempo 5 基于动态规划计算beats 6 参考文献 1 概述 有背景音乐的短视频拼接时, ...

  10. dynamic programming 学习

    这是看到一位大神,写的关于dynamic programming的博客,认为很好.简单分析下.然后给出链接. 背景问题就是 有一个国家,全部的国民都很老实憨厚,某天他们在自己的国家发现了十座金矿.而且 ...

最新文章

  1. 鸿蒙推送升级包,华为鸿蒙系统已陆续推送!安卓可无缝升级,升级包容量高达6GB...
  2. 英文书《用unreal来学习c++》_用机器学习来提升你的用户增长:第四步,客户流失预测
  3. react学习(66)--ant design中Model宽度
  4. c语言在一组数据中找最大值最小值,用c语言输入一组数据,输出最大最小值,求c语言程序讲解: 输入一组数据,求最大值,最小值,和,平均...
  5. 北京一Model 3失控冲向公交站台,特斯拉调查后回应......
  6. 向量化计算cell_Matlab向量化编程在二级劝退学科中的一个应用例子
  7. 【图像检索】基于matlab GUI KNN图像检索【含Matlab源码 267期】
  8. 《Python程序设计基础(第2版)》习题答案
  9. maya藤蔓插件_Maya特效制作之植物生长动画制作教程(二)之多条藤蔓动画制作...
  10. Latex输入大小写罗马数字
  11. JavaScript系列之高级篇(2)
  12. 查看创建数据库的sql语句
  13. 基于pygame 图片多边形坐标获取
  14. 华硕路由器里的虚拟服务器在哪里,华硕RT-AC86U路由器怎么设置端口转发服务
  15. 饭后七个好习惯吃饱吃好不发胖
  16. 【易通慧谷】科技赋能金融,三新理念全面解读新金融
  17. Microbiome:肠易激综合征的认知行为疗法诱导与胃肠道症状改善相关的脑-肠-微生物组轴的改变
  18. python匿名函数里用for_Python基础之(内置函数、匿名函数、递归)
  19. 华为手机怎么录屏?十分简单,轻松学会
  20. 清华大学(深圳)吕帅课题组招收计算机领域博士后

热门文章

  1. JavaSE实战案例贪吃蛇小游戏
  2. Java基础,删除指定索引的元素,编程思路详解
  3. c++ socket线程池_Netty(3)——Reactor线程模型
  4. php 中echo用法,php中echo()函数的用法(附代码)
  5. php添加开机启动脚本_php-fpm开机自动启动Shell脚本
  6. 怎么在linux中运行gamess,桌面应用|在 Linux 中怎么运行 MS-DOS 游戏和程序
  7. 转:Maven通俗讲解
  8. C# WPF中DataGrid的数据绑定(Binding)
  9. VMware虚拟机、centos以及securecrt的安装
  10. hdu 1907 John (Nim变形)