Blog para documentar el trabajo de programación realizado en la clase de Aprendizaje Automático del Tec de Monterrey, Campus Estado de México. Enero-Mayo 2010.

Showing posts with label 3-undefined. Show all posts
Showing posts with label 3-undefined. Show all posts

Friday, April 30, 2010

Actividad: Redes Neuronales

Descripción del medio ambiente

En una playa, están naciendo varias tortugas, y para sobrevivir, deben de llegar al mar lo más rápido posible, sin embargo, puede que haya depredadores cerca queriendo alimentarse de ellas, lo que las hace más vulnerables. Las tortugas nacen a cierta distancia del mar, además de nacer con cierta velocidad propia y cierta resistencia a los ataques de los depredadores.

Descripción de la actividad que aprenderá el agente

Dadas las características de cada tortuga (su distancia al mar, si hay o no depredador cerca, su velocidad y su resistencia), el agente debe de decidir si una tortuga se salva sin ayuda de nadie, si es necesaria la intervención humana para salvarla o si es imposible salvarla.

Descripción detallada de los patrones

Un patrón está formado de la siguiente manera:

{ Distancia, Depredador, Velocidad, Resistencia} ¿Se salva?

Donde:

Distancia mide si se encuentra entre 0-5 metros, 5-10 metros o más de 10 metros. Se eligió así para evitar que los patrones fueran continuos y se eligieron esos rangos porque creemos que son distancias que pueden hacer diferencia entre si la tortuga vive o no.

Depredador mide solamente si hay o no un depredador cerca de la tortuga, donde cerca se define dentro del área de sobrevivencia de la tortuga, que son de alrededor de 5 metros a la redonda. Nuevamente, creemos que este radio es el que puede hacer la diferencia entre si la tortuga sobrevive o no.

Velocidad, mide qué tan rápido se mueve la tortuga, y cae dentro de: Lento, Normal o Rápido.

Resistencia, mide que tanto la tortuga puede resistir a los ataques de los depredadores, y esta puede ser Alta, Media y Baja. Estos últimos dos atributos se discretizaron para poder trabajar con ellos y se escogieron ya que una tortuga rápida puede llegar al mar pese a estar lejos o viceversa, y ocurre similar con la resistencia.
Cada uno de los valores de entrada, están codificados en 0.1, 0.5 ó 0.9 según sea bajo, mediano o alto.

¿Se salva? Es un valor ternario (también entre 0.1,0.5 o 0.9) que identifica si la tortuga se salva sola, si hay que salvarla o si no hay forma alguna de salvarla.

Red Neuronal

Para poder lograr que la red aprendiese cuando y cuando no salvar a la tortuga, programamos una red neuronal estocástica con valores decimales entre 0 y 1.

Existen cinco valores de entrada, la primera corresponde al valor 1.0 (para pasar el threshold) y las siguientes cuatro corresponden a los cuatro valores de entrada de la red, organizados, como ya se explicó entre 0.1, 0.5 y 0.9.

Se cuenta con una capa oculta de tres neuronas ya que es el valor que se recomienda para redes pequeñas.

De salida sólo se tiene una neurona, que identifica de igual forma 0.1, 0.5 o 0.9 según sea la salida. No fue necesario poner tres neuronas cada una para identificar un tipo de clase ya que sí logró clasificar los ejemplos con una sola neurona.

Para entrenar la red, se utilizó una tasa de aprendizaje de 0.35, ya que un valor más alto causaba que los ejemplos de validación se alejaran más del resultado, lo cual atribuimos al overfitting, y un valor más pequeño hacía demasiado tardada el aprendizaje.

No se utilizó ningún momento porque no fue necesario implementarse para lograr que la red clasificara correctamente los ejemplos de salida.Se utilizaron 15 ejemplos de entrenamiento y cinco ejemplos de validación, aunque para terminar el programa, se decidió que cuando el error en los ejemplos de entrenamiento fuera menor a 0.1, este se detuviera.

Los resultados con los ejemplos de validación son los siguientes:

Antes del entrenamiento

0.9 0.1 0.1 0.9 à Salida esperada: 0.1 à Salida del programa: 0.4973

0.1 0.1 0.9 0.5 à Salida esperada: 0.1 à Salida del programa: 0.4933

0.5 0.5 0.9 0.9 àSalida esperada: 0.5 à Salida del programa: 0.4976

0.9 0.5 0.1 0.1 à Salida esperada: 0.9 à Salida del programa: 0.4838

0.5 0.5 0.5 0.1 à Salida esperada: 0.5 à Salida del programa: 0.4943

Después del entrenamiento

0.9 0.1 0.1 0.9 à Salida esperada: 0.1 à Salida del programa: 0.1932

0.1 0.1 0.9 0.5 à Salida esperada: 0.1 à Salida del programa: 0.0587

0.5 0.5 0.9 0.9 àSalida esperada: 0.5 à Salida del programa: 0.3205

0.9 0.5 0.1 0.1 à Salida esperada: 0.9 à Salida del programa: 0.6738

0.5 0.5 0.5 0.1 à Salida esperada: 0.5 à Salida del programa: 0.5100

Tomando en cuenta que un valor pertenece a la clase siempre que el valor este entre 0.15 arriba o abajo del valor esperado, este clasifica correctamente, todos los patrones fueron clasificados.



Conclusiones

En conclusión, creemos que las redes neuronales son bastante difíciles de implementar, debido a que hay que estar probando con diferentes valores de capas intermedias, además de poner el número de neuronas correctas en cada capa, para lo cual, la única forma de saberlo es probarlo sobre la propia red. También hay que tener cuidado con la codificación de los datos de entrada y de los datos de salida, porque es posible que no llegue a generalizar si los valores de salida son muy cercanos.

Fuera de eso, fue muy entretenido generar la red e implementarla, aunque llegó a ser complejo por toda la cantidad de datos e información que hay que tomar en cuenta para lograr una correcta generalización.

Preferimos desarrollar una red neuronal a un algoritmo como ID3 ya que en ocasiones ID3 puede no tener un ejemplo para cierto patrón, en cambio una red tratará de dar el que más se acerque de acuerdo a los ejemplos de entrenamiento.

Thursday, April 8, 2010

Actividad ID3

Descripción del medio ambiente

En una playa, están naciendo varias tortugas, y para sobrevivir, deben de llegar al mar lo más rápido posible, sin embargo, puede que haya depredadores cerca queriendo alimentarse de ellas, lo que las hace más vulnerables. Las tortugas nacen a cierta distancia del mar, además de nacer con cierta velocidad propia y cierta resistencia a los ataques de los depredadores.

Descripción de la actividad que aprenderá el agente

Dadas las características de cada tortuga (su distancia al mar, si hay o no depredador cerca, su velocidad y su resistencia), el agente debe de decidir si una tortuga se salva sin ayuda de nadie, si es necesaria la intervención humana para salvarla o si es imposible salvarla.

Descripción detallada de los patrones

Un patrón está formado de la siguiente manera:

{ Distancia, Depredador, Velocidad, Resistencia} à ¿Se salva?

Donde:

Distancia mide si se encuentra entre 0-5 metros, 5-10 metros o más de 10 metros. Se eligió así para evitar que los patrones fueran continuos y se eligieron esos rangos porque creemos que son distancias que pueden hacer diferencia entre si la tortuga vive o no.

Depredador mide solamente si hay o no un depredador cerca de la tortuga, donde cerca se define dentro del área de sobrevivencia de la tortuga, que son de alrededor de 5 metros a la redonda. Nuevamente, creemos que este radio es el que puede hacer la diferencia entre si la tortuga sobrevive o no.

Velocidad, mide qué tan rápido se mueve la tortuga, y cae dentro de: Lento, Normal o Rápido.

Resistencia, mide que tanto la tortuga puede resistir a los ataques de los depredadores, y esta puede ser Alta, Media y Baja. Estos últimos dos atributos se discretizaron para poder trabajar con ellos y se escogieron ya que una tortuga rápida puede llegar al mar pese a estar lejos o viceversa, y ocurre similar con la resistencia.


Solución al problema

Elegimos utilizar ID3 porque es el que más se adapta a los patrones que creamos. Aunque utilizamos ciertos límites para no utilizar datos continuos, no utilizamos la poda del árbol que C4.5 ofrece, ya que consideramos el árbol generado no es tan grande como para necesitar la poda.

En cuanto a los patrones, debido a que sólo hay 54 patrones distintos para aprender, decidimos usar un conjunto de 20 patrones, 15 para aprendizaje y 5 para validación con el propósito de darle al programa una gran variedad de patrones distintos sin llegar a darle todos los existentes.

Ejemplos de patrones:

{5-10m, Hay depredador, Lento, Baja} à Muere

{0-5m, No hay depredador, Rápido, Alta} à Sobrevive solo

El programa es lo suficientemente rápido para ser utilizado en tiempo real, aunque debería de ser alimentado con datos reales obtenidos con la práctica y al momento de ser utilizado, que sea por alguien lo suficientemente rápido para crear los patrones.

Creemos que el programa no tiene overfitting porque no encontramos otro árbol que fuera más específico que el que nos dio el programa, además de que el porcentaje de patrones dados es considerablemente alto comparado con la totalidad.

El programa podría mejorarse si las diferentes posibilidades en las características fueran más específicas, de esa forma existirían más posibles patrones y el resultado podría ser más preciso.


Conclusiones

En conclusión, creemos que los programas de ID3 son buenos para clasificar patrones cuyas hipótesis pueden ser organizadas en forma de árbol, siempre y cuando no existan datos continuos. En cuanto a la programación, fue un poco más difícil que programas anteriores debido más que nada a la implementación dinámica del árbol.

Tuesday, March 2, 2010

Gato 3D con LMS

Gato 3D

Descripción del medio ambiente.

Hay tres tableros de gato formando un cubo. Cada panel vertical y horizontal es un gato de modo que hay más formas de ganar. Existen 27 espacios donde se puede tirar. El ambiente es accesible, no determinista, no episódico, estático y discreto.

Actividades que aprende el agente.

El objetivo del agente ganar a su oponente. El agente es autónomo y reacciona según los tiros del otro jugador, va aprendiendo a jugar hasta ser capaz de ganar.

El agente aprenderá a bloquear tiros y a tirar de manera que tenga oportunidad de ganar.

1. Bloquear tiros. A partir de la estrategia del usuario el agente aprenderá que posición del tablero utilizar para su siguiente jugada para así impedir que el otro jugador gane.

2. Tirar. De acuerdo al desempeño del jugador el agente elige la mejor jugada posible.

Solución utilizando el Algoritmo LMS

· Experiencia de aprendizaje

El agente juega contra un agente reactivo. La retroalimentación es indirecta ya que depende del resultado final de la partida. La selección de estados la hace el agente y al final se infiere el resultado a través del medio ambiente. La distribución de ejemplos es muy similar a los reales.

· Función objetivo

Tirar: Tablero →ℜ

V: T→ℜ

V (b) = 10 cuando ganó

V (b) = -10 cuando perdió

V (b) = V (mejor estado alcanzable)

· Representación de la función objetivo

X1 = número de espacios peligrosos (si el oponente tira ahí gana)

X2 = número de espacios beneficiosos (si el agente tira ahí junta 2 en línea y tiene posibilidades de ganar)

X3 = número de espacios ganadores (si el agente tira ahí gana)

V (b) = w0 + w1x1 + w2x2 + w3x3

W0, W1, W2, W3 son pesos a aprender.

· Selección del algoritmo de aproximación

Se usará LMS.

Los valores iniciales de pesos W0, W1, W2, W3 son elegidos al azar y van de 0 a 1 y la constante de aprendizaje η fue elegida al azar entre 0.4 y 0.9.

Los patrones utilizados para el aprendizaje son la representación de los espacios que existen en el tablero. Los primeros nueve representan la cara superior del cubo, los siguientes nueve el gato horizontal en la mitad del cubo y los últimos nueve el gato en la cara inferior.

Conclusiones después de la programación

Implementar LMS tuvo ciertas complicaciones ya que hay que ser cuidadosos en las variables que obtienen información del sistema, de hacer falta una o de no calcularlas correctamente, puede llegar a no aprender correctamente. También, es necesario hacer que el programa sea entrenado contra muchos y diferentes escenarios para que sepa qué hacer bajo diferentes situaciones

Monday, January 25, 2010

Selección del medio ambiente

Gato 3D
Descripción del medio ambiente.
Hay tres tableros de gato formando un cubo. Cada panel vertical y horizontal es un gato de modo que hay más formas de ganar. Existen 27 espacios donde se puede tirar. El ambiente es accesible, no determinista, no episódico, estático y discreto.
Plataforma y lenguaje a ser utilizado.
Usaremos C y C++ con OpenGL. Porque OpenGL es un lenguaje que estamos aprendiendo y queremos aprovecharlo. Además de que conocemos los otros lenguajes lo que nos ayudará en el desarrollo del proyecto.
Actividades que aprende el agente.
El objetivo del agente es aprender la estrategia del contrincante y ganarle. Es autónomo y reacciona según los tiros del otro jugador. El agente aprende la estrategia del oponente para poder contrarrestarla y ganarle.
El agente aprenderá a bloquear tiros y a tirar de manera que tenga oportunidad de ganar.
1. Bloquear tiros. A partir de la estrategia del usuario el agente aprenderá que posición del tablero utilizar para su siguiente jugada para así impedir que el otro jugador gane.
2. Tirar. De acuerdo al desempeño del jugador el agente elige la mejor jugada posible.