为什么keras rl示例总是在输出层选择线性激活?

为什么keras rl示例总是在输出层选择线性激活?,keras,reinforcement-learning,openai-gym,Keras,Reinforcement Learning,Openai Gym,我是强化学习的新手。我有一个关于keras rl试剂输出层激活函数选择的问题。在keras rl()提供的所有示例中,选择输出层中的线性激活函数。为什么会这样?如果我使用不同的激活函数,我们会期望什么效果?例如,如果我使用一个具有5的离散动作空间的OpenAI环境,我也应该考虑在代理的输出层中使用SoFTMax吗? 非常感谢 对于keras rl中的某些代理,使用了线性激活函数,即使代理使用离散动作空间(例如,dqn、ddqn)。但是,例如,CEM对离散动作空间使用softmax激活函数(这是人

我是强化学习的新手。我有一个关于keras rl试剂输出层激活函数选择的问题。在keras rl()提供的所有示例中,选择输出层中的线性激活函数。为什么会这样?如果我使用不同的激活函数,我们会期望什么效果?例如,如果我使用一个具有5的离散动作空间的OpenAI环境,我也应该考虑在代理的输出层中使用SoFTMax吗?
非常感谢

对于keras rl中的某些代理,使用了
线性
激活函数,即使代理使用离散动作空间(例如,dqn、ddqn)。但是,例如,CEM对离散动作空间使用
softmax
激活函数(这是人们所期望的)

dqn和ddqn的
linear
激活函数背后的原因是其勘探策略,这是代理的一部分。如果我们把这两种方法的探索策略作为一个例子和一个方法<代码>选择TygActudio,我们将看到如下:

class BoltzmannQPolicy(Policy):
def __init__(self, tau=1., clip=(-500., 500.)):
    super(BoltzmannQPolicy, self).__init__()
    self.tau = tau
    self.clip = clip

def select_action(self, q_values):
    assert q_values.ndim == 1
    q_values = q_values.astype('float64')
    nb_actions = q_values.shape[0]

    exp_values = np.exp(np.clip(q_values / self.tau, self.clip[0], self.clip[1]))
    probs = exp_values / np.sum(exp_values)
    action = np.random.choice(range(nb_actions), p=probs)
    return action
在每个动作的决策过程中,最后一个
密集
层的
线性
激活函数的输出根据Boltzmann勘探策略转换为[0,1]范围,并根据Boltzmann勘探做出具体动作的决策。这就是为什么在输出层中不使用
softmax

您可以在此处阅读更多关于不同探索策略及其比较的信息:

非常感谢您的精彩解释。这很有帮助!