就我的理解而言,可以通过神经网络替换Q值(状态 - 动作 - 对 - 评估)的查找表来估计这些状态 - 动作对。我编写了一个小型库,它能够通过一个自建的神经网络进行传播和反向传播,以便为某个输入输出学习所需的目标值。
所以我也在谷歌搜索时发现了这个网站,并在网上搜索(就像我觉得的那样):http://www.cs.indiana.edu/~gasser/Salsa/nn.html很快解释了Q学习与神经网络的结合。
对于每个动作,都有一个额外的输出神经元,其中一个输出 - “单位”的激活值告诉我,估计的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,我如何执行这个等式来获得神经网络的正确目标? 我如何计算良好的奖励价值?走向目标更值得,而不是远离它? (接近目标时更多+奖励而不是更远距离目标的奖励?)
我认为我的一些误解。我希望,你可以帮助我回答这些问题。非常感谢你!
答案 0 :(得分:6)
使用神经网络存储q值是表查找的一个很好的扩展。这使得在状态空间连续时可以使用q学习。
input layer ......
|/ \ | \|
output layer a1 a2 a3
0.1 0.2 0.9
假设您有3个可用的操作。上图显示了使用当前状态和学习权重的神经网络的输出。所以你知道a3
是最好的行动。
现在你有问题:
一个问题:激活值是否与神经元的“输出”相同或不同?
是的,我想是的。在引用的链接中,作者说:
某些单位也可能是指定的输出单位;他们的激活代表了网络的反应。
所以我想,我的目标值应始终从0.0到1.0 - >问题:我的理解是否正确?或者我错过了解一些事情?
如果选择sigmoid
作为激活功能,请确保输出为0.0到1.0。激活函数有不同的选择,例如here。 Sigmoid
是最受欢迎的选择之一。我认为输出值从0.0到1.0不是问题。如果在当前时间,您只有两个可用的操作Q(s,a1) = 0.1, Q(s,a2) = 0.9
,则您知道操作a2
比a1
的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)
尝试做一些实验以找到合适的奖励值。
走向目标更值得,而不是远离它? (接近目标时更多+奖励而不是更远距离目标的奖励?)
如果使用经典更新方程,通常你应该在接近目标时给予更多奖励,以便增加新的q值。