MatLab Toolbox de Redes Neuronales REDES NEURONALES EN MATLAB Entradas concurrentes REDES ESTÁTICAS | Entradas Secuenciales en tiempo | REDES DINÁMICAS | | por Gustavo Meschino © 2006 SUB-OBJETOS MatLab Toolbox de Redes Neuronales | Objeto Red Æ número de capas Æ número neuronas por capa Æ conectividad entre capas inputs: layers: outputs: targets: biases: inputWeights: layerWeights: | {1x1 {1x1 {1x1 {1x1 {1x1 {1x1 {1x1 cell} cell} cell} cell} cell} cell} cell} # # # # # # # SUB-OBJETOS ENTRADAS CAPAS SALIDAS SALIDAS DESEADAS UMBRALES PESOS DE LA CAPA DE ENTRADA PESOS DE CAPAS ESCONDIDAS Distintas funciones para crear distintos tipo de Redes: newp (perceptrón), newff (feed forward), newlin (neurona lineal)... MatLab Toolbox de Redes Neuronales | Las neuronas de una capa tienen todas la misma función de transferencia indicadas en: net.transferFcn (para el peceptrón hardlim) | También se indica la función de entrada (el cálculo del campo local): net.netInputFcn (para el peceptrón netsum) | Los parámetros net.inputWeights y net.layerWeights especifican la función de entrenamiento y sus parámetros (y otras cosas). | Se dan las funciones de inicialización, perfomance y entrenamiento y sus parámetros functions: adaptFcn: initFcn: performFcn: trainFcn: Toolbox de Redes Neuronales Funciones seleccionables | initFcn Æ función con que se inicializalizan pesos y umbrales. | trainFcn Æ función de entrenamiento Batch. Se da una sola para toda la red (es la opción que se utiliza) Æ función de entrenamiento Incremental (on line) Se puede dar una función de entrenamiento por cada capa conectada (sin gran aplicación). 'trains' 'initlay' 'mae' 'trainc' parameters: adaptParam: .passes initParam: (none) performParam: (none) trainParam: .epochs, .goal, .show, .time Toolbox de Redes Neuronales Parámetros seleccionables | adaptParam: .passes Æ Cantidad de “pasadas” para la función ‘adapt’. | trainParam: .epochs Æ Cantidad de épocas máxima .goal Æ Error mínimo al que se quiere llegar .show Æ Cada cuántas épocas se mostrarán resultados Número de épocas. | adaptFcn | performFcn Æ función de performance, cuantifica un valor para el error que va comentiendo la red. ‘mse’: mean squared error, ‘mae’: mean absolute error, etc. .time Se dispone de unas 20 funciones de entrenamiento (trainFcn), cada una con sus características de velocidad, requerimientos de memoria, etc. Otros trainParam (dependiendo del tipo de red creada y de la función de entrenamiento o adaptación) min_grad, mu, mu_dec, mu_inc, mu_max, lr ... | y se actualizará el gráfico de entrenamiento Æ Tiempo máximo de entrenamiento 1 Toolbox de Redes Neuronales Funciones de entrenamiento | trainFcn = ‘traingd’ (demo nnd12sd1) Æ función descenso por el gradiente. Se indica el número de épocas (epochs), cada cuántas iteraciones se muestran los resultados (show), el mínimo esperado para la función de error (goal), el tiempo máximo (time), los gradientes máximos y mínimos admitidos (min_grad, max_grad) y la tasa de aprendizaje (lr). | trainFcn = ‘traingdm’ (demo nnd12mo) Æ función descenso por el gradiente con momento. Se indica además el valor de momento (mc). Otra opción permite indicar que si una nueva evaluación del error es PEOR que otra hallada según el cociente entre ambas (max_perf_inc) los cambios en los pesos se descartan y se hace mc = 0. | Toolbox de Redes Neuronales Pesos y Umbrales IW: {1x1 cell} containing 1 input weight matrix LW: {1x1 cell} containing no layer weight matrices b: {1x1 cell} containing 1 bias vector | IW (i) Æ es una matriz celda bidimensional que contiene los pesos de las conexiones entre las entradas y la capa i. | LW (i,j) Æ contiene la matriz de pesos de las conexiones desde la capa j hacia la capa i. | b (i) Æ contiene los umbrales de las diferentes capas. LW (2,1) IW (1) IW (2) = 0 IW (3) = 0 trainFcn = ‘traingdx’ y trainFcn = ‘traingda’ Æ como las anteriores pero ‘lr’ va disminuyéndose si el error va empeorando de una iteración a la otra (entrena mucho más rápido). Toolbox de Redes Neuronales Diferencia entre adapt y train LW (3,2) Ejemplo: Perceptrón Simple Tarea de Clasificación (1/3) P Æ Entradas para entrenamiento T Æ Salidas Deseadas Efectúan el ENTRENAMIENTO de una red neuronal. ENTRENAMIENTO INCREMENTAL (On-line) ENTRENAMIENTO POR LOTES (Batch) adapt train ...cada dato del conjunto de entrenamiento Los pesos se adaptan luego de la presentación de... Un Vector de Entrada P = [1.359 1.253 1.418 1.528 … 2.163 2.883 2.772 3.310 … ] ...el conjunto de entrenamiento completo (una época) T = [ Si los datos de entrenamiento son celdas Æ Modo Batch Si son matrices Æ Modo On-Line Es mucho más lento que train Siempre Æ Modo Batch Se dispone de más cantidad de algoritmos muy eficientes. Exceptuando redes con retardos temporales, siempre es conveniente. Ejemplo: Perceptrón Simple Tarea de Clasificación (2/3) percep = train(percep, P, T); P Æ Entradas para entrenamiento T Æ Salidas Deseadas Entrena el perceptrón en modo batch. percep = adapt(percep, P, T); 1 1 0 1 … ] Salida deseada para esa Entrada percep = newp(minmax(P), CantidadNeuronas); Crea un Perceptrón simple (de una sola capa). Ejemplo: Perceptrón Simple Tarea de Clasificación (3/3) sali = sim(percep, newP); Consulta el perceptrón para conocer su salida dado el conjunto de entradas almacenado en newP. Entrena el perceptrón en modo on line (aunque depende del formato de P y T). Un Vector de Entrada plotpv(P,T) Hace el gráfico de los datos y clases. Pesos = percep.IW{1,1}; Umbrales = percep.b{1}; plotpc(Pesos, Umbrales) Traza la recta de discriminación. newP = [1.877 1.443 1.314 1.211 … 3.333 4.843 2.722 6.513 … ] sali = [ 1 0 0 1 … ] Salida obtenida para esa Entrada 2 Ejemplo: Backpropagation Función lógica XOR P Æ Entradas para entrenamiento T Æ Salidas Deseadas P = [0 1 0 1 0 0 1 1] T = [0 1 1 0] PREPARACIÓN DE LOS DATOS DOS VECTORES DE DATOS: x1 = [0.1 1000 50] x2 = [0.3 1100 51] net = newff([0 1; 0 1],[2 1],{'logsig','logsig'}); Funciones de transferencia para cada capa. La tercera dimensión tiene una diferencia del 2 %. La segunda dimensión tiene una diferencia del 10 %. La primera dimensión tiene una diferencia del 300 %. Cantidad de neuronas en cada capa. DISTANCIA EUCLIDEANA ENTRE AMBOS: Valores Mínimos y Máximos para cada entrada (así se indica también la cantidad de entradas) . DISTANCIA = sqrt(sum((x1-x2).^2)) = 100.0052 Crea una red feed forward. ¡¡ La diferencia del 10% enmascara las otras diferencias !! net = train(net, P, T); salida = sim(net, P); PREPARACIÓN DE LOS DATOS PREPARACIÓN DE LOS DATOS | Supongamos que los rangos de las dimensiones son los siguientes: rangos = [1 2000 100 0 0 0] | Si cambiamos la escala de las variables, podemos pasar a todos los diferentes rangos al rango [-1, 1] mediante una función lineal. LOS DOS VECTORES DE DATOS EN EL NUEVO RANGO: x1 = [-0.8000 x2 = [-0.4000 0 0.1000 0] 0.0200] La tercera dimensión tiene una diferencia del 0.02 %. La segunda dimensión tiene una diferencia del 1 %. La primera dimensión tiene una diferencia del 100 %. DISTANCIA EUCLIDEANA ENTRE AMBOS: Rangos [0, 1] Æ [0, 2000] Æ [0, 100] Æ [-1, +1] [-1, +1] [-1, +1] DISTANCIA = sqrt(sum((x1-x2).^2)) = 0.4128 ¡¡ Ahora la mayor diferencia es la que da la distancia !! PREPARACIÓN DE LOS DATOS PREPARACIÓN DE LOS DATOS NORMALIZAR Æ modificar los datos originales a través de transformaciones tales que queden en un rango específico. “ESTANDARIZACIÓN” DE LOS DATOS MEDIA = 0 y DESVIACIÓN STANDARD = 1 NORMALIZACIÓN LINEAL AL RANGO [-1, +1] [Pn, meanp, stdp, Tn, meant, stdt] = prestd(P, T) [Pn, minp, maxp, Tn, mint, maxt] = premnmx(P, T); Datos “estandarizados”. Datos normalizados entre -1 y +1. Datos originales. Datos originales. APLICACIÓN DE UNA NORMALIZACIÓN LINEAL ANTERIOR APLICACIÓN DE UNA ESTANDARIZACIÓN ANTERIOR [PN] = trastd(P, meanp, stdp); [PN] = tramnmx(P,minp,maxp); DESNORMALIZACIÓN DES-ESTANDARIZACIÓN [P, T] = postmnmx(PN, minp, maxp, TN, mint, maxt); [P, T] = poststd(PN, meanp, stdp, TN, meant, stdt); 3 Ejemplo: PREDICCIÓN DE LA DEMANDA ELÉCTRICA (1/4) Ejemplo: RECONOCIMIENTO DE CARACTERES ESCRITOS Load199X.xls Contiene los datos cada media hora de la demanda eléctrica durante todos los días de los años 1997 y 1998. Temperature199X.xls Temperaturas promedio de todos los días de los años 1997 y 1998. Holidays.xls Contiene los días feriados o vacaciones de los años 1997 y 1998. 31 MAPE = 100 ∑ i =1 LRi − LPi LRi 31 LPi – es el valor PREDICHO por la red de la máxima demanda eléctrica del día i del año 1999. M = max( LRi − LPi ) Ejemplo: PREDICCIÓN DE LA DEMANDA ELÉCTRICA (2/4) Ejemplo: PREDICCIÓN DE LA DEMANDA ELÉCTRICA (3/4) ENERO 1999 – DATOS ORIGINALES REGISTRADOS ÉSTOS SE PRETENDÍAN PREDECIR CON LA RED 30.0 25.0 20.0 15.0 10.0 5.0 0.0 -5.0 -10.0 -15.0 820 800 780 1 16 31 46 61 76 91 106 121 136 151 166 181 196 211 226 241 256 271 286 301 316 331 346 361 760 Max load [MW] Temperatura [ºC] Serie de TEMPERATURAS de los años 1997 y 1998 día por día Días del año 1998 Serie de CONSUMOS registrados en los años 1997 y 1998 día por día Máxima Demanda registrada [GWatt] MEDICIÓN DEL ERROR COMETIDO LRi – es el valor REAL de la máxima demanda eléctrica del día i del año 1999. 1000 800 600 740 720 700 680 660 640 400 620 200 600 0 1 1 17 33 49 65 81 97 113 129 145 161 177 193 209 225 241 257 273 289 305 321 337 353 Días del año 1998 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Day Ejemplo: PREDICCIÓN DE LA DEMANDA ELÉCTRICA (4/4) ENERO 1999 – RESULTADOS OBTENIDOS CON DIVERSOS DISEÑOS DE REDES 900 MAX [MW] 850 800 750 700 650 600 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 Day Original Chih Jen Lin David Esp Brockman Werner A Javier Marin 4