【问题标题】:How do you update the weights in function approximation with reinforcement learning?您如何使用强化学习更新函数逼近中的权重?
【发布时间】:2014-05-21 06:41:00
【问题描述】:

我的梯度下降 SARSA 不断以指数方式增加权重。在第 4 集第 17 步,值已经是 nan

Exception: Qa is nan

例如:

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 个二进制特征。

【问题讨论】:

  • 鉴于提供的信息,几乎不可能给出答案。我会尝试减少 alpha/theta,并详细查看所涉及的数量。
  • 你是在做标准化步骤,还是只是增加权重?
  • @NKN 谢谢,你的标准化步骤有帮助。对此仍然很陌生,我希望有更多关于此的文档。

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


【解决方案1】:

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

我会这样做:

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

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

你需要自己编写标准化函数;)

【讨论】:

  • 能否请您提供文献来源?我想了解更多。
  • 我会推荐这本书:books.google.it/…
【解决方案2】:

我无法访问您应用程序中的完整代码,所以我可能错了。但我想我知道你哪里出错了。 首先,这里不需要标准化。在这种情况下,权重这么快就变得臃肿表明您的实施存在问题。

我认为你的更新方程应该是:-

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

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

【讨论】:

    猜你喜欢
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 2020-06-30
    相关资源
    最近更新 更多