Hola.
Este post lo realizo porque para algunas personas de mi país el inglés es una barrera para aprender en internet. Esta publicación la hago para que las personas interesadas y que no saben inglés puedan aprender.
Voy a utilizar este blog como mis notas personales mientras estudio el curso de Reinforcement Learning dictado por la plataforma Udacity. Ya tomé las primeras dos lecciones y voy a compartir las ideas principales:
Existen tres temas en Machine Learning (Aprendizaje de máquina) 1) Supervised Learning (SL) (Aprendizaje Supervisado) 2) Unsupervised Learning (UL) (Aprendizaje Sin supervisar) and 3) Reinforcement Learning (Aprendizaje Reforzado) (RL). En SL se cuenta con un par <y, x> de observaciones donde "y" es la variable de interés y "x" son los predictivos o características que tienen una relación con "x" de la forma y = f(x). La tarea de SL es encontrar la función que me replique "y" conociendo sólo las variables "x"
En UL no se tiene la variable de interés "y", sólo se tienen las características "x" y la idea es encontrar patrones y relaciones en estas variables.
RL se trata de aprender mediante la interacción con el ambiente. La forma de interactuar con el ambiente es a través de acciones. Al efectuar una acciones recibimos una recompensa, Accion -> Premio -> Accion -> Premio... Las acciones y el ambiente determinan nuestra recompensa, el ambiente puede cambiar (y con esto el premio) de una manera probabilista.
El objetivo de RL es encontrar una función que su resultado sea una acción, dependiendo de los posibles estados en que se encuentre el ambiente. Esta función se llama Política y matemáticamente se define como:
π* = arg max a E{U(s1, s2,...)|π}
La Política devuelve la acción que maximiza la utilidad esperada, dado que seguimos una política. En la ecuación anterior introdujimos el concepto de utilidad U(s1, s2,...). La utilidad es la suma de los premios que acumulamos durante nuestra interacción con el ambiente. Esta suma puede estar descontada por un factor, ya que no es lo mismo recibir un premio hoy a uno en 100 años!
La utilidad es la suma de los premios descontados en un horizonte infinito:
U(s1, s2,...) = Σt=0 γtR(st)
donde 0 <= γ <1 es el factor de descuento.
La política en términos de nuestra definición de utilidad quedaría así:
π* = arg max a E{Σt=0 γtR(st)|π}
Ahora vamos a definir el valor de un estado V(s). El "valor" de un estado esta relacionado con la política optima. Es el valor esperado de nuestras recompensas futuras, si seguimos la política optima y partimos del estado "s".
V(s) = E{ Σt=0 γtR(st)|π* s0 = s}
Si conocemos V(s) para todos los estados de la naturaleza (ambiente) entonces la mejor política es efectuar la acción que arroje el mayor valor de V(s). El problema es que V(s) no lo conocemos, de hecho V(s) esta definida en términos de la política optima (que es lo que queremos encontrar). Sin embargo esta definición de "valor" de un estado nos deja definir π* de la siguiente manera:
π* = arg maxa Σ s' Γ (s, a, s') V(s')
Donde s' son los posibles estados que puede resultar el ambiente en el periodo st+1 y Γ (s, a, s') es la probabilidad de transición al estado s' dado que estamos en "s" y efectuamos la acción "a": Pr{s' | s, a}.
##Ecuación de Bellman
Finalmente podemos derivar la ecuación mas importante de estas dos lecciones, la ecuación de Bellman:
V(s) = R(s) + arg max a γΣ s' Γ (s, a, s') V(s')
Esta ecuación indica que el valor de un estado sera igual a la suma de dos términos. El primer termino es el premio que recibimos inmediatamente por estar en el estado "s" R(s).
El segundo termino puede verse como el valor esperado descontado por γ del siguiente periodo, este segundo termino es una funcion de V(s'). Obviamente:
V(s') = R(s') + arg max a γΣ s' Γ (s', a, s'') V(s'')
Por lo que al introducir este termino en V(s), se puede ver como el valor de un estado esta contemplando el premio que recibimos inmediatamente R(s) y el valor esperado de todos los premios subsecuentes descontados por γ
Siguiente Post
En el siguiente post vamos a mostrar como encontrar V(s), que se hace mediante un algoritmo iterativo. También vamos a hacer un ejemplo donde mostremos como se verian las ecuaciones en el codigo de programación.
Cualquier comentario corrección es bienvenida.
Gracias por leer!