Download En esta segunda tarea de EL4106 Inteligencia - U
Document related concepts
Transcript
EL4106 Inteligencia Computacional Tarea 2: Red Neuronal Feed-Forward con Backpropagation Matías Mattamala A. 29 de Abril de 2013 Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés Contenido 1. Introducción ................................................................................................................................ 2 2. Objetivos ..................................................................................................................................... 2 3. Redes Neuronales Artificiales ..................................................................................................... 3 3.1 Definiciones......................................................................................................................... 3 3.1.1 Red Neuronal Artificial (RNA) ......................................................................................... 3 3.1.2 Neurona Artificial ............................................................................................................ 3 3.1.3 Capa de entrada ............................................................................................................. 4 3.1.4 Capa oculta ..................................................................................................................... 4 3.1.5 Capa de salida ................................................................................................................ 4 3.1.6 Pesos ............................................................................................................................... 5 3.1.7 Bias .................................................................................................................................. 5 3.1.8 Función de activación ..................................................................................................... 5 3.2 Respecto a la dimensionalidad de las capas ocultas ........................................................ 5 3.3 Algoritmo de Backpropagation ......................................................................................... 6 3.4 Sobreentrenamiento........................................................................................................... 8 4. Problema propuesto ................................................................................................................ 10 5. Desarrollo .................................................................................................................................. 10 6. Resultados ................................................................................................................................. 13 7. Análisis de Resultados .............................................................................................................. 20 8. Conclusiones ............................................................................................................................. 22 9. Referencias ................................................................................................................................ 23 1 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 1. Introducción En esta segunda tarea de EL4106 Inteligencia Computacional, se busca comprender los conceptos asociados al segundo clasificador estudiado en el curso: Redes Neuronales Artificiales (RNA). Las Redes Neuronales Artificiales son una técnica de clasificación de datos, basada en representar matemáticamente una neurona y su modo de operación en conjunto, emulando lo que realizan en el cerebro humano. En el caso particular de este trabajo, se realizará el reconocimiento y clasificación de patrones de 16 componentes que representan números manuscritos, los cuales serán clasificados como dígitos del 0 al 9. Para ello, se utilizará nuevamente una base de datos del Repositorio de Aprendizaje de Máquinas de la Universidad de California, Irvine, llamado Pen-Based Recognition of Handwritten Digits Data Set. Para desarrollar el trabajo, en primer lugar serán explicados algunos conceptos básicos de las RNA, de modo de introducir la base teórica necesaria que fue utilizada para abarcar este problema. Se aprovecharan de explicar también algunos conceptos relacionados con el método de uso de la red, como así también una métrica para evaluarla. Posteriormente se dará paso a la explicación de los experimentos realizados, donde se presentarán los principales resultados, que posteriormente serán analizados en conjunto de modo de reconocer las diferencias que existen al variar parámetros del modelo. Finalmente se presentarán las principales conclusiones del trabajo realizado, comentando algunos aspectos de las RNA que fueron observados, como así también comparándolas con la técnica de clasificación vista anteriormente, el Clasificador Bayesiano. 2. Objetivos 2 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés Este trabajo tiene por objetivo ser un acercamiento práctico a los conceptos teóricos de las redes neuronales, donde se aplicarán los conceptos ya estudiados. Es importante señalar que a pesar de que los conceptos no serán aplicados explícitamente, ya que no se realizará una implementación de los algoritmos, sí serán útiles y se utilizarán para la implementación de los resultados. La experiencia también tiene por objetivo conocer las los toolbox de MATLAB, herramientas ya implementadas con que cuenta para la solución de estos problemas. 3. Redes Neuronales Artificiales 3.1 Definiciones En primer lugar, es importante definir algunos conceptos claves para el desarrollo del trabajo. El primero de ellos, es el de Red Neuronal Artificial. 3.1.1 Red Neuronal Artificial (RNA) Sistema de clasificación multiclase, basado en las interconexiones y paralización de estructuras más pequeñas, denominadas neuronas. Las RNA están inspiradas en el modelo biológico de una red neuronal, donde millones de neuronas se interconectan entre sí para realizar distintos procesos biológicos. Con esto se hace necesario definir lo que es una neurona artificial. Figura 1: Red Neuronal Artificial Multicapa. Fuente: Wikimedia Commons 3.1.2 Neurona Artificial 3 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés Es la unidad más básica de este tipo de estructuras. El primer modelo de ellas fue planteado por McCulloch y Pitts, el cual contempla una estructura basada en muchas entradas ponderadas, un sumador de las entradas, y una función de activación que depende de la suma de las entradas. Figura 2: Modelo matemático de una neurona, tipo perceptrón. Fuente: Wikimedia Commons 3.1.3 Capa de entrada Corresponde al conjunto de neuronas que reciben las entradas de la red neuronal. Cada una de estas entradas es ponderada por un peso que depende de la capa. El número de neuronas de la capa de entrada depende del número de componentes de la entrada del sistema. 3.1.4 Capa oculta Conjunto de capas intermedias entre la capa de entrada y la capa de salida. Puede existir o no existir una capa oculta en la red, dependiendo de la aplicación que se le de. Respecto al tamaño, no existe un criterio que defina la dimensión, aunque más adelante se hablarán de algunos números sugeridos. 3.1.5 Capa de salida Conjunto de neuronas que determinan la salida del sistema. EL número de neuronas en la capa es igual al orden de la salida del sistema. 4 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 3.1.6 Pesos Ponderadores o amplificadores de las entradas de una determinada neurona. Pueden ser distintos para cada entrada, pero neuronas en las misma capa poseen los mismos pesos para cada entrada. 3.1.7 Bias Entrada constante que se ingresa a la red en cada neurona. Sirve para ajustar la activación de la neurona frente a una determinada suma de entradas. 3.1.8 Función de activación Función de control de la neurona. Se activa cuando la suma de las entradas ponderadas con el bias es mayor que un cierto umbral dado por la función. Por lo general una función de activación es una función suave (como una función sigmoidal o lineal), aunque también pueden utilizarse funciones de activación discontinuas, como un escalón. 3.2 Respecto a la dimensionalidad de las capas ocultas Un problema recurrente al usar redes neuronales, consiste en escoger cuántas capas ocultas y de cuantas neuronas debe disponer cada una. Respecto al número de capas ocultas, ese es un problema más bien resuelto en la literatura, el cual se puede resumir en la Tabla 1: Número de Aplicación Capas Ocultas 0 Clasificación o toma de decisiones linealmente separables. 1 Problemas donde se realiza un mapeo continuo de un espacio finito a otro. 2 Problemas más complejos que involucran mapeos continuos y suaves con precisión arbitraria. Tabla 1: Número de Capas ocultas de una Red Neuronal dependiendo de la aplicación El número de neuronas de cada capa oculta es un problema más complejo, debido a que no existe un criterio claro o demostrado matemáticamente. Es por ello que generalmente se 5 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés realizan ensayos del tipo prueba y error, donde se compara el rendimiento que se tiene para diversos valores. Aun así, existen algunas reglas generales (rules of thumb1) que se aplican en esta decisión, que conforman la base sobre la cual se realizan los ensayos. Algunas de ellas son: El número total de neuronas ocultas debería estar entre el tamaño de la capa de entrada y el tamaño de la capa de salida. El número debería ser 2/3 del tamaño de la capa de entrada, más el tamaño de la capa de salida. El número debería ser menos que el doble del tamaño de la capa de entrada. Es importante reiterar que estos criterios no presentan en ningún caso la solución definitiva al problema, sino que se basan en la experiencia de la gente que tiene más experiencia en su uso, de modo de evitar los principales problemas asociados a los casos extremos: Si el número de neuronas es muy pequeño, puede existir underfitting, o subajuste de la red a los datos, por lo que tendría problemas para operar con conjuntos de datos muy complicados. Al contrario, si se utilizan muchas neuronas, puede existir overfitting o sobreajuste de los datos, lo que dificultaría el reconocimiento de información en entradas nuevas, ya que el criterio de decisión sería más estricto, ajustado al conjunto de entrenamiento. EL segundo problema ocurre obviando el problema anterior, ya que suponiendo una buena muestra de datos, podría existir también un exceso en el tiempo de entrenamiento de la red. 3.3 Algoritmo de Backpropagation Al utilizar redes neuronales del tipo feedforward, se requiere que exista un ajuste de los pesos asociados a las conexiones, de modo de que exista un aprendizaje por parte de la red. Para realizar este ajuste de peso existen muchas técnicas, dentro de las cuales se encuentra el Algoritmo de Backpropagation, o Retropropagación del error. En palabras simples, este algoritmo se basa en la minimización del Error Cuadrático Medio (Mean Squared Error, MSE, en inglés) que existe entre la salida de la red y el valor esperado que se tiene dada una cierta entrada. Se basa en el supuesto en que el error depende de los pesos aplicados en la entrada, por tanto se busca ajustar los pesos de modo de minimizar el error. Este problema que parece local a una 1 Jeff Heaton, The number of hidden layers. Disponible en http://www.heatonresearch.com/node/707 6 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés neurona, puede aplicarse a todas las neuronas existentes en una capa y, más aún, a toda la red neuronal si se consideran las entradas y salidas correspondientes a cada capa. El algoritmo plantea el siguiente procedimiento, para una red dos capas (una capa oculta). Aplicar un vector de entrada y calcular los valores de todas las activaciones en cada capa y en cada neurona. Para el caso de una red con una capa oculta, las activaciones van a estar asociadas solamente a la capa oculta y a la salida, las cuales se denominan 𝑢 y 𝑎, respectivamente. 1) Evaluar la variación que existe en el error, respecto a la activación de la capa de salida. Esto se realiza con la Ecuación 1: Δ𝑖 (𝑡) = (𝑑𝑖 (𝑡) − 𝑦𝑖 (𝑡)) ⋅ 𝑔′ (𝑎𝑖 (𝑡)) (1) Donde Δ𝑖 (𝑡): Denota la variación del error respecto a la activación de la neurona i-ésima. 𝑑𝑖 (𝑡): Es la salida esperada de la neurona i-ésima. 𝑦𝑖 (𝑡): Salida calculada por la red en el instante 𝑡. 𝑔′ (𝑎𝑖 (𝑡)): Es la derivada de la función de activación respecto a la activación 𝑎𝑖 (𝑡) 2) Retropropagar el error, de modo de obtener la variación que existe en el error de cada capa oculta respecto a la activación 𝑢 en cada una de ellas. Esto se calcula con la Ecuación 2: δ𝑖 (𝑡) = 𝑔′ (𝑢𝑖 (𝑡)) ⋅ ∑ Δ𝑘 (𝑡)𝑤𝑘𝑖 (2) 𝑘 Donde δ𝑖 (𝑡): Denota la variación del error en la capa oculta respecto a la activación 𝑢 de la neurona iésima de la capa. 𝑔′ (𝑢𝑖 (𝑡)): Es la derivada de la función de activación de la neurona respecto a la activación 𝑢𝑖 (𝑡) Δ𝑘 : Es la variación del error de la capa anterior respecto a las activaciones de la capa de salida. 7 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 𝑤𝑘𝑖 : Corresponde al peso que existe entre las neuronas 𝑖 y 𝑘 pertenecientes a la capa oculta y la capa de salida, respectivamente. 3) Finalmente, se evalúan los valores de los nuevos pesos asociados a las capas oculta y de salida, con las Ecuaciones 3 y 4: 𝑣𝑖𝑗 (𝑡 + 1) = 𝑣𝑖𝑗 + 𝜂𝛿𝑖 (𝑡)𝑥𝑗 (𝑡) (3) 𝑤𝑖𝑗 (𝑡 + 1) = 𝑤𝑖𝑗 + 𝜂Δ𝑖 (𝑡)𝑧𝑗 (𝑡) (4) 𝑣𝑖𝑗 (𝑡 + 1): Denota el nuevo peso en la neurona de la capa oculta, análogo a 𝑤𝑖𝑗 (𝑡 + 1) con la capa de salida. 𝜂: Denota el factor de aprendizaje de la red. 𝑥𝑗 : Es la entrada j-ésima a la red neuronal. 𝑧𝑗 : Es la entrada j-ésima a la capa de salida, dada por las salidas de la capa oculta. 𝛿𝑖 y Δ𝑖 corresponden a las variaciones del error de la capa respecto a las activaciones, que ya fueron señaladas anteriormente. 3.4 Sobreentrenamiento El problema de sobreentrenamiento ya fue señalado anteriormente, ya que es prácticamente equivalente al concepto de sobreajuste u overfitting. Refiere al problema que existe cuando el clasificador se ajusta demasiado a la muestra de entrenamiento, lo que produce fallas en la clasificación al momento de ingresar un conjunto de test, o bien cuando la red se encuentra operativa. Un ejemplo de ello se puede observar en la Figura 8 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés Figura 3: Ilustración de un problema de Overfitting. La línea punteada denota el clasificador sobreentrenado. En negro el clasificador esperado. Fuente: Wikimedia Commons La técnica principal para evitar el overfitting, consiste en utilizar muestras representativas para entrenar el clasificador, de modo de que aunque exista un ajuste muy estrecho a los datos, aun así se obtendrá un buen resultado debido a que las muestras representan la generalidad del problema. Además se debe tener un número grande de estas. Una segunda técnica, consiste en la selección óptima de los parámetros de la red, tales como un número adecuado de neuronas en las capas ocultas si es el caso, ya que un número mayor de ellas podría producir un aprendizaje más ajustado a la caracterización del problema dada por el conjunto de entrenamiento. 3.5 Matriz de Confusión La Matriz de Confusión es una métrica utilizada en Aprendizaje Supervisado para medir el rendimiento de un algoritmo de acuerdo a sus aciertos. Para ello, la matriz compara los resultados de la clasificación entre 2 o más clases, “contando” el número de veces que clasificó una muestra como una determinada clase. Puede entenderse también como un histograma bidimensional. Clase actual Clase prevista Perro Gato Conejo Perro Gato 5 2 2 6 0 1 Conejo 0 1 10 Tabla 2: Ejemplo de Matriz de Confusión 9 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés Para calcularla, basta tener una matriz de 𝑛 × 𝑛, donde 𝑛 denota el número de clases de la salida. Cada muestra del conjunto de pruebas está asociada a una clase 𝑖 conocida. Se ingresa la muestra en la red, y obtiene una clase 𝑗 a la cual está asociada. Se obtiene entonces un par (𝑖, 𝑗), el cual se busca en la matriz, y se suma un 1 a esa componente de la matriz. La interpretación de la matriz nos entrega información acerca de la precisión del método de clasificación utilizado, dadas unas ciertas configuraciones de la red. Al contrario de la curva ROC, la cual representa el comportamiento completo de los aciertos y errores del modelo, se puede interpretar que la Matriz de Confusión es un punto de la curva, ya que sería necesario variar los parámetros de la red para ir obteniendo distintos resultados, y así caracterizar el desempeño del clasificador. 4. Problema propuesto Como ya fue anunciado anteriormente, el problema propuesto para la Tarea 2 consiste en la clasificación de caracteres manuscritos como dígitos numéricos. Para ello se utilizará una Red Neuronal Feedforward con Backpropagation, donde se utilizará el algoritmo de gradiente descendiente de segundo orden de Levenberg-Marquardt para la fase de aprendizaje. Se utilizará este algoritmo porque a pesar de tener exigencias computacionales más grandes, produce resultados más rápidos. Para implementar la red neuronal se utilizará el Toolbox de Redes Neuronales con los que cuenta MATLAB, el cual ya incluye implementaciones robustas de estos algoritmos. La idea es apreciar los distintos resultados que se tienen al cambiar la configuración de la capa oculta de la red, que se reflejan tanto en la precisión de los resultados como también en los tiempos de ejecución. 5. Desarrollo Para el desarrollo del trabajo, se implementaron solamente 3 scripts, los cuales realizan la división del conjunto en entrenamiento y prueba; el segundo realiza la construcción de la Matriz de Confusión, mientras que el último corresponde al script principal que ejecuta los procedimientos requeridos por la tarea. Script divideSets: Realiza la división de los conjuntos en entrenamiento y prueba. La división se realiza utilizando el porcentaje indicado en la entrada de la función, el cual determina el tamaño 10 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés del conjunto de entrenamiento. Es importante señalar que en este caso la división no se realiza de manera aleatoria, sino que se utiliza el mismo orden en el que venían los datos. Respecto a la representatividad de la división de los conjuntos, se observa que tanto el conjunto de entrenamiento como el de prueba forman conjuntos representativos de la muestra original, le cual puede apreciarse al ejecutar el script principal. Función 1: divideSets(conjunto de dígitos, conjunto de trazos, porcentaje de entrenamiento) function y = divideSets(digits, traces, perc) if perc >=1 perc = perc/100; end [rows columns] = size(digits); trainingSize = floor(columns*perc); fullSize = columns; training = struct('digits', digits(:,1:trainingSize), 'traces', traces(:,1:trainingSize)); test = struct('digits', digits(:,trainingSize+1:fullSize), 'traces', traces(:,trainingSize+1:fullSize)); y = struct('training', training, 'test', test); Función confusionMatrix: Realiza la construcción de la Matriz de Confusión, dados los conjuntos de salida de la RNA y la salida esperada ya conocida. Entrega como salida una matriz de 𝑛 × 𝑛, donde 𝑛 denota la dimensionalidad de la salida. El algoritmo utilizado consiste principalmente en la búsqueda del máximo elemento en cada columna de la matriz de salida de la red el cual se reemplaza pro un 1 y el resto como 0’s. Posteriormente, se busca el índice que determina a 11 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés cual clase está asociada, y se realiza una suma vectorial de este vector, con la fila correspondiente de la Matriz de Confusión. Función 2: confusionMatrix( Salida de la red, Salida real esperada) function m = confusionMatrix(netOut, realOut) if (size(netOut)~=size(realOut)) error('The dimensions don’t match') end [rows cols] = size(netOut); for i=1:cols netOut(:,i) = netOut(:,i) == max(netOut(:,i)); end confMat = zeros(rows, rows); for i=1:cols index = find(realOut(:,i), 1); confMat(index,:) = confMat(index,:) + netOut(:,i)'; end m = confMat; Script Tarea2: Realiza las operaciones requeridas por el trabajo, tales como la división de los conjuntos de muestras en conjuntos de entrenamiento y prueba, la configuración de la RNA y el cálculo de la Matriz de Confusión. Además, ejecuta un script denominado runVANN2, el cual fue descargado de internet, el que permite visualizar gráficamente la red neuronal mediante un ejecutable java. Para la creación de la red, se utilizó la función newff, la cual recibe como entradas una matriz que indica los valores máximos y mínimos de la entrada y otra de la salida, el número de capas ocultas y la cantidad de neuronas asociadas (en este caso, una sola capa con 13 neuronas), la 2 Visualizing Artificial Neural Networks 1.0. Disponible en http://sourceforge.net/projects/vann/ 12 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés función de activación de cada capa (tangente-sigmoidal) y el algoritmo de entrenamiento (Levenberg-Marquardt). Script 1: Tarea2 %Tarea2 layers = 13; load('BaseDatosTarea2.mat'); data = divideSets(digitos, trazos, 80); inputMat = zeros(16,2); inputMat(:,2) = 100; outputMat = zeros(10, 2); outputMat(:,2) = 1; net = newff(inputMat, outputMat, layers, {'tansig', 'tansig'}, trainlm'); net = train(net,data.training.traces, data.training.digits); netOut = sim(net, data.test.traces); ConfMat = confusionMatrix(netOut, data.test.digits) runVANN('net'); 6. Resultados A continuación se presentan los resultados numéricos obtenidos para los experimentos con la RNA Feedforward con Backpropagation. Estos tienen por objetivo mostrar las diferencias que existen en el rendimiento de la red al variar el número de neuronas en la Capa Oculta. Es importante señalar que para estos análisis solamente se consideró una capa oculta, ya que se desea observar el desempeño de la red como clasificador para el problema anteriormente señalado. Respecto a los datos utilizados, la Base de Datos de la Universidad de California, Irvine, cuenta con 10992 muestras, las cuales se dividieron en razón 80/20 para los conjuntos 13 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés de entrenamiento y prueba respectivamente, utilizando la función divideSets mostrada anteriormente (Función 1). Los experimentos realizados consisten en el entrenamiento y prueba de la RNA con distinto número de neuronas en la capa oculta, de modo de comparar el rendimiento computacional (tiempo de ejecución, número de iteraciones, entre otros), como así también su desempeño como clasificador (usando la Matriz de Confusión). Posteriormente estos resultados serán discutidos en el Análisis de Resultados. 14 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 6.1 Prueba 1: Número de neuronas “óptimo” Configuración de la Red Proporción de conjuntos entrenamiento y test División de datos Algoritmo de entrenamiento Medición de desempeño Número de capas ocultas Neuronas por capa oculta de 80/20 Aleatorio (dividerand) Levenberg-Mardquart (trainlm) Error cuadrático medio (mse) 1 13 (valor escogido entre tamaño de entrada y salida) Tabla 3: Configuración de la red para la Prueba 1 Resultados Número de iteraciones Tiempo de ejecución Desempeño Gradiente Chequeos de validación 25 00:01:49 0.000528 (0.406) 0.000674 (0.170) 6 Tabla 4: Resultados de la Prueba 1 Matriz de Confusión 0 1 2 3 4 5 6 7 8 9 0 220 0 0 0 0 0 1 0 2 0 1 0 218 2 0 0 2 0 0 0 0 2 1 2 222 0 0 0 0 2 0 0 3 0 1 0 213 0 1 0 0 0 0 4 1 1 0 0 239 0 0 1 0 1 5 0 0 0 0 0 204 0 1 1 1 6 1 0 0 0 1 1 213 0 0 0 7 0 1 0 1 0 0 0 231 1 0 8 2 0 0 0 0 0 0 2 202 2 9 1 0 0 0 0 1 0 1 1 200 Tabla 5: Matriz de Confusión de la Prueba 1 Observación: En general se observó un comportamiento muy similar para números de neuronas de la capa oculta entre la dimensionalidad de la entrada y la salida. 15 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 6.2 Prueba 2: Cantidad mínima de neuronas Configuración de la Red Proporción de conjuntos entrenamiento y test División de datos Algoritmo de entrenamiento Medición de desempeño Número de capas ocultas Neuronas por capa oculta de 80/20 Aleatorio (dividerand) Levenberg-Mardquart (trainlm) Error cuadrático medio (mse) 1 1 (cantidad mínima de neuronas para la capa oculta) Tabla 6: Configuración de la red para la Prueba 2 Resultados Número de iteraciones Tiempo de ejecución Desempeño Gradiente Chequeos de validación 65 00:00:35 0.0784 (0.5) 0.00362 (0.001) 6 Tabla 7: Resultados de la Prueba 2 Matriz de Confusión 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 2 10 51 207 2 9 103 2 45 91 0 3 50 16 3 16 22 3 0 12 39 0 4 127 66 0 175 106 0 24 13 41 1 5 0 0 0 0 0 0 0 0 0 0 6 36 87 0 20 85 50 177 2 33 24 7 0 2 14 0 0 25 0 166 0 0 8 0 0 0 0 0 0 0 0 0 0 9 3 1 0 1 18 28 11 0 3 179 Tabla 8: Matriz de Confusión de la Prueba 2 Observación: Para este valor fijo de 1 neurona, los resultados para el clasificador cambiaban cada vez que se ejecutaba el algoritmo. Esto será explicado con más detalle en la siguiente sección. 16 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 6.3 Prueba 3: Configuración de la Red Proporción de conjuntos entrenamiento y test División de datos Algoritmo de entrenamiento Medición de desempeño Número de capas ocultas Neuronas por capa oculta de 80/20 Aleatorio (dividerand) Levenberg-Mardquart (trainlm) Error cuadrático medio (mse) 1 5 (cantidad igual a la mitad de la salida) Tabla 9: Configuración de la red para la Prueba 3 Resultados Número de iteraciones Tiempo de ejecución Desempeño Gradiente Chequeos de validación 35 00:00:59 0305 (0.0186) 0.109 (0.000339) 6 Tabla 10: Resultados de la Prueba 3 Matriz de Confusión 0 1 2 3 4 5 6 7 8 9 0 216 0 0 0 0 0 0 3 3 0 1 1 213 6 2 1 53 1 3 2 135 2 0 1 217 0 0 0 0 1 0 7 3 0 5 0 212 0 10 0 2 0 11 4 2 2 0 0 237 9 1 1 0 21 5 3 0 0 0 0 130 0 0 0 0 6 1 0 0 0 0 2 211 0 0 19 7 1 2 1 0 2 0 0 228 3 3 8 1 0 0 0 0 5 1 0 199 2 9 1 0 0 0 0 0 0 0 0 6 Tabla 11: Matriz de Confusión de la Prueba 3 17 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 6.4 Prueba 4 Configuración de la Red Proporción de conjuntos entrenamiento y test División de datos Algoritmo de entrenamiento Medición de desempeño Número de capas ocultas Neuronas por capa oculta de 80/20 Aleatorio (dividerand) Levenberg-Mardquart (trainlm) Error cuadrático medio (mse) 1 20 (cantidad igual al doble de la salida) Tabla 12: Configuración de la red para la Prueba 4 Resultados Número de iteraciones Tiempo de ejecución Desempeño Gradiente Chequeos de validación 23 00:02:36 0.431 (0.000357) 0.208 (2.73e-6) 6 Tabla 13: Resultados de la Prueba 4 Matriz de Confusión 0 1 2 3 4 5 6 7 8 9 0 220 0 0 0 0 0 0 0 1 3 1 0 219 1 0 0 1 0 1 0 0 2 0 1 222 0 0 0 0 0 0 0 3 0 0 0 210 0 2 0 0 0 0 4 0 0 0 0 239 0 0 0 0 1 5 0 0 0 1 0 205 0 0 1 8 6 0 0 0 0 0 1 214 0 1 0 7 4 2 1 1 1 0 0 236 3 0 8 1 0 0 1 0 0 0 0 201 0 9 1 1 0 1 0 0 0 1 0 192 Tabla 14: Matriz de Confusión de la Prueba 4 18 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 6.5 Prueba 5 Configuración de la Red Proporción de conjuntos entrenamiento y test División de datos Algoritmo de entrenamiento Medición de desempeño Número de capas ocultas Neuronas por capa oculta de 80/20 Aleatorio (dividerand) Levenberg-Mardquart (trainlm) Error cuadrático medio (mse) 1 26 (cantidad igual a la suma de las dimensionalidades de entrada y salida) Tabla 15: Configuración de la red para la Prueba 5 Resultados Número de iteraciones Tiempo de ejecución Desempeño Gradiente Chequeos de validación 24 00:03:32 0.448 (0.0105) 0.212 (4.02e-5) 6 Tabla 16: Resultados de la Prueba 5 Matriz de Confusión 0 1 2 3 4 5 6 7 8 9 0 222 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 2 0 100 224 0 0 0 0 1 0 1 3 0 9 0 213 0 0 0 0 0 0 4 3 3 0 0 240 0 0 1 2 0 5 0 1 0 1 0 206 0 0 0 0 6 0 8 0 0 0 0 214 0 0 0 7 0 88 0 0 0 0 0 236 2 0 8 1 5 0 0 0 1 0 0 202 1 9 0 9 0 0 0 2 0 0 0 202 Tabla 17: Matriz de Confusión de la Prueba 5 19 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 7. Análisis de Resultados Las cinco pruebas mostradas anteriormente, buscan probar el comportamiento de la RNA en casos que podrían considerarse de interés de acuerdo al análisis teórico señalado anteriormente. En primer lugar, la Prueba 1 representa el resultado de la red para un número de neuronas en la capa oculta dado por las rules of thumb que fueron indicadas en las secciones previas. Se observa que el comportamiento en este caso es bastante cercano al esperado, dado que la Matriz de Confusión (Tabla 5) posee un número de aciertos considerable en relación a las malas clasificaciones (diferencias del orden 200:1). A pesar de que no se muestran explícitamente, pero se puede comprobar con el programa adjunto, pruebas realizadas con un número de neuronas en el intervalo [10,16], correspondientes a los tamaños de la salida y entrada respectivamente, se observa un comportamiento similar y bastante satisfactorio, los cual confirma en parte el criterio escogido para determinar el número de neuronas. Respecto al tiempo de ejecución, podría considerarse “promedio”, ya que fue similar en la ejecución de todos los casos en el intervalo anterior. Los casos interesantes corresponden a los otros 4, debido a las anomalías que se observan en los resultados. El primer caso presentado es extremo, ya que solamente se consideró una sola neurona en la capa oculta. Esto implica que todas las entradas pasan por un filtro que podríamos considerar binario (cosa que no ocurre realmente, ya que la función de activación es tangente-sigmoidal), pero permite obtener una idea delas distorsiones que se producen en la clasificación, ya que la salida de esta única neurona es ingresada en toda la capa de salida, obteniéndose resultados tan extraños como el observado en la Tabla 8. Es importante señalar que en diversas pruebas que se realizaron, todas produjeron resultados notoriamente distintos, donde no se seguía un patrón claro. Esto puede producirse debido al modo de funcionamiento del Toolbox de MATLAB, el cual inherentemente realiza una etapa de entrenamiento y prueba utilizando el conjunto que se le entregue como entrada. A pesar de que el conjunto de entrenamiento que se le es ingresado es siempre el mismo (como se señaló al exponer la función que separa los conjuntos como entrenamiento y prueba), el ordenamiento aleatorio que realiza la función newff produce que el entrenamiento sea distinto en cada ejecución. La prueba 3, donde se utilizó un número de neuronas mayor que el anterior, pero igual a la mitad de la dimensión de la salida (N = 5, con N número de neuronas), se observa un comportamiento similar al anterior, aunque en un medida mucho menor ya que el efecto de la “decisión entre dos clases” señalada anteriormente es disminuido al incluir más neuronas. Aun así, se observan grandes anomalías en las columnas asociadas a las clases 1 y 9 (Tabla 11), donde existió una confusión entre la Clase 1 y la Clase 9, donde la mayor cantidad de los casos 20 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés fueron clasificados como 1 dado que era 9. De todos modos, este es un resultado extraño, ya que lo intuitivo sería confundir los casos de 1’s y 7’s, por lo que ya se debería entrar a revisar los caracteres incluidos en la base de datos para explicar y comprender la confusión que se dio. Respecto a los dos casos anteriores, se aprecia claramente que el número de iteraciones es mayor (ya que la convergencia de la red es mucho más difícil por el reducido número de neuronas), aunque en general la ejecución demora un tiempo mucho menor (ya que los cálculos necesarios por el entrenamiento para reestablecer los pesos son menores y más sencillos). En los últimos dos casos se utilizan valores mayores al intervalo anterior. Sin embargo, en la Prueba 4, donde se utilizó N = 20, este valor puede ser considerado dentro de otra de las rules of thumb, la cual postula que “El número debería ser menos que el doble del tamaño de la capa de entrada”. Observando los resultados obtenidos para una de las ejecuciones de esta prueba, la Matriz de Confusión (Tabla 14) también presenta buenos resultados similares a la Prueba 1, lo que también permite comprobar en parte que la regla tiene algo de sentido, a pesar de no tener un fundamento matemático que la respalde. La última prueba corresponde a otro “caso extremo”, donde se utilizó N = dim(Entrada) + dim(Salida). En primer lugar, se observa un tiempo de ejecución mucho mayor (debido a la complejidad de los cálculos), aunque el número de iteraciones no distó mucho de la Prueba 1 o 4. El otro punto importante respecta a la Matriz de Confusión obtenida (Tabla 17), donde se observa un buen comportamiento en casi todas las clases, excepto en las clases 1 y 2, donde prácticamente no se asocia ningún patrón de entrada como un 1, similar a lo ocurrido anteriormente en la Prueba 2, aunque en este caso si podría existir una confusión más justificada (por ejemplo, si una persona escribe el número uno de esta forma 1, podría ser confuso con un 2, debido al trazo que existe en la base del uno). Respecto a las pruebas en general, se observó un comportamiento bastante similar al esperado dados los fundamentos teóricos anteriores, donde además se observó una relación entre las rules of thumb y los resultados del desempeño del clasificador, los cuales confirmaron las reglas en las pruebas realizadas. 21 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 8. Conclusiones El trabajo realizado permitió probar el funcionamiento de las redes neuronales mediante la utilización de un Toolbox de MATLAB que facilita su uso, resolviendo un problema de clasificación utilizando muestras reales. Si el trabajo solamente hubiera consistido en la utilización del Toolbox, se hubiera apreciado como fue leído en muchas críticas que se observaron en la literatura o internet, donde se las señala como “Cajas Negras”. Sin embargo, el hecho de tener que haber investigado y explicado previamente el funcionamiento teórico de las RNA, como así también su relación con conceptos biológicos, permitió comprender de mejor manera su comportamiento, y en definitiva, el procedimiento que realiza el programa al ejecutarse. La experiencia permitió conocer herramientas de MATLAB que no habían sido utilizadas antes, de modo de ampliar el número de herramientas con los que se cuenta para resolver este tipo de problemas. La interfaz que ofrece es bastante completa, y proporciona información muy útil al momento de comparar redes o clasificadores distintos. Respecto a las redes neuronales en general, se concluye que son una alternativa bastante interesante al momento de resolver problemas de clasificación, aunque es necesario considerar las ventajas y desventajas que posee su estructura al momento de decidir su uso. Conceptualmente son una propuesta muy interesante, que como ya fue señalado, está muy inspirada en la biología y en el comportamiento del cerebro humano, aunque en la práctica pueden ser soluciones muy lentas para solucionar determinados problemas, ya que su complejidad aumenta de gran manera al aumentar la dimensión de la entrada o la salida, y más aún, al comenzar a incluir capas ocultas para resolver problemas más complejos, donde se observaron cambios de rendimiento y tiempo de ejecución muy dependientes de la complejidad de la capa. Aunque resultaría difícil compararlas con el problema resuelto anteriormente con el Clasificador Bayesiano (dado que el clasificador fue implementado manualmente), queda pendiente una comparación más rigurosa de su rendimiento. Del mismo modo, falta aún conocer el desempeño del clasificador Support Vector Machine (SVM), el cual se espera que sea analizado en el próximo trabajo. 22 EL4106 Inteligencia Computacional Prof. Javier Ruiz del Solar Aux. Daniel Herrmann Ayud. Felipe Valdés 9. Referencias M. Hudson, M Hagan, H. Demuth, Neural Network Toolbox 7 User’s Guide, The MathWorks, Inc. Septiembre 2010. A.Philippides, Multi-Layer Perceptron, Lectures on Neural Networks 5+6. Jeff Heaton, The number of hidden layers.. Disponible en: http://www.heatonresearch.com/node/707 23