[原创] 强化学习框架 rlpyt:如何同时输出gaussian(高斯)和categorical(类别)的action

转载需注明出处:https://www.codelast.com/

查看关于 rlpyt 的更多文章请点击这里

rlpyt 是BAIR(Berkeley Artificial Intelligence Research,伯克利人工智能研究所)开源的一个强化学习(RL)框架。我之前写了一篇它的简介。 
本文记录 rlpyt 的一些issue提及的问题以及解决方案。

▶▶ 同时输出gaussian(高斯)和categorical(类别)的action
issue链接:在这里
 问题描述:一般来说,action要么是一个高斯分布(gaussian),要么是一个类别值(categorical),如何能把这二者混合起来,即同时输出gaussian和categorical的action?
 我的理解:gaussian的action,指的是policy network输出的是一个action的概率分布,而不是一个确定的action(例如,有70%的可能选择action 1,有30%的可能选择action 2),此时,我们是按这个概率分布来选择一个具体的action,举个例子,对应到Python程序,你可能会用 np.random.choice(a, size=None, replace=True, p=None) 函数来在一个指定的概率分布上选择一个action,其p参数可以指定概率值。
而categorical的action,指的是policy network输出的是一个确定的action,例如它直接输出的可能是action 1,或action 2,诸如此类,而不是给出action 1,action 2的概率值再让用户去选。
这个issue的目的,就是想实现一种“非常规”的用法,输出的action同时具有这两种性质——我想像不出来应该用什么来举例。
 解决方案:rlpyt 里面有一个 Composite(复合)的action space:

class Composite(Space):

可以分别实现两个action space:一个gaussian的和一个categorical的,再用一个Composite的action space把它们包在里面。和environment交互的action space,就是这个Composite的action space了。
文章来源:https://www.codelast.com/
但是要注意,algorithm(例如PPO)是不支持Composite的action space的,所以还需要对algorithm类再做一点改造:另外定义一个 distribution 类,它能根据Composite的action算出其 log probability。还是以PPO为例,它使用 self.agent.distribution 来对action space进行action的选取,此时要用自定义的 distribution 类来替换掉这个distribution,然后就OK了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注