Q-learning con Neural Network como aproximación de funciones

11

Estoy tratando de usar una red neuronal para aproximar el valor Q en Q-learning como en Preguntas sobre Q-Learning usando redes neuronales . Como se sugiere en la primera respuesta, estoy usando una función de activación lineal para la capa de salida, mientras sigo usando la función de activación sigmoidea en las capas ocultas (2, aunque puedo cambiar esto más adelante). También estoy usando un solo NN que devuelve una salida para cada acción como se recomienda.Q(a)

Sin embargo, el algoritmo sigue siendo divergente para el simple problema de equilibrio del carro-poste. Entonces, me temo que mi actualización Q está mal. Después de la inicialización, lo que he hecho en cada paso es lo siguiente:

  • Calcule usando la propagación hacia adelante del NN para todas las acciones.Qt(st)
  • Seleccione una nueva acción, , aterrice en un nuevo estado .atst
  • Calcule usando la propagación hacia adelante del NN para todas las acciones.Qt(st+1)
  • Establezca el valor Q objetivo como: solo para la acción actual, a_t , mientras se configura Q_ {t + 1} (s, a_t) = Q_ {t} (s, a_t) para los otros estados. Nota, creo que este es el problema.Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)Qt(st,at)]atQt+1(s,at)=Qt(s,at)
  • Establezca el vector de error en e=QtargetQt=Qt+1Qt
  • Volver a propagar el error a través del NN para actualizar las matrices de peso.

¿Alguien podría señalarme dónde me he equivocado?

Además, ¿cree que también debería incluir un término de sesgo en la capa de entrada y la primera capa oculta (es decir, para las funciones sigmoideas)? ¿Hará la diferencia?

Muchas gracias de antemano por tu ayuda. Puedo ayudar a aclarar la pregunta o compartir código si es necesario.

Enrico Anderlini
fuente

Respuestas:

9

Tu objetivo debe ser justo

rt+1+γmaxaQ(st+1,a) .

Tenga en cuenta que su término de error (que es correcto) podría reescribirse como rt+1+γmaxaQ(st+1,a)Qt

cuál es el término entre paréntesis en la fórmula de actualización. Esto se multiplicará por su tasa de aprendizaje NN y otros términos de propagación hacia atrás durante el aprendizaje, y luego se agregará a los pesos anteriores, al igual que la fórmula de actualizaciónQ

rcpinto
fuente
¡Gracias por el consejo! De esa manera puedo evitar errores numéricos en el valor objetivo: como usted dice, no tiene sentido agregar y luego restar . Qt
Enrico Anderlini
Sin embargo, mi aprendizaje NN + Q todavía no converge. Entonces, si el método es correcto, supongo que solo intentaré jugar con la tasa de aprendizaje y el número de neuronas en las capas ocultas
Enrico Anderlini
1
Sí, debe hacerlo (intente utilizar la función de transferencia ReLU también). Pero tenga en cuenta que Q-Learning no tiene garantías de convergencia con la aproximación de funciones. Si su próximo intento no funciona, puede probar Advantage Learning. Y finalmente, el problema podría ser que sus datos no son iid. Por lo tanto, deberá implementar Experience Replay.
rcpinto
Tengo una extensión a la pregunta. Entiendo el algoritmo como se menciona en la pregunta, pero estoy confundido acerca de los y . Si la recompensa por el juego se conoce solo al final del juego (en una condición de victoria o pérdida), ¿cómo debemos proporcionar la recompensa por un paso intermedio? Qt+1rt+1
Kanishka Ganguly
1
No lo haces, es cero. Pero los valores Q se propagarán lentamente a los estados anteriores, porque el valor Q es una estimación de recompensas acumulativas futuras .
rcpinto