2

勾配降下を使用した私の 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 のバイナリ機能があります。

4

2 に答える 2

1

各試行で正規化が必要です。これにより、重みが制限された範囲に保たれます。(例: [0,1])。毎回重みを追加する方法は、重みを大きくするだけで、最初の試行の後は役に立たなくなります。

私はこのようなことをします:

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

または次の例を参照してください (RL の文献から):

ここに画像の説明を入力

ただし、正規化関数を自分で作成する必要があります;)

于 2014-05-30T12:17:36.413 に答える