学习心得-强化学习【贝尔曼最优公式】

2023-11-03

只为记录学习心得
学习视频来源B站up主 西湖大学空中机器人
链接:https://www.bilibili.com/video/BV1sd4y167NS/?spm_id_from=333.337.search-card.all.click&vd_source=ad94eb95d81e9e6b1a5d71459ef1a76d
目录
1.举例入门
2.最优策略
3.贝尔曼最优公式
4.贝尔曼最优公式详细分析
5.分析最优策略的性质

1.举例入门
贝尔曼最优公式(Bellman optimality equation,BOE)是贝尔曼公式的一种特殊情况
强化学习的目的就是为了寻找最优策略,下面先介绍最优策略的定义以及如何寻找最优策略
首先以例子入门
在这里插入图片描述
上面先利用贝尔曼公式求解每一个状态,取γ=0.9,得到state value的值,如下
在这里插入图片描述
有了state value就可以求解出action value,如下
在这里插入图片描述
有了这些准备后,会发现一个问题,就是例子中当前策略是往右走的,这是一个不好的策略,那么应该如何去提升?问题的答案就是利用action value进行提升
首先是现在的策略policy可以写成下面这一种形式
在这里插入图片描述
在这个策略下,我们已经计算出了action value,并且发现a3的action value值是最大的
在这里插入图片描述
那么能不能选择a3作为新的策略,具体来说就是这个新的策略会在a=a时概率为1,不等于a时概率为0,a*就是使action value最大值的那个动作,如下所示
在这里插入图片描述
也就是现在的策略是往右边走的(a2),但新的策略是往下走的(a3)
为什么能够选择action value最大的action能够得到一个比较好的策略?
直观上理解:因为action value本身就代表action的价值,如果选择action value很大的那个action,就意味着能够得到更多的reward
数学上理解:是否计算出当前action value最大的action,就能得到最优策略呢?例子中因为其他状态s2、s3、s4的策略已经是最优了,因此计算出s1当前action value最大的action,就能得到最优策略,如果其他状态的策略不是最优的,那还能得到最优策略吗,如当前策略是这样
在这里插入图片描述
这里面就会包含一些不确定性,但是,只要我们一遍一遍去做迭代,不断更新,最后一定会得到最优策略,这个理解已经超过直观理解了,因此需要依赖数学进行更严格更透彻的分析,这个数学的工具就是贝尔曼最优公式
回到目录

2.最优策略
state value是怎么衡量策略的好坏呢?如果对所有的状态s,π1得到的state value都大于π2得到的state value,就说π1比π2
在这里插入图片描述
进一步就可以定义最优,如果策略π*对任意一个状态,相比任意的其他一个策略π,所得到的state value都要打,就说这个π*是最优的,定义如下
在这里插入图片描述
定义并不麻烦,麻烦的是定义出来后要回答一系列的问题,如:
①这个最优策略是否存在?
②最优策略是唯一的吗?
③最优策略是随机性的还是确定性的?
④怎么得到最优策略?
为了回答这些问题,我们需要研究贝尔曼最优公式
回到目录

3.贝尔曼最优公式
公式如下
在这里插入图片描述
这个公式很熟悉,就是贝尔曼公式,改动的地方就是前面加了maxπ,加了这个之后,式子里面的π(a|s)就不再是给定的了,因此这里面嵌套了一个优化问题,需要先解决优化问题求解出来这个π,再把π代入式子里面。式子可以写成另一种形式
在这里插入图片描述
这里除了π(a|s)、v(s)、v(s’)是未知的,其他都是已知的。它的矩阵向量形式就是
在这里插入图片描述
这里maxπ可以写成
在这里插入图片描述
回到目录

4.贝尔曼最优公式详细分析
贝尔曼最优公式的矩阵-向量形式中,v和π都是需要求解的,而一个式子,怎么能求两个未知量呢?
可以通过下面的例子来初步理解
在这里插入图片描述
同样是一个式子求解两个未知量,当要满足x为最大化等式右边式子时,首先要最小化a,因为这里是-a2,那么只有当a=0时才能得到最大化的式子2x-1,这样就能解出来了,将改思想应用到贝尔曼最优公式中
在这里插入图片描述
现在要做的就是确定下π(a|s),这里有多个a,在grid world例子中有5个a,分别是q(s,a1)、q(s,a2)、q(s,a3)、q(s,a4)、q(s,a5)。有这5个值,如何求解这个π,通过下面一个简单的例子了解
在这里插入图片描述
这个问题是为了找到c*1、c*2、c*3,使得函数能达到最大值,约束条件是c1+c2+c3=1,c1,c2,c3≥0,这个也是π的约束条件。假设q3≥q1,q2,那么该问题的最优解决方法就是c*3=1,c*1=c*2=0。因为q3是最大的,那么我们希望把所有的权重全放到q3上,因此将c*3设为最大1,数学上的解释就是因为c3=1时,下面式子成立
q3=(c1+c2+c3)q3=c1q3+c2q3+c3q3≥c1q1+c2q2+c3q3
通过这个例子就可以知道怎么来确定π,就是求最大的q值
在这里插入图片描述
什么时候最优呢?π的选取是a*=1,不是a*=0,a*是最大q值对应的那个动作
在这里插入图片描述
这就是最优项maxπΣaπ(a|s)的处理方式

接下来是形式上的变化,令
在这里插入图片描述
贝尔曼最优公式就能写成
在这里插入图片描述
为了求解贝尔曼最优公式,再引入一个基础contraction mapping theorem(压缩映射定理),下图是概念
在这里插入图片描述
那么压缩映射定理有三个结论,只要 f 是压缩映射,就有

  • existence:不需要知道 f 具体是什么,只要它是压缩映射,就能知道一定存在一个不动点,满足 x*=F(x*)
  • uniqueness:该不动点是唯一的
  • algorithm:可以通过xk+1=f(xk),利用迭代使xk->x*(k->∞)【实际上k不需要趋于∞才能收敛,因为xk趋向x*是指数级收敛,收敛速度快】

通过一系列的证明,在赵老师视频的书中有公式证明,可以得到贝尔曼最优公式是一个压缩映射,因此贝尔曼最优公式存在唯一解v*,且能够通过迭代计算得出,下图是步骤
在这里插入图片描述
下面是一个例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
迭代次数可以设定一个条件,满足 || vk-vk-1 || < ε

下面是贝尔曼最优公式解的最优性
在这里插入图片描述
回到目录

5.分析最优策略的性质
对于下面的贝尔曼最优公式
在这里插入图片描述
我们要求的是 v(s)、π(a|s)、v(s’) 三个,其他都是已知的,既然是用已知求未知,那么能影响未知的因素,就是已知条件,也就是说贝尔曼最优公式是由这些已知因素决定的,分别是:

  • Reward design(奖励设置):r
  • System model(系统模型):p(s’|s,a)、p(r|s,a)
  • Discount rate(折扣因子): γ

接下来考虑改变r和改变γ的时候最优策略会发生什么样的改变,因为系统模型一般是很难改变的,就不考虑改变系统模型
下面举例
在这里插入图片描述
这里可以发现,这个最优策略并不是绕一大圈到达蓝色目标区,而是进入了一个黄色禁止区后达到蓝色目标区
【弹幕看到一个有意思问答过程:
问:这个地方绕一大圈得到的reward是一个比较小的正数,而直接经过forbidden得到的reward是一个-1+0.9=-0.1 为什么会得到这样的policy呢?不应该绕一大圈吗?
答:因为到了目标位置之后不会停下,还会继续原地打转,会有等比数列形式的累积奖励
问:但是绕一大圈之后达到目标位置也不会停下,会一直打转,得到的奖励不应该比直接穿过forbidden的return高吗
答:我理解是你在绕一大圈时到达目标区时,我已经在里面打转到比你到达值还多了】
如果是改变参数 γ ,从0.9 -> 0.5
在这里插入图片描述
改变的原因是绕一大圈得到的return比直接穿过得到的return大,实质原因之前也提过,当 γ 比较大时,agent比较远视,会重视未来的reward,当 γ 比较小时,agent比较近视,会重视近期的reward
再次改变参数 γ ,从 0.5 -> 0
在这里插入图片描述
这时候最优策略已经变得非常近视了,瞎掉的程度,只关注即时奖励,以第3行第2列为例,该状态往上、右、下都会得到负奖励,而原地不动和向左奖励不变,这里程序里面是随机选择一个,恰好选的是原地不动,再以第3行第3列为例,该状态原地不动、往下都会得到负奖励,而往左奖励是0,往右奖励是+1,因此策略是往右
如果是增大惩罚 rforbidden = -10,此时 γ = 0.9
在这里插入图片描述
此时策略已经和 rforbidden = -1时不一样了
如果改变 r ,变成 ar+b 形式,如下,上面改成下面的,rotherstep并不是多出来的,是因为之前它等于0,所以就隐藏了,比如从一个白色的格子到另一个白色的格子,是不会有奖惩的,但是增加偏置量时,它就从0变成1
在这里插入图片描述
做了这个改变,实际上的最优策略会改变吗?实际上是不会改变的,因为最重要的不在于单个奖励的绝对价值,而在于这些奖励之间相互的价值,因为一个增加偏置量,其他也增加相同偏置量,等于没变。这个可以用下面的定理说明
在这里插入图片描述
该意思如下
在这里插入图片描述
回到目录


       

欢迎指正!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习心得-强化学习【贝尔曼最优公式】 的相关文章

随机推荐

  • Centos7 安装MongoDB详细步骤

    闲来无事 学习服务器一系列配置 下面列一下安装MongoDB的过程和心得 1 下载 https www mongodb com try download community 2 可以创建一下单独文件夹来解压 tar zxvf mongodb
  • C++HeadFirst:第一章-设计模式入门

    案例 模拟Duck类应用 设计原则 找出应用中可能需要变化的部分 把不变和要变的部分分离独立出来 不要把他们的代码混在一起 把会变化的部分取出并 封装 起来 好让其他部分不会受到变化的影响 我们知道duck类中的fly 和quack 会随着
  • JAVA replaceAll 去所有空格

    public class Test1 1 public static void main String args String a1 Y Y Y N N N N Y Y Y N N Y Y Y Y N N N Y Y N Y Y Y Y Y
  • https原理和数字证书

    https原理和数字证书 为什么需要加密 什么是对称加密 什么是非对称加密 非对称加密 对称加密 中间人攻击 数字证书 数字签名 浏览器验证过程 怎么证明CA机构的公钥是可信的 HTTPS SSL TLS 的加密机制虽然是大家都应了解的基本
  • 匿名内部类 是否可以继承其它类,是否可以实现接口

    Inner Class 内部类 定义在类中的类 Nested Class 嵌套类 是静态 static 内部类 1 要创建嵌套类的对象 并不需要其外围类的对象 2 不能从嵌套类的对象中访问非静态的外围类对象 Anonymous Inner
  • 【Python学习】python不要使用任何模块名作为文件名(module 'xgboost' has no attribute 'DMatrix')

    今天第一次上手xgboost 上午按照安装教程吧xgboost装上 然后各种用得不亦乐乎 晚上关电脑吃饭去 回来开电脑想继续回味xgboost 发现一运行就出现了 module xgboost has no attribute DMatri
  • stream流最常用方法

    一 获取stream流 list或map或jsonarray使用 stream获取 数组通过stram of 获取 二 筛选 筛选出集合中的字段符合某一条件的值 筛选的结果是一个个整体 List list yw009IdDetail str
  • error while loading shared libraries: libstdc++.so.6

    编译安装包时出现 error while loading shared libraries libstdc so 6 cannot open shared object file No such file or direcory 下载安装如
  • mysql之mysq类型18

    概述 接下来按照以下来讲解mysql的主要数据类型 常见的数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本 char varchar 较长的文本 text blob 较长的二进制数据 日期型 1 数值型 mysql的数值型包
  • 编写谷歌浏览器插件入门

    概述 学习目标 如何开发一个简单的浏览器插件 学习前提 HTML CSS JavaScript基础 官方文档 http chrome cenchy com 入门 其实跟着官方的说明文档就能很快入门 而且是中文文档 第一步 在电脑本地的任意位
  • 众享比特董事长严挺出席2022中国计算机大会“元宇宙、Web3.0、NFT:机遇还是泡沫?”技术论坛

    12月10日晚 为期三天的2022中国计算机大会 2022CNCC 成功落下帷幕 众享比特董事长严挺出席 元宇宙 Web3 0 NFT 机遇还是泡沫 技术论坛并参与专题研讨 第三行左一为众享比特董事长严挺 中国计算机大会 CNCC 是由中国
  • 【华为OD机试c++/python】补种未成活胡杨【2023 B卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 近些年来 我国防沙治沙取得显著成果 某沙漠新种植N棵胡杨 编号1 N 排成一排 一个月后 有M棵胡杨未能成活 现可补种胡杨K棵 请问如何补种 只
  • java 什么情况下触发gc java gc触发时机

    以下是JVM中创建一个新对象的时候的完成的一个流程 二 Full GC触发过程 2 1 System gc 方法的调用 此方法的调用是建议JVM进行Full GC 虽然只是建议而非一定 但很多情况下它会触发 Full GC 从而增加Full
  • echarts环形图设置不重复颜色

    在做后台管理系统时 很多时候都需要用图表来展示数据 echarts是其中一种使用广泛的图表库 调色盘颜色种数有限 如5 1 2版本 只有9种颜色 当需要展示的种类超过9种时 就会重复使用默认的颜色列表 但是往往不希望使用重复的颜色 可使用如
  • R语言的习题练习(基本数据管理)

    1 创建如下数据框city 2 使用 为city数据框增加一列人口数population 分别取值为 1103 446 488 3 使用within函数或者transform函数为步骤2之后的city数据框增加一列log populatio
  • OpenCV入门系列3:图像的膨胀、开闭运算和梯度运算

    文章目录 前言 一 图像的膨胀 1 1 膨胀原理 1 2 膨胀实现 1 3 结果展示 二 开闭运算 2 1 开运算实现与结果 2 2 闭运算实现与结果 三 梯度运算 3 1 梯度介绍 3 2 梯度实现 3 3 结果展示 总结 前言 在系列2
  • 「一文搞定」串口、COM、UART、TTL、USB、RS-232、RS-485、I2C、SPI、CAN、1-WIRE

    文章目录 一 串口 二 UART 三 TTL电平 四 USB 五 RS 232 六 RS 485 七 IIC 八 SPI 九 CAN 十 1 WIRE 一 串口 1 串口概述 串行接口简称为串口 也叫串行通信接口 一般也叫COM口 这是一个
  • 显示没有可连接的后端服务器,网关没有可连接的后端服务器

    网关没有可连接的后端服务器 内容精选 换一换 负载均衡器会定期向后端服务器发送请求以测试其运行状态 这些测试称为健康检查 通过健康检查来判断后端服务器是否可用 负载均衡器如果判断后端服务器健康检查异常 就不会将流量分发到异常后端服务器 而是
  • doris前缀索引、doris bloom filter索引、doris bitmap索引原理及适应场景

    索引用于帮助快速过滤或查找数据 目前 Doris 主要支持两类索引 内建的智能索引 包括前缀索引和ZoneMap索引 用户创建的二级索引 包括Bloom Filter索引和Bitmap倒排索引 其中ZoneMap索引是在列存格式上 对每一列
  • 学习心得-强化学习【贝尔曼最优公式】

    只为记录学习心得 学习视频来源B站up主 西湖大学空中机器人 链接 https www bilibili com video BV1sd4y167NS spm id from 333 337 search card all click vd