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进行了映射。

原文如下:

 

代码:

 

 

 

### FeUdal网络的概念和应用 FeUdal网络是一种分层深度强化学习架构,由管理器(Manager)和工人(Worker)两部分组成。管理器负责高层次的决策,确定当前要执行的子任务;而工人则负责具体执行该子任务。通过端到端的训练,可以使管理器和工人之间形成良好的协作关系[^1]。 #### 网络结构 FeUdal网络的结构设计旨在解决复杂任务的分层决策问题。其核心组件包括: 1. **管理器(Manager)**:负责生成高层次的目标或子任务。管理器的决策基于当前的状态信息,并通过一个循环神经网络(RNN)来维护长期的目标状态。 2. **工人(Worker)**:负责执行管理器设定的具体子任务。工人同样使用RNN来处理短期任务,并通过低层次的动作来实现目标。 3. **目标传递机制**:管理器将高层次的目标传递给工人,工人根据这些目标生成具体的动作。这种分层结构允许网络在不同时间尺度上进行决策,管理器负责较长时间尺度的规划,而工人则专注于短期的动作执行。 #### 应用场景 FeUdal网络的应用主要集中在需要长期规划和复杂决策的任务中,尤其是在深度强化学习领域。例如: - **机器人路径规划**:FeUdal网络可以用于机器人导航任务,其中管理器负责规划从起点到终点的整体路径,而工人则负责避开障碍物和调整速度等具体操作。 - **游戏AI**:在复杂的游戏中,FeUdal网络可以用于生成智能体的行为策略。管理器可以决定游戏中的宏观策略,如进攻或防守,而工人则负责具体的动作执行,如移动、攻击等。 - **自动驾驶**:FeUdal网络可以应用于自动驾驶系统中,管理器负责路线规划和交通规则遵守,而工人则控制车辆的加速、刹车和转向等具体操作[^1]。 #### 优势与挑战 FeUdal网络的优势在于其能够处理具有长期依赖关系的任务,并通过分层结构实现高效的决策过程。然而,这种架构也面临一些挑战: - **训练难度**:由于管理器和工人需要同时进行训练,如何确保两者之间的有效协作是一个难点。 - **泛化能力**:FeUdal网络在特定任务上的表现可能受限于训练数据的质量和多样性。 - **计算资源**:虽然FeUdal网络的结构有助于提高决策效率,但其训练过程仍然需要大量的计算资源。 ### 示例代码 以下是一个简化的FeUdal网络实现示例,展示了管理器和工人的基本结构: ```python import torch import torch.nn as nn class Manager(nn.Module): def __init__(self, input_size, hidden_size): super(Manager, self).__init__() self.rnn = nn.LSTM(input_size, hidden_size) self.fc = nn.Linear(hidden_size, hidden_size) def forward(self, x, hidden): out, hidden = self.rnn(x, hidden) goal = self.fc(out) return goal, hidden class Worker(nn.Module): def __init__(self, input_size, hidden_size, action_size): super(Worker, self).__init__() self.rnn = nn.LSTM(input_size, hidden_size) self.fc = nn.Linear(hidden_size, action_size) def forward(self, x, hidden, goal): x = torch.cat((x, goal), dim=-1) out, hidden = self.rnn(x, hidden) action = self.fc(out) return action, hidden # 初始化网络 manager = Manager(input_size=10, hidden_size=64) worker = Worker(input_size=10, hidden_size=64, action_size=5) # 假设输入数据 input_data = torch.randn(1, 1, 10) # batch_size=1, seq_len=1, input_size=10 hidden_manager = (torch.randn(1, 1, 64), torch.randn(1, 1, 64)) hidden_worker = (torch.randn(1, 1, 64), torch.randn(1, 1, 64)) # 管理器生成目标 goal, hidden_manager = manager(input_data, hidden_manager) # 工人执行任务 action, hidden_worker = worker(input_data, hidden_worker, goal) ``` #### 相关问题 1. FeUdal网络与其他分层强化学习方法有何区别? 2. FeUdal网络在实际应用中面临哪些主要挑战? 3. 如何评估FeUdal网络在复杂任务中的性能? 4. FeUdal网络的训练过程中如何确保管理器和工人之间的有效协作? 5. FeUdal网络在哪些具体领域有成功的应用案例?
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值