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

时间:2017-08-03 20:28:52

标签: keras reinforcement-learning openai-gym

我是强化学习的全新手。我有一个关于为keras-rl代理选择输出层的激活功能的问题。在keras-rl(https://github.com/matthiasplappert/keras-rl/tree/master/examples)提供的所有示例中,选择输出层中的线性激活函数。为什么是这样?如果我使用不同的激活功能,我们会期待什么效果?例如,如果我使用离散动作空间为5的OpenAI环境,我是否还应该考虑在代理的输出层中使用softmax? 非常感谢提前。

1 个答案:

答案 0 :(得分:2)

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

dqn和ddqn的linear激活函数背后的原因是它的探索策略,它是代理的一部分。如果我们将用于它们的勘探政策类别作为示例和方法select_action,我们将看到以下内容:

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

在每个行动的决策过程中,根据玻尔兹曼探索政策将最后linear层的dense激活函数的输出转换为范围[0,1],并决定具体行动是根据玻尔兹曼探索进行的。这就是为什么softmax未在输出层中使用的原因。

您可以在此处详细了解不同的探索策略及其比较: https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part-7-action-selection-strategies-for-exploration-d3a97b7cceaf