Closed huang312 closed 6 months ago
1.参照博客 https://iclr-blog-track.github.io/2022/03/25/ppo-implementation-details/ ,第十条的第三小点,但是这个我也没有很足的把握,在continuous actor 中把交叉熵去掉是为了更高的性能,但是可能会牺牲掉一定的泛化性,这个加与不加可以自己斟酌。
感谢回复!但是我还有一些不懂的地方
1.第一个问题我明白了
2.第二个问题我明白你说的意思了。那在这个例子中连续动作网络的heads数量可以设为1吗,这样的话,训练的时候不同的离散动作训练的是一个head?不知道这样是否合理?
3.第三个问题我可能没说清楚,我不是说actor网络和value网络要share,而是说discrete actor 和 continuous actor是不是要share?这个仓库中的discrete actor 和 continuous actor是独立的,但是我理解hppo论文中应该是share的?
4.这里说的“后期”指的什么时候呢,是输入到环境之前吗,还是放在choose_action中?那在buffer中存储的动作也应该是网络原本的输出吗?
另外想请问一下这里,在ActorCritic_Hybrid
类中的act
方法中,action_con的输出维度似乎是action_dim,但我理解这里连续动作应该只输出一个维度的动作?
def act(self, state):
state_value = self.critic.forward(state)
action_probs = self.actor_dis(state)
dist_dis = Categorical(action_probs)
action_dis = dist_dis.sample()
logprob_dis = dist_dis.log_prob(action_dis)
mean = self.actor_con(state)
std = torch.clamp(F.softplus(self.log_std), min=0.01, max=0.6)
dist_con = Normal(mean, std)
action_con = dist_con.sample()
logprob_con = dist_con.log_prob(action_con)
return state_value, action_dis, action_con, logprob_dis, logprob_con
不好意思,最近在忙大论文。
另外想请问一下这里,在
ActorCritic_Hybrid
类中的act
方法中,action_con的输出维度似乎是action_dim,但我理解这里连续动作应该只输出一个维度的动作?def act(self, state): state_value = self.critic.forward(state) action_probs = self.actor_dis(state) dist_dis = Categorical(action_probs) action_dis = dist_dis.sample() logprob_dis = dist_dis.log_prob(action_dis) mean = self.actor_con(state) std = torch.clamp(F.softplus(self.log_std), min=0.01, max=0.6) dist_con = Normal(mean, std) action_con = dist_con.sample() logprob_con = dist_con.log_prob(action_con) return state_value, action_dis, action_con, logprob_dis, logprob_con
应该是我的代码出了问题,可以参考issue 5
您好,非常感谢您分享的hppo算法的代码!我从中学到了很多。 但我在阅读代码时有一些地方没有看明白,希望能和您讨论一下。
1.第一个问题是在
PPO_Hybrid
类中的compute_loss_pi
方法中,计算连续动作网络的loss时,没有用到该网络的交叉熵,请问为什么要这样计算呢?2.第二个问题也是在上面这个方法中,我看到连续动作的对数概率计算如下,我的理解是连续动作输出了所有的离散动作对应的连续动作的值,然后通过这种方式来获得最终输出的连续动作的值,这个理解正确吗?连续动作网络可以只输出一个值作为智能体的连续动作输出吗?
3.第三个问题是关于hppo算法的实现的,我感觉这个实现中连续动作空间和离散动作空间似乎是完全独立的两个网络,而我对论文的理解是两个网络共用相同的state encoder网络,请问为什么要这样做,另外这样做神经网络是不是不能获得两种动作之间的联系?
4.第四个问题想请教一下我目前遇到的一个问题。我希望使用hppo算法,然后我的连续动作空间中的一部分值有一个限制,就是他们之和需要小于等于1,这种情况该如何设计?我目前的想法是,连续动作网络输出后单独把这些值找出来通过一个softmax再输出
希望能得到您的