Pregunta

Tengo una red neuronal artificial que reproduce Tic-Tac-Toe, pero aún no está completa.


Lo que tengo todavía:

  • la matriz de recompensas "R [t]" con valores enteros para cada paso de tiempo o movimiento "t" (1= el jugador A gana, 0= empate, -1= el jugador B gana)
  • Los valores de entrada se propagan correctamente a través de la red.
  • la fórmula para ajustar los pesos:

ingrese la descripción de la imagen aquí


Qué falta:

  • el aprendizaje de TD: todavía necesito un procedimiento que "retropropague" los errores de la red usando el algoritmo TD (λ).

Pero realmente no entiendo este algoritmo.


Mi enfoque hasta ahora ...

El parámetro de degradación de la traza λ debe ser "0.1", ya que los estados distales no deben obtener tanta recompensa.

La tasa de aprendizaje es "0.5" en ambas capas (entrada y oculta).

Es un caso de recompensa retrasada: la recompensa sigue siendo "0" hasta que finaliza el juego. Luego, la recompensa se convierte en "1" por la victoria del primer jugador, "-1" por la victoria del segundo jugador o "0" en caso de empate.


Mis preguntas:

  • ¿Cómo y cuándo se calcula el error de la red (error TD)?
  • ¿Cómo se puede implementar la "propagación hacia atrás" del error?
  • ¿Cómo se ajustan los pesos usando TD (λ)?

Muchas gracias de antemano :)

¿Fue útil?

Solución

Si realmente quiere que esto funcione, comprender TD-lambda sería muy útil.El libro de Sutton y Barto, "Reinforcement Learning" está disponible de forma gratuita enFormato HTML y cubre este algoritmo en detalle.Básicamente, lo que hace TD-lambda es crear un mapeo entre un estado del juego y la recompensa esperada al final del juego.A medida que se juegan los juegos, los estados que tienen más probabilidades de llevar a estados ganadores tienden a obtener valores de recompensa esperados más altos.

Para un juego simple como tic-tac-toe, es mejor comenzar con un mapeo tabular (solo rastrea un valor de recompensa esperado para cada posible estado del juego).Luego, una vez que haya funcionado, puede intentar usar un NN para el mapeo.Pero sugeriría probar primero un proyecto NN separado y más simple ...

Otros consejos

También me ha confundido esto, pero creo que así es como funciona:

Comenzando desde el nodo final, verifica R, (salida recibida) y E, (salida esperada).Si E= R, está bien y no tiene que hacer cambios.

Si E!= R, puede ver qué tan lejos estaba, según los umbrales y todo eso, y luego cambia los pesos o el umbral hacia arriba o hacia abajo un poco.Luego, en función de los nuevos pesos, vuelve a ingresar y adivina si era demasiado alto o demasiado bajo, y repite, con un efecto más débil.

Realmente nunca probé este algoritmo, pero esa es básicamente la versión de la idea tal como la entiendo.

Por lo que recuerdo, haces el entrenamiento con un conjunto de resultados conocido, por lo que calculas la salida para una entrada conocida y le restas el valor de salida conocido, ese es el error.

Luego, usa el error para corregir la red; para un NN de una sola capa ajustado con la regla delta, sé que un épsilon de 0.5 es demasiado alto, algo como 0.1 es mejor, más lento pero mejor.La retropropagación es un poco más avanzada, pero por lo que recuerdo, la descripción de la ecuación matemática de una NN es compleja y difícil de entender, no es tan complicada.

echa un vistazo a http://www.codeproject.com/KB/recipes/BP.aspx

o google para "retropropagación c": probablemente sea más fácil de entender en el código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top