繁体   English   中英

强化学习 - 分层设置中的早期探索问题

[英]Reinforcement Learning - early exploration problem in hierarchical setting

介绍

大家好。 我正在努力理解两种实现的行为,我希望有人可能有线索。 所以我有 2 种算法:HER(带有一些自我监督的 RL)和 HAC(分层 RL)。 环境被挑选和放置。

HAC

HAC 工作原理的快速总结:两个级别(高和低),高级别生成必须移动机器人末端执行器的目标 (x,y,z)。 低层以这些目标为目标对环境起作用。 高级别每 H 步生成一个新目标。

这是我的问题

在 HER 中,第一个 epoch 渲染看起来很平滑,移动缓慢(如故意探索)在 HAC 中,仅在 50 次迭代后(1 次迭代 = 2000 次迭代),高级模型始终输出最大动作 (1,1,-1,1)。 知道什么可能导致这种情况吗? 经过一些更多的训练后,它开始输出其他动作,但大多数仍然是最大的。 它阻碍了很多探索,显然无法收敛。 为了进行比较,HER 在 40 分钟内收敛到 >80% 的准确度。 HAC 在 48 小时内上升到 60%(有时)。 任何帮助是极大的赞赏。 使用的架构是 DDPG 或 TD3(取决于我想使用的版本)。 如果有帮助,这里有一些用于选择操作的代码:

mu_v = self.actor(states, goals)
actions = mu_v.data.detach().cpu().numpy()
actions += np.random.normal(0, self.max_action * self.expl_noise, size=actions.shape)
actions = np.clip(actions, self.action_clips[0], self.action_clips[1])
return actions

演员模型定义

class Actor(nn.Module):
    def __init__(self, obs_size, goal_size, act_size, action_bounds, offset):
        super(Actor, self).__init__()

        self.net = nn.Sequential(
            # state + goal
            nn.Linear(obs_size + goal_size, HID_SIZE),
            nn.ReLU(),
            nn.Linear(HID_SIZE, HID_SIZE),
            nn.ReLU(),
            nn.Linear(HID_SIZE, HID_SIZE),
            nn.ReLU(),
            nn.Linear(HID_SIZE, act_size),
            nn.Tanh()
        )

        self.action_bounds = nn.Parameter(action_bounds, requires_grad=False)
        self.offset = nn.Parameter(offset, requires_grad=False)

    def forward(self, state, goal):
        return (self.net(torch.cat([state, goal], dim=1)) * self.action_bounds) + self.offset

额外的

我不知道要添加哪些其他信息,但我会在人们提出问题时编辑此部分。 非常感谢您的帮助!

解决方案是增加 tanh 饱和度损失。 基本上添加actor的预激活输出的L2范数。

actor_loss_v += self.hparams.action_l2 * logits.pow(2).mean()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM