Aprendizaje de refuerzo simple con Tensorflow Parte 0: Q-Learning con tablas y redes neuronales

Aprenderemos cómo resolver el entorno OpenAI FrozenLake. Nuestra versión es un poco menos fotorrealista.

Para este tutorial en mi serie Reinforcement Learning, vamos a explorar una familia de algoritmos RL llamados algoritmos Q-Learning. Estos son un poco diferentes a los algoritmos basados ​​en políticas que se analizarán en los siguientes tutoriales (Partes 1 a 3). En lugar de comenzar con una red neuronal profunda compleja y difícil de manejar, comenzaremos implementando una versión simple de tabla de búsqueda del algoritmo, y luego mostraremos cómo implementar un equivalente de red neuronal usando Tensorflow. Dado que volvemos a lo básico, puede ser mejor pensar en esto como la Parte 0 de la serie. Con suerte, dará una intuición de lo que realmente está sucediendo en Q-Learning que luego podremos construir en el futuro cuando finalmente combinemos el enfoque de gradiente de políticas y los enfoques de Q-learning para crear agentes RL de última generación (si usted es Si está más interesado en las redes de políticas, o si ya tiene una idea de Q-Learning, no dude en comenzar la serie de tutoriales aquí).

A diferencia de los métodos de gradiente de políticas, que intentan aprender funciones que asignan directamente una observación a una acción, Q-Learning intenta aprender el valor de estar en un estado dado y tomar una acción específica allí. Si bien ambos enfoques finalmente nos permiten tomar acciones inteligentes dada una situación, los medios para llegar a esa acción difieren significativamente. Es posible que haya escuchado sobre DeepQ-Networks que puede jugar a Atari Games. Estas son realmente implementaciones más grandes y complejas del algoritmo Q-Learning que vamos a discutir aquí.

Enfoques tabulares para entornos tabulares

Las reglas del entorno FrozenLake.

Para este tutorial, intentaremos resolver el entorno FrozenLake desde el gimnasio OpenAI. Para aquellos que no están familiarizados, el gimnasio OpenAI ofrece una manera fácil para que las personas experimenten con sus agentes de aprendizaje en una variedad de juegos de juguetes provistos. El entorno FrozenLake consiste en una cuadrícula de bloques de 4x4, cada uno de los cuales es el bloque de inicio, el bloque de meta, un bloque congelado seguro o un hoyo peligroso. El objetivo es que un agente aprenda a navegar desde el principio hasta la meta sin moverse a un hoyo. En cualquier momento, el agente puede elegir moverse hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha. El problema es que hay un viento que ocasionalmente sopla al agente en un espacio que no eligió. Como tal, el rendimiento perfecto cada vez es imposible, pero aprender a evitar los agujeros y alcanzar la meta es aún factible. La recompensa en cada paso es 0, excepto para ingresar la meta, que proporciona una recompensa de 1. Por lo tanto, necesitaremos un algoritmo que aprenda las recompensas esperadas a largo plazo. Esto es exactamente lo que Q-Learning está diseñado para proporcionar.

En su implementación más simple, Q-Learning es una tabla de valores para cada estado (fila) y acción (columna) posible en el entorno. Dentro de cada celda de la tabla, aprendemos un valor de cuán bueno es tomar una acción dada dentro de un estado dado. En el caso del entorno FrozenLake, tenemos 16 estados posibles (uno para cada bloque) y 4 acciones posibles (las cuatro direcciones de movimiento), lo que nos da una tabla de valores Q de 16x4. Comenzamos inicializando la tabla para que sea uniforme (todos ceros) y luego, a medida que observamos las recompensas que obtenemos por diversas acciones, actualizamos la tabla en consecuencia.

Actualizamos nuestra tabla Q usando algo llamado la ecuación de Bellman, que establece que la recompensa esperada a largo plazo para una acción dada es igual a la recompensa inmediata de la acción actual combinada con la recompensa esperada de la mejor acción futura tomada en El siguiente estado. ¡De esta forma, reutilizamos nuestra propia tabla Q cuando calculamos cómo actualizar nuestra tabla para acciones futuras! En forma de ecuación, la regla se ve así:

Eq 1. Q (s, a) = r + γ (max (Q (s ’, a’))

Esto dice que el valor Q para un estado (s) dado y una acción (a) debe representar la recompensa actual (r) más la recompensa futura máxima descontada (γ) esperada de acuerdo con nuestra propia tabla para el siguiente estado (s) terminaríamos en. La variable de descuento nos permite decidir la importancia de las posibles recompensas futuras en comparación con la recompensa actual. Al actualizar de esta manera, la tabla comienza lentamente a obtener medidas precisas de la recompensa futura esperada para una acción dada en un estado dado. A continuación se muestra un tutorial de Python del algoritmo Q-Table implementado en el entorno FrozenLake:

(Gracias a Praneet D por encontrar los hiperparámetros óptimos para este enfoque)

Q-Learning con redes neuronales

Ahora, puede estar pensando: las tablas son geniales, pero en realidad no se escalan, ¿verdad? Si bien es fácil tener una tabla de 16x4 para un mundo de cuadrícula simple, la cantidad de estados posibles en cualquier juego moderno o entorno del mundo real es casi infinitamente mayor. Para los problemas más interesantes, las tablas simplemente no funcionan. En cambio, necesitamos alguna forma de tomar una descripción de nuestro estado y producir valores Q para acciones sin una tabla: ahí es donde entran las redes neuronales. Al actuar como un aproximador de funciones, podemos tomar cualquier número de estados posibles que puedan ser representado como un vector y aprender a mapearlos con valores Q.

En el caso del ejemplo FrozenLake, usaremos una red de una capa que toma el estado codificado en un vector de un solo calor (1x16) y produce un vector de 4 valores Q, uno para cada acción. Una red tan simple actúa como una mesa glorificada, con los pesos de la red sirviendo como las celdas antiguas. La diferencia clave es que podemos expandir fácilmente la red de Tensorflow con capas adicionales, funciones de activación y diferentes tipos de entrada, mientras que todo eso es imposible con una tabla normal. El método de actualización también es un poco diferente. En lugar de actualizar directamente nuestra tabla, con una red usaremos la función de retropropagación y pérdida. Nuestra función de pérdida será la pérdida de suma de cuadrados, donde se calcula la diferencia entre los valores Q predichos actuales y el valor "objetivo" y los gradientes pasan a través de la red. En este caso, nuestro objetivo Q para la acción elegida es el equivalente al valor Q calculado en la ecuación 1 anterior.

Eq2. Pérdida = ∑ (Q-objetivo - Q) ²

A continuación se muestra el tutorial de Tensorflow para implementar nuestra Q-Network simple:

Si bien la red aprende a resolver el problema de FrozenLake, resulta que no lo hace de manera tan eficiente como la Q-Table. Si bien las redes neuronales permiten una mayor flexibilidad, lo hacen a costa de la estabilidad cuando se trata de Q-Learning. Hay una serie de posibles extensiones de nuestra simple Q-Network que permiten un mayor rendimiento y un aprendizaje más sólido. Dos trucos en particular se conocen como Experience Replay y Freezing Target Networks. Esas mejoras y otros ajustes fueron la clave para que Atari jugara Deep Q-Networks, y exploraremos esas adiciones en el futuro. Para obtener más información sobre la teoría detrás de Q-Learning, vea esta gran publicación de Tambet Matiisen. ¡Espero que este tutorial haya sido útil para aquellos curiosos sobre cómo implementar algoritmos simples de Q-Learning!

Si esta publicación ha sido valiosa para usted, considere donar para ayudar a apoyar futuros tutoriales, artículos e implementaciones. ¡Cualquier contribución es muy apreciada!

Si desea seguir mi trabajo sobre Aprendizaje profundo, IA y Ciencias cognitivas, sígame en Medium @ Arthur Orti o en Twitter @ awjliani.

Más de mi serie Simple Reinforcement Learning with Tensorflow:

  1. Parte 0 - Agentes de Q-Learning
  2. Parte 1 - Bandido de dos brazos
  3. Parte 1.5 - Bandidos contextuales
  4. Parte 2 - Agentes basados ​​en políticas
  5. Parte 3 - RL basado en modelos
  6. Parte 4 - Redes Q profundas y más allá
  7. Parte 5: visualizar los pensamientos y las acciones de un agente
  8. Parte 6 - Observabilidad parcial y redes Q profundas recurrentes
  9. Parte 7 - Estrategias de selección de acciones para la exploración
  10. Parte 8 - Agentes críticos de actores asincrónicos (A3C)