在调试sac程序过程中遇到如上图所示的神经网络架构,乍一看以为是网络出错,仔细观察发现是双分支网络。
在这种设计中,网络的两个分支分别输出动作的均值和方差(或者对数标准差),用于生成动作分布。以下是使用这种网络的步骤:
1.1 网络设计
均值分支:输出动作分布的均值。
方差分支:输出动作分布的对数标准差(或者标准差)。
1.2动作生成
在训练过程中通过高斯分布选择动作
def sample_action(mean, std):
dist = torch.distributions.Normal(mean, std)
action = dist.sample()
log_prob = dist.log_prob(action).sum(dim=-1) # 计算对数概率
return action, log_prob