Introducci贸n al aprendizaje por refuerzo con Python

    Introducci贸n

    El aprendizaje por refuerzo es definitivamente una de las 谩reas de investigaci贸n m谩s activas y estimulantes en IA.

    El inter茅s en este campo creci贸 exponencialmente en los 煤ltimos a帽os, luego de grandes (y muy publicitados) avances, como AlphaGo de DeepMind superando la palabra campe贸n de los modelos GO y OpenAI AI vencer a los jugadores profesionales de DOTA.

    Gracias a todos estos avances, el aprendizaje por refuerzo se est谩 aplicando ahora en una variedad de campos diferentes, desde la atenci贸n m茅dica hasta las finanzas, 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?

    Aprendizaje reforzado (RL) es una rama del Machine Learning que se ocupa de los actores, o agentes, tomar acciones es una especie de ambiente para maximizar alg煤n tipo de recompensa que recogen en el camino.

    Esta es deliberadamente una definici贸n muy vaga, por lo que las t茅cnicas de aprendizaje por refuerzo se pueden aplicar a una amplia gama de problemas del mundo real.

    Imagina a alguien jugando a un videojuego. El jugador es el agente y el juego es el medio ambiente. Las recompensas que el jugador obtiene (es decir, vencer a un enemigo, completar un nivel) o que no obtiene (es decir, meterse en una trampa, perder una pelea) le ense帽ar谩n c贸mo ser un mejor jugador.

    Como probablemente haya notado, el aprendizaje por refuerzo no encaja realmente en las categor铆as de aprendizaje supervisado / no supervisado / semi-supervisado.

    En el aprendizaje supervisado, por ejemplo, cada decisi贸n que toma el modelo es independiente y no afecta lo que vemos en el futuro.

    En el aprendizaje por refuerzo, en cambio, estamos interesados 鈥嬧媏n 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 enfoques de prueba y error y otro basado en el control 贸ptimo.

    Los m茅todos de control 贸ptimos 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 cimientos de las t茅cnicas modernas 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 aqu铆 proviene el t茅rmino refuerzo: las acciones seguidas (reforzadas) por resultados buenos o malos tienen la tendencia a volver a seleccionarse en consecuencia.

    A partir del estudio interdisciplinario de estos dos campos surgi贸 un campo llamado Aprendizaje de diferencia temporal (TD).

    Los enfoques modernos de Machine Learning para RL se basan principalmente en TD-Learning, que se ocupa de las se帽ales de recompensa y una funci贸n de valor (veremos con m谩s detalle cu谩les son en los siguientes p谩rrafos).

    Terminolog铆a

    Ahora echaremos un vistazo a los principales conceptos y terminolog铆a del aprendizaje por refuerzo.

    Agente

    Un sistema que est谩 integrado en un entorno y toma 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, A, P, R, gamma)
    $$

    d贸nde:

    • S es un conjunto finito de estados
    • UN es un conjunto finito de acciones
    • PAGS es una matriz de probabilidad de transici贸n de estado

    $$ P_ {ss ‘} ^ {a} = mathbb {P}[S_{t+1} = s’| S_t = s, A_t = a] $$

    • R es una funci贸n de recompensa

    $$ R_s ^ a = mathbb {E}[R_{t+1}|S_t=s, A_t = a] $$

    • es un factor de descuento, 纬 鈭 [0,1]

    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 un mayor rendimiento que las perdedoras.

    Las probabilidades de transici贸n de estado hacen cumplir las reglas del juego. Por ejemplo, una acci贸n ilegal (mover una torre en diagonal) tendr谩 cero probabilidades.

    Funci贸n de recompensa

    La funci贸n de recompensa asigna estados a sus recompensas. Esta es la informaci贸n que utilizan los agentes para aprender a navegar por el entorno.

    Se realizan muchas investigaciones para 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 entorno no permite que el agente aprenda adecuadamente de ellas.

    Regreso Gt se define como la suma descontada de las recompensas del paso de tiempo t.

    $$ G_t = sum_ {k = 0} ^ { infty} gamma ^ k R_ {t + k + 1} $$

    se denomina factor de descuento y funciona reduciendo el monto de las 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 preferencia por las recompensas inmediatas.

    Funci贸n de valor

    La funci贸n de valor es probablemente la informaci贸n m谩s importante que podemos tener sobre un problema de RL.

    Formalmente, la funci贸n de valor es el rendimiento 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 determinado estado. Cuanto mayor sea el valor de un estado, mayor ser谩 la recompensa que podemos esperar:

    $$ v_ pi (s) = mathbb {E} _ pi [G_t|S_t = s] $$

    El nombre real de esta funci贸n es valor de estado funci贸n, para distinguirlo de otro elemento importante en RL: el valor de acci贸n funci贸n.

    La funci贸n de valor de acci贸n nos da el valor, es decir, el rendimiento esperado, para usar la acci贸n a en un cierto estado s:

    $$ q_ pi (s, a) = mathbb {E} _ pi [G_t|S_t = s, A_t = a] $$

    Pol铆tica

    La pol铆tica define el comportamiento de nuestro agente en el MDP.

    Formalmente, las pol铆ticas son distribuciones sobre acciones dadas a los estados. Una pol铆tica asigna estados a la probabilidad de tomar cada acci贸n desde ese estado:

    $$ pi (a | s) = mathbb {P}[A_t = a|S_t=s] $$

    El objetivo final de RL es encontrar una p贸liza 贸ptima (o suficientemente buena) para nuestro agente. En el ejemplo del 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.

    Enfoques principales

    Se est谩n aplicando muchos modelos y algoritmos diferentes a los problemas de RL.

    De Verdad, mucho.

    Sin embargo, todos ellos caen m谩s o menos en las mismas dos categor铆as: basados 鈥嬧媏n pol铆ticas y basados 鈥嬧媏n valores.

    Enfoque basado en pol铆ticas

    En los enfoques de RL basados 鈥嬧媏n pol铆ticas, nuestro objetivo es conocer la mejor pol铆tica posible. Los modelos de pol铆ticas generar谩n directamente el mejor movimiento posible desde el estado actual, o una distribuci贸n sobre las posibles acciones.

    Enfoque basado en valores

    En los enfoques basados 鈥嬧媏n 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 obtenemos del modelo.

    Exploraci贸n vs Explotaci贸n

    La compensaci贸n entre exploraci贸n y explotaci贸n se ha estudiado ampliamente 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 que a煤n 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 se aplican estos conceptos a un problema real.

    Un bandido de armas m煤ltiples

    Ahora veremos un ejemplo pr谩ctico de un problema de aprendizaje reforzado: el problema de los bandidos con m煤ltiples brazos.

    El bandido de m煤ltiples brazos es uno de los problemas m谩s populares en RL:

    En repetidas ocasiones se enfrenta a una elecci贸n entre k opciones o acciones diferentes. Despu茅s de cada elecci贸n, recibe una recompensa num茅rica elegida 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 acciones o pasos de tiempo.

    Puedes pensar en ello en analog铆a con una m谩quina tragamonedas (un bandido con 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.

    Resolver este problema significa que podemos llegar a una pol铆tica 贸ptima: una estrategia que nos permite seleccionar la mejor acci贸n posible (la que tiene el mayor retorno esperado) en cada paso de tiempo.

    M茅todos de valor de acci贸n

    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 (a) = E[R_t mid A=a] $$

    Podemos estimar f谩cilmente q usando el promedio de la muestra:

    $$ Q_t (a) = frac { text {suma de recompensas cuando “a” se toma antes de “t”}} { text {n煤mero de veces que “a” se toma 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 de tiempo, es decir, seleccionar la acci贸n con el valor m谩s alto, para recolectar las recompensas m谩s altas posibles.

    No seas demasiado codicioso

    驴ReString cuando hablamos de la compensaci贸n entre exploraci贸n y explotaci贸n? Este es un ejemplo de por qu茅 deber铆a importarnos.

    De hecho, si siempre actuamos con avidez como se propone en el p谩rrafo anterior, nunca probamos acciones sub贸ptimas que en realidad podr铆an conducir a mejores resultados.

    Para introducir alg煤n grado de exploraci贸n en nuestra soluci贸n, podemos utilizar un 蔚-codicioso estrategia: 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 la acci贸n.

    Resulta que este sencillo m茅todo de exploraci贸n funciona muy bien y puede aumentar significativamente las recompensas que obtenemos.

    Una 煤ltima advertencia: para evitar que nuestra soluci贸n sea demasiado costosa computacionalmente, calculamos el promedio de forma incremental de acuerdo con esta f贸rmula:

    $$ Q_ {n + 1} = Q_n + frac {1} {n}[R_n – Q_n] $$

    Tutorial de la soluci贸n 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 ganar premios para nuestros bandidos:

    0.4406301434281669, 
    0.39131455399060977, 
    0.8008844354479673
    

    Esto significa que nuestra pol铆tica codiciosa favorecer谩 correctamente acciones de las que podemos esperar mayores recompensas.

    Conclusi贸n

    El aprendizaje por refuerzo es un campo en crecimiento y hay mucho m谩s por cubrir. De hecho, todav铆a no hemos analizado 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 Recursos de este art铆culo, encontrar谩 algunos recursos incre铆bles para obtener una comprensi贸n m谩s profunda de este tipo de material.

    Recursos

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *