4

据我了解,可以用神经网络替换 Q 值的查找表(状态-动作-对-评估)来估计这些状态-动作对。我编写了一个小型库,它能够通过自建的神经网络进行传播和反向传播,以学习特定输入输出的所需目标值。

所以我在谷歌搜索和谷歌搜索整个网络时也找到了这个网站(就像我觉得的那样):http ://www.cs.indiana.edu/~gasser/Salsa/nn.html其中Q-learning与简要介绍了神经网络。

对于每个动作,都有一个额外的输出神经元,这些输出“单元”之一的激活值告诉我估计的 Q 值。(一个问题:激活值与神经元的“输出”相同还是不同?)

我使用标准的 sigmoid 函数作为激活函数,所以函数值 x 的范围是

0<x<1

所以我想,我的目标值应该总是从 0.0 到 1.0 -> 问题:我的理解正确吗?还是我误解了什么?

如果是,则出现以下问题:计算目标奖励/新Q值的公式为:q(s,a) = q(s,a) + learningrate * (reward + discountfactor * q'(s,a ) - q(s,a))

那么,如果目标应该是从 0.0 到 1.0,我该如何执行这个方程来获得神经网络的正确目标?!我如何计算好的奖励价值?朝着目标前进比远离目标更值得吗?(接近目标时的 +reward 比 -reward 更远的目标距离?)

我觉得我的理解有一些误区。我希望,你能帮助我回答这些问题。非常感谢!

4

1 回答 1

6

使用神经网络存储 q 值是查表的一个很好的扩展。这使得在状态空间连续时使用 q-learning 成为可能。

  input layer     ......  

                |/  \ |  \|
  output layer  a1   a2   a3
                0.1  0.2  0.9

假设您有 3 个可用的操作。上面显示了使用当前状态和学习权重的神经网络的输出。所以你知道a3这是最好的行动。

现在你有问题:

一个问题:激活值与神经元的“输出”相同还是不同?

是的,我想是这样。在引用的链接中,作者说:

一些单元也可以指定为输出单元;它们的激活代表了网络的响应。


所以我想,我的目标值应该总是从 0.0 到 1.0 -> 问题:我的理解正确吗?还是我误解了什么?

如果您选择sigmoid激活函数,那么您的输出肯定会在 0.0 到 1.0 之间。激活函数有不同的选择,例如,hereSigmoid是最受欢迎的选择之一。我认为输出值从 0.0 到 1.0 在这里不是问题。如果在当前时间,您只有两个可用的操作,Q(s,a1) = 0.1, Q(s,a2) = 0.9您知道该操作a2a1相对于 q 值的操作要好得多。


那么,如果目标应该是从 0.0 到 1.0,我该如何执行这个方程来获得神经网络的正确目标?!我如何计算好的奖励价值?

我不确定,但您可以尝试将新目标 q 值限制在 0.0 和 1.0 之间,即

q(s,a) = min(max(0.0, q(s,a) + learningrate * (reward + discountfactor * q'(s,a) - q(s,a))), 1.0)

尝试做一些实验来找到合适的奖励值。


朝着目标前进比远离目标更值得吗?(接近目标时的 +reward 比 -reward 更远的目标距离?)

如果你使用经典的更新方程,通常你应该在接近目标时给予更多的奖励,这样新的 q 值就会增加。

于 2012-11-19T20:08:29.863 回答