Você está na página 1de 16

PRCTICA .- APRENDIZAJE CON REDES NEURONALES USANDO JavaNNS: Un ejemplo sencillo sobre puertas lgicas.

I. FUNCIN AND
El objetivo de este primer apartado ser construir una sencilla red neuronal sin unidades ocultas, con el fin de definir los patrones de entrenamiento para el aprendizaje de la funcin AND, y con el fin de entrenar la red con esos patrones. Tras lanzar el fichero JavaNNS.jar, aparece la pantalla que se ilustra aqu:

Esta pantalla contiene una red vaca donde podemos empezar a construir la red que queramos. La red inicial para realizar este ejercicio tendr dos unidades de entrada y una unidad de salida. Todas las unidades tendrn una funcin de activacin logstica. Si queremos generar las unidades tendremos que seleccionar en el men Tools->Create->Layers. Aparecer el panel Create layers. Hay que seleccionar como tipo de unidad Input y presionar dos veces al botn Create. Ahora seleccionad unidades de tipo Output y presionar una vez ms en el botn Create. Ahora ya se puede cerrar el panel Create layers.

Tendremos entonces una red con tres unidades representadas mediante cuadros coloreados. Eligindolas una a una y presionando el botn derecho del ratn sobre ellas, podemos utilizar la opcin Edit units si queremos editarlas. Se pueden cambiar los nombres de las unidades, por ejemplo en lugar de "noName" podemos poner "Entr1" y "Entr2", y la unidad de salida Sal. Sera conveniente seleccionar las unidades con el ratn y arrastrarlas ponindolas en lo que es la ventana de la red de forma que las unidades de entrada se encuentren debajo de la unidad de salida, como aparece a la derecha. A continuacin, habra que crear las conexiones. Seleccionando dos unidades (manteniendo la tecla Ctrl mientras que se selecciona con el ratn) y en el men Tools->Create->Connections. El panel Create links aparece. Pulsad el botn Mark selected units as source. Ahora seleccionad la unidad de salida y presionad el mismo botn (ahora bajo el ttulo Connect source to the selected units). Las conexiones desde las unidades de entrada a las unidades de salida aparecern con un nmero que representa el peso de la conexin. Guarda esta red como TusApellidos_TuNombre_AND.net. (Si soy dos 1erApellidoNombreDeUno_1erApellidoNombreDelOtro _AND.net)

En este momento se ha de generar el fichero de patrones para entrenar la funcin AND. Se puede hacer modificando el fichero de texto xor.pat que se encuentra en el directorio de ejemplos (examples) del paquete JavaNNS. Este es el texto que encontraris: SNNS pattern definition file V3.2 generated at Mon Apr 25 15:58:23 1994 No. of patterns : 4 No. of input units : 2 No. of output units : 1 # Input pattern 1: 00 # Output pattern 1: 0 # Input pattern 2: 0 1 # Output pattern 2: 1 # Input pattern 3: 10 # Output pattern 3: 1 # Input pattern 4:

1 1 # Output pattern 4: 0

Intenta analizar el significado de estos patrones, define los que crees que seran necesarios para la funcin AND y guarda este fichero como TusApellidos_TuNombre_AND.pat. (Si soy dos 1erApellidoNombreDeUno_1erApellidoNombreDelOtro _AND.pat)

Ahora ya puedes abrir con JavaNNS este fichero de patrones que acabas de generar. Vers que en el panel de estatus, justo abajo del men aparece la opcin del patrn de entrenamiento.

Para observar cmo cambia el error durante el entrenamiento de la red, selecciona en el men Tools->Control Panel, y View->Error Graph. Con el fin de observar el comportamiento (tanto

en la entrada como en la salida de la red, selecciona las tres unidades de la red y selecciona tambin la opcin View->Projection. Como explica el manual de JavaNNS, este panel de proyeccin muestra la activacin de las unidades ocultas o de salida en funcin de la activacin de las dos unidades de entrada. El panel solo puede abrirse cuando se han seleccionado tres unidades dentro de la vista de una red. As, tendrais en la pantalla activa cuatro ventanas con los paneles que se muestran en la figura de arriba.

Para verificar los patrones de entrenamiento habra que pinchar en la pestaa Patterns del panel de control (Control Panel), asegurndote de que las unidades en la ventana con la red han sido deseleeccionadas y entonces ir movindote de un patrn a otro con los botones > y <. El color de los nodos refleja el grado de activacin, y la correspondencia est indicada por la barra de colores de la izquierda

Tambin se pueden cambiar las opciones de visualizacin para permitir que las etiquetas asociadas con los nodos muestren directamente el valor de activacin.

Ahora ya podis comenzar con la tarea de aprendizaje. Primero, habr que inicializar los valores de los pesos de la red con la lengeta de Learning en el panel de control (Control Panel). Observa las consecuencias en el Error Graph. Se puede cambiar el factor de acercamiento del grfico empleando las dos flechas (tringulos) de zoom que hay junto a cada uno de los ejes de coordenadas. Tambin se puede seleccionar View->Log para visualizar el valor numrico real del error durante el proceso de aprendizaje. Tanto en el manual de JavaNNS como en el de SNNS existen descripciones de los distintos parmetros y reglas de aprendizaje disponibles en el panel de control.

Comprueba cmo la proyeccin de la salida (Projection to Out) refleja el estado de aprendizaje de la red. Intenta reinicializar los pesos y repetir el aprendizaje con distintos ratios de aprendizaje. Fijaos que la visualizacin de esta pantalla de proyeccin ralentiza la ejecucin de notablemente. Por ello, normalmente ser preferible cerrar esta ventana y abrirla slo al final para ver cmo ha quedado. Se puede aumentar la resolucin de la proyeccin mediante el botn Increase resolution representado por una matriz de puntos y que se encuentra en la esquina inferior izquierda de esta ventana de proyeccin. Describe y explica lo sucedido.

II. FUNCIN XOR


En este segundo paso del ejercicio, intentaremos aplicar la red que ha sido capaz de aprender la funcin AND para aprender tambin la funcin XOR. Revisad en los apuntes y/o bibliografa qu tipos de funciones puede aprender una red tan sencilla como esta y sin unidades ocultas. Cargad el fichero de patrones de entrenamiento xor.pat, reinicializad la red, lanzad el aprendizaje y observar la evolucin del error. Debis probar a aumentar el nmero de ciclos de

aprendizaje y los valores de los parmetros de aprendizaje. Qu ocurre?

II-B. PERCEPTRN MULTICAPA PARA LA FUNCIN XOR


Acabis de comprobar cmo la tarea de aprendizaje de la funcin XOR no puede ser aprendida mediante un perceptrn con una nica capa. Vamos a aadirle ahora a la red una capa de neuronas e intentaremos aprender la funcin XOR de nuevo.

Con el patrn de entrenamiento xor.pat cargado, tendramos que ir a la ventana de la red (Network) y aadir una nueva unidad, como hacamos para la funcin AND. Pero esta vez necesitamos indicar que la unidad es oculta, por lo que en el tipo de unidad hay que escoger Hidden. Ponedle un nombre a la unidad que sea ms representativo, por ejemplo Oculta1.

Ahora tendramos que conectar esta nueva unidad oculta a la de salida, y las unidades de entrada tambin con la nueva unidad oculta. Guardad esta red con la misma nomenclatura que hemos seguido hasta ahora: ****_XOR1.net De este modo obtenemos una red hbrida con algunas conexiones que van directamente desde la entrada a la salida y otras que van primero a la unidad oculta. Tras inicializar los pesos, lanzad el proceso de entrenamiento y observad el grafo de error y la ventana de proyeccin. Mostradlos y analizarlos sacando las conclusiones que consideris oportunas.

Ahora deberais probar a ver qu pasa cuando eliminamos las conexiones directas desde las unidades de entrada a la salida. Para borrar una conexin hay que seleccionar los dos nodos enlazados y con el botn derecho del ratn y el cursor en alguno de los dos nodos seleccionar Delete Link. Obtendremos una red con una nica unidad oculta. Guardadla llamndola ****_XOR2.net

Intenta entrenar la red con el fichero de patrones XOR. Aprende la red este patrn? Podras justificar el resultado obtenido? Para obtener alguna pista, podis mirar la proyeccin de la funcin que asocia las entradas a la unidad oculta y tambin a la unidad de salida.

Ahora si aadimos otra unidad oculta, conectmosla a la unidad de salida y a las dos unidades de entrada. . Guardadla llamndola ****_XOR3.net Prueba a entrenar la red con el patrn de entrenamiento XOR (para agilizar la ejecucin, cierra todas las ventanas de proyeccin mientras que entrenas la red y vuelve a generar dichas ventas cuando acabe el entrenamiento). Aprende la red el patrn? Puedes justificar el resultado observado? Como pista, mira una vez ms la proyeccin de la funcin que asocia las unidades de entrada con la unidad oculta y con la unidad de salida. Comparalas con las proyecciones del caso anterior y escribe lo que te sugiera esta comparacin.

III. ESTUDIO DE DIFERENTES ALGORITMOS DE APRENDIZAJE PARA LA FUNCIN XOR


Ahora, y adems de todo lo indicado anteriormente, vamos a usar esta ltima red ***_XOR3.net o con alguna distinta que vosotros ideis y que se os ocurra que pueda funcionar igual o mejor ****_XOR_otra.net. En este punto se trata de experimentar con el ratio de aprendizaje para ver si puedes acelerar el proceso de aprendizaje. Comprueba cmo se comporta el aprendizaje al variar este valor y escribe las conclusiones y/o las observaciones que puedas sacar de dicho comportamiento. Adems del algoritmo estndar de backpropagation (retropropragacin) hay muchas variantes. Selecciona por ejemplo (y al menos)

Backprop-Momentum Quickprop y Rprop como funcin de aprendizaje (Learning function), inicializando los pesos y entrenando de nuevo la red. Vara los distintos parmetros (incluido el nmero de ciclos) y haz un estudio/comparativa sacando y escribiendo tus propias conclusiones. Para desarrollar este punto puedes (y sera interesante) incluir grficos, pantallazos, cuadros, documentacin sobre las funciones de aprendizaje, y en general toda aquella informacin e ilustraciones que consideres oportunas.

IV. ENTRENAMIENTO Y VALIDACIN


Esta parte final del ejercicio trata de mostrar un ejemplo sencillo de cmo podra ser una aplicacin de redes neuronales real, y os permitir experimentar con diferentes patrones de entrenamiento y validacin. Como indica el fichero letters.README (en ingls, aqu est traducido):
La entrada de la red es una matriz de elementos binarios 5x7. Esta red presenta 10 unidades ocultas en una nica capa oculta que est completamente conectada tanto a las unidades de entrada como a las de salida. Cada una de estas 26 unidades de salida

representan una letra en maysculas y que mostrar una salida de 1 si el patrn de entrada se corresponde con esa clase (letra) o un 0 en cualquier otro caso. El fichero de patrones letters.pat contiene 26 patrones de entrenamiento (uno ejemplar para cada una de las letras maysculas). Estos patrones tienen valores binarios de 0 1 aunque SNNS trate todas las entradas y salidas como valores reales. Puesto que cada patrn se da slo una vez no existen patrones con ruido en este fichero, por lo que no podra usarse para generalizar.

Primero, deberas experimentar tratando de entrenar esta red, de manera similar a como lo hicimos para la funcin XOR. Describe lo que sucede y comenta lo que consideres importante. Despus, haz una copia del fichero de patrones letter.pat y renmbrala como

***letterValidacion.pat. Ahora edita este fichero de patrones cambiando alguno de sus patrones de entrada con el fin de simular la presencia de algn ruido en los patrones de validacin. Finalmente, carga el fichero de patrones ***letterValidacion.pat y seleccinalo en la lengeta Patterns del panel de control (Control panel) como el conjunto de validacin, entrenando la red de nuevo. Para evaluar el error sobre el conjunto de validacin fija en cada paso el mismo nmero de ciclos (Cycles) y pasos (Steps) en la lengeta Aprendizaje (Learning) del panel de control. Observa la evolucin de los errores de entrenamiento y validacin en la ventana del grafo de error (Error graph). Anota tus observaciones y/ comentarios.

Você também pode gostar