Con deep q learning si estás entusiasmado con machine learning e interesado en cómo se puede aplicar a Gaming u Optimization, este artículo es para ti.
Veremos los conceptos básicos del aprendizaje por refuerzo y, más específicamente, deep q learning por refuerzo (redes neuronales + deep q learning) aplicado al juego Snake. ¡Introduzcámonos en él!
La inteligencia artificial y los juegos, contrariamente a la creencia popular, no se llevan bien juntos.
¿Es esta una opinión conversacional?
Sí lo es, pero lo explicaré. Hay una diferencia entre la inteligencia artificial y el comportamiento artificial.
No queremos que los agentes en nuestros juegos superen a los jugadores. Queremos que sean tan inteligentes como sea necesario para proporcionar diversión y compromiso.
No queremos presionar el límite de nuestro bot de Machine Learning, como solemos hacer en diferentes industrias. El oponente debe ser imperfecto, imitando un comportamiento humano.
Sin embargo, los juegos no son solo entretenimiento. Capacitar a un agente para superar a los jugadores humanos y optimizar su puntaje puede enseñarnos cómo optimizar diferentes procesos en una variedad de subcampos diferentes y emocionantes.
Es lo que hizo DeepMind de Google con su popular AlphaGo, superando al jugador Go más fuerte de la historia y marcando un gol considerado imposible en ese momento.
En este artículo veremos cómo desarrollar un AI Bot capaz de aprender cómo jugar el popular juego Snake desde cero.
Para hacerlo, implementamos un algoritmo Aprendizaje de refuerzo profundo utilizando Keras sobre Tensorflow .
Este enfoque consiste en proporcionar los parámetros del sistema relacionados con su estado y una recompensa positiva o negativa basada en sus acciones. No se dan reglas sobre el juego, e inicialmente el Bot no tiene información sobre lo que debe hacer.
El objetivo del sistema es resolverlo y elaborar una estrategia para maximizar el puntaje o la recompensa.
Vamos a ver cómo un algoritmo deep q learning aprende a jugar Snake, anotando hasta 50 puntos y mostrando una estrategia sólida después de solo 5 minutos de entrenamiento.
Para el código completo consulte Repositorio de GitHub .
El juego
El juego fue codificado en Python con Pygame, una biblioteca que permite desarrollar juegos bastante fáciles. A la izquierda, el agente no estaba capacitado y no tenía pistas sobre qué hacer en absoluto.
El juego de la derecha se refiere al juego después de 100 iteraciones (unos 5 minutos). La puntuación más alta fue de 83 puntos, después de 200 iteraciones.
¿Cómo funciona?
El aprendizaje por refuerzo es un enfoque basado en el Proceso de decisión de Markov para tomar decisiones.
En mi implementación, utilicé Aprendizaje en lugar de un enfoque tradicional de machine learning supervisado.
¿Cual es la diferencia?
Los algoritmos Machine Learning tradicionales deben capacitarse con una entrada y una “respuesta correcta” llamada target. El sistema intentará aprender cómo predecir el objetivo de acuerdo con la nueva entrada.
En este ejemplo, no sabemos cuál es la mejor acción a tomar en cada estado del juego, por lo que un enfoque tradicional no sería efectivo.
En Aprendizaje de refuerzo pasamos una recompensa positiva o negativa según la acción que tomó el sistema, y el algoritmo necesita aprender qué acciones pueden maximizar la recompensa y cuáles deben evitarse.
Para entender cómo toma decisiones el agente, es importante entender qué es una Q-Table. Una tabla Q es una matriz, que correlaciona el estado del agente con las posibles acciones que el sistema puede adoptar.
Los valores en la tabla son la probabilidad de éxito de la acción, en función de las recompensas que obtuvo durante la capacitación.
El deep q learning aumenta la potencialidad de Q-learning, actualizando continuamente la Q -Tabla basada en la predicción de estados futuros. Los valores Q se actualizan de acuerdo con la ecuación de Bellman:
A nivel general, el algoritmo funciona de la siguiente manera:
- El juego comienza y el valor Q se inicializa aleatoriamente.
- El sistema obtiene el estado actual s .
- Basado en s, ejecuta una acción al azar o en función de su red neuronal. Durante la primera fase de la capacitación, el sistema a menudo elige acciones aleatorias para maximizar la exploración . Más adelante, el sistema se basa cada vez más en su red neuronal.
- Cuando la IA elige y realiza la acción, el sistema recoge la recompensa . Ahora obtiene el nuevo estado ’ y actualiza su valor Q con la ecuación de Bellman como se mencionó anteriormente. Además, para cada movimiento almacena el estado original, la acción, el estado alcanzado después de esa acción, la recompensa obtenida y si el juego terminó o no. Estos datos se muestrean más tarde para entrenar la red neuronal. Esta operación se llama Memoria de reproducción .
- Estas dos últimas operaciones se repiten hasta que se cumple una determinada condición.
Estado
Un estado es la representación de una situación en la que el agente se encuentra . El estado representa la entrada de la red neuronal de la IA.
En nuestro caso, el estado es una matriz que contiene 11 variables booleanas.
Tiene en cuenta que, si:
– hay peligro inmediato en la proximidad de la serpiente (derecha, izquierda y recta).
– la serpiente se mueve hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha.
– la comida está arriba, abajo, a la izquierda o a la derecha.
Pérdida
La red neuronal profunda optimiza la respuesta (acción) a una entrada (estado) específica que intenta maximizar la recompensa.
El valor para expresar qué tan buena es la predicción se llama pérdida. El trabajo de una red neuronal es minimizar la pérdida, reduciendo así la diferencia entre el objetivo real y el previsto. En nuestro caso, la pérdida se expresa como:
Recompensa
Como se dijo, la IA intenta maximizar la recompensa. La única recompensa otorgada al sistema es cuando come el objetivo de alimentos (+10).
Si la serpiente golpea una pared o se golpea a sí misma, la recompensa es negativa (-10). Además, se podría dar una recompensa positiva por cada paso que tome la serpiente sin morir.
En ese caso, el riesgo es que prefiera correr en círculo, ya que obtiene recompensas positivas por cada paso, en lugar de buscar la comida.
Deep Neural Network
El cerebro de la inteligencia artificial utiliza deep learning. Consta de 3 capas ocultas de 120 neuronas y tres capas de abandono para optimizar la generalización y reducir el sobreajuste. La tasa de aprendizaje no es fija, comienza en 0.0005 y disminuye a 0.000005.
Las diferentes arquitecturas y los diferentes parámetros de hiper contribuyen a una convergencia más rápida a una óptima, así como a las puntuaciones más altas posibles.
La red recibe como entrada el estado y devuelve como salida tres valores relacionados con las tres acciones: mover a la izquierda, muévete a la derecha, mueve en línea recta. La última capa usa la función Softmax para generar probabilidades.
Resultados finales
Al final de la implementación, la IA obtiene un promedio de 40 puntos en un tablero de juego de 20×20 (Cada fruta se come un punto). El récord es de 83 puntos.
Para visualizar el proceso de aprendizaje y cuán efectivo es el enfoque del Aprendizaje de refuerzo profundo, trazo las puntuaciones a lo largo de los partidos.
Como podemos ver en el gráfico a continuación, durante los primeros 50 juegos la puntuación de AI es pobre, menos de 10 puntos en promedio.
De hecho, en esta fase, el sistema a menudo realiza acciones aleatorias para explorar el tablero y almacenar en su memoria muchos estados, acciones y recompensas diferentes.
Durante los últimos 50 juegos, el sistema ya no realiza acciones aleatorias, sino que solo elige qué hacer en función de su red neuronal.
En solo 150 juegos, menos de 5 minutos, el sistema pasó de 0 puntos y no hay ninguna pista. ¡En las reglas a 45 puntos y una estrategia sólida!
Conclusión
Este ejemplo muestra cómo un agente simple puede aprender el mecanismo de un proceso, en este caso el juego Snake, en pocos minutos y con pocos. líneas de código.
Recomiendo encarecidamente sumergirse en el código y tratar de mejorar el resultado.
Se podría obtener una actualización interesante pasando capturas de pantalla del juego actual para cada iteración. En ese caso, el estado puede ser la información RGB para cada píxel.
El modelo deep q learning se puede reemplazar con un algoritmo de doble deep q learning, para una convergencia más precisa.
No dude en dejar un mensaje para cualquier pregunta o sugerencia, estaré más que feliz de responder 🙂
¡Diviértete y sigue siendo increíble!