Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >强化学习笔记8:整合学习和规划

强化学习笔记8:整合学习和规划

作者头像
列夫托尔斯昊
发布于 2020-08-31 06:41:15
发布于 2020-08-31 06:41:15
8840
举报
文章被收录于专栏:探物及理探物及理

1、introduction

第7章节,讲了PG,从episode经验学习到 策略 policy 之前的章节,讲了从episode 经验学习到 价值函数

本章,从过去经验学习到环境模型

通过规划的手段,构建值函数或者策略

  • Model-free
    • 没有模型
    • 从经验中学习,得到价值函数
  • Model-based
    • 有模型
    • 根据模型规划价值函数

本讲指出解决这类问题的关键在于“前向搜索”和“采样”,通过将基于模拟的前向搜索与各种不依赖模型的强化学习算法结合,衍生出多个用来解决类似大规模问题的切实可行的算法,如:Dyna-2算法之类。

2、Model-based reinforcement learning

当学习价值函数或策略变得很困难的时候,学习模型可能是一条不错的途径,像下棋这类活动,模型是相对直接的,相当于就是游戏规则。

  • 优点
    • 用监督学习高效实现建模
    • 推断模型不确定性
  • 缺点
    • 第一步建模,第二步构建价值函数,两个过程带来双重的估计误差

模型,我们要做什么

Model learning

模型实例

  • Table lookup model
  • Linear expectation model
  • Linear Gaussian model
  • Gaussian Process model
  • Deep Belief Network model
例子 Table lookup example

Planning with a model

Planning with an inaccurate Model

显然,模型的准确性,直接制约了Model-based RL 性能的上限

Solution:

  • 模型错误的情况,直接model-free RL,并且从env中采样
  • 明确模型不确定性的原因

3、integrated architectures

本节将把基于模型的学习和不基于模型的学习结合起来,形成一个整合的架构,利用两者的优点来解决复杂问题。从两种渠道进行采样 - Env 真实MDP - Model 估计MDP

- 集成学习规划 Dyna

Dyna

Dyna是并列、综合与model-free、model-based的学习方法

  • Model-free RL
    • 无模型
    • 从真实环境Env采样,学习价值函数
  • Model-based RL
    • 从真实环境Env中学习,建模Model
    • 从Model虚拟采样,规划价值函数
  • Dyna
    • 从真实环境Env中学习,建模Model
    • 根据Env 和 Model采样,同时学习规划 价值函数

Dyna-Q 算法框图

a,b,c,d,和e都是从实际经历中学习,d过程是学习价值函数,e过程是学习模型。 在f步,给以个体一定时间(或次数)的思考。在思考环节,个体将使用模型,在之前观测过的状态空间中随机采样一个状态,同时从这个状态下曾经使用过的行为中随机选择一个行为,将两者带入模型得到新的状态和奖励,依据这个来再次更新行为价值和函数。

类似监督学习里,用数据增强,来丰富数据集。

  • 例子 将规划引入RL之后,规划比学习具有更小的抖动和噪声,稳定性好
Dyna-Q with 不准确模型

由于Dyna综合了实际和模拟两种情况,在实际环境改变时,错误的模型会被逐渐更正。

  • 环境剧烈改变

我们可以发现,不同算法对环境改变的适应性,相差悬殊

  • 环境柔和改变

Q+ 算法,奖励函数里 鼓励 episode 探索新的状态

4、simulation-based search

搜索相对于规划,区别之一就是,不搜索整个空间,用采样的方法来优化

Forward search

两个重要特征:

  • 不求解整个MDP,以当前状态为起始状态
  • 使用基于采样的规划

两点都可以显著降低计算量

步骤:

MC search

Simple MC search

MC tree search (evaluation)

对于真正的MC tree search,Q值的构建,包含了所有状态s和动作a 估计步骤:

MC tree search (Simulation)

例子:围棋Go
Position evaluation in go
MC evaluation in go

MCTS 步骤:

  • 第一次迭代:如下图所示,五角形表示的状态是个体第一次访问的状态,也是第一次被录入搜索树的状态。我们构建搜索树:将当前状态录入搜索树中。使用基于蒙特卡罗树搜索的策略(两个阶段),由于当前搜索树中只有当前状态,全程使用的应该是一个搜索第二阶段的默认随机策略,基于该策略产生一个直到终止状态的完整Episode。图中那些菱形表示中间状态和方格表示的终止状态,在此次迭代过程中并不录入搜索树。终止状态方框内的数字1表示(黑方)在博弈中取得了胜利。此时我们就可以更新搜索树种五角形的状态价值,以分数1/1表示从当前五角形状态开始模拟了一个Episode,其中获胜了1个Episode。这是第一次迭代过程。
  • 第二次迭代:如下图所示,当前状态仍然是树内的圆形图标指示的状态,从该状态开始决定下一步动作。根据目前已经访问过的状态构建搜索树,依据模拟策略产生一个行为模拟进入白色五角形表示的状态,并将该状态录入搜索树,随后继续该次模拟的对弈直到Episode结束,结果显示黑方失败,因此我们可以更新新加入搜索树的五角形节点的价值为0/1,而搜索树种的圆形节点代表的当前状态其价值估计为1/2,表示进行了2次模拟对弈,赢得了1次,输了1次。第二次迭代结束。

经过前两次的迭代,当位于当前状态(黑色圆形节点)时,当前策略会认为选择某行为进入上图中白色五角形节点状态对黑方不利,策略将得到更新:当前状态时会个体会尝试选择其它行为。

  • 第三次迭代:如下图,假设选择了一个行为进入白色五角形节点状态,将该节点录入搜索树,模拟一次完整的Episode,结果显示黑方获胜,此时更新新录入节点的状态价值为1/1,同时更新其上级节点的状态价值,这里需要更新当前状态的节点价值为2/3,表明在当前状态下已经模拟了3次对弈,黑方获胜2次。

随着迭代次数的增加,在搜索树里录入的节点开始增多,树内每一个节点代表的状态其价值数据也越来越丰富。在搜索树内依据Ɛ-greedy策略会使得当个体出于当前状态(圆形节点)时更容易做出到达图中五角形节点代表的状态的行为。

  • 第四次:如下图,当个体位于当前(圆形节点)状态时,树内策略使其更容易进入左侧的蓝色圆形节点代表的状态,此时录入一个新的节点(五角形节点),模拟完Episode提示黑方失败,更新该节点以及其父节点的状态价值。该次迭代结束。
  • 第五次迭代:如下图,更新后的策略使得个体在当前状态时仍然有较大几率进入其左侧圆形节点表示的状态,在该节点,个体避免了进入刚才失败的那次节点,录入了一个新节点,基于模拟策略完成一个完整Episode,黑方获得了胜利,同样的更新搜索树内相关节点代表的状态价值。

随着迭代次数增加:

  • 当个体处于当前状态时,其搜索树将越来越深,那些能够引导个体获胜的搜索树内的节点将会被充分的探索,其节点代表的状态价值也越来越有说服力;
  • 搜索树内的节点越来越多,代表着搜索树外的节点将逐渐减少,少量的随机行为并不会影响个体整体的决策效果。
MCTS 优点
  • 选择性好,好的结果被优先选择
  • 动态的评估状态(立足当前状态),不是动态规划(没有离线的评估整个状态空间)
  • 使用采样方法,不在全部状态空间搜索,避免了维度灾难
  • 采样所以具有黑盒特性,对黑盒模型同样有效
  • 可以异步、并行计算高效

TD search

  • simulation-based search
  • 自举特性Bootstrapping, TD而不是MC
  • MCTS 将 MC control 应用于 子MDP from now
  • TD search 将 Sarsa 应用于 子MDP from now

MC vs TD search

步骤

Dyna-2

与Dyna-Q不同,dyna-Q只有一套参数,虽然经验有2个source(env和model)

Dyna-2 特征权重来源于两部分

  • Long-term memory
    • 长期记忆 从真实经验中获取, 方法使用TD learning 通用的知识,可以应用于任何episode
  • Short-term(working) memory
    • 短期记忆 从仿真经验中获取, 方法用TD search 特定的局部知识,对当前状态有效
  • 总的价值函数 = 两部分之和

显而易见,将仿真产生数据应用于搜索,并将搜索结合到学习中,增强了数据,会产生显著的提升

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
不给“爸爸”添麻烦 - iTOP iOS 动态库改造
苹果官方文档 对提交商店 APP 的二进制文件中__TEXT段大小有限制,超过大小限制的应用在提交评审的时候会被拒绝...
腾讯Bugly
2018/03/23
2.3K2
iOS 的系统类信息在栈上?
前言 今天有位群友抛出了一个很有意思的问题:为什么系统类的 class 地址比栈区变量更高? image-20210519235852843 iOS 进程内存布局 通常情况下,我们对进程内存的布局
酷酷的哀殿
2021/06/22
1K0
iOS 的系统类信息在栈上?
iOS微信安装包瘦身
前提 微信经过多次版本迭代,产生不少冗余代码和无用资源。之前微信也没有很好的手段知道哪个模块增量多少。另外去年10月微信开始做ARC支持,目的是为了减少野指针带来的Crash,但代价是可执行文件增大20%左右。而苹果规定今年6月提交给Appstore的应用必须支持64位,32位和64位两个架构的存在使得可执行文件增加了一倍多。安装包大小优化迫在眉睫。 Appstore安装包是由资源和可执行文件两部分组成,安装包瘦身也是从这两部分进行。 资源瘦身 资源瘦身主要是去掉无用资源和压缩资源,资源包括图片、音视频文件
微信终端开发团队
2018/01/29
4.6K0
iOS微信安装包瘦身
手机APP安装包缩减方案
安装包大小对于产品很重要 主要有如下几个原因: 1、手机APP安装包的大小会影响用户是否愿意花费流量来下载此APP; 2、包体越大下载过程越长,用户取消下载的可能性越大; 3、在手机空间不足,用户需要清理手机空间时,包体越大的软件被清理的可能性越大; 4、一些预装软件,合作厂商会限定软件大小; 5、APP经过多次版本迭代,产生不少冗余代码和无用资源,会带来更高的学习和维护成本,也更容易出错。 文章将分三大部分进行讲解 一、iOS安装包的构成 二、安装包缩减方案 三、相关工具和知识介绍 1 iOS安装包的
腾讯移动品质中心TMQ
2018/02/06
1.6K0
手机APP安装包缩减方案
iOS静态库SDK开发指南
无论是 .a 静态库还是 .framework 静态库,最终需要的都是:二进制文件 + .h + 其它资源文件
公众号iOS逆向
2021/08/25
1.4K0
iOS静态库SDK开发指南
iOS 优化 - 瘦身
iOS 优化将是一个专题,其中会包括包体积优化(瘦身)、启动时间优化、UI 优化等等。那么这个专题的开篇就从瘦身开始吧。
CoderStar
2022/08/24
2.9K0
iOS 优化 - 瘦身
iOS符号冲突(duplicate symbols)
背景是我们项目升级某个SDK,结果发现项目和SDK出现符号冲突。 符号冲突是接入SDK有可能会出现的问题,本文便尝试从技术角度去解决。
落影
2020/04/24
4.9K1
iOS符号冲突(duplicate symbols)
iOS逆向之Mach-O文件
阅读笔者的其他文章,我们了解了编译过程中的预处理、词法分析、语法分析、编译、链接等步骤。经常和编译型语言打交道的开发者对于可执行文件的编译过程肯定不陌生。我们用 Xcode 构建一个程序的过程中,会把源文件 (.m 和 .h) 文件转换为一个可执行文件。这个可执行文件中包含的字节码将会被 CPU (iOS 设备中的 ARM 处理器或 Mac 上的 Intel 处理器) 执行。
VV木公子
2021/03/07
11.4K0
iOS逆向之Mach-O文件
mach-o文件分析多余的类和方法
最近做包大小优化,在做项目代码优化时,其中有一个过程是分析Mach-O文件,看网上很多文章都说通过otool分析Mach-O,获取objc_classrefs、objc_classlist等,然后找出无用类和无用方法。
莫空9081
2021/06/15
3.9K0
Xcode 创建.a和framework静态库
最近因为项目中的聊天SDK,需要封装成静态库,所以实践了一下创建静态库的步骤,做下记录。
Haley_Wong
2018/08/22
3.5K0
Xcode 创建.a和framework静态库
Category 特性在 iOS 组件化中的应用与管控
除了引用中提到的添加方法,Category 还有很多优势,比如将一个类的实现拆分开放在不同的文件内,以及可以声明私有方法,甚至可以模拟多继承等操作,具体可参考官方文档Category。
美团技术团队
2019/01/07
2K1
启动优化(二)——二进制重排
上篇文章我们讲了虚拟内存。应用程序在运行的时候会有一个虚拟内存,虚拟内存是分页管理的,它通过页表映射到物理内存上面。分页管理有一个特点,当加载新的一块功能的时候,对应的某一页数据不在物理内存的时候,系统会缺页中断pageFault,而pageFault是需要时间的,用户在使用过程中,几毫秒实际上用户是感知不到的;但是在应用启动的时候,会有大量代码需要执行,此时会有数量众多的pageFault,这样一累计,用户就可以感知到了。
拉维
2021/04/16
2K0
一文读懂 Xcode 代码索引原理
导语:Xcode 作为 iOS 开发绕不开的 IDE 代码编辑功能很强大,但是在编辑大型工程时总是遇到代码高亮、代码提示失效,建立代码索引慢等问题。本文抽丝剥茧,介绍了 Xcode 代码索引的工作原理,并提出了一种跨设备共享代码索引的方案,在企微落地后优化了90%的全量索引耗时。
腾讯TMF团队
2023/01/03
5K3
代码管理| 手把手教你封装自己的静态库SDK
这里重点说下,怎样饮用Bundle中的图片资源。这里使用的是简写:@"JWJFramework.bundle/open"其中JWJFramework.bundle是Bundle的名称。
進无尽
2018/09/12
1.6K0
代码管理| 手把手教你封装自己的静态库SDK
探秘 Mach-O 文件
之前负责项目的包体积优化学习了 Mach-O 文件的格式,那么 Mach-O 究竟是怎么样的文件,知道它的组成之后我们又能做点什么?本文会从 Mach-O 文件的介绍讲起,再看看认识它后的一些实际应用。
会写bug的程序员
2020/06/19
2.5K0
探秘 Mach-O 文件
iOS性能优化之启动优化
应用的启动时间,一般分为Main函数执行之前和之后,执行之前称之为pre-main
玖柒的小窝
2021/10/22
2K0
iOS性能优化之启动优化
Mach-O相关概念
Mach-O是Mach Object的缩写,是Mac/iOS上用于存储程序、库的标准格式
Scott_Mr
2022/05/11
1.1K0
Mach-O相关概念
如何设计编写一个 SDK
App 的开发更偏向于用户层面,从 UI 展示到业务逻辑处理,全程处理用户的行为。而 SDK 面向的是开发者,开发更偏向于功能方面,注重功能的开发实现。不妨来看看 FinClip 移动端工程师整理的如何编写一个 SDK,还是很有参考价值。
Onegun
2021/12/15
1.5K0
如何设计编写一个 SDK
iOS应用构建与部署小结
上篇文章介绍了Objective-C的基本概念,本文就来接着看如何创建我们的第一个简单iOS应用, 本着简单可复现的方式,我们会以尽可能小的成本来构建并在真机运行iOS应用。 也就是说, 不用越狱, 也无需开发者账号。当然,一台iPhone手机还是需要的,最好还有一台Mac。
evilpan
2023/02/12
2.2K0
iOS应用构建与部署小结
减包-删除无用的代码
使用开源工具 LSUnusedResources 检查重复图片,但是可能会有误报,比如 [@”image%d”, index] 这种引用方式无法检查到,需要人工在核对一边。
Helloted
2022/06/08
1.6K0
减包-删除无用的代码
相关推荐
不给“爸爸”添麻烦 - iTOP iOS 动态库改造
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档