Python 强化学习——分层环境下的早期探索问题 简介

Python 强化学习——分层环境下的早期探索问题 简介,python,pytorch,reinforcement-learning,Python,Pytorch,Reinforcement Learning,大家好。我正在努力理解两个实现的行为,我希望有人能提供线索。 所以我有两种算法:HER(带有一点自我监督的RL)和HAC(分层RL)。环境是被挑选和放置的 醋酸 HAC工作原理的快速总结:两个级别(高级别和低级别),高级别生成一个目标(x、y、z),机器人末端效应器必须移动到该目标。低层以这些目标为目标对环境起作用。高级别每H步生成一个新目标 这是我的问题 在她的作品中,第一个时代的渲染看起来很平滑,动作缓慢(就像有意的探索) 在HAC中,仅在50个ITER(1个epoch=2000个ITER)

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

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

这是我的问题 在她的作品中,第一个时代的渲染看起来很平滑,动作缓慢(就像有意的探索) 在HAC中,仅在50个ITER(1个epoch=2000个ITER)之后,高级模型总是输出最大动作(1,1,-1,1)。你知道这是什么原因吗? 经过更多的训练后,它开始输出其他动作,但大多数动作仍然是最大值。它极大地阻碍了勘探,而且显然无法收敛。 作为比较,她的准确率在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饱和损耗。基本上添加参与者的预激活输出的L2范数

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