查看关于 rlpyt 的更多文章请点击这里。
rlpyt 是BAIR(Berkeley Artificial Intelligence Research,伯克利人工智能研究所)开源的一个强化学习(RL)框架。我之前写了一篇它的简介。 如果你想用这个框架来开发自己的强化学习程序(尤其是那些不属于Atari游戏领域的强化学习程序),那么需要对它的源码有一定的了解。本文尝试从 rlpyt 自带的一个实例来分析它的部分源码,希望能帮助到一小部分人。
查看关于 rlpyt 的更多文章请点击这里。
rlpyt 是BAIR(Berkeley Artificial Intelligence Research,伯克利人工智能研究所)开源的一个强化学习(RL)框架。我之前写了一篇它的简介。 如果你想用这个框架来开发自己的强化学习程序(尤其是那些不属于Atari游戏领域的强化学习程序),那么需要对它的源码有一定的了解。本文尝试从 rlpyt 自带的一个实例来分析它的部分源码,希望能帮助到一小部分人。
要先声明一下:rlpyt 的源码比较复杂,想要充分理解全部模块需要下很大的功夫,本系列“源码分析”文章,并没有把 rlpyt 的源码全部分析一遍,而只是分析了它的“冰山一角”,主要目的是让读者能了解它的基本结构及基本运作方式。
查看关于 rlpyt 的更多文章请点击这里。
rlpyt 是BAIR(Berkeley Artificial Intelligence Research,伯克利人工智能研究所)开源的一个强化学习(RL)框架。我之前写了一篇它的简介。 如果你想用这个框架来开发自己的强化学习程序(尤其是那些不属于Atari游戏领域的强化学习程序),那么需要对它的源码有一定的了解。本文尝试从 rlpyt 自带的一个实例来分析它的部分源码,希望能帮助到一小部分人。
要先声明一下:rlpyt 的源码比较复杂,想要充分理解全部模块需要下很大的功夫,本系列“源码分析”文章,并没有把 rlpyt 的源码全部分析一遍,而只是分析了它的“冰山一角”,主要目的是让读者能了解它的基本结构及基本运作方式。
如果你觉得一个运行中的Python程序有问题,例如它的耗时比你预想的要长很多,那么你可能会想知道它到底在“干什么”,有很多方法可以实现这个目的,但是很多都是需要修改Python代码来配合的,这显然是让人最不爽的方式。
而 py-spy 这个工具提供了一种无侵入的方式来达成这个目的:
py-spy是Python程序的采样分析器。 它使你可以直观地看到Python程序花费的时间,而无需重新启动程序或以任何方式修改代码。 py-spy的开销非常低:为了提高速度,它是用Rust编写的,并且它与被分析的Python程序不在同一进程中运行。 这意味着py-spy可以安全地用于生产环境的Python代码。
首先我得承认,我原来打算写的很多技术方面的“系列文章”,在写了若干篇之后就没有后文了,一方面是因为忙于工作和生活(毕竟不是富裕人家),另一方面也是由于总觉得没有积累到一定程度,还不能准确地把想要写的东西表达出来。这我得检讨。
“我要写的这些,是不是太简单了?写出来会不会显得太low?”
“我要写的这个,我不确定对不对,写出来误导别人怎么办?被人取笑怎么办?”
“我这篇文章会不会太短了?就这么点东西好意思发出来吗?”
带着这些想法,我又成功地毙掉了我准备下笔的一个决定。
有时候你可能会遇到这样的故事:git clone一个Python的GitHub项目下来,配置好了对应的Anaconda环境,安装好了依赖的package,用PyCharm打开了项目,打开一个.py代码文件,发现PyCharm在文件开头几行就给标注了波浪线,提示unresolved reference XXX。而且,尽管PyCharm提示有错,你却可以运行代码。
“我完全就是按项目要求的版本装的各种依赖包,怎么会找不到这个定义?”你心里可能会很不爽。
这个时候,你要看清楚了,有可能是PyCharm给了你误导,其实你什么都做对了,只是PyCharm显示错了而已。
horizon 这个词在各种强化学习教程里出现的频率不算高,但它也是要了解的一个概念。
先查词典:
n. 地平线;视野;眼界;范围
BAIR(Berkeley Artificial Intelligence Research,伯克利人工智能研究所),开源了一个强化学习(RL)框架 rlpyt,并于2019.09.24在其主页上对它进行了很长篇幅的介绍(论文在这里)。
市面上开源强化学习框架已经很多了,这个框架是否值得你上车?我认为,未来怎样不好说,但至少现在(2019.10)看来是值得入手的,因为它确实有其他框架不具备/不完善的功能——最主要的就是对并行(parallelism)的良好支持。
在强化学习领域,agent与environment互动来收集training data的过程是最耗时的,如果能并行地用多个agent与多个environment互动来收集数据,那么速度可以极大提升。类似于Google Dopamine这样的RL框架,根本没有把 parallelism 作为设计理念的一部分,所以如果你入了Dopamine的坑,等你对模型训练速度有要求的时候再想着换框架,成本就高多了。
强化学习(Reinforcement Learning,简称RL)是机器学习的一个领域,刚接触的时候,大多数人可能会被它的应用领域领域所吸引,觉得非常有意思,比如用来训练AI玩游戏,用来让机器人学会做某些事情,等等,但是当你越往里看,就会发现跟传统机器学习相比,RL里面的名词简直太多了吧!多到完全可以绕晕人。比如RL里经常会提到的agent,environment,episode(rollout),policy,on-policy,off-policy,state,trajectory,reward,replay buffer,model-based,model-free,MD,TD,PG,AC,等等。强化学习的高手对这些词很熟悉,但对新手来说可能就很痛苦。
在RL领域,on-policy和off-policy是两个非常重要的概念,这两个词,把RL方法分成了两个类别。你可以从网上搜到很多很人提问on-policy的强化学习方法和off-policy的强化学习方法有什么区别,作为一个智商相当平庸的人,鬼知道我当初看了多少教程才认为自己大概搞清楚了它们之间的区别。
所以我在这篇文章里想把自己的肤浅理解分享出来,希望能帮助到少部分人。
DDPG(Deep Deterministic Policy Gradient,深度确定性策略梯度)是强化学习领域的一种知名算法。
如何理解其中的Deterministic(确定性)这个名词?
通俗地说,对一个状态(state)来说,根据这个state所采取的action有可能是带有随机性的。在两次与environment交互的时候,即使是一模一样的state,所采取的action也有可能不同,这就不是一种“确定性”的策略。
对一种“确定性”的策略来说,只要state相同,它给出的action必然相同。
TensorFlow版本:1.14.0
Python版本:3.6.8
在TensorFlow中,tf.layers.dense 定义了一个全连接层,其实现的是(来自官方文档):
This layer implements the operation: outputs = activation(inputs * kernel + bias) Where activation is the activation function passed as the activation argument (if not None), kernel is a weights matrix created by the layer, and bias is a bias vector created by the layer (only if use_bias is True).
意思就是它实现了 y = activation(x * kernel + bias) 的操作,其中,activation是激活函数。在这里,kernel 就是指我们通常所说的 weight,它被TF称为 kernel 而不是 weight。因此,如果你想从这个模型里取出weight参数的话,就要注意它的名字了,否则会读不到这个参数。
下面我们就来看具体的例子。
TensorFlow版本:1.14.0
Python版本:3.6.8
checkpoint文件是TensorFlow保存出来的一种模型文件格式。通常save下来的时候会得到4个文件,例如:
checkpoint
model.ckpt-1.data-00000-of-00001
model.ckpt-1.index
model.ckpt-1.meta
如何查看这些文件里的模型参数名称呢?