FeUdal Networks for Hierarchical Reinforcement Learning

这篇文章和hdqn,我个人感觉差别还是很明显的。

最明显的是我没有感受到时间维度的差异,也就是什么提供goal的时间维度小,施行者时间维度大,这一个特点。

我花了三天吧(前两天感觉没有集中精神),把文章代码都读了几遍。

除了文章中的dilated lstm,我不大明白是怎么实现的外(文章中说和cw lstm的idea一样,还列出了dilated convelution的paper,所以我感觉是为了更好的形成长期记忆,避免忽略细节(这个是paper中dc的优点),所以索性当作正常的lstm吧,毕竟只是结构的差异),其他的大概都明白了。

首先给出整个网络的结构图:

这个里面主要分为三个部分:一个是感知Net,一个是Manager,一个是Work

感知主要是为了把原始的空间信息提取特征出现的。(个人理解)

Manager提供目标,Work采取行动。

首先得说一下,这个框架的整体结构是A3C的,一个gobal的policy(也就是包括以上三个net),然后一堆local的policy,

第一步:先clone  global的参数,

第二步:各个local  policy 去collect经验(一个rollout)

每个rollout包括

(Obs,reward(环境返回的),s(也就是Manager的内部状态,用的(2)式),g(目标(global),act,m_value(manager估计的value),h(3,5)式产的),还有一个r,这个r,当这一个rollout是因为正常结束而终止的时候,等于0,否则也就等于manager估计的这个value值(弥补未完成步骤的奖励估计))。

第三步:收集完了需要处理这些信息,处理成

(o,act,h,r(infinte discount value,也就是我们平时计算的从当前到结束获得的收益),g_sum(c step步的global的集合,从当前起,将c步之前的global加入这个list中,主要是为了embedding global用的),i_reward(内部奖励,用于worker的loss),s_diff(c step之后的状态与现在的状态向量相减,主要适用于衡量与当前global的cos距离,用于计算manager的loss))以后计算loss)

第四步:计算完了传给global,对global的parm计算梯度并bp,更新global。然后再进行第一步。

其中几个loss的设计,papaer给出的:

global的loss如上。

内部奖励的计算公式如上

worker的loss如上

还有两个value function。这里会出现很多stop_gradient,因为manager和work是没有直接的bp的。

loss转化为代码:

这里还有一个很有意思的点:

就是global embedding:主要就是想让manager的global直接影响到最后的action的选择,所以对global进行了映射。

原文如下:

 

代码:

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值