为什么keras-rl的例子总是在输出层选择线性激活?
why do keras-rl examples always choose linear activation in the output layer?
我是强化学习的新手。我对 keras-rl 代理的输出层激活函数的选择有疑问。在keras-rl (https://github.com/matthiasplappert/keras-rl/tree/master/examples)提供的所有例子中,输出层选择线性激活函数。为什么是这样?如果我使用不同的激活函数,我们会期待什么效果?例如,如果我使用离散动作 space 为 5 的 OpenAI 环境,我是否还应该考虑在代理的输出层中使用 softmax?
非常感谢。
对于 keras-rl 中的某些代理,使用了 linear
激活函数,即使代理使用离散的动作空间(例如,dqn、ddqn)也是如此。但是,例如,CEM 使用 softmax
离散动作空间的激活函数(这是人们所期望的)。
dqn和ddqn的linear
激活函数背后的原因是它的探索策略,它是代理的一部分。如果我们将用于两者的探索策略 class 作为示例和方法 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
我是强化学习的新手。我对 keras-rl 代理的输出层激活函数的选择有疑问。在keras-rl (https://github.com/matthiasplappert/keras-rl/tree/master/examples)提供的所有例子中,输出层选择线性激活函数。为什么是这样?如果我使用不同的激活函数,我们会期待什么效果?例如,如果我使用离散动作 space 为 5 的 OpenAI 环境,我是否还应该考虑在代理的输出层中使用 softmax? 非常感谢。
对于 keras-rl 中的某些代理,使用了 linear
激活函数,即使代理使用离散的动作空间(例如,dqn、ddqn)也是如此。但是,例如,CEM 使用 softmax
离散动作空间的激活函数(这是人们所期望的)。
dqn和ddqn的linear
激活函数背后的原因是它的探索策略,它是代理的一部分。如果我们将用于两者的探索策略 class 作为示例和方法 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