gpt4 book ai didi

neural-network - 当可能有多个 Action 时,策略梯度是多少?

转载 作者:行者123 更新时间:2023-12-04 03:12:34 27 4
gpt4 key购买 nike

我正在尝试使用策略梯度编写强化学习算法,灵感来自 Karpathy's blog article . Karpathy 的示例只有向上或向下两个 Action ,因此单个输出神经元就足够了(高激活=向上,低激活=向下)。我想将其扩展到多个 Action ,所以我相信我需要在输出层上使用 softmax 激活函数。但是,我不确定输出层的梯度应该是多少。

如果我在监督学习环境中使用带有 softmax 激活的交叉熵损失函数,神经元的梯度很简单:

g[i] = a[i] - target[i]

其中 target[i] = 1 用于所需的操作,0 用于所有其他操作。

为了将其用于强化学习,我会在反向传播之前将 g[i] 乘以折扣奖励。

但是,似乎强化学习使用负对数似然作为损失而不是交叉熵。 这如何改变梯度?

最佳答案

注意:我认为可以让您走上正轨:

负对数似然也称为多类交叉熵(模式识别和机器学习)。

编辑:误读了问题。我以为这是在谈论深度确定性策略梯度

这取决于您的领域,但使用 softmax,您将获得所有输出节点的概率。对我来说,当你想到 DDPG 时,这在大多数领域都没有真正意义。例如,如果您正在控制机器人 ARM 和腿的拉伸(stretch),如果您想拉伸(stretch)所有肢体,则将肢体拉伸(stretch)测量为 [.25, .25, .25, .25] 是没有意义的。在这种情况下,.25 可能意味着完全扩展,但如果输出向量是 [.75,.25,0,0] 会怎样?因此,通过这种方式,对于所有 Action 节点,您可以有一个从 0 到 1 的单独的 sigmoid 函数,然后您可以将它表示为 [1,1,1,1] 用于所有正在拉伸(stretch)的 ARM 。我希望这是有道理的。

由于 Actor 网络决定了 DDPG 中的 Action ,因此我们可以为我们的机器人(粗略的 keras 示例)表示我们的网络:

state = Input(shape=[your_state_shape])
hidden_layer = Dense(30, activation='relu')(state)
all_limbs = Dense(4, activation='sigmoid')(hidden_layer)
model = Model(input=state, output=all_limbs)

然后,您的评论网络将必须考虑行动维度。

state = Input(shape=[your_state_shape])
action = Input(shape=[4])
state_hidden = Dense(30, activation='relu')(state)
state_hidden_2 = Dense(30, activation='linear')(state_hidden)
action_hidden = Dense(30, activation='linear')(action)
combined = merge([state_hidden_2, action_hidden], mode='sum')
squasher = Dense(30, activation='relu')(combined)
output = Dense(4, activation='linear')(squasher) #number of actions

然后您可以从那里使用您的目标函数。请注意,我不知道这段代码是否有效,因为我还没有测试过它,但希望你能理解。

来源:https://arxiv.org/pdf/1509.02971.pdf关于 Torc 的很棒的博客(不是我创建的):https://yanpanlau.github.io/2016/10/11/Torcs-Keras.html

在上面的博客中,他们还展示了如何使用不同的输出函数,例如一个 TAHN 和两个用于操作的 sigmoid 函数。

关于neural-network - 当可能有多个 Action 时,策略梯度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43881897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com