如何使用强化学习更新函数近似中的权重?

时间:2014-05-21 06:41:00

标签: python machine-learning reinforcement-learning function-approximation

我的SARSA渐变下降不断使权重呈指数增长。在第4集第17步,该值已经是纳米

Exception: Qa is nan

e.g:

6) Qa:
Qa = -2.00890180632e+303

7) NEXT Qa:
Next Qa with west = -2.28577776413e+303

8) THETA:
1.78032402991e+303 <= -0.1 + (0.1 * -2.28577776413e+303) - -2.00890180632e+303

9) WEIGHTS (sample)
5.18266630725e+302 <= -1.58305782482e+301 + (0.3 * 1.78032402991e+303 * 1)

我不知道在哪里寻找我犯的错误。 这里有一些代码FWIW:

def getTheta(self, reward, Qa, QaNext):
    """ let t = r + yQw(s',a') - Qw(s,a) """
    theta = reward + (self.gamma * QaNext) - Qa


def updateWeights(self, Fsa, theta):
    """ wi <- wi + alpha * theta * Fi(s,a) """
    for i, w in enumerate(self.weights):
        self.weights[i] += (self.alpha * theta * Fsa[i])

我有大约183个二进制功能。

2 个答案:

答案 0 :(得分:1)

每次试验都需要标准化。这将使权重保持在有界范围内。 (例如[0,1])。他们每次都会增加权重,只是增加权重,在第一次审判后就没用了。

我会做这样的事情:

self.weights[i] += (self.alpha * theta * Fsa[i])
normalize(self.weights[i],wmin,wmax)

或参见以下示例(来自RL的文献):

enter image description here

您需要自己编写规范化函数;)

答案 1 :(得分:0)

我无权访问您的应用程序中的完整代码,因此我可能是错的。但是我想我知道你要去哪里错了。 首先,这里不需要标准化。在这种情况下,体重很快就so肿,这说明您的实现存在问题。

我认为您的更新公式应为:-

self.weights [:, action_i] = self.weights [:, action_i] +(self.alpha * theta * Fsa [i])

这就是说,您应该更新列而不是行,因为行是针对状态的,列是针对权重矩阵中的操作的。