22 votos

¿Cómo calcular exactamente la función de pérdida Q-Learning profunda?

Tengo una duda sobre cómo se entrena exactamente la función de pérdida de una red Q-Learning profunda. Estoy utilizando una red feedforward de 2 capas con capa de salida lineal y capas ocultas relu.

  1. Supongamos que tengo 4 acciones posibles. Así, la salida de mi para el estado actual $s_t$ es $Q(s_t) \in \mathbb{R}^4$ . Para hacerlo más concreto supongamos $Q(s_t) = [1.3, 0.4, 4.3, 1.5]$
  2. Ahora emprendo la acción $a_t = 2$ correspondiente al valor $4.3$ Es decir la 3ª acción, y alcanzar un nuevo estado $s_{t+1}$ .
  3. A continuación, calculo el pase hacia delante con el estado $s_{t+1}$ y digamos que obtengo los siguientes valores en la capa de salida $Q(s_{t+1}) = [9.1, 2.4, 0.1, 0.3]$ . También digamos que la recompensa $r_t = 2$ y $\gamma = 1.0$ .
  4. Es la pérdida dada por:

    $\mathcal{L} = (11.1- 4.3)^2$

    O

    $\mathcal{L} = \frac{1}{4}\sum_{i=0}^3 ([11.1, 11.1, 11.1, 11.1] - [1.3, 0.4, 4.3, 1.5])^2$

    O

    $\mathcal{L} = \frac{1}{4}\sum_{i=0}^3 ([11.1, 4.4, 2.1, 2.3] - [1.3, 0.4, 4.3, 1.5])^2$

Gracias, siento haber tenido que escribir esto de una manera muy básica... Estoy confundido por toda la notación. ( Creo que la respuesta correcta es la segunda...)

15voto

Gerry Coll Puntos 4723

Después de revisar las ecuaciones unas cuantas veces más. Creo que la pérdida correcta es la siguiente:

$$\mathcal{L} = (11.1 - 4.3)^2$$

Mi razonamiento es que la regla de actualización q-learning para el caso general sólo está actualizando el valor q para un específico $state,action$ par.

$$Q(s,a) = r + \gamma \max_{a*}Q(s',a*)$$

Esta ecuación significa que la actualización sólo se produce para un determinado $state,action$ y para la red neuronal q significa que la pérdida se calcula sólo para una unidad de salida específica que corresponde a una $action$ .

En el ejemplo $Q(s,a) = 4.3$ y el $target$ es $r + \gamma \max_{a*}Q(s',a*) = 11.1$ .

1voto

Sayantan Santra Puntos 587

TLDR:

Probablemente no importará a menos que tengas un gran espacio de acción.

Si su función de pérdida es MSE entonces la pérdida calculada es la mitad de la pérdida específica del término (si el espacio de acción = 2). Esto puede ser importante si su espacio de acción es grande y puede ralentizar el entrenamiento, ya que la pendiente de la función de pérdida se reduce en un factor igual al espacio de acción de su problema.

        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)

Como has mencionado, sólo se actualizan los valores q corresponden a la acción actual realizada. Por lo tanto, el numerador de pérdidas permanece constante.

Suponiendo un espacio de acción de 2( valores posibles: {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 la acción seleccionada era 1 entonces el 0 por lo tanto, se anula y viceversa. Por lo tanto, todos los términos se anulan excepto la acción que se está realizando. Sin embargo, el denominador seguirá aumentando según el espacio de acción.

Para un espacio de acción de n = 2 ,

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X