Comment calculer exactement la fonction de perte Deep Q-Learning?

11

J'ai un doute sur la formation exacte de la fonction de perte d'un réseau Deep Q-Learning. J'utilise un réseau feedforward à 2 couches avec une couche de sortie linéaire et des couches cachées relu.

  1. Supposons que j'ai 4 actions possibles. Ainsi, la sortie de mon réseau pour l'état actuelst est Q(st)R4. Pour le rendre plus concret, supposonsQ(st)=[1.3,0.4,4.3,1.5]
  2. Maintenant je passe à l'action at=2 correspondant à la valeur 4.3 c'est à dire la 3ème action, et atteindre un nouvel état st+1.
  3. Ensuite, je calcule la passe avant avec l'état st+1 et disons que j'obtiens les valeurs suivantes sur la couche de sortie Q(st+1)=[9.1,2.4,0.1,0.3]. Disons aussi que la récompensert=2, et γ=1.0.
  4. La perte est-elle due à:

    L=(11.14.3)2

    OU

    L=14i=03([11.1,11.1,11.1,11.1][1.3,0.4,4.3,1.5])2

    OU

    L=14i=03([11.1,4.4,2.1,2.3][1.3,0.4,4.3,1.5])2

Merci, désolé d'avoir dû écrire ceci d'une manière très basique ... Je suis confus par toute la notation. (Je pense que la bonne réponse est la deuxième ...)

UN D
la source
1
Cette question avec l'exemple clair m'a fait comprendre q l'apprentissage approfondi plus que tout autre article moyen que j'ai lu la semaine dernière.
dhruvm

Réponses:

6

Après avoir revu les équations plusieurs fois. Je pense que la perte correcte est la suivante:

L=(11.14.3)2

Mon raisonnement est que la règle de mise à jour q-learning pour le cas général ne met à jour la valeur q que pour un state,action paire.

Q(s,a)=r+γmaxaQ(s,a)

Cette équation signifie que la mise à jour se produit uniquement pour un spécifique paire d' et pour le réseau neuronal q, ce qui signifie que la perte est calculée uniquement pour une unité de sortie spécifique qui correspond à une spécifique .state,actionaction

Dans l'exemple fourni et la est .Q(s,a)=4.3targetr+γmaxaQ(s,a)=11.1

UN D
la source
0
TLDR:

Cela n'aura probablement aucune importance à moins que vous n'ayez un grand espace d'action.

Si votre fonction de perte est MSE , alors la perte calculée est la moitié du terme perte spécifique (si espace d'action = 2). Cela peut être important si votre espace d'action est grand et peut ralentir l'entraînement car la pente de la fonction de perte est réduite d'un facteur égal à l'espace d'action de votre problème.

        next_q = self.model.predict(next_obss)
        next_q[np.where(dones)] = np.zeros([self.action_shape])

        qs = self.model.predict(obss)
        qs[range(len(qs)), actions] = rewards + GAMMA * np.max(next_q, axis=1)

        h = self.model.fit(obss, qs, verbose=0)

Comme vous l'avez mentionné, seules les valeurs q qui correspondent à l'action en cours effectuée sont mises à jour. Par conséquent, le numérateur de perte reste constant.

En supposant un espace d'action de 2 (valeurs possibles: {0,1}).

L = 1/2[ Q - Q_old ]^2 # Capital implying Vector
L = 1/2[ (q_0 - q_old_0)^2 + (q_1 - q_old_1)^2]

Si l'action sélectionnée était 1alors la 0valeur e reste inchangée donc, elle s'annule et vice versa. Ainsi, tous les termes s'annulent à l'exception de l'action en cours. Cependant, le dénominateur continuerait à augmenter selon l'espace d'action.

Pour un espace d'action de n = 2,

MSE(Q(s)) = 1/n * (squared error for Q(s,a))
EFreak
la source