Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Introducción al aprendizaje de refuerzo con Python

Introducción

El aprendizaje por refuerzo es definitivamente una de las áreas más activas y estimulantes de investigación en IA.
El interés en este campo creció exponencialmente en los últimos años, luego de grandes avances (y muy publicitados), como el AlphaGo de DeepMind que supera a la palabra campeón de GO y los modelos OpenAI AI que superan a los jugadores profesionales de DOTA .
Gracias a todos estos avances, el aprendizaje por refuerzo ahora se está aplicando en una variedad de campos diferentes, desde la atención médica hasta la financiación, desde la química hasta la gestión de recursos.
En este artículo, presentaremos los conceptos fundamentales y la terminología del aprendizaje por refuerzo, y los aplicaremos en un ejemplo práctico.

¿Qué es el aprendizaje por refuerzo?

El aprendizaje de refuerzo (RL) es una rama del aprendizaje automático que se ocupa de los actores o agentes . Tomar acciones es un tipo de entorno para maximizar algún tipo de recompensa que recauda en el camino.
Esta es deliberadamente una definición muy general, por lo que las técnicas de aprendizaje por refuerzo pueden aplicarse a una amplia gama de problemas del mundo real.
Imagina a alguien jugando un videojuego. El jugador es el agente, y el juego es el entorno. Las recompensas que obtiene el jugador (es decir, vencer a un enemigo, completar un nivel) o no obtener (es decir, entrar en una trampa, perder una pelea) le enseñarán cómo ser un mejor jugador.
Como probablemente habrá notado, el aprendizaje por refuerzo realmente no encaja en las categorías de aprendizaje supervisado / no supervisado / semi-supervisado.
En el aprendizaje supervisado, por ejemplo, cada decisión tomada por el modelo es independiente y no afecta lo que vemos en el futuro.
En el aprendizaje por refuerzo, en cambio, estamos interesados ​​en una estrategia a largo plazo para nuestro agente, que podría incluir decisiones subóptimas en pasos intermedios, y una compensación entre la exploración (de caminos desconocidos), y la explotación de lo que ya sabemos sobre el entorno.

Breve historia del aprendizaje por refuerzo

Durante varias décadas (¡desde la década de 1950!), El aprendizaje por refuerzo siguió dos hilos de investigación separados, uno centrado en los enfoques de prueba y error y otro basado en el control óptimo .
Los métodos de control óptimo tienen como objetivo diseñar un controlador para minimizar una medida del comportamiento de un sistema dinámico a lo largo del tiempo. Para lograr esto, utilizaron principalmente algoritmos de programación dinámica, que veremos son los fundamentos de las modernas técnicas de aprendizaje por refuerzo.
Los enfoques de prueba y error, en cambio, tienen raíces profundas en la psicología del aprendizaje animal y la neurociencia, y de ahí proviene el término refuerzo : las acciones seguidas (reforzadas) por resultados buenos o malos tienen la tendencia a ser reelegidos en consecuencia.
A partir del estudio interdisciplinario de estos dos campos surgió un campo denominado Aprendizaje de Diferencias Temporales (TD) .
Los enfoques modernos de aprendizaje automático de RL se basan principalmente en TD-Learning, que se ocupa de las señales de recompensa y una función de valor (veremos más detalladamente lo que son en los siguientes párrafos).

Terminología

Ahora veremos los conceptos principales y la terminología del aprendizaje por refuerzo.

Agente

Un sistema que está integrado en un entorno y realiza acciones para cambiar el estado del entorno. Los ejemplos incluyen robots móviles, agentes de software o controladores industriales.

Ambiente

El sistema externo que el agente puede "percibir" y actuar.
Los entornos en RL se definen como procesos de decisión de Markov (MDP). Un MDP es una tupla:
(S,UNA,PAG,R,γ)
dónde:
  • S es un conjunto finito de estados
  • A es un conjunto finito de acciones.
  • P es una matriz de probabilidad de transición de estado
PAGssuna=PAGElSt+1=s|St=s,UNAt=una]
  • R es una función de recompensa
Rsuna=miElRt+1|St=s,UNAt=una]
  • γ es un factor de descuento, γ ∈ [0,1]
Proceso de decisión de markov
Muchos escenarios del mundo real se pueden representar como procesos de decisión de Markov , desde un simple tablero de ajedrez hasta un videojuego mucho más complejo.
En un entorno de ajedrez, los estados son todas las configuraciones posibles del tablero (hay muchas). Las acciones se refieren a mover las piezas, rendirse, etc.
Las recompensas se basan en si ganamos o perdemos el juego, por lo que las acciones ganadoras tienen mayor rendimiento que las perdidas.
Las probabilidades de transición del estado hacen cumplir las reglas del juego. Por ejemplo, una acción ilegal (mover una torre en diagonal) tendrá una probabilidad cero.

Función de recompensa

La función de recompensa asigna estados a sus recompensas. Esta es la información que los agentes utilizan para aprender cómo navegar por el entorno.
Una gran cantidad de investigación se dedica a diseñar una buena función de recompensa y superar el problema de las recompensas escasas , cuando la naturaleza a menudo escasa de las recompensas en el medio ambiente no permite que el agente aprenda adecuadamente de ella.
El retorno t se define como la suma descontada de recompensas del paso de tiempo t .
solt=k=0γkRt+k+1
γ se denomina factor de descuento y funciona al reducir la cantidad de recompensas a medida que avanzamos hacia el futuro.
El descuento de recompensas nos permite representar la incertidumbre sobre el futuro, pero también nos ayuda a modelar mejor el comportamiento humano, ya que se ha demostrado que los humanos / animales tienen una preferencia por las recompensas inmediatas.

Función de valor

La función de valor es probablemente la pieza de información más importante que podemos tener sobre un problema de RL.
Formalmente, la función de valor es el retorno esperado a partir del estado s . En la práctica, la función de valor nos dice qué tan bueno es para el agente estar en un estado determinado. Cuanto mayor sea el valor de un estado, mayor será la cantidad de recompensa que podemos esperar:
vπ(s)=miπElsolt|St=s]
El nombre real para esta función es la función de valor de estado , para distinguirla de otro elemento importante en RL: la función de valor de acción .
La función acción-valor nos da el valor, es decir, el rendimiento esperado, para usar la acción a en un estado determinado s :
qπ(s,una)=miπElsolt|St=s,UNAt=una]

Política

La política define el comportamiento de nuestro agente en el MDP.
Formalmente, las políticas son distribuciones sobre acciones dadas estados . Una política asigna estados a la probabilidad de tomar cada acción de ese estado:
π(una|s)=PAGElUNAt=una|St=s]
El objetivo final de RL es encontrar una política óptima (o lo suficientemente buena) para nuestro agente. En el ejemplo de videojuego, puede pensar en la política como la estrategia que sigue el jugador, es decir, las acciones que realiza el jugador cuando se le presentan ciertos escenarios.

Principales enfoques

Se están aplicando muchos modelos y algoritmos diferentes a problemas de RL.
Realmente mucho .
Sin embargo, todos ellos más o menos caen en las mismas dos categorías: basadas en la política , y basada en el valor .

Enfoque basado en políticas

En los enfoques basados ​​en políticas para RL, nuestro objetivo es aprender la mejor política posible. Los modelos de políticas emitirán directamente el mejor movimiento posible desde el estado actual, o una distribución sobre las posibles acciones.

Enfoque basado en el valor

En los enfoques basados ​​en el valor, queremos encontrar la función de valor óptimo, que es la función de valor máximo en todas las políticas.
Luego podemos elegir qué acciones tomar (es decir, qué política usar) en función de los valores que obtengamos del modelo.

Exploración vs Explotación

La compensación entre exploración y explotación ha sido ampliamente estudiada en la literatura de RL.
La exploración se refiere al acto de visitar y recopilar información sobre estados del medio ambiente que aún no hemos visitado o sobre los cuales todavía no tenemos mucha información. La idea es que explorar nuestro MDP podría llevarnos a tomar mejores decisiones en el futuro.
Por otro lado, la explotación consiste en tomar la mejor decisión dado el conocimiento actual, cómodo en la burbuja de lo ya conocido.
Veremos en el siguiente ejemplo cómo estos conceptos se aplican a un problema real.

Un bandido multi-armado

Ahora veremos un ejemplo práctico de un problema de Aprendizaje de Refuerzos: el problema de los bandidos con múltiples brazos .
El bandido multi-armado es uno de los problemas más populares en RL:
Te enfrentas repetidamente con una elección entre k diferentes opciones o acciones. Después de cada elección, recibe una recompensa numérica de una distribución de probabilidad estacionaria que depende de la acción que seleccionó. Su objetivo es maximizar la recompensa total esperada durante un período de tiempo, por ejemplo, más de 1000 selecciones de acción o pasos de tiempo.
Puedes pensar en una analogía con una máquina tragamonedas (un bandido de un solo brazo). Cada selección de acción es como una jugada de una de las palancas de la máquina tragamonedas, y las recompensas son las recompensas por ganar el premio mayor.
Maquina de bandidos
Resolver este problema significa que podemos llegar a una política óptima : una estrategia que nos permita seleccionar la mejor acción posible (la que tiene el mayor rendimiento esperado) en cada paso de tiempo.

Métodos de acción-valor

Una solución muy simple se basa en la función de valor de acción. Recuerde que un valor de acción es la recompensa media cuando se selecciona esa acción:
q(una)=miElRtUNA=una]
Podemos estimar fácilmente q usando el promedio de la muestra :
Qt(una)=suma de recompensas cuando "a" se toma antes de "t"número de veces que "a" se tomó antes de "t"
Si recopilamos suficientes observaciones, nuestra estimación se acerca lo suficiente a la función real. Entonces podemos actuar con avidez en cada paso del tiempo, es decir, seleccionar la acción con el valor más alto, para obtener las recompensas más altas posibles.

No seas demasiado codicioso

¿Recuerdas cuando hablamos de la compensación entre exploración y explotación? Este es un ejemplo de por qué deberíamos preocuparnos por ello.
De hecho, si siempre actuamos con avidez como se propone en el párrafo anterior, nunca probamos acciones que no sean óptimas, lo que en última instancia podría llevar a mejores resultados.
Para introducir cierto grado de exploración en nuestra solución, podemos usar una estrategia ε-codiciosa : seleccionamos acciones con avidez la mayor parte del tiempo, pero de vez en cuando, con probabilidad ε , seleccionamos una acción aleatoria, independientemente de los valores de acción .
Resulta que este simple método de exploración funciona muy bien y puede aumentar significativamente las recompensas que obtenemos.
Una advertencia final: para evitar que nuestra solución sea demasiado costosa computacionalmente, calculamos el promedio de manera incremental según esta fórmula:
Qnorte+1=Qnorte+1norteElRnorte-Qnorte]

Tutorial de soluciones Python

import numpy as np

# Number of bandits
k = 3

# Our action values
Q = [0 for _ in range(k)]

# This is to keep track of the number of times we take each action
N = [0 for _ in range(k)]

# Epsilon value for exploration
eps = 0.1

# True probability of winning for each bandit
p_bandits = [0.45, 0.40, 0.80]

def pull(a):  
    """Pull arm of bandit with index `i` and return 1 if win, 
    else return 0."""
    if np.random.rand() < p_bandits[a]:
        return 1
    else:
        return 0

while True:  
    if np.random.rand() > eps:
        # Take greedy action most of the time
        a = np.argmax(Q)
    else:
        # Take random action with probability eps
        a = np.random.randint(0, k)

    # Collect reward
    reward = pull(a)

    # Incremental average
    N[a] += 1
    Q[a] += 1/N[a] * (reward - Q[a])
Et voilà! Si ejecutamos este script durante un par de segundos, ya vemos que nuestros valores de acción son proporcionales a la probabilidad de alcanzar los premios mayores para nuestros bandidos:
0.4406301434281669,  
0.39131455399060977,  
0.8008844354479673  
Esto significa que nuestra política codiciosa favorecerá correctamente las acciones de las que podemos esperar mayores recompensas.

Conclusión

El aprendizaje por refuerzo es un campo en crecimiento y hay mucho más que cubrir. De hecho, todavía no hemos analizado los algoritmos y modelos de propósito general (por ejemplo, programación dinámica, Monte Carlo, Diferencia temporal).
Lo más importante en este momento es familiarizarse con conceptos como funciones de valor, políticas y MDP. En la sección de Recursos de este artículo, encontrará algunos recursos asombrosos para obtener una comprensión más profunda de este tipo de material.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas