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

2024-06-16 11:43:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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个二进制特性。在


Tags: selfalphadefexception指数qafsa梯度
2条回答

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

我会这样做:

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

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

enter image description here

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

我无法访问您的应用程序中的完整代码,因此我可能错了。但我想我知道你错在哪里。 首先,正常化在这里不应该是必要的。在这种情况下,体重过快膨胀说明你的实现有问题。在

我想你的更新公式应该是:

在自重[:,动作_i]=自重[:,动作1]+(自我阿尔法*θ*Fsa[i])

也就是说,应该更新列而不是行,因为行用于状态,列用于权重矩阵中的操作。在

相关问题 更多 >