Download Apuntes de Inteligencia Artificial

Document related concepts

Propagación hacia atrás wikipedia , lookup

Red neuronal prealimentada wikipedia , lookup

Perceptrón multicapa wikipedia , lookup

Perceptrón wikipedia , lookup

Redes neuronales probabilísticas wikipedia , lookup

Transcript
PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR
FACULTAD DE INGENIERÍA
Apuntes de Inteligencia Artificial
Laboratorio: Redes con Conexiones hacia adelante JORGE AGUILAR JARAMILLO 83 Jorge Aguilar J. LABORATORIO: REDES CON CONEXIONES HACIA ADELANTE OBJETIVOS •
Poner en práctica los conocimientos adquiridos sobre el perceptrón multicapa
•
Aprender cómo usar los algoritmos de retro propagación para entrenar redes con
conexiones hacia adelante.
•
Conocer que funciones implementa Matlab, para este objetivo y usarlas
•
Conocer los fundamentos para crear conjuntos de entrenamiento que permitan
entrenar bien las redes.
•
Entrenar la red para que simule una respuesta hacia nuevas entradas.
MARCO TEÓRICO REDES CON RETRO‐PROPAGACIÓN El algoritmo de retro‐propagación es una generalización de la regla de aprendizaje Widrow‐Hoff. Esta adaptación es para redes multicapa y funciones de transferencia diferenciables no lineales. La retro‐propagación estándar es un algoritmo de gradiente descendiente, que como en la regla de aprendizaje de Widrow‐Hoff los pesos de la red son modificados a lo largo del negativo de la función gradiente de desempeño. El término de retro‐propagación se refiere a la forma en la que el gradiente se calcula para redes multicapa no lineales. Existe un número de variaciones en el algoritmo básico que se basan en otras técnicas estándar de optimización, tales como la gradiente conjugada y los métodos de Newton. El Neural Network de Matlab implementa algunas de estas variaciones. Las redes con retro‐propagación bien entrenadas tienden a brindar soluciones razonables al recibir entradas totalmente desconocidas Este tipo de redes, con bias, una capa sigmuidal y una capa de salida lineal son susceptibles de aproximar cualquier función en un número finito de discontinuidades. Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 84 ARQUITECTURA DE LA RED CON RETROPROPAGACIÓN La arquitectura de red neuronal más utilizada para el algoritmo de retro‐propagación es la red multicapa con conexiones hacia delante El modelo de una neurona es como se muestra en el siguiente grafico. Ilustración 1 Neurona elemental con R entradas. (Fuente, Matlab) Cada entrada está representada por un valor apropiado, que Matlab lo simboliza con p. La suma ponderada, ∑, de los pesos y el bias (umbral) con los datos de entrada forma la entrada a la función de transferencia f. Las neuronas deben usar cualquier función diferenciable para generar sus salidas. Función Sigmuidal genera salidas entre 0 y 1 Función Tangencial: Salidas entre ‐1 y 1 Función Lineal, la salida puede ser cualquier valor Ilustración 2.‐ Funciones de tranferencia (Matlab) Las funciones más usadas por este tipo de redes son: la función sigmuidal ‘logsig’ , tangencial (tansig) y lineal (purelin). Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 85 Si la última capa de una red multicapa tiene neuronas sigmuidales, entonces la red se limita a un rango pequeño entre 0 y 1. Si se utilizan neuronas lineales en la capa de salida, teóricamente los resultados pueden tomar cualquier valor. En retro propagación es importante calcular las derivadas de las funciones de transferencia utilizadas. Cada una de las funciones de transferencia mencionadas contiene una derivada correspondiente: Matlab las implementa como: ‘dtansig’, ‘dlogsig’, y ‘dpurelin’. Para obtener el nombre de la derivada de una función de transferencia se debe invocar a la función de transferencia con la cadena: Código 1.- Comando para obtener la derivada de una función de transferencia
REDES CON CONEXIÓN HACIA ADELANTE Las redes Conexión hacia adelante tienen frecuentemente una o más capas ocultas de neuronas sigmuidales seguidas de una capa de salida de neuronas lineales. Muchas capas de neuronas con funciones de transferencia no lineales permiten a la red aprender relaciones lineales y no lineales entre vectores de entrada y salidas. La capa lineal de salida permite a la red producir valores fuera del rango de ‐1 a +1. Por otra parte, si se necesita limitar las salidas de la red a un valor específico, entonces la capa de salida debe usar una función sigmuidal de transferencia (como logsig.) Este tipo de redes nos permitirá tener un rango especial de respuestas. Ilustración 3 Red con funciones: tansig y purelin
Esta red puede ser utilizada como un aproximador general de funciones. Ya que puede aproximar cualquier función que tenga un número finito de discontinuidades, teniendo el suficiente número de neuronas en la capa oculta. Para entrenar una red, generalmente se tienen 4 pasos en el proceso de entrenamiento 1. Configurar los datos de entrenamiento Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 86 2. Crear el objeto red: función newff 3. Entrenar la red : función train 4. Simular la respuesta de la red para nuevas entradas: función sim CONFIGURAR LOS DATOS DE ENTRENAMIENTO En un proyecto de redes neuronales, el llegar al conjunto final de datos, puede consumir el 60% de todo el proyecto. Pero una vez obtenidos los datos, en Matlab, estos deben definirse como en dos variables: una para los datos de entrada y la segunda variable en la que consten los respectivos valores de salida. CREANDO UNA RED CON CONEXIÓN HACIA ADELANTE (NEWFF) Una vez que se tiene los datos de entrada y salida deseada, para entrenar una red con conexión hacia adelante necesitamos crear el objeto red. La función ‘newff’ crea una red con conexión hacia adelante y requiere de cuatro argumentos de entradas y devuelve el objeto de red. 1. El primer argumento es una matriz de los mínimos y máximos b1 de las Ni entradas (Nix2 valores, para cada uno de los N elementos del vector de entrada). 2. El segundo argumento es un arreglo que contiene los tamaños de cada capa. 3. El tercer argumento es un arreglo que contiene los nombres de las funciones de transferencia que se usarán en cada capa. 4. El último argumento contiene el nombre del algoritmo de entrenamiento a ser usado. Veamos un ejemplo: Código 2.- creación de una red neuronal en Matlab
Asignamos al objeto net, la estructura de la red: Una red de dos capas2, dos vectores. Los valores para el primer elemento del vector de entrada están en el rango de ‐1 hasta 2, los valores del segundo elemento del vector están entre 0 y 5. Existen tres neuronas en la primera capa (capa oculta) y una neurona en la segunda capa (de salida). 1
2
Matlab implementa la función mm=minmax(X) que obtiene estos valores, X representa los datos de entrada
Ya que las neuronas de entrada solamente reciben los datos, Matlab, no la trata como una capa de neuronas
Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 87 La función de transferencia en la primera capa es tansig y la función de transferencia en la capa de salida es lineal y el algoritmo de de entrenamiento es ‘traingd’. Este comando crea el objeto red y además inicializa los pesos y los bias de la red, entonces la red se encuentra lista para entrenar. Reinicializando los pesos
Aunque la función anterior ya inicializa los pesos y bias, si se requiere una re‐inicialización de los mismos puede hacérselo con el comando ‘init’. Esta función toma un objeto red como entrada y devuelve un objeto red con todos los pesos y los bias re‐inicializados. Aquí vemos como una red puede ser inicializada (o re‐inicializada): ENTRENAMIENTO Una vez que los pesos y los bias han sido inicializados, la red está lista para ser entrenada. La red puede ser entrenada para aproximación de funciones (regresión no lineal), asociación de patrones o clasificación de patrones. El proceso de entrenamiento requiere un conjunto de ejemplos que tenga un comportamiento apropiado para la red – entradas p (ó X) y salidas t (ó Yd) ‐. Durante el entrenamiento los pesos y los bias de la red son ajustados iterativamente para minimizar la función de costo o error de la red ‘net.performFcn’. La función de desempeño predeterminada para redes con conexiónes hacia adelante es el error medio cuadrático ‘mse’, el promedio del error al cuadrado entre las salidas de la red a y los objetivos t. Todos los algoritmos de entrenamiento usan la función del gradiente de desempeño para determinar cómo ajustar los pesos, la gradiente es determina usando una técnica llamada retro propagación, que involucra la realización de hacer cálculos hacia atrás de la red. Los cálculos de retro propagación se derivan usando la regla de la cadena. ALGORITMO DE RETROPROPAGACIÓN Hay muchas variaciones del algoritmo de retro propagación, la implementación más simple de aprendizaje por retro propagación actualiza los pesos y los bias de la red en la dirección en la que la función de desempeño decrezca más rápido – el negativo de la gradiente. Una iteración del algoritmo puede escribirse de la siguiente manera: Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 88 EEcuación 1. .-- Una Iteracción del Algooritmo de Retropropag
R
ación
Donde W
Wij es un vecctor de pesos y bias conccurrentes. es eel gradiente actual y u es la tasaa de aprendizzaje. dos formas d
diferentes dee implementtar el algorittmo de gradiiente descen
ndente; el Existen d
modo inccremental y por lotes. En E el modo incremental, el gradien
nte es calculado y los pesos son actualizados después de que cadaa ejemplo see aplica a la red. En el modo m
por plos (una épo
oca) son aplicadas a la rred antes de que se actu
ualicen los lotes todos los ejemp
pesos. ENTR
RENAMIENTTO POR LOTTES Aquíí los pesos y los bias de laa red se actu
ualizarán úniicamente después de que todo el conjunto de entreenamiento h
ha sido aplicado a la red. Los gradientes g
c
calculados een cada eje
emplo de entreenamiento so
on sumados para determ
minar el camb
bio en los peesos y los bias. Graddiente descenndente: En el entrenamieento por lottes la función de gradien
nte descendente más empinada es ‘traiingd’. Los peesos y los biaas son actualizados en dirrección del n
negativo del gradiente desempeño. Si se requiere entrenar una red usando esta fun
nción se debe
e cambiar de la función de d
d de ‘trainFFcn’ a ‘trainggd’, entoncees llamar a la l función ‘ttrain’. Existe solo una fu
unción de la red
entreenamiento associada a una red en parrticular. Existten siete paarámetros de entrenam
miento asociados a ‘traiingd’: epochhs, show, go
oal, time,
min__grad, max_ffail, y lr. La tasa de aprrendizaje lr se multiplicaa cada vez ccon el negattivo de la gradiente para deeterminar lo
os cambios aa realizarse aa los pesos yy a los bias. Mientras máás grande m grande es el salto. Si la tasa de d aprendizaaje es muy grande g
el sea la tasa de aprendizaje más de aprendizaaje es muy peequeña, el algoritmo se d
demorará algoritmo se vuellve inestablee y si la tasa d
onverger. El estado de aprendizaje a
se mostraráá en cada iteeración del aalgoritmo. Lo
os demás en co
parám
metros deterrminarán cuaando se deteendrá el entrrenamiento. El entrenamiento
o finalizará si el número de iteracion
nes excede aal parámetro
o epochs, si la función u meta, si la magnitud de d la gradien
nte es meno
or a min_graad, o si el de deesempeño eencuentra su
tiemp
po de entren
namiento es mayor que ttime segundo
os. El sigguiente códiggo crea un conjunto c
de entradas p y objetivos t. Para entrenamiento por lotes todoss los vectorees de entradaa serán coloccados en unaa matriz. Jorge Agguilar J. | Lab
boratorio: Reedes con Con
nexiones haccia adelante 89 Código 3.- Valores iniciales de entrenamiento por lotes para una red de retropropagación
Luego crearemos la red con conexión hacia adelante. Aquí usaremos la función minmax para determinar el rango de las entradas a usarse en la creación de la red. Código 4.- Creación de la red con conexión hacia adelante
En este punto, podremos modificar algunos de los valores predeterminados de entrenamientos Código 5.- Modificación de los valores iniciales predeterminados
Si no se requiere cambiar los valores predeterminados de entrenamiento los comandos anteriores no serán necesarios. Estamos listos para entrenar la red. Código 6.- - Entrenamiento de la red
Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 90 El registro de entrenamiento tr contiene la información acerca del progreso del entrenamiento. Ahora la red entrenada puede ser simulada para obtener su respuesta a las entradas del conjunto de entrenamiento. Código 7.- Despliegue de las salidas de la red luego del entrenamiento
GRADIENTE DESCENDIENTE CON MOMENTO: Adicional a ‘traingd’, existe otro algoritmo por lotes para redes con conexión hacia adelante que frecuentemente provee mayor convergencia: ‘traingdm’. El momento permite a la red responder no solo al gradiente local sino también a las tendencias más recientes en la superficie de error. Actuando como un filtro pasa bajos el momento permite a la red ignorar las pequeñas imperfecciones de la superficie de error. Sin un momento la red puede atascarse en un mínimo local impidiendo su labor. El momento puede añadirse al aprendizaje con retro propagación realizando cambios en los pesos iguales a la suma de la fracción del último cambio de pesos y el nuevo cambio sugerido por la regla de retro propagación. La magnitud del efecto que último cambio de pesos permite tener es mediada por una constante de momento, mc, que puede ser cualquier número entre 0 y 1. Cuando la constante de momento es 0, el cambio de pesos es basado únicamente en la gradiente. Cuando la constante de momento es 0, el nuevo cambio de pesos se iguala al último cambio de pesos y el gradiente se ignora simplemente. La gradiente es calculada sumando los gradientes calculados en cada ejemplo de entrenamiento y los pesos y los bias son actualizados únicamente cuando todos los ejemplos de entrenamiento han sido presentados. Si la nueva función de entrenamiento en alguna iteración excede la función de desempeño en una previa iteración con un valor mayor a un valor predefinido max_perf_inc (comúnmente 1.04), los nuevos pesos y bias son descartados y el coeficiente de momento se vuelve cero. Esta función se llama con el comando ‘traingdm’, y contiene los mismos argumentos usados para ‘traingd’ excepto que los parámetros de aprendizaje mc (coeficiente de momento), lr (tasa de aprendizaje) y max_perf_inc (máximo incremento del desempeño) pueden ser personalizados. En el siguiente código se recrea la red anterior y se la entrena con la función de gradiente descendente con momento. (Los parámetros de entrenamiento son reiniciados a los valores predeterminados cada vez que net.trainFcn se cambia a traingdm.) Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 91 Código 8.- - Inicialización de la red Con conexión hacia adelante
Código 9.- Entrenamiento de la red
Notemos que desde que se reinicializaron los pesos y los bias antes del entrenamiento (llamando a newff nuevamente), obtenemos diferente error medio cuadrático de lo que obtuvimos usando traingd. Si reiniciaríamos nuevamente la red con ‘traingdm’ podríamos obtener incluso un error medio cuadrático distinto. La opción al azar de pesos y bias iniciales afectara el desempeño del algoritmo. Si se desea comparar el desempeño de diferentes algoritmos se debe probar cada vez usando diferentes conjuntos de pesos y bias iniciales y establecer una media de las diferentes corridas hechas3. En resumen, la arquitectura de una red multicapa no está completamente limitada al problema a ser resuelto. El número de capas entre las entradas a la red y la capa de salida así como el tamaño 3
Una muestra estadísticamente significativa es de mínimo 30 corridas Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 92 de las capas son cuestión del diseñador. La red de dos capas sigmuidal / lineal puede representar cualquier relación funcional entre las entradas y las salidas si la capa sigmuidal tiene la cantidad suficiente de neuronas. ALGORITMOS IMPLEMENTADOS POR MATLAB: De los algoritmos revisados en teoría, solamente los cuatro primeros tienen que ver con ella. El resto de algoritmos que implementa Matlab se los implementa en forma diferente. Función Descripción traingd Gradiente descendente básico, puede usarse en entrenamiento de modo incremental traingdm Gradiente descendente con momentun. Generalmente más rápido que traingd. Puede usarse en entrenamiento de modo incremental. traingdx Tasa de aprendizaje adaptativa. Entrenamiento más rápido que traingd, pero solo puede ser usado en modo de entrenamiento batch (por lotes). trainrp Backpropagation flexible. Simple algoritmo de entrenamiento en modo batch, con rápida convergencia y mínimos requerimientos de almacenamiento. traincgf Algoritmo de gradiente conjugado Fletcher‐Reeves. Tiene los Requerimientos de almacenamiento menores de los algoritmos de gradiente conjugado. traincgp Algoritmo de gradiente conjugado Polak‐Ribiére. Requerimientois de almacenamiento ligeramente mayores que traincgf. CXonvergencia más rápida sobre algunos problemas. traincgb Algoritmo de gradiente conjugado, Powell‐Beale. Requerimientois de almacenamiento ligeramente mayores que traincgp. Generalmente convergencia más rápida. trainscg Algoritmo de gradiente conjugado escalado (Scaled conjugate gradient). Solo el algoritmo de gradiente conjugado que no requiere búsqueda lineal. Un algoritmo de entrenamiento de propósito general, muy bueno. trainbfg BFGS método quasi‐Newton. Requiere almacenamiento de la Hessian matrix aproximada y tiene más cálculo en cada iteración, pero usualmente converge en pocas iteraciones trainoss Método One step secant. Compromiso entre los métodos gradiente conjugado métodos quasi‐Newton. trainlm Algoritmo Levenberg‐Marquardt. El algoritmo de entrenamiento más rápido para redes de tamaño moderado. Tiene características de reducción de memoria para conjuntos de entrenamiento grandes. Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 93 trainbr trainlm Regularización Bayesiana. Modificación del algoritmo de entrenamiento Levenberg‐ Levenberg‐ Marquardt para producir redes que generalizan bien. Reduce la dificultad de determinar la arquitectura óptima de la red. Tabla 1.- Algoritmos que implementa Matlab para un PMC
La tabla 1, presenta una lista que resume las funciones para entrenamiento de redes con retro propagación que contiene el ‘Neural Network Toolbox’ de Matlab: SOBRE‐ENTRENAMIENTO Un problema que puede ocurrir al entrenar redes neuronales es que la red puede sobredimensionar el conjunto de entrenamiento y no realizar bien la generalización para datos diferentes al conjunto de entrenamiento. Esto puede prevenirse realizando un entrenamiento con trainbr, además puede prevenirse usando una detención temprana con cualquier otra rutina de entrenamiento, esto requiere que el usuario pase un conjunto de validaciones al algoritmo de entrenamiento adicional al conjunto de entrenamiento. Para producir un mejor entrenamiento es muy útil analizar si la respuesta de la red después del entrenamiento está completa. Matriz de confusión. En el campo de Inteligencia Artificial se usa la matriz de confusión en el aprendizaje supervisado. En la que las columnas representan las instancias predichas (la salida del sistema, Y) y las filas las instancias reales (los yd). De esta forma es muy fácil saber que clase está confundiendo el sistema. Para aclarar este concepto, revise el ejercicio 1 y los resultados de la tabla 2 y 3 REVISIÓN DE ALGUNOS DEMOS DE MATLAB: Realizar los siguientes demos y contestar las preguntas planteadas. GENERALIZACIÓN EN REDES CON RETROPROPAGACIÓN Existe el problema que al tener muchas neuronas ocultas, la red pierde la capacidad de generalizar y se presta a errores, la demostración nnd11gn, ilustra este hecho. Para probar esta demostración basta con modificar el número de neuronas ocultas y el grado de dificultad de manera que se visualice que la red tiende a aprender en forma exacta los datos de entrenamiento, pero pierde la capacidad de generalizar, como se ilustra en la figura a continuación Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 94 Resultado para una red con 3 neuronas ocultas Resultado para una red con 9 neuronas ocultas Ilustración 4.‐ Al aumentar en número de neuronas la red aprende muy bien los datos con los que aprendió, pero pierde la capacidad de generalización, es decir comete errores con datos nuevos Pregunta: ¿Qué ocurre cuando se aumenta la complejidad del problema, como lo explica? FUNCIÓN DE GRADIENTE DESCENDIENTE (MÁS EMPINADA) ‐ RETRO‐ PROPAGACIÓN Ilustración 5.‐ Gradiente Descendiente – W1(1,1) W2(1,1) ‐ Esquina Inferior Derecha
Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 95 Esta aplicación muestra tres superficies de error, aquí se puede observar como el algoritmo alcanza el primer mínimo que encuentra. Probar cada región. Preguntas: ¿Identifique la arquitectura de la red de la ilustración 7? ¿Pruebe en las regiones sin líneas, si la respuesta no se desplaza: que significa esto y cómo se explica? ¿Qué significa la superficie, qué representa? FUNCIÓN DE GRADIENTE DESCENDIENTE CON MOMENTO – RETROPROPAGACIÓN Este algoritmo, es el mismo anterior, solamente que se añade el término de momento. Ilustración 6.‐ Gradiente Descendiente con Momento Preguntas: 1. ¿En qué lugares se acelera la convergencia con el término momento y en cuáles no ocurre lo mismo? ¿Cómo lo explica? 2. ¿Por lo general, se aconseja utilizar un valor de la tasa de aprendizaje (u) menor a 1, como explica el uso de valores más altos? Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 96 3. ¿Cómo influye la tasa de aprendizaje en el desempeño de una red con Función de Gradiente Descendiente con Momento? TAREA DE LABORATORIO: PERCEPTRON MULTICAPA Y CLASIFICACIÓN DE PATRONES UN PEQUEÑO PROBLEMA. 1. Genere un conjunto que representen dos clases con aproximadamente el mismo
número de datos para cada clase. La primera clase que sean los datos que se
posicionen dentro de un círculo y las fuera del circulo la clase 2.
a) Veamos el código en Matlab para generar los datos.
cont1=0; % definimos dos contadores para la primera y segunda clase
cont2=0;
xc=2.5/2; % definimos un radio de 2.5 para que el número de datos
sea aproximadamente el mismo para cada clase.
hold on;
X= rand(2,500)*2.5; % generación aleatoria de números (x1 y x2)
entre 0 y 2.5
for i = 1:500 % Verificamos si caen dentro del circulo y le
asignamos la clase 0 (o -1)
if (sqrt((X(1,i)-xc)^2 + (X(2,i)-xc)^2 )) > 1;
cont1=cont1+1;
Yd(i) = 0;
plot(X(1,i),X(2,i),'bo');
elseif (sqrt((X(1,i)-xc)^2 + (X(2,i)-xc)^2 )) <1;
% Si no es así le asignamos como clase 1
cont2=cont2+1;
Yd(i) = 1;
plot(X(1,i),X(2,i),'r*');
end
end
Veamos los resultados
Para esta corrida, el número de datos de la clase 1 es 248 y el de la segunda es 252
Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 97 2.5
0
0
2.5
Ilustración 7‐ Datos generados que representan la clase 1 (rojo) y la clase ‐1 (azul). a)
Una vez que tenemos los datos tanto de entrada (variable X) y de salida (variable
Yd), separemos el 50% para datos de entrenamiento, 25% para validación y 25%
para prueba y entrenemos la red.
Q=500;
% En primer lugar definimos los índices para las 3 tipos de datos
iprueba = 2:4:Q;
ivalida = 4:4:Q;
ientren = [1:4:Q 3:4:Q];
% Con estos índices separamos los datos respectivos
val.P = X(:,ivalida); val.T = Yd(:,ivalida);
pru.P = X(:,iprueba); pru.T = Yd(:,iprueba);
entX = X(:,ientren); entYd = Yd(:,ientren);
red = newff(minmax(entX),[5 1],{'tansig' 'logsig'},'traingd');
% En este punto podemos redefinir los parámetros de la red
% Dejemos los parámetros sin modificar y Entrenamos la red.
[red,tr]=train(red,entX,entYd,[],[],val,pru);
Los parámetros definidos por defecto no son los mejores para este algoritmo, por lo que la respuesta de la red es muy mala. Luego de entrenar la red, se obtiene el grafico de la figura Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 98 Performance is 0.186483, Goal is 0
0
Training-Blue Validation-Green Test-Red
10
-1
10
0
100
200
300
400
500
600
1000 Epochs
700
800
900
1000
Ilustración 8. Como puede observarse los datos de entrenamiento normalmente generan un error menor, pero en este caso hemos modificado el número de épocas.
b) Finalmente simulemos la red para observar que
tan bien está generalizando para los datos de
entrenamiento y validación y prueba.
2.5
2
1.5
Yt=sim(red,entX); Yv=sim(red,val.X);
1
c) Grafique los datos para cada conjunto y verifique
si clasifica bien
Como se observa en el grafico, la clasificación es
muy pobre
0.5
0
0
0.5
1
1.5
2
2.5
d) Cuál es el número de datos clasificados correctamente y fallidos para cada
conjunto.
Clase 1
Clase 2
Clase 1
42
24
Clase 2
78
106
Tabla 2.- La matriz muestra que la red clasifica
bien como clase 1 solo 42 datos y falla en 78,
mientas que 106 como clase 2 y falla en 24
Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 99 Aumente el número de épocas a 10000 y pruebe nuevamente los resultados y entrene nuevamente la red y verifique las respuestas de la misma. 2.5
2
1.5
Los resultados son mejores pero aún se pueden mejorar. En este punto hay que trabajar con diferentes hacer pruebas con los diferentes parámetros de la red. 1
0.5
0
Otra opción es cambiar de algoritmo. Uno de los mejores 0
0.5
1
1.5
2
2.5
algoritmos para estas redes es el Levenberg‐Marquardt. Si entrenamos con este algoritmo, la red prácticamente clasifica el 100% de los datos de manera correcta tanto de los datos de entrenamiento como los de validación. No es necesario realizar cambios a los parámetros definidos por defecto. red = newff(minmax(entX),[5 1],{'tansig' 'logsig'},'trainlm');
Entrenado y simulando la red se tienen los siguientes resultados. Entrenamiento
Clase 1
Clase 2
Validación
Clase 1
Clase 2
Clase 1
Clase 2
120
0
0
130
Clase 1
Clase 2
62
1
0
62
Tabla 3.- matriz de confusión tanto para los datos de entrenamiento y los datos de validación. Como se
observa la red clasifica muy bien todos los datos a excepción de uno de la clase 2 que lo clasifica como
clase 1.
TRABAJO A REALIZAR 2. Qué cambia si en vez de dos clases se tiene 3 clases. Genere un problema de 3
clases e intente resolverlo.
a. NOTA. Tenga en cuenta la codificación
b. Reporte resultados, para entrenamiento y validación.
3. Descarge el archivo de datos lab2train1, y el archivo de prueba lab2test1 del servidor.
Cada ejemplo contiene un vector de 4 datos (una fila en el archivo). Los dos
primeros elementos de cada vector da las coordenadas del dato y el tercer elemento
es el valor objetivo (0 or 1).
Use los datos de entrenamiento para entrenar una red PMC. Entonces pruebe la red
entrenada con los datos de prueba. Usted debe usar el algoritmo desarrollado en
clase. Para cada experimento descrito luego debe repetir el mismo experimento
10 veces y reportar la media y desviacion estándar del resultado. Los sigueintes
parámetros serán usados, a menos que se diga lo contrario.
Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 100 9 Maximo número de épocas usadas para el entrenamiento = 1000,
net.trainParam.epochs=1000
9 Datos de entrada serán escalados a [−5, 5], y las muestras de salida a [0.2 0.8].
9 La tasa de aprendizaje por defecto μ = 0.1 (net.trainParam.lr) y momento =
0.8. net.trainParam.mc
9 Las neuronas ocultas usan funciones de activación tangente hyperbolica y las de
salida función de activación sigmuidal. La configuración del PMC será 2-2-2
(dos neuronas de entrada, 2 ocultas y 2 de salida).
Consideremos el primer caso: Tabule el valor medio y la desviación estándar del
conjunto de prueba para una tasa de aprendizaje de μ = 0.01, 0.1, 0.2, 0.4, 0.8. Para
cada valor de μ use dos valores diferentes de momento: β = 0 y 0.8. Recuerde que
para cada combinación de u y β se debe realizar 10 ensayos. Discuta los resultados
brevemente.
El siguiente programa en Matlab nos permite realizar esta tarea: En este código no
está considerado el hecho de escalar los datos de entrada ni de salida.
datE=load('lab2train1.txt');
datP=load('lab2test1.txt');
xE=datE(:,1:2);
ydE=datE(:,3:4);
xP=datP(:,1:2);
ydP=datP(:,3:4);
for k=1:2
if k==1
beta=0;
else
beta=0.8;
end
for j=1:5
for i=1:10
if j==1
net = newff(minmax(xE'),[2 2],{'tansig' 'logsig'},'traingdm');
net.trainParam.epochs=1000;
net.trainParam.lr=0.01;
net.trainParam.mc=beta;
net=train(net,xE',ydP');
y=sim(net,xP');
[C, R] = CONFMAT(y', ydP);
rate(i,j+5*(k-1))=R(1);
else
net = newff(minmax(xE'),[2 2],{'tansig' 'logsig'},'traingdm');
net.trainParam.epochs=1000;
net.trainParam.lr=0.1*(j-1);
net.trainParam.mc=beta;
net=train(net,xE',ydP');
y=sim(net,xP');
Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 101 [C, R] = CONFMAT(y', ydP);
rate(i,j+5*(k-1))=R(1);
end
end
end
end
m=mean(rate);
ds=std(rate);
x=[0.01, 0.1, 0.2, 0.4, 0.8];
subplot(2,1,1)
plot(x,m(1:5),x(1:5),m(1:5)+ds(1:5),'m',x(1:5),m(1:5)ds(1:5),'m');
title('Perceptrón Multicapa');
xlabel('u');
ylabel('tasa de aciertos');
subplot(2,1,2)
plot(x,m(6:10),x,m(6:10)+ds(6:10),'m',x,m(6:10)-ds(6:10),'m');
xlabel('u');
ylabel('tasa de aciertos');
Perceptrón Multicapa: caso a) beta=0
100
80
60
40
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.7
0.8
Perceptrón Multicapa: caso b) beta=0.8
80
70
60
50
40
0
0.1
0.2
0.3
0.4
0.5
taza de aprendizaje: u
0.6
Ilustración 9.‐ resultados de promediar 10 corridas para los cinco valores de u con los dos valores de beta. Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 102 a) Tabule el valor medio y la desviación estándar de la tasa de clasificación del
conjunto de prueba cuando se tiene un PMC 2-h-2 donde el número de neuronas
ocultas h = 2, 5, 20. Discuta los resultados brevemente.
b) Tabule el valor medio y la desviación estándar de la tasa de clasificación para el
conjunto de prueba cuando la configuración del PMC contiene más de una capa
oculta. Realice experimentos específicamente para las siguientes: 2-3-2,
2-3-3-2,
2-3-3-3-2. Discuta los resultados brevemente.
c) Basado en los resultados experimentales llevados en (a) - (c), determine cuál será la
mejor selección de μ y β y la configuración del PMC que de resultados
satisfactorios. Brevemente justifique su selección
d) Para la red seleccionada en la parte (d), ilustre la región de decisión de cada clase
en el espacio de entrada 2D x1-x2. Un camino es evaluar la salida del PMC sobre
una malla de puntos dentro de una región cuadrada con fronteras (−10, −10) y (10,
10). En Matlab, la función meshgrid será útil para generar el grafico
NOTA. Para la tasa de clasificación puede usar la matriz de confusión codificada en el
archivo confmat.m (Ian T Nabney , 2001), descargue el archivo del directorio de
laboratorio :
[C, Tasa] = confmat(Y, Yd)
Donde Y es la salida calculada por la red y Yd la salida conocida. C es la matriz de
confusión y Tasa es un vector con dos números: El porcentaje de datos correctamente
clasificados y el número de datos.
4. Entrene al PMC usando validación en tres formas
Descarge los archivos vino1.txt, vino2.txt, y vino3.txt del servidor. Estas son 3 particiones
de los datos para el propósito de reconocimiento de vino. El espacio de entrada o de
características es de dimensión 13, y hay 3 clases. El objetivo de este problema es
encontrar la configuración óptima de un PMC con una capa oculta, usando la validación
de tres formas. La función de activación para la capa de salida será sigmoidal y para la
capa oculta será tangente hyperbolica (tangencial). Para cada valor de h, lleve los
siguientes pasos de entrenamientos y prueba:
Entrene con vino1, vino2, y pruebe la red entrenada usando vino3.
Entrene con vino2, vino3, y pruebe la red entrenada usando vino1.
Entrene con vino3, vino1, y pruebe la red entrenada usando vino2.
Revise el ejemplo que viene en Matlab en la sección Sample Training Session del
capítulo de Backpropagation. Aquí se hace un pre-análisis de los datos.
Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 103 Los resultados de prueba serán promediados anadiendo la correspondiente matriz de
confusión y calcule la tasa de clasificación de la matriz de confusión combinada.
Nuestro objetivo es seleccionar el valor de h, 1 ≤ h ≤ 10 que rinda la clasificación más
alta y calcule de acuerdo al siguiente método.
(a) (1.0 puntos) Discuta los pasos que realizó para llevar el análisis de los datos y preprocesamiento antes de aplicarlos al algoritmo de entrenamiento del PMC.
(b) (1.0 puntos, CC) Suministre una tabla que liste el valor de h, versus la
correspondiente clasificación. Discuta brevemente la ventaja potencial y desventaja
de esta aproximación
Jorge Aguilar J. | Laboratorio: Redes con Conexiones hacia adelante 104