强化学习(五):蒙特卡洛方法
之前我们讲的都是model-based的方法,现在我们要讨论model-free的方法。在去掉模型时,我们要考虑的就是如何不用模型去估计一些量。这里最简单的思想就是蒙特卡洛估计。
假设我们有这么一个例子:投硬币。假设正面朝上X=1;负面朝上X=-1,我们希望计算E(X)。那么这里就有两种方法:
1.model-based。也就是说我们知道这个正反面的概率,即P(X=1)=P(X=-1)=0.5,这样就能轻松算出E(X)。可是这样的精确的概率模型大部分时候是没法知道的,所以我们也可以用第二种方法。
2.model-free。基本思想就是我做很多实验或者采样,得到了一个序列{x1,x2,……,xn},这样均值就可以近似为:
这就是蒙特卡洛估计的思想。当N越来越大,我们估计的E(X)会越来越精准。这里其实就应用了统计学的大数定理。大数定理见下:
这就是最基本的关于蒙特卡洛(Monte
Carlo,MC)的思想。由此,我们将讲述三种算法:MC Basic,MC Exploring
Starts,MC Epsilon()-Greedy。
M ...
强化学习(四):值迭代与策略迭代
上一章的末尾我们提到了value iteration。这一章我们介绍value
iteration和policy iteration——这二者都是截断策略迭代(Truncated policy
iteration)的两个极端情况。
值迭代
值迭代分两步:
·1.policy update(PU)。
这一步求解当给出时的,即。这里的叫做greedy
policy,因为它仅仅是在选择最大的q值。
·2.value update(VU)。
这一步求解,即。 总的求解流程如下:
以上都是向量形式,为了给出具体算法,我们要将向量形式改写成元素形式(前者更适合理论分析)。伪代码如下。
策略迭代
不同于值迭代,策略迭代是先给出个初始策略.策略迭代也分两步:
·1.policy evaluation(PE)。
这一步是计算贝尔曼方程的v。计算的方法是迭代方法,我们之前已经谈过了。
·2.policy improvement(PI)
根据step1算出的v,我们就可以得出每个状态的各个q值,进而更新greedy
policy。
策略迭代的流 ...
强化学习(三):贝尔曼最优方程(BOE)
在本篇中,围绕 optimal state value(最优状态价值)和optimal
policy(最优策略),我们需要贝尔曼最优方程( Bellman optimality
equation,BOE)来解决。强化学习的目的便是寻找最优策略。问题的背景是,如果我们的策略不够好,该如何去改善它?以上一章最后的图例为例:
求解每个状态价值的过程就省略了。可以得到s1的每个action
value为(给定衰减系数为0.9): 显然我们采取a2是不够好的,从上面可以看出我们应该选择a3.
那么,现在我们的s1处的策略就可以写成: 其中:,也就是action
value最大的action。注意到我们这个例子比较简单,是因为除了s1,别的状态的策略都已经是最优的了。那如果别的状态的策略都不是最优的呢?那此时我们计算s1的value最大的action,那就不一定是最好的action。事实上,我们可以不断迭代这个过程。这个过程就需要我们的贝尔曼最优公式了。
Definition:定义
首先是关于optimal
policy的定义。这个定义非常简单,我们定 ...
强化学习(二):贝尔曼方程
Bellman
Equation(贝尔曼方程)也称动态规划方程,是强化学习的基础和核心,是用来简化强化学习或者MDP问题的。需要知道,贝尔曼方程是用来评价策略好坏的,所以我们可以在后面看到这个方程和策略的关系紧密。
引入
我们先前说过,评价policy好坏的重要标准是return(添加了discount
rate后)。现在我们有如下三种策略:
我们依次计算return来评价它们好坏,假设衰减因子是.
policy 1: policy 2: policy 3:
这里的return严格来说已经不是我们基本概念的return了,因为基本概念的return是针对于一个trajectory而言的。我们这里算的其实是一个期望(expectation),也就是我们后面要说的state
value。
计算出三个return后,显然1>3>2。因此第一个策略是最好的。那么如何计算return呢?刚才我们计算return是用的最本质的定义,现在我们换个例子如下:
首先我们定义:是当从状态开始时,获得的return值。因此我们有如下等式 ...
Vue+Node.js踩坑汇总
开发前端后端太折磨了。本博客只是个人用来记录用Vue踩的坑,并非是教程向。
由于奇异字符引起的'MODULE_NOT_FOUND'
我们知道,学计算机最忌讳的事情之一就是用中文命名文件夹。但是,如果你的文件夹包括了像“&”这样的奇葩符号,也会因为这个掉坑里(别的符号我不知道,这个坑我是踩麻了)。
报错表现为:
12node:internal/modules/cjs/loader:959 throw err;
然后会说你
'MODULE_NOT_FOUND'。如果您不想修改文件名(前提是您文件名含的不是中文,而是一些奇异的符号,鬼知道中文还能弄出来什么东西,我试了下,用中文的时候此法无用),您可以采用以下解决方法,当然我不保证正确性,反正我用起来是好的:
进入./node_modules文件夹,再进入./bin,然后找到vue-cli-service.cmd,我们把里面的原本的IF-ELSE代码修改如下:
原先是:
123456IF EXIST "%dp0%\node.exe" ( SET "_prog=%dp0%\node. ...
机器学习基础(一):基本概念
前言
本博客主要用来自己学习以及复习考试,由于是课程笔记,所以可能很多东西都是截取的课程PPT。如果您对知识内容有什么看法,欢迎在下方留评论,谢谢~
什么是机器学习
相信对于这个问题,大家在各个博客都已经看烂了。机器学习说白了就是统计学分支出来的,就是基于数据训练出个模型用于新数据。当然,对机器学习没有严格的定义,比如:
“a set of methods that can automatically
detect patterns in data, and then use the
uncovered patterns to predict future
data, or to perform other kinds of decision
making under uncertainty.”
反正定义多种多样。简而言之。机器学习是数据驱动的,目标是让机器像人类一样学习、识别、发现、判断。当然,也可以说:机器学习
= training+testing;抑或说,就是寻找一个模型。机器学习的框架如下:
我们以图像识别为例。第一步:我们有一 ...
openCV踩坑汇总
opencv总是在许多地方设定一些奇奇怪怪的反常识的坑,此贴以供记录。本帖主要记录python的opencv;同时对于有些版本引起的问题可能无法涉及。
图像的shape:并不是宽比高
假设我们现在有一张1920*1080的图片,我们用img = cv2.imread("1.png")
去读取,然后输出image.shape,会得到:
1(1080, 1920, 3)
可见img.shape输出的是:高、宽、通道数。但尤其注意,resize的时候,cv2.resize()输入的是(宽,高)而不是(高,宽)!!
另外,openCV的通道排列是B、G、R。
普通棋盘版标定规则
(应该是这样,老师讲过但是有点记不得了)首先,请确保您的标定板的行列角点数是一奇一偶。在openCV的实现中,角点的排列顺序时:以奇数角点的方向为x轴,以偶数角点的方向为y轴;以黑色方块角落为原点。可能听起来比较绕,看下图:
这是openCV画出来的角点,我们每行是9个角点,每列是10个角点,所以向右是x轴,向下是y轴。然后,我们从原点角点开始,向右且逐行地扫描角点 ...
Neural MMO 学习笔记(五)
之前我们是运行了NMMO的示例,并且看到了示例的结果。除去代码层面,还是得要结合一下文档和强化学习的相关学习的。学习NMMO的主要目标,并不是跑一个游戏模型,而是说——如何利用这个框架,实现在大型环境下的高效学习。
官方文档写到:
image-20230509132326377
Neural MMO 提供标准环境配置以及脚本模型、使用 CleanRL
预训练的基线以及 WanDB
托管的训练/评估日志。什么是CleanRL?它是是一个深度强化学习库,它提供了高质量的单文件实现,具有研究用的功能。github如下:
vwxyzjn/cleanrl:
High-quality single file implementation of Deep Reinforcement Learning
algorithms with research-friendly features (PPO, DQN, C51, DDPG, TD3,
SAC, PPG)
(github.com)。不过CleanRL只包括在线强化学习的实现——什么是在线强化学习?
...
强化学习(一):基本概念
从本文开始,均是针对哔哩哔哩网课的笔记记录。本文参考:【强化学习的数学原理】课程:从零开始到透彻理解(完结)_哔哩哔哩_bilibili
本文是对基本概念的介绍。
笔记背景范例
本课程的背景例子如图:
这是一个网格世界,我们的机器人要从给定的起点出发,寻找一个合适的路径到达我们的目的地(也就是我们的task)。机器人只能向相邻四个方格移动,且整个网格世界存在边界。我们的机器人要尽可能避免进入forbidden,且不能超越边界。
以此背景,我们介绍下面概念。
State:状态
state是指智能体相对于环境所处的状态。在我们的例子中,不同的方格代表了不同的状态,是一个包含x,y二维坐标信息的向量。如图所示:
state space:即状态空间,也就是所有状态的集合:.
(打latex真累。。)
Action:行动
action是指对于每一个状态,智能体拥有的一系列可以采取的行动。对我们的例子来说,共有如下五个状态:
a1~a5依次是向上、向右、向下、向左已经保持不动。
Action space of a st ...
Neural MMO 学习笔记(四)
写这篇笔记的时候也在学习强化学习相关知识,移步:强化学习(一) |
雨白的博客小屋 (ameshiro77.cn)
上文说到我们希望运行出一个游戏界面,而之后我发现是经典读东西读不全的问题,官方文档给出的提示是让我们运行demos.minimal后去运行client里的可执行文件,而非用浏览器打开对应端口(虽然不知道为什么引入了three.js库(做图形学用过这个),但他的示例是用unity做的)。教程还贴心的告诉我们要运行符合系统的可执行文件,我之前之所以运行不了是因为运行了上次在windows下用的.exe。本文先按照官方文档的TUTORIALS的教程来。
顺便解释个名词:scripted_agent:动作由自定义脚本所控制的智能体。
Minimal Example
这个示例让我们渲染智能体所在的环境。运行baselines中的minimal后,来到client/UnityCilent中,启动右边这个exe。
image-20230425123810351
可以看到如下界面:
image-2023042512394846 ...