martes, 10 de mayo de 2011

Actividad 5, Redes Neuronales

Actividad de Programación 5 (Redes Neuronales)

Equipo 666: Tectrón

Medio Ambiente

Para este proyecto se cambió el medio ambiente, el medio anterior siendo el juego “Planet Wars” utilizado en el concurso de inteligencia artificial de Google. El nuevo medio es el popular juego de Gato; en este juego se tiene un tablero dividido en tres filas y tres columnas, lo cual forma nueve casillas; cada casilla puede ser llenado por dos símbolos distintos,cada uno propio de un jugador lo que quiere decir que un jugador en un juego dado no podrá llenar una casilla con otra cosa que no sea su símbolo. El juego se juega por turnos y termina cuando alguno de los dos jugadores logra completar una línea en cualquier orientación (i.e. horizontal, vertical o diagonal) con sus símbolos.


Actividad que el Agente Aprenderá: El agente aprenderá a identificar los patrones de dentro de un juego de su contrincante

Solución Planteada

Patrones de Aprendizaje: son los tableros en sí, los cuales almacenan casillas y la posición de las tiradas que han sido realizadas.

Codificación de la salida: La salida esta codificada como un nuevo tablero con la tirada que ha realizado el agente.

Tipo de red Neuronal Utilizada: El tipo de red neuronal utilizada es de Back-Propagation estocástica.

Numero de Capas y Numero de neuronas por Capa

El agente utiliza X capas, a continuación se presenta cuantas neuronas componen cada capa:

· Capa 1->18 neuronas que reciben los patrones (entrada).

· Capa 2-> 36 neuronas que trabajan para determinar la salida óptima (intermedia).

· Capa 3-> 9 neuronas que trabajan para determinar la posición de la tirada exitosa en el tablero (salida).

Parámetros de la Red

La red neuronal tenía los siguientes parámetros:

· Tasa de aprendizaje: es variable, con valores entre 0 y 1; el valor usado comúnmente para las pruebas es de 0.1.

· Momento: es variable, con valor entre 0 y 1. El valor comúnmente usado para las pruebas es de .8

· Iteraciones: es variable, aunque el ideal es hasta que no haya nada que aprender, esta condición fue la usada para las pruebas.

Conclusiones

Después de programar la red neuronal podemos concluir que si sirve para esta tarea, así como para muchas otras, ya que detecto eficientemente los patrones y se modificaron los pesos de la función, modificando a su vez la respuesta del agente.


Pedimos disculpas pero por cuestiones de tiempo no se pudo generar y adjuntar el vídeo de las corridas a este post, ese se presentara en un post posterior este mismo dia.

Redes Neuronales

Martha Teresa Hernández García 964384

Alfonso Arturo Martínez Covarrubias 965297

José Angel Daza Arévalo 965109


Descripción detallada de la actividad o acción que va a aprender el agente:

Nuestro agente aprenderá a determinar el lenguaje de programación en el que está escrito cierto código. Para fines prácticos se decidió usar 100 líneas como el tamaño estándar de un programa y se eligieron python, c, java, brainfuck , clojure, erlang y php como las diferentes categorías de clasificación.


Solución planteada al problema utilizando Redes Neuronales.


i. Patrones de aprendizaje a alimentar a la red.

El patrón de aprendizaje está formado de la siguiente manera:

{(), *, +, [], |, $, class, private, abstract, #, include, :, -, /, extends,tipo}

El tipo indica el lenguaje en el que está escrito el patrón y se encuentra representado por un número que le sirve como identificador:

Lenguaje

Identificador

Brainfuck

1

C

2

Clojure

3

Erlang

4

Java

5

PHP

6

Python

7


Se utilizaron 180 patrones de entrenamiento y 20 de prueba.

Ejemplos de patrones ya normalizados:

0.1,0.1,0.379894578,0.446452477,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.276560789,0.1,0.1,1

0.403100775,0.1,0.1,0.1,0.1,0.484662577,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.36627907,0.1,6


ii. Codificación de la salida de la red.

La salida esperada se da en función del lenguaje, cuando coincide es .9 y de otro modo es .1

Un ejemplo de corrida para un patrón de brainfuck con un learning rate 0.1 y 500 iteraciones arroja las siguientes salidas:

brainfuck: 0.9039309689853476

c: 0.4039195017870265

clojure: 0.00110839829907677

erlang: 0.1860098159262167

java: 0.24561579367216965

php: 0.00230609875927083

python: 0.14999452134826122

El mas alto fue: brainfuck con 0.9039309689853476


iii. Tipo de red neuronal a ser utilizada.

Se utilizó una red con backpropagation sin momento.

iv. Numero de capas (entrada, intermedias, salida) y número de neuronas en cada capa.

Se utilizaron tres capas:

- Entrada: tiene una neurona por cada elemento del patrón, en este caso 15.

- Intermedia: tres neuronas

- Salida: cuenta con una neurona por cada lenguaje a clasificar, en este caso siete.


v. Parámetros de la red (tasa de aprendizaje, momento, iteraciones).

Los parámetros utilizados durante las corridas fueron:

Tasa de aprendizaje: 0.1

Momento: 0

Número de iteraciones: 500


vi. Ejemplos de corridas:

1. Consultas antes de ser entrenada, sobre el mismo patrón:

brainfuck: 0.3857002119433452

c: 0.529471884215105

clojure: 0.5329316599809784

erlang: 0.37856010225680786

java: 0.424328560670766

php: 0.5580562945750396

python: 0.4654049231815472

El mas alto fue: php con 0.5580562945750396

brainfuck: 0.5414016717219081

c: 0.4451402281014731

clojure: 0.5352479454431825

erlang: 0.501268809173719

java: 0.4762154279639208

php: 0.5045365222069539

python: 0.34560503045313556

El mas alto fue: brainfuck con 0.5414016717219081

2. Consultas después de ser entrenada.

brainfuck: 0.9039309689853476

c: 0.4039195017870265

clojure: 0.00110839829907677

erlang: 0.1860098159262167

java: 0.24561579367216965

php: 0.00230609875927083

python: 0.14999452134826122

El mas alto fue: brainfuck con 0.9039309689853476


Conclusiones después de la programación.

En primer lugar notamos que las redes neuronales son fáciles de programar comparadas con otros algoritmos que hemos usado en la clase. Es importante fijarse bien en el diseño y en las conexiones entre neuronas, así como la actualización de los pesos, una vez logrado eso simplemente tenemos que entrenarla.


Sin embargo, el tiempo de entrenamiento si es algo tardado y hay que probar con diferentes iteraciones y constantes de aprendizajes para lograr el resultado más óptimo.


También nos dimos cuenta de que en este caso en particular probablemente los patrones tenían mucho ruido y tal vez convendría utilizar C4.5 para eliminar el ruido en los patrones, es decir, los elementos que no aportan nada y hacen que a nuestra red neuronal le cueste mucho aprender.


Paper de Apoyo:

http://www4.rgu.ac.uk/files/chapter3%20-%20bp.pdf





Actividad de programación 4 (Redes Neuronales)

Equipo 13 StressCalc (Ex-InteliQWOP)

Diego García M. 1162205
Joaquín León M. 1162101
Enrique Peña A. 1162110

a. Breve descripción del medio ambiente.
El medio se basa en el análisis de una base de datos que se llenó con información real proporcionada por estudiantes. La información contenida en la base de datos nos dice el nivel de estrés que maneja una persona dependiendo de varios síntomas. La base de datos tiene como columna a cada síntoma, y se llena con una de cuatro opciones (nada, pocas veces, ocasionalmente, frecuentemente). Y al final todos estos valores convergen al resultado final del nivel de estrés de la persona que puede ser: Nada, Poco, Regular y Alto.

b. Descripción detallada de la actividad o acción que va a aprender tu agente.
El sistema aprende a decidir el nivel de estrés que maneja una persona con base a todos los ejemplos que tiene en su base de datos y nos da un resultado sin tener que preguntar por todos los síntomas.

c. Solución planteada al problema utilizando Redes Neuronales. Describe con detalle cada elemento del planteamiento:

I. Patrones de aprendizaje:

Utilizamos los mismos patrones que para la actividad 3, a continuación mostramos dos ejemplos de patrones.

Ejemplos:

A

P

P

P

M

M

A

P

M

P

P

P

M

P

M

P

P

M

Regular

P

N

N

N

N

N

P

P

P

N

N

N

P

N

P

N

N

N

Poco







































Donde:

A = Alto

M = Medio

B = Bajo

N = Nada

II. Codificación de la salida de la red
La salidas en la encuesta era: Nada, bajo, medio y alto, Lo codificamos en valores decimales correspondientes a .1, .4, .6 y .9, esos valores son regresados por la red.

III. Tipo de red neuronal utilizada
Es una red neuronal multicapa que utiliza el algoritmo de Backpropagation.

IV. Número de capas y número de neuronas en cada capa
Tres capas. Entrada, hidden y output con 19, 3, y 1 neuronas en cada capa respectivamente.

V. Parámetros de la red
Tasa de aprendizaje es .1 y 10,000.

d. Ejemplos de corridas

Antes:
Output de neurona final: 0.4 output esperado: 0.6
Output de neurona final: 0.2 output esperado: 0.4
Output de neurona final: 0.4 output esperado: 0.6
Output de neurona final: 0.3 output esperado: 0.6
Output de neurona final: 0.1 output esperado: 0.9
Output de neurona final: 0.1 output esperado: 0.1
Output de neurona final: 0.3 output esperado: 0.4
Output de neurona final: 0.5 output esperado: 0.6
Output de neurona final: 0.2 output esperado: 0.4
Output de neurona final: 0.2 output esperado: 0.6

Despues
Output de neurona final: 0.1 output esperado: 0.1
Output de neurona final: 0.1 output esperado: 0.1
Output de neurona final: 0.4 output esperado: 0.4
Output de neurona final: 0.4 output esperado: 0.4
Output de neurona final: 0.6 output esperado: 0.6
Output de neurona final: 0.5 output esperado: 0.6
Output de neurona final: 0.2 output esperado: 0.4
Output de neurona final: 0.2 output esperado: 0.6
Output de neurona final: 0.6 output esperado: 0.6
Output de neurona final: 0.4 output esperado: 0.4
Output de neurona final: 0.6 output esperado: 0.6

e. Conclusiones después de la programación.
Concluimos que, usando redes neuronales, a diferencia de ID3, no importa tanto que haya habido errores en los patrones de entrenamiento, tampoco importa mucho que haya patrones que son muy similares o incluso que se contradigan. Todo esto significa que las redes neuronales son bastante más confiables y que soportan patrones mucho menos estables que otros algoritmos. La diferencia es que si es un poco más tardado y, en promedio, obtuvo un poco menos mejores resultados (considerando el número de iteraciones y patrones de entrenamiento que usamos).