Archivo de la etiqueta: Aprendizaje computacional

Notas sobre aprendizaje por refuerzo

El objetivo de este post es servir de introducción a una de las ramas del machine learning o, en español,  aprendizaje computacional como son los modelos de aprendizaje por refuerzo. Los sistemas de aprendizaje computacional se pueden modelar como una función que dependiendo del valor de unas entradas se obtiene una salida que permite predecir o clasificar.

# Modelización de un sistema de aprendizaje computacional como una función 

Entrada_1  -->  ,-------.
Entrada_2  -->  | Modelo| --> Predicción o clasificación (Salida)
 ...       -->  `-------'  
Entrada_n  

----
predicción = modelo( entrada_1, entrada_2, ..., entrada_n )

Aprendizaje por RefuerzoSi nos atenemos al conocimiento a priori de cuan buena puede ser la predicción, podemos clasificar los sistemas en tres grupos:

En los sistemas supervisados se tiene un conocimiento completo. Un ejemplo puede ser un clasificador que es capaz de distinguir entre un muffin o un chiguagua, ya que se puede saber (o puede que no sea tan sencillo 😀 ) si el clasificador lo ha hecho bien o se ha equivocado. Por el contrario, los sistemas no supervisados, no existe ese conocimiento previo y sirven para descubrir patrones y agrupaciones desconocidos dentro de un conjunto de datos.

El el punto medio están los sistemas de aprendizaje por refuerzo, donde sólo podemos saber si el sistema esta respondiendo mejor o peor con respecto a una entrada. Esto se materializa obteniendo una recompensa o una penalización del resultado de la salida, y así,  «saber» si la solución  plateada actual, va por el buen camino.

Un ejemplo en la vida real es un cachorro al que le estamos enseñando a sentarse, si lo hace bien, recibe su recompensa y si no, no recibe nada. Sin entender al principio lo que pasa, al cabo de unas cuantas veces pensará «Si en esta situación, me comporto de esta manera, recibiré una recompensa porque en el pasado ya me ha ocurrido».

Dentro sistemas de aprendizaje por refuerzo están los algoritmos genéticos utilizados en sistemas difusos. Cuando se habla de un sistema difuso se está hablando de un sistema del que no se tiene «incertidumbre» en la percepción del entorno. Hay que tener en cuenta que este tipo de conocimiento incompleto es muy común en el mundo real («velocidad en torno los 100 km/h», «temperatura mayor de 25ª»)  y nosotros los humanos somos muy capaces de tomar decisiones a partir de esta información imprecisa.

Con respecto a los algoritmos genéticos son aquellos que se van variando sus parámetros de modelo de una manera parecida a como funciona en la naturaleza. En esta,  aquellas familias de genes que mejor se adaptan al entorno son las que prevalecen y siguen evolucionado y en los algoritmos genéticos son las familias de parámetros que más se acercan a la solución óptima son los que prevalecen y a partir de los más exitosos  se sigue evolucionando.

Los agentes reactivos también pueden encajar dentro de los sistemas basados en aprendizaje por refuerzo. Un agente tiene un sistema autónomo que está puede obtener información y comunicarse con el mundo real

Reactivo significa que el agente no tiene una idea clara, ni una representación simbólica de entorno con el que se comunica. Es un  sistema sencillo que simplemente se relaciona y reacciona con su entorno. La inteligencia emerge de las iteraciones de varios de estos agentes.

Una hormiga se limita a reaccionar a su entorno comunicándose con otras a través del olor( feromonas),  físicamente o mediante sonido o vibraciones. La suma de estas interacciones hacen que el hormiguero sea un sistema altamente adaptativo e inteligente sin un sistema de control centralizado, con organizaciones complejas como la separación de tareas dentro de los individuos.

En próximas entradas quiero centrarme en este tipo de sistemas multiagente, que es un agente y su relación con los modelos de aprendizaje por refuerzo.

M.E.