强化学习(零)
本节笔记参考自:《人工智能:现代方法 第4版》。
什么是智能体 (Agent)?
在书上有如下定义:任何通过传感器(sensor)感知环境(environment)并通过执行器(actuator)作用于该环境的事物都可以被视为智能体(agent)。
对人类来说,我们的眼睛和耳朵就是传感器;对机器人来说,它的红外探测器就可以看作是传感器。而环境是一个笼统的概念,我们所感知的周围的一切都可以看作环境,甚至整个宇宙。当然,实际问题中我们设计智能体中,所谓环境只关心智能体感知并且影响智能体动作的部分。关系如图所示。
术语感知(percept
名词)表示智能体的传感器正在感知的内容。感知序列(percept
sequence)表示智能体所感知的一切完整历史。那么一个智能体如何作出动作选择呢?一般来说是根据它的内置知识以及目前为止整个感知序列。数学上讲,我们说智能体的行为由智能体函数(agent
function)描述,这个函数的作用是:完成一个 感知序列→动作 的映射。
做着正确事情的智能体叫理性智能体(rational
agent)。对于智能体表现 ...
Nerual MMO 学习笔记(三)
上次说到,我们可能遭遇了关于ray这个库的版本上的问题。所以在这里,先了解一下ray是干什么的,以及相关资料。
首先介绍一下ray是干什么的:ray是一个用于分布式计算的多功能框架。ray依赖于高效的c++代码,以及优雅而简单的python
API。从机器学习的角度来看,它有两个主要优点:1.它可以用于将流行的工具如Spark和Tensorflow/Pytorch捆绑在一个集群中,并为两者之间的数据传输提供优雅的选项。2.当你需要大量的机器学习特别是深度学习的时候,它可以提供分布式计算能力。
简单的说,今天的机器学习需要分布式计算。无论是训练网络、调整超参数、服务模型还是处理数据,机器学习都是计算密集型的,如果没有访问集群,速度会非常慢。而ray
是一个流行的分布式 Python 框架,它可以与 PyTorch
配对,以快速扩展机器学习应用。
preview
参考链接:程序员 - PyTorch
& 分布式框架 Ray :保姆级入门教程 - 超神经HyperAI - SegmentFault
思否
那么什么是分布式计算和 ...
Nerual MMO 学习笔记(二)
首先按照这个官网的挨个来:Introduction
— Neural MMO v1.6.0 1.6.0 documentation
首先是介绍:它说Neural
MMO是一个开源且可计算访问(不太明白这俩词合在一起啥意思)的研究平台,一大堆智能体联合生存+探索+战斗持续数小时,以以及完成任务。它在其他环境下这种大规模的研究可能不切实际或不可能进行,也就是NMMO具有大规模的特点。
之后它贴了一串代码:
但显然我们目前没法安装nmmo,暂时没法试这个。但是我去pip库找的时候发现了一个叫neural-mmo的库,可能是nmmo库的历史版本(我猜的),不过暂时还没试。这个Env提供了标准的Petting
Zoo API,详见:Pettingzoo:类似gym的多Agent强化学习的环境
- 知乎 (zhihu.com)
之后它说NMMO是把经典MMO开发的技术应用到深度学习,并且介绍了一般的工作流程:
也就是生成环境——训练智能体——行为可视化。
之后它让我们安装nmmo(虽然目前安不上),以及clone三个库。
...
Neural MMO 学习笔记(一)
什么是Neural MMO?
概述
首先,我们可以访问Neural MMO的官网获取信息:Neural MMO: A massively
multiagent game environment (openai.com)
对于经常打游戏的同学来说,MMO这个名字应该不会陌生。MMO是指大型多人在线游戏
(Massively Multiplayer Online);而我们的Neural
MMO正是一个用于多智能体强化学习的游戏环境。这个环境提供许多智能体(数量可以变化),并且让他们在一个持久、开放的任务中进行工作。这样一个智能体与其他各种生物实体的集合带来了更好的探索、不同的生态位(niche)形成以及更出色的整体竞争力。
其代表性论文如下:[1903.00784] Neural MMO: A
Massively Multiagent Game Environment for Training and Evaluating
Intelligent Agents (arxiv.org)
Neural MMO环境与训练
智能体们可以加入任何环境 ...
如何在Matlab中导入toolbox
跑老师给的demo的时候遇到了一个问题:无法解析名称
'vision.internal.partialSort'
显然是缺少对应工具箱导致的,这个工具箱是计算机视觉相关的。但是网上找了好多都是说从外部离线下载,其实在matlab内部就内解决。
在主页——附加功能 进去 “获取附加功能”,搜索Computer Vision
Toolbox然后安装即可,可能要稍微等一会,这个下载需要费点时间。
matlab版本:R2022b
Harris角点检测中的公式推导
在Harris角点检测中,我们要算两个窗口的差。首先,两个点之间的差为:
其中f是像素灰度值。为避免误差,取平方,之后在窗口内求和,得:
image-20230330204656439
刚拿到这个式子,可能从①到②不知道怎么来的。其实这里是应用了泰勒展开,首先我们知道对于一维函数来说,其泰勒展开式子为:
一般来说,展开到两阶就行了。但是对于更普适的情况,令 是 𝕟
的函数,则其泰勒展开式子为:
可能会有同学觉得这不是h的转置乘以梯度吗,图里公式怎么是梯度的转置乘以h了?其实这两个是相等的,因为他们结果是标量,标量转置等于自己。
对于一阶梯度来说,其结果就是对每个自变量求偏导后组成新向量。而对于二阶梯度,其结果叫海森矩阵,其形式为:
image-20230330210859073
之后的步骤都比较明显了,最后我们得到的M长这样:
image-20230330211136239
M是一个半正定矩阵,证明请读者自行练习。
关于(Ax-b)二范数平方为凸函数的证明
上文我们求出了
回想高数中,证明凸函数就是看二阶导数(如果存在)大于等于零。映射到矩阵,就是看其海森矩阵是否半正定。
海森矩阵也就是对这个结果进一步求导,结果显然是 ,
而如果一个矩阵能够被写成 或
,那么他就是半正定的。
关于(Ax-b)二范数平方的求导
其实是一个基础问题
在CV的全景拼接中,遇到个一个向量微分的问题,也就是关于矩阵的最小二乘,虽然第一次做的时候茫然无措,但它实际上就是一个标量对矢量的求导。
现在要求这个式子: 虽然分子看着吓人,但他其实就是个由
向量中的各个元素组合成的多项式的值。对于二范数的平方,其值就等于: 运用转置相关知识: 之后矩阵乘法: 注意到,
,
因为它们最后的结果是一个数,数的转置就是他自己,所以这个等式成立。这样,等式就变成了:
这时需要引出两条特别重要的结论: ①
②
两个的证明其实不难,因为分子都是标量,本质就是把这个标量用
中的分量表示出来,然后利用标量对矢量求导的定义就行了。我们把这两条规则代入:
由于 与
是无关的,所以求导为零。这样,就得到了:
由于
是凸函数(证明海森矩阵半正定,一阶导数我们已经求出来了),所以极值点就是极小值点,也就是说令导数为零,最终得到的结果就是我们要找的结果:
由于两年前学的线代几乎全忘光了,也没有接触过向量函数的微分,所以第一次见到它的时候 ...
终于搭完框架了..
好累啊,搭了两天,踩了一堆坑,最终也是参阅着各位dalao的文章和博客搭好了,买域名花了35,该考虑怎么装饰了。。。