首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么keras-rl示例总是在输出层选择线性激活?

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

Stack Overflow用户
提问于 2017-08-04 04:28:52
回答 1查看 1.6K关注 0票数 4

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 18:47:11

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

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

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45493987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档