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.
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.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.