我的SARSA梯度下降,重量呈指数级上升。第17集第4集已经到了第4集
Exception: Qa is nan
例如:
^{pr2}$我不知道该去哪里找我犯的错误。 以下是一些代码:
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个二进制特性。在
每次审判都需要正常化。这将使权重保持在有界范围内。(例如[0,1])。他们的方式是你每次都在增加重量,只是增加了重量,在第一次试验之后就没用了。在
我会这样做:
或参见以下示例(来自RL文献):
不过,您需要自己编写规范化函数;)
我无法访问您的应用程序中的完整代码,因此我可能错了。但我想我知道你错在哪里。 首先,正常化在这里不应该是必要的。在这种情况下,体重过快膨胀说明你的实现有问题。在
我想你的更新公式应该是:
在自重[:,动作_i]=自重[:,动作1]+(自我阿尔法*θ*Fsa[i])
也就是说,应该更新列而不是行,因为行用于状态,列用于权重矩阵中的操作。在
相关问题 更多 >
编程相关推荐