【问题标题】:why do keras-rl examples always choose linear activation in the output layer?为什么 keras-rl 示例总是在输出层选择线性激活?
【发布时间】:2017-08-03 20:28:52
【问题描述】:

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

【问题讨论】:

    标签: keras reinforcement-learning openai-gym


    【解决方案1】:

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

    linear dqn 和 ddqn 激活函数背后的原因是它的探索策略,它是代理的一部分。如果我们将用于它们的探索策略类作为示例和方法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
    

    在每个动作的决策过程中,最后一个dense层的linear激活函数的输出根据玻尔兹曼探索策略变换到范围[0,1],并做出具体动作的决策根据玻尔兹曼探索。这就是为什么softmax 不用于输出层的原因。

    您可以在此处阅读有关不同探索策略及其比较的更多信息: https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part-7-action-selection-strategies-for-exploration-d3a97b7cceaf

    【讨论】:

    • 非常感谢您的精彩解释。很有帮助!
    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多