¿Has jugado Flappy Bird ? Sí, ese pequeño pedazo de mierda que te hizo querer tirar tu teléfono a una tubería de alcantarillado real.
Es un juego perfecto para automatizar usando el aprendizaje por refuerzo. A ver cómo.
- ¿Por qué los ingenieros de software franceses son tan buenos en las competiciones de IA?
- ¿Es cierto que no debemos tomar la inteligencia como evangelio?
- ¿Cómo podría comercializarse la IA?
- ¿Por qué Apple no está invirtiendo en aprendizaje automático? Han tardado en actualizar Siri. ¿Hay alguna razón estratégica para esta aparente falta de interés de Apple? o se están quedando atrás en esta área?
- ¿Qué aplicaciones se pueden construir con TensorFlow en el futuro?
En un alto nivel, el aprendizaje de refuerzo es aprender a analizar un estado actual y tomar una acción que maximice una recompensa futura , a través de la interacción continua . Pero espera, esa es también la definición de la vida. Entonces, supongo que tenemos que ir más profundo.
Primero definamos todas las palabras clave anteriores para Flappy Bird:
- Estado : Cualquier cuadro (como la imagen de arriba), que nos dice dónde está el pájaro y dónde están las tuberías, es un estado. Como necesitamos valores numéricos, solo debería hacer una matriz 2D de valores de píxeles del marco. No se preocupe, el modelo aprenderá a evitar situaciones en las que las cosas ‘amarillas’ entren en contacto con las cosas ‘verdes’ 🙂
- Acción : en cualquier momento dado, puede tocar la pantalla o no hacer nada. Llamémoslos TAP y NOT. Entonces, suponiendo que haya una brecha de 1 milisegundo entre acciones consecutivas, un juego completo se puede definir como una serie de acciones:
TAP – NOT – NOT – NOT – TAP – TAP – NOT – TAP – … y así sucesivamente. - Recompensa : Digamos que ganas el juego si escapas 10 tuberías. (Mi puntaje más alto fue solo 104 #humblebrag). Entonces, obtienes +1 puntos si ganas, -1 puntos si pierdes. Esa es la recompensa.
Ahora viene la parte más importante: decidir qué acción tomar, dado un estado actual . Si teníamos datos de entrenamiento, digamos, 1000 ‘estados’ y su correspondiente ‘acción más óptima’, ¡entonces hemos terminado! Podemos capacitar a cualquier modelo de aprendizaje supervisado para que nos diga qué hacer dado un estado. ¡Pero no tenemos esos datos! Ahí es donde entra en juego la parte de refuerzo. Inicialmente vamos a tomar decisiones arbitrarias y a medida que avanzamos, vamos a alentar o desalentar esas acciones pasadas basadas en la recompensa.
Digamos que tenemos una red neuronal que toma un estado (matriz 2D de valores de píxeles) como entrada y escupe TAP o NOT como salida. Inicializamos los pesos al azar. Entonces, tomará decisiones arbitrarias. Y jugamos 100 juegos usando esta estúpida red neuronal. Al final, tendremos 100 de estos:
TAP – NO – TAP – TAP = -1
TAP – NO – NO – TAP – NO – TAP -… .. = +1
NOT – TAP – NOT – TAP – TAP – NOT = -1
y así..
Ahora, suponiendo que haya alrededor de 20 acciones por juego, ahora tenemos 20 * 100 acciones. Digamos que ganamos 10 de esos 100 juegos. Entonces, tenemos 20 * 10 acciones ganadoras y 20 * 90 acciones perdedoras. Para cada uno de los movimientos perdedores, actualizamos los pesos (por backprop) para desalentar esas acciones para esos estados correspondientes, de modo que la red sea menos probable que produzca esa acción dado ese estado en futuros juegos. Y, por el contrario, alentamos las acciones ganadoras para que la red tenga más probabilidades de generar esa acción dado ese estado.
Pero espera, puedes decir que los primeros movimientos en un juego perdedor no son acciones perdedoras (¡porque sobrevivimos hasta la acción perdedora final!) Y las estamos desalentando erróneamente. ¡Tienes razón! Pero esto no importará en promedio, cuando el modelo juegue miles o millones de estos juegos y veremos más actualizaciones positivas que negativas para las acciones correctas.
¡Y eso es! Jugar 100 juegos – Actualizar pesos – Repetir. Eso es aprendizaje de refuerzo para ti. El tomador de decisiones (o más formalmente, la red de políticas) podría ser una red neuronal profunda, en cuyo caso la parte de aprendizaje es de Deep Learning.
Y aquí hay un video muy emotivo de una de estas implementaciones (Github: niklasfi / fceux-rlnes). ¡Verás que el pájaro apesta en los primeros juegos y mejora a medida que pasa el tiempo y termina anotando más de 700! El video dura 3 horas: p
tldr :
Aprendizaje profundo : use redes neuronales profundas.
Aprendizaje de refuerzo : intento, cometer errores, aprender, dominar.
Aprendizaje de refuerzo profundo : Intento, cometer errores, aprender usando redes neuronales profundas, maestro.