如何为神经网络提供输出以使用高斯策略方法对连续动作进行采样?

问题描述

我正在尝试使用策略梯度法 REINFORCE 算法解决 openai-gym 的“LunarLanderContinuous-v2”。环境在动作空间中有 2 个连续动作,范围从 -1 到 1。在创建神经网络时,我对网络的输出部分感到困惑。

class ContinuousPolicy(nn.Module):
    def __init__(self,s_size=8,h_size=16,a_size=2):
        super(ContinuousPolicy,self).__init__()
        self.fc1 = nn.Linear(s_size,h_size)
        self.mean = nn.Linear(h_size,2)
        self.std_dev = nn.Linear(h_size,2)

    def forward(self,x):
        x = F.relu(self.fc1(x))
        mean = self.mean(x)
        std_dev = torch.abs(self.std_dev(x))
        Idn_Mat = torch.zeros((2,2))
        Idn_Mat[np.arange(2),np.arange(2)] = std_dev
        return mean,Idn_Mat
    
    def act(self,state):
        state = torch.from_numpy(state).float().unsqueeze(0).to(device)
        mean,std_dev = self.forward(state)
        m = Multivariatenormal(mean,std_dev)
        action = m.sample().squeeze(0)
        return action.cpu().detach().numpy(),m.log_prob(action)

我假设输出给出了均值和 std_dev,以便我们将数据传递给 Multivariatenormal distribution 以分别对每个动作的输出进行采样。

PS: 我也对多元正态分布要传递的标准差的单位矩阵有疑问

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)