UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA SEDE DE CONCEPCIÓN – REY BALDUINO DE BÉLGICA REDES NEURONALES ARTIFICIALES, ACERCAMIENTO TEÓRICO Y PRÁCTICO EN MATLAB Memoria presentada de al trabajo de departamento Electrónica e Informática. Alumno: Gonzalo Echeverría Bustos Profesor Guía: Rodrigo Méndez Leal 2019 título de I RESUMEN Debido a la alta competitividad industrial y las constantes demandas de optimizar, controlar y supervisar procesos de forma más inteligente, nacen varios sistemas basados en lo que se conoce como inteligencia artificial, por sus características de auto-aprendizaje y constantes evoluciones autónomas. Uno de estos métodos que se considera como inicial en esta rama del conocimiento se denomina redes neuronales, del cual se trabajará a continuación sus aspectos internos más relevantes para saber de forma completa, cómo se inspiraron de un sistema biológico complejo, como es el nervioso, para desarrollar un método algorítmico eficiente, ordenado y multidisciplinario. Para esto se mezclan disciplinas como la matemática estadística, donde se utiliza cálculo con derivadas parciales y modelos de regresión aplicados a problemas reales combinados con algoritmos de auto aprendizaje y una arquitectura de conexiones. Para la simulación de redes neuronales existen varios programas, cada uno destinado de forma más eficiente para una tarea en específico. En este trabajo se hará uso del software Matlab, el cual es muy intuitivo para crear redes neuronales y enseña de forma clara todos los parámetros que se deben tener en cuenta para la creación de sistemas de este tipo. II ÍNDICE DE MATERIAS INTRODUCCIÓN ............................................................................................................... 1 Objetivos …………………………………………………………………………..2 CAPÍTULO 1: HISTORIA Y BIOLOGÍA NEURONAL................................................. 3 1.1. HISTORIA DE LAS REDES NEURONALES........................................................... 3 1.1.1. Redes neuronales en la actualidad.................................................................... 7 1.2. INSPIRACIÓN BIOLÓGICA ..................................................................................... 8 1.2.1. Tipos de neuronas ............................................................................................. 9 1.2.2. Función de activación biológica..................................................................... 11 1.2.3. Estructura neuronal......................................................................................... 15 CAPÍTULO 2: REDES NEURONALES ARTIFICIALES ............................................ 16 2.1. MODELO NEURONAL ............................................................................................ 17 2.1.1. Modelo de Regresión lineal............................................................................ 19 2.1.2. Método de cuadrados ordinarios. ................................................................... 21 2.1.3. Funciones de Salida ........................................................................................ 24 2.1.4. Modelo neuronal general................................................................................ 27 2.1.5. Modelo neuronal no lineal.............................................................................. 28 2.2. ARQUITECTURA DE LAS REDES NEURONALES ............................................ 31 2.2.1. El perceptrón multicapa ................................................................................. 34 2.2.2. xOR con red multicapa ................................................................................... 36 2.2.3. Recurrent Networks ........................................................................................ 40 2.2.4. Ejemplo ilustrativo ......................................................................................... 43 2.2.5. Hamming network .......................................................................................... 48 2.3. REGLA DE APRENDIZAJE .................................................................................... 55 2.3.1. Conjuntos de entrenamiento ........................................................................... 56 2.3.2. Límite de decisión .......................................................................................... 56 2.3.3. Regla de aprendizaje del perceptrón .............................................................. 59 2.3.4. Backpropagation ............................................................................................. 66 III CAPÍTULO 3: EJEMPLOS PRÁCTICOS ...................................................................... 72 3.1. RECONOCIMIENTO DE CARACTERES NUMÉRICOS ..................................... 73 3.1.1. Entrenamiento de la red.................................................................................. 74 3.1.2. Test de la red neuronal creada ........................................................................ 83 3.2. PREDICCIÓN DEL COMPORTAMIENTO DE UN MOTOR DC ........................ 86 3.2.1. Tomando datos en la planta de control. ......................................................... 86 3.2.2. Entrenando la red neuronal. ........................................................................... 88 3.2.3. Consideraciones al entrenar una Red ............................................................. 97 CONCLUSIONES Y RECOMENDACIONES.............................................................. 100 BIBLIOGRAFÍA Y FUENTES DE LA INFORMACIÓN ............................................ 101 IV ÍNDICE DE FIGURAS Figura 1-1. Estructura de una Neurona Biológica .................................................................. 8 Figura 1-2. Tipos de neurona ................................................................................................ 10 Figura 1-3. Sinapsis entre el terminal axonico de una neurona y déndrico de la otra ......... 11 Figura 1-4. Iones de activación dentro y fuera de una membrana celular. .......................... 12 Figura 1-5. Potencial de acción en el proceso sináptico ...................................................... 13 Figura 1-6. Potencial de activación ...................................................................................... 14 Figura 1-7. Represtación morfológica de neuronas del córtex auditivo .............................. 16 Figura 2-1. Neurona Estándar ............................................................................................... 17 Figura 2-2. Interacción entre una neurona Presináptica y otra postsináptica ...................... 18 Figura 2-3. Diagrama de dispersión con relación rectilinea entre el tiempo y el volumen . 20 Figura 2-4. Cálculo del error medio de la gráfica de dispersión .......................................... 21 Figura 2-5. Grafica de salida de una neurona “Hard Limit” ................................................ 24 Figura 2-6. Comparativa entre compuerta lógica NAND y Nodo neuronal ........................ 26 Figura 2-7. Modelo genérico de una neurona estándar ........................................................ 27 Figura 2-8. Diseño de una red neuronal con funciones de transferencia de tipo lineal ...... 28 Figura 2-9. Diseño de red neuronal con función de transferencia sigmoidal ...................... 29 Figura 2-10. Modelo del perceptrón simple ......................................................................... 31 Figura 2-11. NAND sobre el plano ...................................................................................... 32 Figura 2-12. Grafica de una compuerta xOR sobre el plano................................................ 33 Figura 2-13. Modelo del perceptrón multicapa .................................................................... 34 Figura 2-14. Simulación de una compuerta xOR con redes neuronales .............................. 36 Figura 2-15. Grafica de la red neuronal simulando una compuerta xOR ............................ 39 Figura 2-16. Bloque de retardo (Delay)................................................................................ 41 Figura 2-17. Bloque Integrador ............................................................................................ 42 Figura 2-18. Red neuronal de capa recurrente...................................................................... 42 Figura 2-19. Prototipo de una red neuronal clasificadora de frutas ..................................... 44 Figura 2-20. Plano 3D de vectores ....................................................................................... 45 Figura 2-21. Simulación de un perceptrón clasificador ....................................................... 47 Figura 2-22. Simulación de un perceptrón clasificador ....................................................... 48 Figura 2-23. Red Neuronal Hamming para reconocimiento de patrones ............................ 49 Figura 2-24. Simulación de un perceptrón clasificador Hamming ...................................... 53 Figura 2-25. Simulación de un perceptrón clasificador Hamming ...................................... 54 Figura 2-26. Nodo neuronal de 2 entradas con Bias ............................................................ 56 Figura 2-27. Límite de decisión para una neurona de 2 entradas......................................... 58 Figura 2-28. Conjunto de vectores de entrada x en el plano ................................................ 59 V Figura 2-29. Posibles límites de decisión para la separación de clases. .............................. 60 Figura 2-30. Límite de decisión para W inicial ................................................................... 61 Figura 2-31. Modificación del límite de decisión según la regla de aprendizaje ................ 62 Figura 2-32. Límite de decisión para la red neuronal........................................................... 64 Figura 2-33. Secuencia de entrenamiento de una red neuronal sin Retro Propagación....... 66 Figura 2-34. Secuencia de entrenamiento de una red con Retro Propagación..................... 67 Figura 3-1. Barra de Navegación Matlab ............................................................................. 75 Figura 3-2. Ventana creación de la variable de entradas nueva ........................................... 76 Figura 3-3. Tabla de valores objetivo en Presentada............................................................ 76 Figura 3-4. Ventana al ejecutar el comando "nnstart".......................................................... 77 Figura 3-5. Ventana para la selección de valores de entrenamiento (Entrada/Objetivo) .... 78 Figura 3-6. Selección del porcentaje de datos para los pasos del entrenamiento de la red. 79 Figura 3-7. Ventana de selección del número de capas ocultas y arquitectura de la red..... 80 Figura 3-8. Ventana del entrenamiento de la red y las diferentes caracteristicas ................ 81 Figura 3-9. Grafico Entropía Cruzada de error vs Épocas ................................................... 82 Figura 3-10. Ventana de comandos, con resultado del test. ................................................. 83 Figura 3-11. Ventana de comandos, con resultado del segundo test. .................................. 84 Figura 3-12. Ventana de comandos, con resultado del tercer test........................................ 85 Figura 3-13 Esquema planta de control para un Motor DC ................................................. 86 Figura 3-14. Grafica respuesta de un Motor DC .................................................................. 87 Figura 3-15. Ventana Comandos para separar Variables ..................................................... 87 Figura 3-16. Esquema de la arquitectura básica del funcionamiento de la red.................... 89 Figura 3-17. Selección de los datos de muestreo para diferentes etapas de entrenamiento 89 Figura 3-18. Grafica por puntos de la entrada/salida de respuesta del Motor DC ............... 90 Figura 3-19. Zoom de la gráfica de respuesta inicial al escalón aplicado ........................... 90 Figura 3-20. Grafica Error cuadrático medio vs Épocas ...................................................... 91 Figura 3-21. Cuadro con resultados del entrenamiento........................................................ 91 Figura 3-22. Ventana de comandos netc .............................................................................. 92 Figura 3-23. Arquitectura de la Red Neuronal Terminada................................................... 92 Figura 3-24. Esquema del funcionamiento de la red creada ................................................ 93 Figura 3-25. Graficas comparativas de la respuesta de la red .............................................. 94 Figura 3-26. Acercamiento de la gráfica real vs respuesta predicha ................................... 94 Figura 3-27. Gráfica de los datos recolectados (Entrada y Salida) ...................................... 95 Figura 3-28. Gráficas comparativas de la respuesta real vs la predicción de la red ............ 96 Figura 3-29. Superposición de la respuesta real del motor y respuesta de la red Neuronal 96 Figura 3-30. Respuesta predatoria de la red ......................................................................... 97 Figura 3-31. Ejemplo de la predicción de una red mal entrenada........................................ 98 VI Figura 3-32. Acercamiento de la respuesta oscilatoria erratica de la red ............................ 99 Figura 3-33. Grafica con exceso de muestras y ruido .......................................................... 99 VII ÍNDICE DE TABLAS Tabla 2-1. Tabla de verdad de una compuerta NAND ..................................................... 26 Tabla 2-2. Distintas funciones de transferencia utilizadas en redes neuronales............... 30 Tabla 2-3. Tabla de verdad de una compuerta NAND ..................................................... 32 Tabla 2-4. Valores de Entrada/Salida de la red "xOR" ..................................................... 38 Tabla 2-5. Tipos de regiones de decisión en el Perceptrón .............................................. 39 Tabla 3-1. Tablas representativas de los números uno, dos y cuatro ............................... 73 Tabla 3-2. Tablas numéricas con pixel corrido ................................................................. 74 Tabla 3-3. Tablas numéricas de los números uno, dos y cuatro con distorsión ............... 83 Tabla 3-4. Números uno, dos y cuatro con mayor distorsión ........................................... 84 VIII SIGLA Y SIMBOLOGÍA SIGLA ENIAC : Electronic Numerical Integrator And Computer MIT : Massachussets Institute Tecnology IA : Inteligencia Artificial ANS : Artificial Neural Systems MSE : Mean square error NND3PC : Neural Network Design Demonstration Perceptron Classification NND3HAMC : Neural Network Design Demonstration Hamming Classification NND4BD : Neural Network Design Demonstration Decision Boundaries NNSTART : Neural Network Start NARX : Nonlinear Autoregressive with External Input V : Volts Na+ : Ion de sodio : Potasio : Calcio P 2- : Compuesto : Sumatoria ∂ : Derivada parcial : Tiempo : Integral SIMBOLOGÍA K+ Ca++ � t � 1 INTRODUCCIÓN Con el inicio de la Primera revolución industrial, el hombre ha estado constantemente en la búsqueda de poder automatizar procesos que anteriormente solo podían conseguirse en base a la fuerza mecánica, esto fue uno de los motivos que dio inicio a la investigación sobre inteligencia artificial (IA), que tuvo como propósito, el lograr diseñar máquinas con un coeficiente intelectual elevado, esta reformación fue bautizada con el nombre de soft computing o inteligencia computacional, cuyos principales miembros son: lógica borrosa (fuzzy logic), redes neuronales (neuronal networks) en el cual se centra este trabajo, computación evolutiva, algoritmos genéticos y machine learning. Una característica de estas ramas de estudio es que son complementarias, se logran mejores resultados uniéndolas que usándolas por sí solas [Del Brio, 2004]. En décadas pasadas con el estudio de Turing sobre el lenguaje binario (con el cual se comunican nuestros actuales sistemas de cómputo), sumado a la arquitectura de diseño computacional Von Neumann, dieron paso a las grandes máquinas automáticas que se utilizan hoy en día, capaces de resolver complejos problemas en tiempo reducido. Esta tecnología se basa en una enorme cantidad de componentes electrónicos conectados en un espacio reducido, su mecanismo de funcionamiento consiste en ejecutar un algoritmo previamente programado. Estos, aplican instrucciones que se siguen de forma secuenciada (una a una) con gran rapidez, con una correcta programación del software de esta máquina se puede conseguir que resuelva una gran cantidad de tareas [Del Brio, 2004]. La gran falencia se produce cuando el problema que queremos solucionar, no se puede resolver mediante un tratamiento algorítmico, como la detección de objetos mediante rasgos característicos, toma de decisiones en base a experiencias, o cualquier problema como los denominados de la vida real, donde la información se presenta de forma difusa, imprecisa y masiva [Del Brio, 2004]. Es en este punto donde se demuestra la necesidad de un nuevo mecanismo de procesamiento lógico, en donde juegan un rol importante las Redes neuronales artificiales o ANS (artificial neural network), sistemas que emulan ciertos procesos del ser humano, como la capacidad de asociar hechos o aprender ciertas tareas en base a experiencias, en cierta forma las redes neuronales no son más que un modelo artificial y simplificado del cerebro humano, que actúa en función a la principal célula del mismo, la neurona [Matich, 2001]. 2 Objetivos Objetivo General: - Describir el comportamiento básico de una Red Neuronal Artificial y su aplicación práctica mediante simulación en Matlab. Objetivos Específicos: - Estudiar las partes que componen una red neuronal. - Investigar el funcionamiento de las redes neuronales básicas, fundamento y metodología. - Estudiar los ToolBox de Matlab para redes neuronales - Diseñar y entrenar una Red Neuronal en Matlab a modo de caso práctico. 3 CAPÍTULO 1: HISTORIA Y BIOLOGÍA NEURONAL 3 1.1. HISTORIA DE LAS REDES NEURONALES Las primeras actividades de investigación basadas en lo que se podría pensar como inteligencia artificial nacen aproximadamente a mediados de la segunda guerra mundial, bajo este contexto, investigadores tanto del área electrónica como de las ciencias en general intentaron emular ciertas características de los seres vivos, uno de estos intentos fue el de imitar el comportamiento de los sistemas reguladores de los mismos; aplicando este concepto en ordenadores analógicos, fueron capaces de controlar cañones antiaéreos o sistemas de navegación [Del Brío, 2004]. En esta época también comenzó el auge de otra corriente lógica, la cual sentará las bases de la mayor parte de la tecnología de cómputo actual, todo esto de la mano de Alan Turing y su famosa máquina homónima diseñada en 1936, poco tiempo más tarde el matemático Walter Pitts y el neurofísico Warren McCulloch se encontraban en las primeras investigaciones de las redes neuronales [Hagan, 2014], que se empezaron a estudiar como otro intento de emular estructuras biológicas [Del Brío, 2004]. Producto de estas investigaciones, 8 años más tarde McCulloch y Pitts publicaron el artículo “A Logical calculus of ideas Imminent in Nervous Activity” este articulo constituyó la base e inicio de muchos campos de estudio basados en estructuras neuronales [Basogain, 2008]. Pocos años más tarde y retomando los avances de Turing en el área digital se dio paso a los primeros ordenadores electrónicos como el ENIAC (Electronic Numerical Integrator And Computer), destinados a desarrollar cálculos de interés militar. El siguiente eslabón de esta cadena vendría del aporte de un matemático de origen húngaro, Jhon Von Neumman, quien desarrolla en 1945 lo que vendría siendo el primer computador basado en lógica booleana, esta trabaja ejecutando una serie de instrucciones de forma serial (una a una). De esta forma se lograba resolver casi cualquier problema mediante la codificación de un programa de instrucciones secuenciada, el cual se almacenaba en una memoria y se ejecutaba cuando era requerido, se denominara a este método de operación “algorítmico”. Debido a su gran facilidad para desarrollar tareas y a su flexibilidad, este fue el enfoque dominante de las últimas décadas, y se empezó a pensar que sería la clave para el futuro [Del Brío, 2004]. Ese mismo año se lograron muchos avances prometedores con las máquinas basadas en la arquitectura Von Neumman, en base a esta tecnología se pensó que se obtendrían máquinas inteligentes capaces de pensar racionalmente, con la creación de un futuro software altamente complejo, intentos de esta corriente intelectual dieron paso en 1950 a 4 la creación del primer software capaz de jugar ajedrez diseñado por Claude Shannon y el mismo Turing, como también otros programas que intentaban emular decisiones humanas [Shannon, 1949]. Hacia 1960 Jhon McCarthy instaura el término “Inteligencia Artificial” o IA para definir métodos algorítmicos que dotarán a las máquinas de la capacidad de “pensar”. Quince años más tarde Marvin Minsky, Newell y Simon lograron crear programas capaces de realizar demostraciones matemáticas sobre teoremas geométricos [Del Brío, 2004]. Por otra parte, los avances en el campo de las redes neuronales tampoco cesaban, de tal modo que en la década de 1950 el científico Donald Hebb prosiguió con las investigaciones de McCulloch y Pitts, planteó que el condicionamiento clásico (como lo descubrió Pavlov) está presente por las propiedades individuales de las neuronas. Propuso un mecanismo de aprendizaje basado en neuronas biológicas [Hagan, 2014] y plasmó sus ideas en el libro "The organization of the Behavior" donde describe como pueden aprender las mismas [Duwan, 2014]. Un año más tarde los pioneros en el área Marvin Lee Minsky, John McCarthy, Nathaniel Rochester y Claude Shannon organizaron la primera conferencia de inteligencia artificial patrocinada por la fundación Rochester el verano de 1951 en la localidad inglesa de Damounth, la conferencia se basaba en la conjetura de que cada aspecto del aprendizaje o cualquier otra característica de la inteligencia del ser humano puede en principio, describirse con tanta precisión como para fabricar una máquina capaz de simularla. Propusieron lograr que las máquinas usen este lenguaje, formen abstracciones y conceptos, resuelvan tipos de problemas que hasta ahora están reservados para los humanos y se mejorasen a sí mismos [McCarthy, 1955], en muchos libros se hace referencia a esta, como la primera toma de contacto seria con las redes neuronales artificiales [Basogain, 2008]. Con los frutos de la investigación neuronal y con los conceptos más avanzados que se iban desarrollando, Frank Rosenblatt en 1957 publicó uno de los mayores trabajos de investigación neuronal, este consistía en desarrollar un elemento llamado “El Perceptrón”, que era un sistema clasificador de patrones, ya sea geométricos o abstractos, podía identificar diferencias entre estos. El primer perceptrón era un modelo sencillo y confiable, trabajaba con celdas fotovoltaicas que recibían parte de la información visual del objeto (imitando la retina) para luego ser comparadas entre sí y procesadas para emitir una respuesta en base a la variación en la medida de los diferentes sensores, a pesar de que algunas de estas celdas fuesen destruidas, el perceptrón no perdía su capacidad de identificación [Basogain, 2008]. 5 El problema fue que los crecientes avances en la tecnología de computadoras eclipsaron el desarrollo de las redes neuronales y su modelo por excelencia, el perceptrón, presentaba muchas limitaciones en su uso, lo que hizo que se perdiera la confianza en este método de control [Del Brío, 2004]. Minsky y Papert años más tarde pusieron de manifiesto estas limitaciones, la incapacidad de la red para realizar ciertas tareas esenciales, como por ejemplo la función lógica OR exclusivo [Basogain, 2008]. A mediados de los 60 surgieron 2 hitos de relevancia para la comunidad investigadora en el campo de las redes neuronales, por una parte Minsky y Papert pertenecientes al laboratorio de investigación del MIT (Massachussets Institute Tecnology) comenzaron el trabajo de una profunda critica al perceptrón, que tuvo como resultado el libro “Perceptrons” el cual constaba de un análisis matemático del concepto del mismo, este tenía como conclusión que el perceptrón y la computación neuronal no eran temas relevantes para el avance tecnológico [Basogain, 2008], todo esto sumió a las redes neuronales a un periodo de obscuridad del cual se tardaría más de 10 años en salir [Del Brío, 2004]. Algunos estudios seguían con esperanzas de poder dar solución a algunos de los problemas en computación neuronal, Bernard Widrow y Ted Hoff diseñaron otro sistema de aprendizaje basado en redes neurales [Widrow, Hoff, 1960 in Hagan, 2014] el cual aún se usa en la actualidad, pero cayeron en la misma problemática que Hebb, lo que detuvo gran parte de la investigación en esta área [Hagan, 2014]. El rápido avance en el área de la computación se vio culminado con la creación de los sistemas expertos, complejos programas para computadores donde se almacenaba el conocimiento de especialistas en una materia (Diagnósticos de enfermedades, economía, selección de créditos, operario de máquinas) y se codificaba en un programa en forma de regla de toma de decisiones, si bien este sistema y muchos otros de los descritos anteriormente tienen un mérito importante dentro de la historia, no resultan ser mucho más inteligentes, el principal problema radica en que debido a la mecánica del procedimiento secuencial, se torna muy complejo resolver problemas como los denominados del mundo real, donde en ocasiones se deben discriminar de forma racional, un ejemplo de esto es el procesamiento de imágenes, una tarea enorme para cualquier ordenador actual basado en la arquitectura Von Neumman, debido a la alta concentración de información que contiene la imagen, incluso para nuestros computadores actuales es difícil, debido a que las computadores basadas en lógica booleana deben resolver el problema analizando la imagen punto a punto y en orden, incluso para varios computadores trabajando a la vez resulta una tarea imposible de realizar en tiempo real [Del Brío, 2004]. 6 De esta forma es como se rompe el antiguo paradigma, y nacen nuevas ramas lógicas y resurgen antiguas, como las Redes neuronales, sistemas borrosos, algoritmos genéticos o la computación evolutiva, de los cuales los primeros llegan a ser los más relevantes. Dado que estos sistemas están mejor adaptados para resolver problemas de visión en tiempo real o aprendizaje, gracias a su mecánica de funcionamiento paralela se logra mejores resultados. El trabajo de investigadores como J.J. Hopfield o T. Kohonen presentaron cambios en la mirada de la computación neuronal [Kohonen, 1972 in Hagan 2014], principalmente Hopfield quien introdujo nuevos y revolucionarias ideas independiente de James Anderson desarrollaron por separado nuevas redes neuronales que eran capaces de actuar en base a recuerdos [Hopfield, 1982], Stephen Grossberg también fue muy activo durante este período en la investigación de redes auto-organizadas [Grossberg (1976) In Hagan, 2014], estas redes no trabajaban siendo entrenadas como las descritas anteriormente si no que se basaban en el funcionamiento del tejido cerebral en el cual la activación de zonas en la red próximas unas de otras y estímulos muy dispares activaban zonas lejanas, era esta proximidad o lejanía en la activación de neuronas dentro de la red la que le permitía identificar irregularidades o clases en los datos de entrada-salida [Bueno, 2016]. Su trabajo constituyó un gran impulso en las investigaciones de modelos neuronales [Basogain, 2008]. Hopfield presenta un nuevo tipo de red, ésta se descifró combinando las Redes Neuronales con modelos de mecánica estadísticos para explicar el funcionamiento de cierta clase de red recurrente [Hagan, 2014], que podría actuar como una memoria asociativa. Se introdujo un nuevo modelo de red neural, el perceptrón multicapa, que eliminaba de raíz las falencias de su antecesor el perceptrón simple. Finalmente en 1982 Hopfield publica su artículo “Hopfield Model o Crossbar Associative Network” junto con la invención del algoritmo Backpropagation, ampliamente usado en la actualidad, con todo esto se consiguió devolver el interés en el estudio de la computación neuronal y fue la respuesta clave para las críticas de Minsky y Papert en los años 60s [Hagan, 2014], tras casi 2 décadas de inactividad. Cabe destacar que el segundo integrante principal de este nuevo camino a la inteligencia artificial, los sistemas borrosos, fueron los candidatos ideales para el problema de lógica booleana, donde sólo se podía discriminar a través de aseveraciones “verdadero o falso” una cualidad está presente o no, se sabe que en el mundo real es muy diferente. De este modo la lógica borrosa puede tomarse como una lógica multivaluada que permite manejar estos conceptos borrosos o difusos recurrentes en el mundo real, emulando el razonamiento del cerebro humano, de esta forma se puede decir que si las redes neuronales 7 vendrían siendo un tipo de Hardware que emula el comportamiento del cerebro, los sistemas borrosos vendrían siendo el Software del mismo [Del Brío, 2004]. Si bien, según lo descrito anteriormente para una máquina booleana es muy difícil resolver problemas de razonamiento que para los seres humanos pueden resultar muy fáciles, como identificar un objeto a simple vista, para dichas máquinas es muy fácil resolver problemas que para los seres humano toma un tiempo excesivo, como el calcular ecuaciones complejas con gran precisión, es por esto que los sistemas de inteligencia artificial que mencionamos con anterioridad no debiesen de verse como sustitutos de los computadores basadas en la arquitectura Von Neumman, sino como una tecnología complementaria de la misma, la cual nos traerá soluciones que antes creíamos imposibles. 1.1.1. Redes neuronales en la actualidad Hoy en día existen diversas universidades enfocadas al estudio de las IA, y a lo largo de estos últimos años con diversas aplicaciones, cada grupo de investigadores con diferentes especialidades para lograr llevar a cabo el entrenamiento o diseño de las mismas, neurólogos, biólogos, físicos, programadores y matemáticos. En palabras de J. A. Anderson: “Uno de los aspectos más gratos del trabajo en redes neuronales es la necesidad de permanecer atentos, cuando menos, a resultados de diversos campos. No es un área de trabajo para especialistas estrechos de miras” [Anderson (2004) in Del Brío, 2004]. En este aspecto han sido muchos los beneficios que han logrado obtener de estos sistemas conexionistas, como el uso de perceptrones multicapa en el análisis de patrones de escritura para la identificación de antiguos manuscritos de origen desconocidos con buenos resultados. Google usa redes neuronales para la identificación de imágenes mediante rasgos característicos. Se utilizan también en el reconocimiento facial y en los sistemas de conducción autónoma por la amplia cantidad de variables en tiempo real que hay que dominar, en la Universidad de Lund y en el Hospital Universitario de Skåne en Suecia usaron computación neuronal para mejorar las tasas de supervivencia a largo plazo en trasplantes de corazón, identificando coincidencias óptimas entre el donador y paciente, mejorando sustancialmente la calidad de vida de este último [Hagan, 2014]. Como ejemplificamos, el uso de las redes neuronales es ampliamente utilizado hoy en día. 8 1.2. INSPIRACIÓN BIOLÓGICA Una parte importante para entender el concepto de las redes neuronales artificiales o ANS (Artificial Neural Systems), es el comprender el funcionamiento de una neurona biológica, que es en el fondo, de donde nace el concepto de “Elemento procesador”. Las neuronas trabajan a través de estímulos, por lo que es importante entender este apartado para comprender el funcionamiento asociativo y adaptativo de la misma. El ser humano consta aproximadamente de 1011 neuronas, altamente interconectadas entre sí, “se sabe que cada neurona puede hacer conexiones con otras 104 aproximadamente” [Hagan, 2014], éstas bajo el microscopio presentan diversas formas, pero las partes más importantes que componen cada una de ellas, se representan de la siguiente forma. Figura 1-1. Estructura de una Neurona Biológica Fuente: medium.com/ La información que recibe la neurona comienza su camino desde el árbol déndrico, compuesto por las dendritas, estas son las terminaciones que se encargan de recibir estímulos provenientes ya sea del exterior, o de otra neurona predecesora. El núcleo central de la neurona inserto en el SOMA es donde se procesa toda la información proveniente de las dendritas, está recubierto de la sustancia de Nissl compuesta de gránulos basófilos abundantes en los cuerpos neuronales. Los cuerpos de Nissl se encuentran diseminados en el neuroplasma y en dendritas de mayor diámetro, pero están 9 ausentes en el cono axónico y el axón [Dovale, 2005]. Son sitios de síntesis de proteínas que actúan en el proceso de inhibición o activación de la neurona. La información ya procesada egresa como un único parámetro de salida por el axón (cuya longitud es del orden de las 100 micras hasta el metro en caso de neuronas motoras), la cual al igual que las dendritas tiene una ramificación final, sólo que ésta expulsa un único parámetro hacia otras neuronas sucesoras [Del Brío, 2004]. 1.2.1. Tipos de neuronas Los tipos de neuronas de dividen en diferentes grupos dependiendo de su ubicación y su trabajo específico dentro del sistema nervioso. Por ejemplo, las terminaciones nerviosas igual constituyen un tipo de neurona, la cual, si bien no realiza un procesamiento de la información como el núcleo neuronal, se realizan ciertos procesos de “cómputo” en ellas, estas terminaciones se encargan de recibir ciertos estímulos provenientes del exterior. Un ejemplo de esto son las neuronas bipolares que poseen sus dendritas y axones localizados en puntos distantes del cuerpo neuronal, este tipo de neuronas se puede encontrar en la retina y en los ganglios vestibulares y cocleares del oído interno, otro tipo de neurona que capta información del entorno son las neuronas Golgi tipo I que poseen axones largos que salen de la región donde se encuentra el soma celular y terminan lejos de su origen, en otra parte del sistema nervioso o en otro tejido, tal como la piel o los músculos [Dovale, 2005], a este tipo de neuronas se les denomina receptoras o sensoras, ya que como se explica anteriormente, reciben información desde el exterior y no provenientes de otra neurona, “se calcula que una neurona del córtex cerebral recibe en promedio información de unas 10.000 neuronas, y envía estímulos a varios cientos de ellas” [Del Brío, 2004]. 10 Figura 1-2. Tipos de neurona Fuente: https://neuroanatomia.info Desde un punto de vista analítico el cuerpo neuronal viene constituyendo un procesador de información sencillo el cual se explicará a continuación. 11 1.2.2. Función de activación biológica Todo el procesamiento del cerebro inicia con el concepto de sinapsis, el cual se define como la “unión” o contacto entre neuronas, desde el extremo axónico (neuronas presinápticas) de una, que es de donde se envía el estímulo que conecta con el árbol déndrico, hasta la siguiente (neurona postsináptica), que es quien recibe dicho estímulo [Dovale, 2005], si bien se ejerce cierta conexión entre estos terminales, el contacto no es físico, ya que estas permanecen separadas por una distancia promedio de 0,2 micras [Del Brío, 2004]. Figura 1-3. Sinapsis entre el terminal axonico de una neurona y déndrico de la otra Fuente: es.khanacademy.org Existen en principio 2 tipos de potenciales que se deben generar para que se establezca la activación de una neurona y el posterior estímulo de salida de la misma, el cual se denomina “potencial de acción”. El primero, es un potencial químico que se produce en el exterior del cuerpo de la neurona, el segundo vendría siendo un potencial eléctrico adosado a la cara interna de la membrana celular [Dovale, 2005]. 12 Figura 1-4. Iones de activación dentro y fuera de una membrana celular. Fuente: Redes neuronales y sistemas borrosos B. Martín del Brío, A. Sanz Molina El estado inicial de una neurona empieza con una carga negativa respecto del medio exterior, existiendo un potencial de -60mV entre ambos lados, de esta forma se asimila al comportamiento de un condensador eléctrico. La existencia de este potencial de reposo inicial de la neurona (previo al potencial de acción) se debe a las concentraciones de iones de tipo 𝑁𝑁𝑁𝑁+ (ion de Sodio), 𝐾𝐾 + (Potasio) y mayoritariamente 𝑃𝑃2− (Compuesto) el cual se origina por efecto de la perdida de iones de 𝐶𝐶𝐶𝐶++ (Calcio) sumado a los anteriores, debido al gran tamaño del potencial 𝑃𝑃2− este no puede atravesar la rejilla presináptica, la cual contiene ambos potenciales divididos. Los canales importantes dentro del proceso de activación de la neurona se encuentran en los iones 𝑁𝑁𝑁𝑁+ los cuales presentan un estado pasivo, comportándose como simples poros. Por otra parte, los canales 𝑁𝑁𝑁𝑁+ son activos y se convierten en permeables al ion 𝑃𝑃2− cuando el potencial de la membrana celular asciende por encima de los -45mV. A esta tensión de excitación se le denomina “umbral de disparo”, ya que pasado el mismo se efectúa la activación de la neurona [Del Brío, 2004]. El potencial de activación entonces, se genera partiendo con el proceso de sinapsis, en este punto se genera un lazo de comunicación entre una neurona presináptica y otra postsináptica, la neurona presináptica libera sustancias químicas altamente complejas denominadas neurotransmisoras [Dovale, 2005]. 13 Figura 1-5. Potencial de acción en el proceso sináptico Fuente: es.khanacademy.org Estos neurotransmisores ingresan a la neurona postsináptica por medio del vacío sináptico [Dovale, 2005]. Si la neurona posee en el SOMA canales sensibles a estos neurotransmisores como los iones antes descritos, estos permitirán el paso de determinados iones a través de la membrana. Estas corrientes crearán pequeños potenciales excitadores (positivos) o inhibidores (negativos), si la suma de estos potenciales de entrada resulta en un potencial suficientemente alto, este puede elevar la carga inicial de la neurona por encima de los -45mV (umbral de disparo), lo que produce que se abran bruscamente los canales de sodio de modo que los iones 𝑁𝑁𝑁𝑁+ entran masivamente al interior produciendo una despolarización de la neurona llegando ésta los +50mV, inmediatamente llegando a este valor el potencial de la neurona vuelve a caer progresivamente en su estado inicial durante un periodo de tiempo en el cual no puede producirse otra activación [Del Brío, 2004]. 14 +5 Potencial de acción 0mV 1 ms t (ms) Período -45mV Umbral de disparo -60mV Potencial de reposo Polarización Despolarización Hiperpolarización Figura 1-6. Potencial de activación Fuente: Redes neuronales y sistemas borrosos B. Martín del Brío, A. Sanz Molina A este periodo se le denomina refractario e impide que se establezcan 2 potenciales de acción de forma simultánea [Del Brío, 2004]. Dentro de la red neuronal biológica, altamente interconectada se pueden encontrar millones de potenciales de activación sucediendo al mismo instante, cabe destacar que este potencial no solamente puede ser de carácter activo si no también inhibidor, la diferencia de este último es que enviaría una señal negativa por su axón a otra neurona, la cual intentaría anularse con otros potenciales de activación provenientes del resto de células [Dovale, 2005]. Como se vio anteriormente, el pulso generado podría verse como un impulso digital, ya que está o no presente en la red, se sabe que ante una estimulación muy intensa el intervalo entre la cantidad de pulsos que genera una neurona puede verse drásticamente acortado, lo que aumentaría por así decirlo la frecuencia de ésta. Por lo que el nivel de excitación queda codificado en la relación de frecuencia de los potenciales de acción [Del Brío, 2004] es en esta relación de intensidad/frecuencia, donde se piensa que se codifica la información [Izaurieta, 2014]. Típicamente estas neuronas son casi 6 veces más lentas que una compuerta lógica, y su periodo anterior al proceso sináptico genera un gasto energético más grande debido al alto bombeo de iones Na+ K+, para mantener la polarización negativa [Del Brío, 2004]. La gran diferencia se encuentra en la masiva concentración de disparos altamente distribuidos a lo largo de toda la red cerebral y a la cantidad de conexiones que se generan 15 hace que el sistema de nuestro cerebro sea altamente eficiente siendo ésta de unos 1016 𝐽𝐽, el cual es del orden de 10 elevado a 10 veces mayor que los mejores computadores actuales [Izaurieta, 2014]. Dado que las ANS imitan una estructura de Hardware del cerebro humano, este se diferencia de una Máquina digital o computador en que su comportamiento es de forma paralela, distribuida y adaptativa [Del Brío, 2004]. Si se recuerda el concepto anterior de la problemática de una computadora digital que trabaja con uno o pocos procesadores, la cual no puede por ejemplo, desarrollar tareas como la de reconocer una mosca al vuelo y atraparla en el aire, cosa que para el cerebro de una rana resulta ser algo simple [Del Brío, 2004]. Los 3 conceptos descritos anteriormente, parecen ser la clave para lograr tareas de comportamiento difuso. El paralelismo se puede emplear tomando como ejemplo la tarea de procesamiento de imágenes, para un ordenador clásico que trabaja de forma secuenciada, procesar una imagen de 256x256 pixeles tardaría unos minutos dependiendo de la potencia del ordenador y con un tratamiento de nivel relativamente bajo. Para un sistema de procesamiento paralelo como las redes neuronales artificiales, emplearía alrededor de 20ms en realizar la misma tarea, ya que cada uno de los procesadores se encargaría de un sector de la imagen en específico. Finalmente, el cerebro humano es capaz de realizar en el mismo tiempo el procesamiento de imágenes de millones de pixeles, extraer sus rasgos característicos, analizarla e interpretarla. La clave para este tipo de efectividad reside en los millones de neuronas altamente interconectadas, recordar que estas últimas vendrían siendo diminutos procesadores [Del Brío, 2004]. 1.2.3. Estructura neuronal La estructura de una red neuronal biológica, en el fondo no sigue los mismos pasos que una artificial, la red artificial ejecuta sus conexiones de forma ordenada, mediante capas de conexión. Mientras que una red biológica no lo hace siguiendo un orden establecido, si no que de forma casi aleatoria. Una neurona biológica puede hacer sinapsis con otra que esté mucho más lejos, el orden de estas conexiones puede ser en cualquier dirección posible, incluso pudiendo hacer sinapsis consigo misma. Si bien, experimentalmente se han logrado modelos artificiales que emulen de forma muy simplista este concepto, creando algoritmos de creación y destrucción de neuronas en base a reglas de aprendizaje, no se han logrado beneficios de esta práctica [Del Brío, 2004]. 16 A lo largo de la vida parte de las neuronas biológicas se destruyen, lo que emerge más complejidad a la estructura final de la red. Cabe destacar que el esquema presentado en esta sección no complementa la realidad total de lo que ocurre en las zonas neuronales del cerebro. En este se realizan más tipos de activaciones, mediante impulsos eléctricos o químicos, inclusive mixtos, ya que la finalidad de este apartado es el explicar de dónde nace la inspiración de la cual nace el concepto de red neuronal artificial [Del Brío, 2004]. Figura 1-7. Represtación morfológica de neuronas del córtex auditivo Fuente: Texture of the Nervous System of Man and the Vertebrates Santiago Ramón y Cajal 16 CAPÍTULO 2: REDES NEURONALES ARTIFICIALES 17 2.1. MODELO NEURONAL El modelo neuronal que se introdujo entonces, se utiliza con el fin de imitar el comportamiento global de la red, intentando emular así sus características más relevantes, que entran en juego en su interacción con toda la red [Izaurieta, 2014]. La neurona artificial se basa en la simplificación del sistema antes visto [Basogain, 2008], el esquema típicamente se representa en la (Figura 2-1): Figura 2-1. Neurona Estándar Fuente: Redes neuronales y sistemas borrosos B. Martín del Brío, A. Sanz Molina Donde: - 𝑋𝑋𝑖𝑖 = Entrada sináptica de la neurona i 𝑊𝑊𝑖𝑖 = Peso asociado a la entrada de la neurona i 𝑏𝑏𝑖𝑖 = Sesgo asociado al conjunto de entrada (bias) El modelo de la imagen trabaja como una neurona McCulloch Pitts, la cual recibe una o múltiples entradas desde 𝑋𝑋1 , 𝑋𝑋2 , …, 𝑋𝑋𝑛𝑛 . Éstas pueden ser provenientes de datos de entrada provenientes del exterior o de otra neurona presináptica [Hagan, 2014]. 18 Esto se correlaciona con los subíndices de cada entrada y peso sináptico, los cuales se corresponden con la ubicación de la neurona dentro de la futura red, de tal modo que si una neurona “j” expulsa un valor de salida 𝑦𝑦𝑗𝑗 este luego pasará a ser la entrada de la siguiente neurona “i” que recibe el dato, pasando a ser la entrada 𝑋𝑋𝑗𝑗 a la cual se le denomina un peso asociado 𝑊𝑊𝑖𝑖𝑖𝑖 el cual se multiplica por dicho factor, definiendo la importancia relativa de cada entrada [Izaurieta, 2014]. Neurona Presináptica (j) Neurona Postsináptica (j) Figura 2-2. Interacción entre una neurona Presináptica y otra postsináptica Fuente: Elaboración propia El resultado de este producto se le añade un parámetro adicional denominado bias (sesgo), el cual determina normalmente la decisión salida de un conjunto de entradas “𝑋𝑋𝑗𝑗 ” , en otros textos se le puede denominar con el nombre de “umbral”, siendo este, algunas veces un potencial negativo que determina el nivel de entrada mínimo para que la salida del argumento de la función sea positivo, como en el caso de nodos respuesta todo-nada [Del Brío, 2004]. Cabe destacar que no siempre el bias actuará como un umbral. El resultado de esta sumatoria se le denomina la “regla de propagación”, que vendrá luego inserta en la función de activación, o como se le denomina en otros textos “función de transferencia” viene dada por la ecuación (1.1): 𝑦𝑦𝑖𝑖 (𝑡𝑡) = 𝑓𝑓 ���𝑋𝑋𝑖𝑖𝑖𝑖 𝑊𝑊𝑗𝑗 ± 𝑏𝑏𝑗𝑗 �� (1.1) 19 Si se supone por ejemplo una neurona artificial de una sola entrada con sus valores de entradas, pesos sinápticos y bias de la forma: - 𝑋𝑋1 = 3,3 𝑊𝑊2 = 4 𝑏𝑏2 = -2 El argumento de la función de activación resultaría: 𝑦𝑦𝑖𝑖 = 𝑓𝑓�(3,3)(4) − 2� 𝑦𝑦𝑖𝑖 = 𝑓𝑓(11,2) Siendo luego el valor “11,2” argumento de la función de transferencia, luego la salida quedará determinada por el valor de 𝑦𝑦𝑖𝑖 que vendría siendo el valor de salida que egresaría del Axón de la neurona artificial. 2.1.1. Modelo de Regresión lineal Al modelo de la regla de propagación se le conoce también matemáticamente con el nombre de “modelo de regresión lineal múltiple”, el cual es un método estadístico representado por el argumento de la ecuación (1.10) que tiene como finalidad investigar y modelar la relación entre variables aleatorias [Montgomery, 2006] donde: 𝑦𝑦𝑖𝑖 = 𝑋𝑋𝑖𝑖 𝑊𝑊𝑖𝑖 + 𝑏𝑏 - (1.2) 𝑊𝑊𝑖𝑖 = Variable predictora o regresora 𝑦𝑦𝑖𝑖 = Variable de respuesta Este método estadístico sirve entre otras cosas para, ajustar la dispersión de una variable aleatoria a relación rectilínea entre los parámetros, por ejemplo, el tiempo de 20 entrega de un repartidor en una tienda en relación a la cantidad de cajas de entrega o su volumen, como se ejemplifica en la figura. Figura 2-3. Diagrama de dispersión con relación rectilinea entre el tiempo y el volumen Fuente: introducción al análisis de regresión lineal. Montgomery, 2006 La Figura 2-3representa un modelo matemático, que se construye dibujando una línea que represente la tendencia de crecimiento de los datos, a este método se le denomina regresión lineal simple, ya que cuenta con 2 parámetros regresivos 𝑤𝑤𝑖𝑖 por lo que el plano queda de carácter bidimensional. Mientras más variables se relacionen, mayor será el número de dimensiones que superpongan al plano [Montgomery, 2006] por lo que pueden llegar a formarse planos tridimensionales o incluso hiperplanos los cuales se pueden trabajar matemáticamente mediante matrices, un ejemplo de plano tridimensional se ejemplifica en el subcapítulo 2.2.4 El análisis de regresión lineal es un modelo iterativo, donde los datos conducen al ajuste del modelo, y se produce un ajuste del modelo a los datos [Montgomery, 2006]. Por lo que el modelamiento puede realizarse de forma autónoma si se diseña una arquitectura como la que se trata en el capítulo 4, entonces el modelo matemático de regresión lineal es el argumento fundamental para el desarrollo de la red neuronal 21 2.1.2. Método de cuadrados ordinarios. Como se ejemplifica anteriormente, se puede crear un modelo regresivo lineal para modelar la tendencia entre variables en un plano a partir de un gráfico de dispersión, pero lo ideal sería crear un modelo que sea capaz de dibujar esta línea de forma autónoma y que ésta se construya a través de estos datos recolectados. Para esto se utiliza el método de cuadrados ordinarios, para lo cual es necesario explicar un término adicional que se añade a la ecuación denominada el error. Si se trabaja nuevamente el plano descrito anteriormente, y se miden las distancias desde los puntos de medición real del problema planteado y la línea predictora del modelo que se trazó se logrará conseguir el error, el cual se describe como la diferencia entre estas distancias. 𝑦𝑦𝑟𝑟 𝑦𝑦𝑒𝑒 Figura 2-4. Cálculo del error medio de la gráfica de dispersión Fuente: Elaboración propia 𝑒𝑒 = (𝑦𝑦𝑟𝑟 − 𝑦𝑦𝑒𝑒 ) (1.3) Como no se tiene un único valor de error en el gráfico, se calcula la media de todas las distancias de error y se elevan al cuadrado, para reforzar o penalizar el mismo, lo que se logra con esto es penalizar con mayor intensidad aquellos datos que están más alejados de la recta y con menor intensidad a los que están más cerca. Al resultado se le conoce con el nombre de error cuadrático medio o “mean square error” (MSE), y es fundamental para conocer el nivel de eficiencia de la red en futuros capítulos. 22 𝑀𝑀𝑀𝑀𝑀𝑀 = (𝑦𝑦𝑟𝑟 − 𝑦𝑦𝑒𝑒 )2 (1.4) Lo que busca el método de cuadrados ordinarios, es modificar los parámetros de la recta regresará lineal, para disminuir el valor del MSE estimando los valores de 𝑤𝑤𝑖𝑖 y 𝑏𝑏 lo menor posible según la ecuación (1.2) , se puede escribir. 𝑦𝑦𝑖𝑖 = 𝑥𝑥𝑖𝑖 𝑤𝑤1 + 𝑏𝑏 + 𝜀𝜀𝑖𝑖 (1.5) Con 𝑖𝑖 = 1,2, … , 𝑛𝑛 Se puede considerar la ecuación (1.2) un modelo poblacional de regresión, mientras que la ecuación (1.5) un modelo muestra de regresión, escritos en términos de los n pares de datos (𝑦𝑦𝑖𝑖 , 𝑥𝑥𝑖𝑖 ) (𝑖𝑖 = 1,2, … , 𝑛𝑛), así el criterio de mínimos cuadrados queda. 𝑛𝑛 𝑆𝑆(𝑤𝑤1 , 𝑏𝑏) = �(𝑦𝑦𝑖𝑖 − 𝑏𝑏 − 𝑤𝑤1 𝑥𝑥𝑖𝑖 )2 (1.6) 𝑖𝑖=1 Siendo: 𝑆𝑆(𝑤𝑤1 , 𝑏𝑏) = función de coste, que determina el error de la expresión. Designando 𝑤𝑤1 ′ y 𝑏𝑏 ′ como estimadores de mínimos cuadrados de b y 𝑤𝑤1 se debe satisfacer que. 𝑛𝑛 y 𝜕𝜕𝜕𝜕 | = −2 �(𝑦𝑦𝑖𝑖 − 𝑏𝑏 ′ − 𝑤𝑤1 ′ 𝑥𝑥𝑖𝑖 ) = 0 𝜕𝜕𝜕𝜕 𝑖𝑖=1 𝑛𝑛 𝜕𝜕𝜕𝜕 | = −2 �(𝑦𝑦𝑖𝑖 − 𝑏𝑏 ′ − 𝑤𝑤1 ′ 𝑥𝑥𝑖𝑖 )𝑥𝑥𝑖𝑖 = 0 𝜕𝜕𝑤𝑤1 𝑖𝑖=1 23 Simplificando. 𝑛𝑛 𝑛𝑛 𝑖𝑖=1 𝑖𝑖=1 𝑛𝑛𝑏𝑏 ′ + 𝑤𝑤1 ′ � 𝑥𝑥𝑖𝑖 = � 𝑦𝑦𝑖𝑖 ′ 𝑛𝑛 𝑏𝑏 � 𝑥𝑥𝑖𝑖 + 𝑖𝑖=1 𝑛𝑛 𝑤𝑤1 � 𝑥𝑥𝑖𝑖2 𝑖𝑖=1 ′ 𝑛𝑛 = � 𝑦𝑦𝑖𝑖 𝑥𝑥𝑖𝑖 𝑖𝑖=1 Las respectivas ecuaciones se llaman “ecuaciones normales de mínimos cuadrados”, con esto se logra minimizar al máximo el coste de error mediante el cálculo de su derivada e igualando a cero para encontrar el mínimo de ambas funciones, como estas dependen de la función de coste 𝑆𝑆(𝑤𝑤1 , 𝑏𝑏) se deben derivar tanto b como 𝑤𝑤1 parcialmente respecto de S. La solución es la siguiente. (1.7) 𝑏𝑏 = 𝑦𝑦� − 𝑤𝑤1 ′ 𝑥𝑥̅ 𝑤𝑤1 ′ = (∑𝑛𝑛𝑖𝑖=1 𝑦𝑦𝑖𝑖 )(∑𝑛𝑛𝑖𝑖=1 𝑥𝑥𝑖𝑖 ) − 𝑛𝑛 2 𝑛𝑛 ∑ � 𝑥𝑥 � 𝑖𝑖 ∑𝑛𝑛𝑖𝑖=1 𝑥𝑥𝑖𝑖2 − 𝑖𝑖=1 𝑛𝑛 ∑𝑛𝑛𝑖𝑖=1 𝑦𝑦𝑖𝑖 𝑥𝑥𝑖𝑖 (1.8) Donde: 𝑛𝑛 1 𝑦𝑦� = � 𝑦𝑦𝑖𝑖 𝑛𝑛 𝑖𝑖=1 𝑦𝑦 𝑛𝑛 1 𝑥𝑥̅ = � 𝑥𝑥𝑖𝑖 𝑛𝑛 𝑖𝑖=1 Son los promedios de ambos factores. Por tanto los valores de 𝑤𝑤1 ′ y b son los estimadores por cuadrados mínimos de la pendiente y la ordenada al origen de la gráfica de la Figura 2-3 u cualquier otra que se desee calcular. La ecuación final con los estimadores quedará de la forma. 𝑦𝑦 ′ = 𝑥𝑥𝑖𝑖 𝑤𝑤1 ′ + 𝑏𝑏 ′ 24 2.1.3. Funciones de Salida La función de salida global de la neurona no solo depende de la regla de propagación o regresión lineal antes vista, sino también de una función de salida 𝑦𝑦𝑖𝑖 (𝑡𝑡), en función del estado de activación o función de transferencia actual, ésta dependerá del tipo de regla de aprendizaje que se use y el modelo neuronal, existen casos donde la función de salida será igual a la identidad F(x) = x, por lo que el valor de 𝑦𝑦𝑖𝑖 (𝑡𝑡) será: 𝑦𝑦𝑖𝑖 (𝑡𝑡) = 𝐹𝐹𝑖𝑖 �𝑎𝑎𝑖𝑖 (𝑡𝑡)� = 𝑎𝑎𝑖𝑖 (𝑡𝑡) (1.9) 𝑎𝑎𝑖𝑖 (𝑡𝑡) = �(𝑋𝑋𝑖𝑖 𝑊𝑊𝑖𝑖 ± 𝑏𝑏) (1.10) Donde: Este caso se da en funciones neuronales simples como la “Adalina”, también puede darse casos donde la señal de salida de la neurona sea de tipo escalón o “Hard Limit Transfer Function” [Hagan, 2014], lo que supondría que la señal de salida será 𝑦𝑦𝑖𝑖 = 0 hasta no superar el valor del umbral de activación “𝑏𝑏𝑖𝑖 ”: 𝑦𝑦𝑖𝑖 = 1 Si, ∑�𝑋𝑋𝑖𝑖𝑖𝑖 𝑊𝑊𝑗𝑗 � > 𝑏𝑏𝑗𝑗 𝑦𝑦𝑖𝑖 = 0 Si, ∑�𝑋𝑋𝑖𝑖𝑖𝑖 𝑊𝑊𝑗𝑗 � ≤ 𝑏𝑏𝑗𝑗 ��𝑋𝑋𝑖𝑖𝑖𝑖 𝑊𝑊𝑗𝑗 � > 𝑏𝑏𝑗𝑗 SALIDA 𝑦𝑦𝑖𝑖(𝑡𝑡) TIEMPO Figura 2-5. Grafica de salida de una neurona “Hard Limit” Fuente: Elaboración propia 25 En la gráfica se puede apreciar la respuesta en el tiempo de la función de transferencia todo-nada (Hard Limit), se ilustra la respuesta de estado alto cuando 𝑋𝑋𝑖𝑖𝑖𝑖 𝑊𝑊𝑗𝑗 superan el umbral de disparo. Los valores máximos de la función también pueden variar entre 1 y -1 dependiendo de la necesidad de la aplicación. En este caso se podría considerar que el potencial de las entradas inhibidoras será de tipo absoluto, ya que “ante la presencia de una señal inhibidora la neurona ya no se disparara” [Del Brío, 2004], este fue uno de los primeros modelos neuronales que se desarrollaron y se demostró que incluso podía realizar tareas de funciones binarias, así como las compuertas lógicas, por ejemplo, si tomamos los siguientes parámetros para dos neuronas presinápticas (1) y (2) [Hagan, 2014]. - 𝑊𝑊1 = -2 𝑊𝑊2 = -2 b=3 Se podría crear una neurona que simule el comportamiento de una compuerta de tipo NAND, la cual se sabe que es la base para simular las demás compuertas lógicas de tipo lineal, en este caso el modelo regresivo no se utilizaría como una línea que se ajusta a una dispersión de valores, sino, una línea que separaría la combinación de estas variables en dos tipos de salida, a este tipo de redes neuronales se les denomina “clasificadoras”, esto se ejemplifica más claramente en la sección. 26 Insertando los parámetros en el nodo nos quedaría: Neurona Estándar H (.) Compuerta Lógica NAND Figura 2-6. Comparativa entre compuerta lógica NAND y Nodo neuronal Fuente: Elaboración propia Las respectivas ecuaciones quedarían de la forma: (1.11) 𝑦𝑦 = 𝐻𝐻(𝑤𝑤1 𝑥𝑥1 + 𝑤𝑤2 𝑥𝑥2 − 𝑏𝑏) = 𝐻𝐻(−2𝑥𝑥1 − 2𝑥𝑥2 + 3) 𝐹𝐹 = ������� 𝐴𝐴 ∗ 𝐵𝐵 (1.12) Realizando las tablas de verdad: Tabla 2-1. Tabla de verdad de una compuerta NAND 𝑥𝑥1 0 𝑥𝑥2 0 𝑦𝑦 1 𝐴𝐴 0 𝐵𝐵 0 0 1 1 𝐹𝐹 = ������� 𝐴𝐴 ∗ 𝐵𝐵 0 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1 Sin embargo, un nodo de tipo umbral como el demostrado sólo puede implementar funciones separables linealmente como las compuertas, AND, OR, NOR, NAND, donde se puede encontrar una única recta que separa perfectamente las regiones correspondientes a los valores lógicos 0 y 1 [Del Brío, 2004]. Las funciones no separables linealmente no se pueden llevar acabo como por ejemplo la función lógica xOR (OR exclusivo), es por 27 esto es que se trabaja además con otro tipo de funciones de transferencia y estructuras multicapa, las cuales se profundizarán más adelante en la subsección 2.2.2 [Izaurieta, 2014]. 2.1.4. Modelo neuronal general De este modo el procesamiento de una neurona artificial evaluada en función del tiempo, requiere de todos estos pasos para funcionar, el modelo más generalizado conlleva el siguiente orden [Del Brío, 2004]: Pesos Sinápticos Sinapsis 𝒙𝒙𝟏𝟏 ⎧𝒙𝒙𝟐𝟐 ⎪𝒙𝒙𝟑𝟑 ⎪ 𝒙𝒙𝒋𝒋 𝒙𝒙𝒋𝒋 . ⎨ ⎪ . ⎪ . ⎩𝒙𝒙𝒏𝒏 𝒘𝒘𝒊𝒊𝒊𝒊 𝒉𝒉𝒊𝒊 = 𝒂𝒂𝒊𝒊 = 𝝏𝝏(𝒘𝒘𝒊𝒊𝒊𝒊 , 𝒙𝒙𝒋𝒋 ) Entradas Salida 𝒚𝒚𝒊𝒊 = 𝑭𝑭( 𝒂𝒂𝒊𝒊 ) 𝒇𝒇( 𝒉𝒉𝒊𝒊 ) Regla de 𝒚𝒚𝒊𝒊 Función de Salida propagación Función de transferencia Figura 2-7. Modelo genérico de una neurona estándar Fuente: Elaboración propia Referenciando la secuencia en el tiempo para una neurona de una entrada 𝑥𝑥𝑗𝑗 quedaría: El conjunto de entradas xj (t) en función del tiempo. Los pesos sinápticos de la neurona i, 𝑤𝑤𝑖𝑖𝑖𝑖 La regla de propagación ℎ𝑖𝑖 (t) = ∂(wij , xj (t)), que entrega el potencial de hi (t), en función de xj (t) y 𝑤𝑤𝑖𝑖𝑖𝑖 . 28 La función de transferencia 𝑎𝑎𝑖𝑖 (t) = fi (𝑎𝑎𝑖𝑖 (𝑡𝑡 − 1), ℎ𝑖𝑖 (t) ) de la neurona i en función de su estado anterior 𝑎𝑎𝑖𝑖 (𝑡𝑡 − 1) y del potencial actual. Función de salida 𝑦𝑦𝑖𝑖 (𝑡𝑡) = 𝐹𝐹(𝑎𝑎𝑖𝑖 (𝑡𝑡)) que proporciona el estado actual de la salida de la neurona, en función de su argumento dado por la función de transferencia. Finalmente la expresión completa, que modela el comportamiento de la neurona en función de su estado anterior y su potencial actual queda de la forma: 𝑦𝑦𝑖𝑖 (𝑡𝑡) = 𝐹𝐹(𝑓𝑓𝑖𝑖 �𝑎𝑎𝑖𝑖 (𝑡𝑡 − 1), ∂𝑖𝑖 (wij , xj (t)) �) (1.13) 2.1.5. Modelo neuronal no lineal En un modelo neuronal estándar se considera que las neuronas pueden trabajar tanto de forma digital como en el modelo presentado anteriormente, o de forma análoga, dentro de un intervalo de números. Frecuentemente suelen utilizar modelos con funciones sigmoidales o hiperbólicas como función de transferencia para este cometido. En principio, lo que se pretende es realizar una deformación en las líneas de clasificación para lograr una óptima separación de clases dando un mayor grado de libertad a la red, dado que una red creada a partir solo de funciones de transferencia lineales solo daría como resultado una o muchas salidas lineales. Figura 2-8. Diseño de una red neuronal con funciones de transferencia de tipo lineal Fuente: Elaboración propia 29 Por ejemplo si se realiza la misma tarea solo cambiando algunas de las funciones de transferencia de las neuronas por funciones sigmoidales. Figura 2-9. Diseño de red neuronal con función de transferencia sigmoidal Fuente: Elaboración propia Si bien la función sigmoidal no es determinante para realizar dicha tarea ya que se han diseñado redes con diferentes funciones de transferencia como los de la Tabla 2-2. Se utiliza la función sigmoidal ya que la función debe ser derivable para poder calcular el error en la salida de forma más óptima [Hagan, 2014]. Funciones sigmoideas, y sus diferentes tramos: 𝑦𝑦 = 𝑓𝑓(𝑥𝑥 ) = 𝑦𝑦 = 𝑓𝑓(𝑥𝑥 ) 1 1+𝑒𝑒 −𝑥𝑥 𝑒𝑒 𝑥𝑥 −𝑒𝑒 −𝑥𝑥 𝑒𝑒 𝑥𝑥 +𝑒𝑒 −𝑥𝑥 , con y ∈ [0, 1] , con y ∈ [-1, 1] (1.14) (1.15) Este sistema es el más utilizado en modelos multicapa que se analizarán en el capítulo siguiente, ya que el requisito de trabajar con funciones diferenciales lo suele imponer la regla de aprendizaje, como sucede con el famoso algoritmo BackPropagation [Del Brío, 2004]. 30 Existen a lo menos 6 tipos de funciones de transferencia usadas, los cuales se detallarán a continuación: Tabla 2-2. Distintas funciones de transferencia utilizadas en redes neuronales Función Rango 𝑦𝑦 = 𝑥𝑥 [−∞, +∞] 𝑦𝑦 = ±(𝑥𝑥 ) {−1, +1} −1, 𝑠𝑠𝑠𝑠 𝑥𝑥 < −1 𝑦𝑦 = �𝑥𝑥, 𝑠𝑠𝑠𝑠 + 1 ≤ 𝑥𝑥 ≤ −1 +1, 𝑠𝑠𝑠𝑠 𝑥𝑥 > +1 [−1, +1] Identidad Escalón 𝑦𝑦 = 𝐻𝐻(𝑥𝑥) { 0, +1} Lineal a tramos Sigmoidea 𝑦𝑦 = 1 1 + 𝑒𝑒 −𝑥𝑥 [0, +1] [−1, +1] Gaussiana 𝑦𝑦 = 𝐴𝐴𝑒𝑒 −𝐵𝐵𝐵𝐵 2 [0, +1] Sinusoidal 𝑦𝑦 = 𝐴𝐴 sin(𝑤𝑤𝑤𝑤 + 𝜑𝜑) [−1, +1] Grafico 31 2.2. ARQUITECTURA DE LAS REDES NEURONALES La arquitectura de una red neuronal, viene siendo la distribución y conexión de los diversos nodos dentro de una red [Del Brío, 2004], en el cual la información sigue un solo sentido de propagación. La primera red neuronal denominada Perceptrón tiene la siguiente forma: Sensores 𝑿𝑿𝟏𝟏 𝑿𝑿𝟐𝟐 𝑿𝑿𝟑𝟑 𝑿𝑿𝟒𝟒 Entradas 𝒚𝒚𝟏𝟏 𝒚𝒚𝟐𝟐 𝒚𝒚𝟑𝟑 𝒚𝒚𝟒𝟒 𝒚𝒚𝟓𝟓 𝒚𝒚𝟔𝟔 Información Figura 2-10. Modelo del perceptrón simple Fuente: Elaboración propia Donde el sensor recibe la información del exterior, hay una capa neuronal de los nodos que reciben los datos o estímulos de entrada [Basogain, 2008], procesan la información acorde a la función de transferencia utilizada y envían un único dato de salida a todas las neuronas de la capa siguiente, la cual se denomina capa de salida. Como se explicó antes esta red es muy útil para discriminar patrones separables linealmente [Izaurieta, 2014]. Si se recuerda la tabla de verdad del nodo anterior imitando el funcionamiento de la compuerta NAND podemos ver gráficamente que la separación de discriminantes se puede realizar de forma lineal separándose los resultados en 2 clases: 32 𝒙𝒙𝟐𝟐 CLASE 1 0 1 1 CLASE 0 0 1 1 0 1 𝒙𝒙𝟏𝟏 Figura 2-11. NAND sobre el plano Fuente: Elaboración propia Si se realiza una función lógica de tipo no separable linealmente como la xOR por ejemplo, cuya tabla de verdad y simbologías, vienen de la forma: Tabla 2-3. Tabla de verdad de una compuerta NAND Compuerta Lógica A B F 0 0 0 0 1 1 1 0 1 1 1 0 Tabla de verdad 33 Gráficamente no se puede separar de forma lineal en 2 clases, como el ejemplo anterior: B 1 1 0 0 0 1 0 1 A Figura 2-12. Grafica de una compuerta xOR sobre el plano Fuente: Elaboración propia Como se aprecia, es fácil demostrar que el nodo neuronal cumple con la separación de variables sobre el plano, en la mayoría de compuertas lógicas, llama la atención que la red necesite ser más compleja para emular una compuerta de tipo xOR pese a que esta última se diferencia de la OR solamente en la primera línea. 34 2.2.1. El perceptrón multicapa Considerar ahora una estructura neuronal multicapa, si bien existen varios tipos de red multicapa dadas sus diferentes conexiones entre sus diversos nodos, la que se estudiará será la de tipo unidireccional, representada de la forma: 𝒘𝒘11,1 𝑿𝑿𝟏𝟏 𝑿𝑿𝟐𝟐 𝑿𝑿𝒏𝒏 𝒃𝒃11 𝒘𝒘12,2 𝒃𝒃12 𝒘𝒘1𝑠𝑠,𝑛𝑛 𝒚𝒚11 𝒚𝒚12 𝒚𝒚1𝑛𝑛 𝒃𝒃13 Capa de entrada 𝒚𝒚12 2 𝒘𝒘1,1 2 𝒘𝒘1,2 2 𝒘𝒘1,𝑛𝑛 𝒃𝒃12 𝒘𝒘22,1 𝒘𝒘22,2 𝒘𝒘22,𝑛𝑛 𝒃𝒃22 𝒘𝒘2𝑠𝑠,2 𝒘𝒘2 𝑠𝑠,1 𝒘𝒘2𝑠𝑠,𝑛𝑛 𝒚𝒚22 𝒚𝒚23 3 𝒘𝒘1,1 3 𝒘𝒘1,2 3 𝒘𝒘1,𝑛𝑛 𝒃𝒃13 𝒘𝒘32,1 𝒘𝒘32,2 𝒘𝒘32,𝑛𝑛 𝒘𝒘3𝑠𝑠,2 𝒘𝒘3𝑠𝑠,𝑛𝑛 𝒃𝒃23 𝒃𝒃32 𝒘𝒘3𝑠𝑠,1 𝒚𝒚13 𝒚𝒚32 𝒚𝒚33 𝒃𝒃33 Capas ocultas 4 𝒘𝒘1,1 4 𝒘𝒘1,2 4 𝒘𝒘1,𝑛𝑛 𝒘𝒘42,2 𝒃𝒃14 𝒘𝒘42,1 𝒘𝒘4𝑠𝑠,𝑛𝑛 𝒚𝒚14 𝒚𝒚42 𝒃𝒃42 Capa de Salida Figura 2-13. Modelo del perceptrón multicapa Fuente: Elaboración propia Como se precia en el esquema, se le denomina a cada fila de neuronas se le denomina “capa”, la capa de neuronas que recibe el dato de entrada se le denomina “Capa de entrada”, y las neuronas que expulsan el valor de salida de la red se le denomina “Capa de salida” las capas intermedias de la red se denominan “capas ocultas” [Hagan, 2014]. La cantidad de capas ocultas dependerán del nivel de complejidad del elemento o problema a identificar [Izaurieta, 2014]. Ahora se agrega un nuevo subíndice en la parte superior de todas las variables. Si tomamos como ejemplo el primer nodo de la segunda capa (capa oculta), este recibe el dato de todas las neuronas pre sinápticas de subíndice superior “1”, cada una de sus dendritas de conexión tiene un peso asociado a los valores de entrada al nodo, para 𝒚𝒚11 , 2 correspondería el peso 𝒘𝒘1,1 , que se denominaría como el peso de la primera neurona ubicada en la segunda capa que indica importancia relativa de la entrada 𝒚𝒚11 [Hagan, 2014] 35 El procesamiento a nivel matemático de la red se realiza a través de matrices, planteado de esta forma la matriz que agrupa los pesos sinápticos de la segunda capa neuronal, o lo que sería la primera capa oculta queda de la forma: 𝑤𝑤1,1 𝑤𝑤 = �𝑤𝑤2,1 𝑤𝑤𝑠𝑠,1 𝑤𝑤1,2 𝑤𝑤2,2 𝑤𝑤𝑠𝑠,2 𝑤𝑤1,𝑛𝑛 𝑤𝑤2,𝑛𝑛 � 𝑤𝑤𝑠𝑠,𝑛𝑛 (2.16) El proceso se repite para todas las capas ocultas, las cuales tienen un nivel de procesamiento matemático, en cuanto a las ecuaciones que se trabajan en la red, si bien se aplica el mismo teorema antes visto, ahora se modifica la forma en la que se presenta. Tomando como ejemplo un nodo: Forma anterior: 𝒚𝒚12 = (�𝒘𝒘𝟐𝟐𝟏𝟏,𝟏𝟏 𝒚𝒚𝟏𝟏𝟏𝟏 + 𝒘𝒘𝟐𝟐𝟏𝟏,𝟐𝟐 𝒚𝒚𝟏𝟏𝟐𝟐 + 𝒘𝒘𝟐𝟐𝟐𝟐,𝒏𝒏 𝒚𝒚𝟏𝟏𝒏𝒏 � + 𝒃𝒃𝟐𝟐𝟏𝟏 ) (2.17) Nueva forma: 𝑦𝑦12 = 𝑓𝑓 ��𝒘𝒘𝟐𝟐𝟏𝟏,𝟏𝟏 𝒘𝒘𝟐𝟐𝟏𝟏,𝟐𝟐 𝒚𝒚𝟏𝟏𝟏𝟏 𝒘𝒘𝟐𝟐𝟐𝟐,𝒏𝒏 � �𝒚𝒚𝟏𝟏𝟐𝟐 � + 𝒃𝒃𝟐𝟐𝟏𝟏 � 𝒚𝒚𝟏𝟏𝒏𝒏 (2.18) 36 2.2.2. xOR con red multicapa Dado que la función xOR en el plano no permite una separación lineal de las variables con un nodo neuronal, se necesita del procesamiento de una red con una complejidad un poco superior, utilizando una red de una capa oculta con 2 neuronas. 2 𝒘𝒘1,1 =1 𝒃𝒃11 𝒃𝒃12 𝒘𝒘22,2 = 1 2 𝒘𝒘1,2 =1 𝒘𝒘22,2 =1 𝒚𝒚12 3 𝒘𝒘1,1 =1 𝒃𝒃12 = −0.5 𝒚𝒚22 3 𝒘𝒘1,2 𝒃𝒃13 = −0.5 𝒃𝒃22 = −1.5 Figura 2-14. Simulación de una compuerta xOR con redes neuronales Fuente: Elaboración propia En esta arquitectura se puede ver que las neuronas de la primera Capa tienen como salida el mismo valor de las entradas, todas trabajan con una función de tipo escalón como la descrita en la Figura 2-5. 37 Describiendo cada valor de 𝑥𝑥1 y 𝑥𝑥2 para los valores de la tabla de verdad: 𝑠𝑠𝑠𝑠, 𝑥𝑥1 = 0; 𝑥𝑥2 = 0 2 𝑦𝑦12 = 𝐹𝐹 ��𝑤𝑤1,1 2 𝑦𝑦22 = 𝐹𝐹 ��𝑤𝑤2,1 𝑦𝑦13 = 𝐹𝐹 �[𝑤𝑤13 𝑠𝑠𝑠𝑠, 𝑥𝑥1 = 0; 𝑥𝑥2 = 1 2 𝑦𝑦12 = 𝐹𝐹 ��𝑤𝑤1,1 2 𝑦𝑦22 = 𝐹𝐹 ��𝑤𝑤2,1 𝑦𝑦13 = 𝐹𝐹 �[𝑤𝑤13 𝑥𝑥1 0 2 𝑤𝑤1,2 � � 𝑥𝑥 � +𝑏𝑏12 � = 𝑦𝑦12 = 𝐹𝐹 �[1 1] � � − 0.5� = 𝐹𝐹 (−0.5) = 0 0 2 𝑥𝑥1 0 2 𝑤𝑤2,2 � � 𝑥𝑥 � +𝑏𝑏22 � = 𝑦𝑦22 = 𝐹𝐹 �[1 1] � � − 1.5� = 𝐹𝐹 (−1.5) = 0 0 2 𝑤𝑤23 ] � 𝑦𝑦12 � +𝑏𝑏13 � = 𝑦𝑦13 = 𝐹𝐹 �[1 𝑦𝑦22 ∴ 𝑦𝑦13 = 0 0 −1] � � − 0.5� = 𝐹𝐹(−0.5) = 0 0 𝑥𝑥1 0 2 𝑤𝑤1,2 � � 𝑥𝑥 � +𝑏𝑏12 � = 𝑦𝑦12 = 𝐹𝐹 �[1 1] � � − 0.5� = 𝐹𝐹 (0.5) = 1 2 1 𝑥𝑥1 0 2 𝑤𝑤2,2 � � 𝑥𝑥 � +𝑏𝑏22 � = 𝑦𝑦22 = 𝐹𝐹 �[1 1] � � − 1.5� = 𝐹𝐹 (−0.5) = 0 2 1 𝑤𝑤23 ] � 𝑦𝑦12 1 � +𝑏𝑏13 � = 𝑦𝑦13 = 𝐹𝐹 �[1 −1] � � − 0.5� = 𝐹𝐹 (0.5) = 1 0 𝑦𝑦22 ∴ 𝑦𝑦13 = 1 𝑠𝑠𝑠𝑠, 𝑥𝑥1 = 1; 𝑥𝑥2 = 0. 2 𝑦𝑦12 = 𝐹𝐹 ��𝑤𝑤1,1 2 𝑦𝑦22 = 𝐹𝐹 ��𝑤𝑤2,1 𝑦𝑦13 = 𝐹𝐹 �[𝑤𝑤13 𝑥𝑥1 1 2 𝑤𝑤1,2 � � 𝑥𝑥 � +𝑏𝑏12 � = 𝑦𝑦12 = 𝐹𝐹 �[1 1] � � − 0.5� = 𝐹𝐹 (0.5) = 1 0 2 𝑥𝑥1 1 2 𝑤𝑤2,2 � � 𝑥𝑥 � +𝑏𝑏22 � = 𝑦𝑦22 = 𝐹𝐹 �[1 1] � � − 1.5� = 𝐹𝐹 (−0.5) = 0 0 2 𝑤𝑤23 ] � 𝑦𝑦12 3 3 ( ) [ ] 1 2 � +𝑏𝑏1 � = 𝑦𝑦1 = 𝐹𝐹 � 1 −1 �0� − 0.5� = 𝐹𝐹 0.5 = 1 𝑦𝑦2 ∴ 𝑦𝑦13 = 1 38 𝑠𝑠𝑠𝑠, 𝑥𝑥1 = 1; 𝑥𝑥2 = 1. 2 𝑦𝑦12 = 𝐹𝐹 ��𝑤𝑤1,1 2 𝑦𝑦22 = 𝐹𝐹 ��𝑤𝑤2,1 𝑦𝑦13 = 𝐹𝐹 �[𝑤𝑤13 𝑥𝑥1 1 2 𝑤𝑤1,2 � � 𝑥𝑥 � +𝑏𝑏12 � = 𝑦𝑦12 = 𝐹𝐹 �[1 1] � � − 0.5� = 𝐹𝐹 (1.5) = 1 2 1 𝑥𝑥1 1 2 𝑤𝑤2,2 � � 𝑥𝑥 � +𝑏𝑏22 � = 𝑦𝑦22 = 𝐹𝐹 �[1 1] � � − 1.5� = 𝐹𝐹 (0.5) = 1 2 1 𝑤𝑤23 ] � 𝑦𝑦12 � +𝑏𝑏13 � = 𝑦𝑦13 = 𝐹𝐹 �[1 𝑦𝑦22 ∴ 𝑦𝑦13 = 0 1 −1] � � − 0.5� = 𝐹𝐹(−0.5) = 0 1 Agrupando los valores en la tabla: Tabla 2-4. Valores de Entrada/Salida de la red "xOR" 𝒙𝒙𝟏𝟏 0 𝒙𝒙𝟐𝟐 0 𝒚𝒚𝟑𝟑𝟏𝟏 0 1 1 1 0 1 1 1 0 0 39 Poniendo 𝑥𝑥1 y 𝑥𝑥2 sobre el plano: 1 1 0 0 0 1 0 1 Figura 2-15. Grafica de la red neuronal simulando una compuerta xOR Fuente: Elaboración propia Dependiendo de la tarea a realizar y el nivel de complejidad de la misma se necesitará una u otra arquitectura neuronal: Tabla 2-5. Tipos de regiones de decisión en el Perceptrón Fuente: Redes neuronales y sistemas borrosos B. Martín del Brío, A. Sanz Molina Arquitectura Región de xOR Decisión Híper Plano Clasificación A B B A A B B A A B B A (Dos regiones) Regiones Polinomiales Convexas Regiones Arbitrarias A B A B A B Regiones más generales 40 Las neuronas artificiales pueden trabajar con diferentes funciones de transferencia, por ejemplo una red multicapa, puede trabajar con diferentes tipos de procesamiento en cada capa, una de ellas puede utilizar funciones de transferencia “hard limit” o escalón y otra puede trabajar con Función Sigmoidea, esto le otorga mayor flexibilidad a la red [Hagan, 2014]. La cantidad de neuronas de entrada y salida como la cantidad de capas ocultas y las respectivas funciones de transferencia de cada capa, se determinan dependiendo del problema a solucionar con la red. - Cantidad de neuronas de entrada = Variables de muestreo del problema - Cantidad de neuronas de salida = Datos de respuesta necesarios - Cantidad de capas Ocultas = Complejidad del problema a resolver Como los comportamientos que se quieren emular con este tipo de tecnologías no son de tipo estático (como los ejemplos anteriores) sino más bien, de tipo dinámico. Se necesitan algunos bloques más para dar forma a la red final. 2.2.3. Recurrent Networks Una red neuronal de tipo recurrente o Recurrent Network integra bucles de realimentación dentro del sistema permitiendo que la información de salida se mantenga dentro de la estructura general, ya sea modificando los pesos Sinápticos o Bias dentro del proceso de entrenamiento [Hagan, 2014]. Uno de los bloques que ayuda a generar esta realimentación es el de retardo o Delay, el cual se ilustra en la figura: 41 𝒖𝒖(𝒕𝒕) 𝒚𝒚(𝒕𝒕) 𝒚𝒚(𝟎𝟎) 𝑦𝑦(𝑡𝑡) = 𝑢𝑢 (𝑡𝑡 − 1) Figura 2-16. Bloque de retardo (Delay) Fuente: Neural Network Desing, Martin T. Hagan En este bloque se produce un retraso de la salida descrita por 𝑦𝑦(𝑡𝑡) y en función de la entrada 𝑢𝑢(𝑡𝑡) propuesta por la ecuación: 𝑦𝑦(𝑡𝑡) = 𝑢𝑢 (𝑡𝑡 − 1) (2.19) Por lo tanto la salida es equivalente a la entrada retrasada en el tiempo (los cuales deben ser de tipo discreto), donde se necesita la condición inicial t = 0 indicada en la flecha ascendente del bloque de la figura [Hagan, 2014]. Otro bloque esencial para la construcción de redes de tipo recurrente, es el integrador, descrito en la figura: 42 𝒚𝒚(𝒕𝒕) 𝒖𝒖(𝒕𝒕) 𝒚𝒚(𝟎𝟎) 𝑡𝑡 𝑦𝑦(𝑡𝑡) = � 𝑢𝑢 (𝑡𝑡) 𝑑𝑑𝑑𝑑 + 𝑦𝑦(0) 0 Figura 2-17. Bloque Integrador Fuente: Neural Network Desing, Martin T. Hagan Finalmente introduciendo la red de tipo recurrente quedaría de la forma: Capa recurrente: 𝑾𝑾 𝒚𝒚(𝒕𝒕 + 𝟏𝟏) Condición Inicial 𝑷𝑷 𝒚𝒚(𝒕𝒕) 𝒃𝒃 Figura 2-18. Red neuronal de capa recurrente Fuente: Neural Network Desing, Martin T. Hagan Condición inicial: 𝑦𝑦(0) = 𝑃𝑃 𝑦𝑦(𝑡𝑡 + 1) = 𝑓𝑓(𝑊𝑊 ∙ 𝑦𝑦(0) + 𝑏𝑏) (2.20) 43 La elección o combinación de los distintos tipos de arquitecturas neuronales dependerá del problema a seleccionar [Hagan, 2014], este bloque suele usarse en redes neuronales de tipo Times Series (series de tiempo) las cuales suelen tener un comportamiento dinámico donde la entrada de la red debe ser comparada de forma recurrente con la salida anterior en función del tiempo, este tratamiento se emplea en la sección 2. 2.2.4. Ejemplo ilustrativo Se requiere un clasificador de fruta para la selección en el proceso de empaques, para este ejemplo se dispone de Manzanas y Naranjas, se sabe que estas frutas tienen ciertas características determinantes para poder ser diferenciadas. El proceso empieza en la cinta transportadora, las frutas son dirigidas a través de una serie de sensores que toman mediciones de la forma, textura y peso de la misma. El sensor de forma emitirá un 1 si la fruta es aproximadamente redonda y un -1 si es más elíptica. El sensor de textura emitirá un 1 si la superficie de la fruta es suave y un -1 si es áspera y finalmente el sensor de peso emitirá un 1 si la fruta es de más de una libra y un -1 si es menos de una libra. 44 Todos estos datos se envían a una red neuronal que procesa la información y decide si se trata de una u otra fruta para luego ser derivadas a sectores distintos. Red Neuronal Sensor Clasificador Manzanas Naranjas Figura 2-19. Prototipo de una red neuronal clasificadora de frutas Fuente: Neural Network Desing, Martin T. Hagan Por cada fruta del conjunto de sensores, se puede trazar una serie de vectores tridimensionales donde el primero representa la forma, el segundo la textura y el último el peso. Presentando la matriz de entradas: 𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑦𝑦 = �𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 � 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 Donde: 1 𝑦𝑦1 = �−1� −1 Naranja 1 𝑦𝑦2 = � 1 � −1 Manzana 45 Para este caso se utilizará un perceptrón con 3 neuronas de entrada en la primera capa y una capa de salida conformada por una única neurona, donde la función de salida quedaría de la forma: 𝑦𝑦(𝑥𝑥) = 𝐹𝐹 �[𝑤𝑤1,1 𝑤𝑤1,2 𝑥𝑥1 𝑤𝑤1,3 ] �𝑥𝑥2 � + 𝑏𝑏� 𝑥𝑥3 (2.21) Para seleccionar los valores de pesos sinápticos y Bias, se procede a presentar los valores de entrada para cada una de las frutas en forma de vectores: z Límite de decisión y (1,-1,-1) x 𝑦𝑦2 (Naranja) (1, 1,-1) 𝑦𝑦1 (Manzana) Figura 2-20. Plano 3D de vectores Fuente: Neural Network Desing, Martin T. Hagan Se dividen los vectores para 𝑦𝑦1 e 𝑦𝑦2 en el plano, en este caso la división se hace en el eje Z siendo ésta simétrica. La matriz de pesos se sitúa de forma ortogonal a la división simétrica de los vectores apuntando al eje y donde se sitúa 𝑦𝑦1 (Manzana) donde queremos que la salida sea de orden unitario. El Bias será 0 según el modelo de regresión lineal ya que el límite de decisión pasa por el origen. 46 Por tanto la ecuación final queda: 𝑦𝑦 = 𝐹𝐹 �[0 𝑥𝑥1 𝑥𝑥 1 0] � 2 � + 0� 𝑥𝑥3 (2.22) Analizando las entradas: 𝑦𝑦 = 𝐹𝐹 �[0 1 1 0] �−1� + 0� = −1 (Naranja) −1 𝑦𝑦 = 𝐹𝐹 �[0 1 1 0] � 1 � + 0� = 1 (Manzana) −1 Ahora que sucede si los parámetros de entrada no son ideales, vale decir, si entra una naranja con forma elíptica (similar a una manzana): 𝑦𝑦 = 𝐹𝐹 �[0 −1 1 0] �−1� + 0� = −1 (Naranja) −1 De hecho, cualquier vector de entrada que esté más cerca del vector prototipo naranja que al vector prototipo de manzana (en distancia euclidiana) se clasificará como un naranja (y viceversa), por lo cual se puede decir que el sistema tiene una cierta tolerancia a fallos o imperfecciones, lo cual es óptimo en estos sistemas de clasificación [Hagan, 2014]. Este ejemplo simple se puede visualizar a través del software de simulación de Matlab, introduciendo en la ventana de comandos el comando nnd3pc (Neural Network Design Demonstration Perceptron Classification) 47 Figura 2-21. Simulación de un perceptrón clasificador Fuente: Matlab En él se puede ver la calibración de pesos 𝑤𝑤 = [0 1 0] y el bias b = 0, la misma que se determinó en el ejemplo teórico. Al clickear “Go” el programa emula valores para la forma (SHAPE), textura (TEXTURE) y peso (WEIGHT), según una base de datos interna, luego la fruta se posiciona bajo el sensor triangular el cual obtiene los parámetros que se grafican en el plano 3D. Finalmente la simulacion calcula el valor de salida de la funcion de transferencia y determina el parámetro de salida donde “p” serán las entradas y “a” será la salida. 48 Figura 2-22. Simulación de un perceptrón clasificador Fuente: Matlab 2.2.5. Hamming network Otra forma de clasificar patrones es a través de la red de Hamming (Hamming Network), esta red fue específicamente diseñada para resolver problemas de reconocimiento de patrones binarios (donde cada elemento del vector de entrada tiene solo dos posibles valores, en este ejemplo 1 o -1. En esta red se utilizan capas feedforward y recurrent (feedback) layers. En este caso la red tiene como objetivo decidir que vector prototipo podrá ser el más cercano al vector de entrada. Esta decisión se toma en la salida de la capa recurrente donde en este caso hay una sola. Cuando la capa recurrente converge, solo habrá una neurona con salida distinta de cero. Esta indica el patrón de prototipo más cercano al vector de entrada. 49 La red queda de la forma: Feedforward Network 𝑥𝑥1 𝑥𝑥2 𝑥𝑥3 Recurrent Network 1 𝑤𝑤1,𝑛𝑛 𝑦𝑦 1 𝑏𝑏1 1 𝑤𝑤2,𝑛𝑛 𝑤𝑤 2 𝑦𝑦 2 𝑏𝑏2 𝑦𝑦 1 = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝(𝑤𝑤𝑛𝑛1 ∙ 𝑥𝑥𝑛𝑛 + 𝑏𝑏𝑛𝑛 ) 𝑦𝑦 2 (0) = 𝑦𝑦 1 ; 𝑦𝑦 2 (𝑡𝑡 + 1) = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝(𝑤𝑤𝑛𝑛1 ∙ 𝑦𝑦 1 (𝑡𝑡)) Figura 2-23. Red Neuronal Hamming para reconocimiento de patrones Fuente: Elaboración propia Calibración de Feedforward layer: La capa de procesamiento Feedforward realiza una correlación, entre cada uno de los patrones prototipo y el patrón de entrada respectivo. Para que la capa realice esta correlación, las finas de matrices W, se establecen en función de los patrones de prototipo. Para nuestro ejemplo de reconocimiento de Manzanas/Naranjas quedaría: 𝑥𝑥𝑛𝑛1 1 𝑤𝑤 = � 2 � = � 1 𝑥𝑥𝑛𝑛 1 −1 −1 � 1 −1 Para determinar el valor de Bias, se consideran la cantidad de vectores de entrada 𝑥𝑥𝑛𝑛 , siendo n el valor de dicho parámetro: 3 𝑏𝑏𝑛𝑛 = � � 3 50 Habiendo determinado estos parámetros la salida de la capa Feedforward queda de la forma: 𝑦𝑦 1 = 𝑤𝑤𝑛𝑛1 ∙ 𝑥𝑥𝑛𝑛 + 𝑏𝑏𝑛𝑛 = � 𝑥𝑥𝑛𝑛1 𝑥𝑥𝑛𝑛1 3 � � � 𝑥𝑥 + = � 3 𝑥𝑥𝑛𝑛2 𝑥𝑥𝑛𝑛2 + + 3 � 3 (2.23) El valor de salida 𝑦𝑦 1 vendra siendo uno de los parámetros de entrada de la capa “Recurrent” Calibración de Recurrent Layer: La capa Recurrente del perceptrón Hamming se suele conocer como la capa “competitiva”. Las neuronas en esta capa inician con las salidas de la capa feedforward, la cual indica la correlación entre los patrones de prototipo y el vector de entrada x, luego en este punto las neuronas compiten entre sí para determinar un ganador. Dado que luego de esta competencia solo una neurona tendrá una salida distinta de cero. La neurona ganadora indica que categoría de entrada se le presentó a la red las cuales en este caso serían una Manzana o una Naranja [Hagan, 2014]. Las ecuaciones que describen esta competencia vienen dadas por: Condición inicial: Y la posterior función 𝑦𝑦 2 (𝑡𝑡 + 1) 𝑦𝑦 2 (0) = 𝑦𝑦 1 𝑦𝑦 2 (𝑡𝑡 + 1) = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝(𝑤𝑤𝑛𝑛1 ∙ 𝑦𝑦 1 (𝑡𝑡)) (2.24) Recordar que la función de transferencia “poslin” es de tipo lineal para valores positivos y cero para valores negativos. Función de transferencia Positive linear (poslin) Donde: 𝑦𝑦(𝑥𝑥 ) = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝(𝑛𝑛) 𝑦𝑦(𝑥𝑥 ) = 0 , 𝑠𝑠𝑠𝑠 𝑛𝑛 < 0 𝑦𝑦(𝑥𝑥 ) = 𝑛𝑛 , 𝑠𝑠𝑠𝑠 𝑛𝑛 ≥ 0 51 La matriz de pesos 𝑤𝑤 2 tiene la forma: 𝑤𝑤 2 = � Donde 𝜀𝜀 es un número menos que recurrente o Recurrent Layer. 1 𝑠𝑠−1 1 −𝜀𝜀 �, −𝜀𝜀 1 y S es el número de neuronas en la capa Si realizamos una iteración de la capa recurrente quedaría: 1 𝑦𝑦 𝑡𝑡 + 1) = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 �� −𝜀𝜀 2( 𝑦𝑦12 (𝑡𝑡) −𝜀𝜀 2 � 𝑦𝑦 (𝑡𝑡)� = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 �� 2 1 𝑦𝑦2 (𝑡𝑡) − −𝜀𝜀𝑦𝑦22 (𝑡𝑡) �� − −𝜀𝜀𝑦𝑦12 (𝑡𝑡) (2.25) Cada elemento de entrada a la capa recurrente se reduce por la misma fracción que el otro elemento entrante. De esta forma el elemento más grande se reducirá en menos, y el elemento más pequeño se reducirá en más, por lo tanto, la diferencia entre el elemento grande y el pequeño aumentará. El efecto que tiene esta capa es poner a 0 todas las salidas de neuronas, excepto la que tiene el valor inicial más grande, el cual corresponde al patrón prototipo más cercano en la distancia de Hamming. Para ilustrar el efecto de la red, aplicaremos las entradas captadas por el sensor que tomo los datos de la naranja elíptica. Donde: −1 𝑥𝑥𝑛𝑛 = �−1� −1 La salida de la primera capa (feedforward layer) quedará: 𝑦𝑦 1 = � 1 −1 1 1 −1 ( 1 + −1 3 � �−1� + � � = � (−1 + 3 −1 −1 3) 4 �=� � 3) 2 Estos parámetros vendrán siendo las condiciones iniciales de la segunda capa (Recurrent Layer). Según los valores de 𝑤𝑤 2, los cálculos de la ecuación antes propuesta 52 1 nos dan un 𝜀𝜀 = (cualquier número menor que 1 bastaría, según la propuesta anterior). 2 La primera iteración de la red recurrente sería: 𝑦𝑦 2 (1) = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝�𝑤𝑤 2 𝑦𝑦 2 (0)� = � La segunda iteración: 𝑦𝑦 2 (2) = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝�𝑤𝑤 2 𝑦𝑦 2 (1)� = � 1 −0,5 4 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 �� � � �� −0,5 1 2 (2.26) 1 −0,5 3 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 �� � � �� −0,5 1 0 (2.27) 3 3 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 �� �� = � � 0 0 3 3 �� = � � 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 �� −1.5 0 De esta forma según lo planteado en las condiciones iniciales de la Red Hamming si: 𝑦𝑦12 (2) > 0 𝑦𝑦22 (2) = 0 Entonces se está en presencia de una Naranja, tal como la representación anterior, por lo que se puede confirmar el funcionamiento de la red. 53 Al igual que con el perceptrón clasificador antes propuesto, la red Hamming tiene un ejemplo en Matlab ejecutando el comando nnd3hamc (Neural Network Design Demonstration Hamming Classification) Figura 2-24. Simulación de un perceptrón clasificador Hamming Fuente: Matlab 54 En la simulación se muestran los vectores de 𝑤𝑤 1 , 𝑤𝑤 2 𝑦𝑦 𝑏𝑏1 , las cuales se calcularon previamente. Al presionar “Go” el programa nuevamente simulará valores próximos a los de una fruta dentro de los parámetros establecidos y hará los cálculos realizados en el ejemplo anterior. Figura 2-25. Simulación de un perceptrón clasificador Hamming Fuente: Matlab El gráfico enseña la convergencia de los vectores prototipo dando proximidad al vector “naranja” el cual es efectivamente el objeto que estaba en la cinta transportadora. 55 2.3. REGLA DE APRENDIZAJE Se denomina regla de aprendizaje al método por el cual se modifican los pesos sinápticos y el Bias de la cada una de las neuronas que componen la red. El propósito de la regla de aprendizaje es capacitar al perceptrón para realizar una tarea en específico, éstas se componen de 3 grupos. - Aprendizaje supervisado. - Aprendizaje por refuerzo. - Aprendizaje no supervisado En el aprendizaje supervisado se entrena a la red mediante ejemplos, se ingresan los valores de entradas 𝑥𝑥𝑖𝑖 y se comparan con los valores de salida esperados “ 𝑡𝑡𝑖𝑖 ” u objetivos (targets). A medida que se ingresan los conjuntos de entradas a la red, el valor de salida se compara con los valores esperados. La regla de aprendizaje entonces, se encarga de corregir los pesos sinápticos y el bias hasta acercar la salida de la red 𝑦𝑦𝑖𝑖 al valor esperado 𝑡𝑡𝑖𝑖 . El aprendizaje por refuerzo se asimila al supervisado, con la diferencia que en éste no se cuenta con la salida correcta para cada conjunto de entradas de la red, si no que se establece una “nota” (o puntaje) que se asocia con el rendimiento de la red sobre alguna tarea. El aprendizaje por refuerzo es mucho menos común que el supervisado, pero suele ser más adecuado para controlar aplicaciones en sistemas de control [Hagan, 2014]. En el aprendizaje no supervisado (auto-organizado), los pesos sinápticos y el Bias se modifican solo en respuesta al conjunto de entradas de la red [Hagan, 2014], no existe ningún maestro externo que le indique a la red si está operando correctamente como en los modelos anteriores. Parece ser un método poco práctico de entrenar una red, pero ésta debe descubrir por si misma rasgos comunes, regularidades, correlaciones o categorías en los datos de entrada para incorporar modificaciones en su estructura interna [Del Brio, 2004]. Es por esto que las redes de aprendizaje no supervisado utilizan algoritmos que realizan dichas funciones y tienden a categorizar esta discriminación de entradas en un número finito de clases [Hagan, 2014]. 56 2.3.1. Conjuntos de entrenamiento Dentro de los parámetros para entrenar una red supervisada se establecen los conjuntos de entrenamiento, los cuales vienen siendo los valores de entrada con su respectivo valor de salida esperado. {𝑥𝑥2 , 𝑡𝑡1 }, {𝑥𝑥2 , 𝑡𝑡2 }, … , {𝑥𝑥𝑛𝑛 , 𝑡𝑡𝑛𝑛 }, (3.28) Donde: 𝑥𝑥𝑛𝑛 : Corresponde a una entrada de una red neuronal. 𝑡𝑡𝑛𝑛 : Corresponde a su respectiva salida esperada. 2.3.2. Límite de decisión El límite de decisión se determina cuando los vectores de entrada de la red para los cuales la salida neta de la regla de propagación es 0. Esto nos sirve para determinar la línea de separación de clases antes vista. Por ejemplo, si se toma una red de una sola neurona, para determinar su límite de decisión. 𝑥𝑥1 𝑥𝑥2 𝑤𝑤1,1 𝑤𝑤1,2 𝑏𝑏 Figura 2-26. Nodo neuronal de 2 entradas con Bias Fuente: elaboración propia 57 Siendo n el valor de la regla de propagación. 𝑛𝑛 = 𝑤𝑤𝑖𝑖𝑇𝑇 𝑥𝑥𝑖𝑖 + 𝑏𝑏 = 𝑤𝑤1,1 𝑥𝑥1 + 𝑤𝑤1,2 𝑥𝑥2 + 𝑏𝑏 = 0 (3.29) Una forma de comprobar el límite de decisión es asignando valores concretos a los parámetros de calibración expuestos en la ecuación (3.2). 𝑤𝑤1,1 = 1, 𝑤𝑤1,2 = 1, 𝑏𝑏 = −1 El límite de decisión quedaría: 𝑛𝑛 = 𝑤𝑤1,1 𝑥𝑥1 + 𝑤𝑤1,2 𝑥𝑥2 + 𝑏𝑏 = 1𝑥𝑥1 + 1𝑥𝑥2 − 1 = 0 (3.30) Esto define la línea que separa los límites de las entradas para cada valor de salida, porque a un lado de la línea estarán los vectores cuya salida será 0 y del otro lado los que asignen una salida de tipo 1. Para dibujar esta línea es necesario encontrar los puntos de intersección de los vectores 𝑥𝑥1 y 𝑥𝑥2 . Para hallar la intersección de 𝑥𝑥2 se debe hacer 𝑥𝑥1 = 0. Si 𝑥𝑥1 = 0 𝑛𝑛 = 𝑤𝑤1,1 𝑥𝑥1 + 𝑤𝑤1,2 𝑥𝑥2 + 𝑏𝑏 𝑤𝑤1,1 0 + 𝑤𝑤1,2 𝑥𝑥2 + 𝑏𝑏 = 0 𝑥𝑥2 = − 𝑏𝑏 −1 =− =1 𝑤𝑤1,2 1 Luego para encontrar la intersección de 𝑥𝑥1 se debe realizar el mismo procedimiento pero con 𝑥𝑥2 = 0. Si 𝑥𝑥2 = 0. 𝑤𝑤1,1 𝑥𝑥1 + 𝑤𝑤1,2 0 + 𝑏𝑏 = 0 𝑥𝑥1 = − 𝑏𝑏 −1 =− =1 𝑤𝑤1,1 1 58 El resultado de la línea calculada con el límite de decisión antes descrito se ilustra en la figura posterior. 𝑥𝑥1 𝑤𝑤𝑖𝑖𝑇𝑇 𝑥𝑥𝑖𝑖 + 𝑏𝑏 = 0 𝑦𝑦1 = 1 𝑦𝑦1 = 0 𝑥𝑥2 Figura 2-27. Límite de decisión para una neurona de 2 entradas Fuente: Neural Network Desing, Martin T. Hagan Para comprobar la situación se pueden asignar valores para encontrar si efectivamente las salidas se corresponden con la información que nos da el grafico. Por ejemplo, para las entradas 𝑥𝑥 = [2 0], la salida de la neurona seria. 2 𝑦𝑦 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻 �[1 1] � � − 1� = 1 0 (3.31) Para visualizar de forma didáctica el límite de decisión, utilizar Matlab con el comando “nnd4bd” (Neural Network Design Demonstration Decision Boundaries). 59 2.3.3. Regla de aprendizaje del perceptrón Ahora que se sabe cómo identificar el límite de decisión de una neurona podemos aplicar una regla de aprendizaje a la misma. Esta regla es un ejemplo de “aprendizaje supervisado” en la cual se entrena a la red a través de un conjunto de ejemplos u objetivos. {𝑥𝑥2 , 𝑡𝑡1 }, {𝑥𝑥2 , 𝑡𝑡2 }, … , {𝑥𝑥𝑛𝑛 , 𝑡𝑡𝑛𝑛 }, Ejemplo Demostrativo En orden de presentar la regla de aprendizaje se realizará un ejemplo demostrativo abordando los pasos a seguir para entrenar una neurona donde se suponen los siguientes parámetros de entrada/objetivo. 1 −1 0 �𝑥𝑥1 = � � , 𝑡𝑡1 = 1� �𝑥𝑥2 = � � , 𝑡𝑡2 = 0� �𝑥𝑥3 = � � , 𝑡𝑡3 = 0� 2 2 −1 Posicionando los vectores de entrada 𝑥𝑥𝑖𝑖 en un gráfico, denotaremos los vectores de resultado 𝑡𝑡𝑖𝑖 = 0 con círculos de color blanco y los de resultado 𝑡𝑡𝑖𝑖 = 1con círculos de color negro. 𝑥𝑥1 𝑥𝑥2 Figura 2-28. Conjunto de vectores de entrada x en el plano Fuente: Neural Network Desing, Martin T. Hagan Para este ejemplo no se utilizara el factor “bias”, ya que, de esta forma el límite de decisión pasará por el origen. Hay muchas soluciones para realizar la separación de clases 60 en este ejemplo, modificando la pendiente de la línea que separa los límites de ambas clases. Figura 2-29. Posibles límites de decisión para la separación de clases. Fuente: Neural Network Desing, Martin T. Hagan Construyendo la regla de aprendizaje Para entrenar la red es necesario asignar valores aleatorios a los parámetros de calibración de la red. Para este caso se requieren los valores para una neurona con 2 entradas, 2 pesos sinápticos, una salida y sin “Bias”. Valores Iniciales de W (Aleatorios): 𝑤𝑤𝑖𝑖 = [1 −0,8] Se presentan los valores iniciales en la función de transferencia 1 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻([1 −0,8] � �) 2 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻(−0,6) = 0 61 Con esto se puede comprobar que la red no se acerca al valor objetivo, la salida es 0, y el valor objetivo es 1. Por lo que se debe ajustar los valores de pesos sinápticos hasta corregir el valor de salida. Gráficamente el límite de decisión de nuestra red queda de la forma Figura 2-30. Límite de decisión para W inicial Fuente: Neural Network Desing, Martin T. Hagan Una forma de realizar este procedimiento es acercando el límite de decisión a la variable que queremos clasificar, en este caso hay que corregir dicho límite acercando el 1 vector 1𝑤𝑤 al vector de entrada 𝑥𝑥1 = � � . 2 Para esto se añade a 1𝑤𝑤 directamente el parámetro de 𝑥𝑥1 , ya que al hacer esto se estaría acercando dicho vector 1𝑤𝑤 describir de la forma. a el parámetro correspondiente, esta regla se puede Si t = 1 e y = 0 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 + 𝑥𝑥 Aplicando la regla a la red. 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 + 𝑥𝑥 = � 1 2 1 �+� � =� � −0,8 1,2 2 (3.32) 62 Ilustrando la operación en el gráfico. Figura 2-31. Modificación del límite de decisión según la regla de aprendizaje Fuente: Neural Network Desing, Martin T. Hagan Se puede apreciar el que la línea que define el límite de decisión se ha reposicionado en un lugar donde clasifica de manera efectiva el valor de entrada que corregimos, pero su desplazamiento total no fue óptimo para los demás vectores de entrada. Para conseguir corregir el límite en su totalidad debemos realizar iteraciones de la regla de aprendizaje con los demás valores de entradas. El siguiente vector de entrada es 𝑥𝑥2 = � transferencia: −1 �, presentándolo en la función de 2 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻([2 1,2] � −1 �) 2 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻(0,4) = 1 El valor objetivo para la entrada 𝑥𝑥1 es 𝑡𝑡2 = 0, y el valor de salida de la función de transferencia dio como resultado 𝑦𝑦1 = 1, por ende se debe aplicar nuevamente una variación de la ecuación (3.5). 63 Donde: Si t = 0 e y = 1 (3.33) 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 − 𝑥𝑥 Aplicando la regla. 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 + 𝑥𝑥 = � 2 3 −1 �−� �= � � 1,2 −0,8 2 0 Ahora se presenta el vector 𝑥𝑥3 = � � , 𝑡𝑡3 = 0. −1 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻([3 −0,8] � 0 �) −1 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻(0,8) = 1 Para este caso se debe moditrainificar los pesos sinápticos reemplazando nuevamente en la ecuación 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 + 𝑥𝑥 = � 3 3 0 �−� �=� � −0,8 0,2 −1 Por lo que la ecuación final queda de la forma. 𝑥𝑥𝑎𝑎 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻([3 0,2] �𝑥𝑥 �) 𝑏𝑏 Donde: 1 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑥𝑥1 = � � , 2 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 𝑥𝑥2 = � −1 �, 2 1 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻 �[3 0,2] � �� = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻(3,2) = 1 2 −1 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻 �[3 0,2] � �� = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻(−2,6) = 0 2 64 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 𝑥𝑥3 = � 0 �, −1 0 𝑦𝑦1 = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻 �[3 0,2] � �� = 𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻𝐻(−0,2) = 0 −1 Gráficamente. Figura 2-32. Límite de decisión para la red neuronal Fuente: Neural Network Desing, Martin T. Hagan Ahora la red esta entrenada y lista para ser usada. Se puede apreciar que la calibración de la red no es un 100% óptima ya que para parámetros cercanos a 𝑥𝑥3 por la derecha, la red puede no clasificar correctamente. Hay 3 reglas para calibrar la red mediante el método antes descrito. 𝑆𝑆𝑆𝑆 𝑡𝑡 = 1 𝑒𝑒 𝑦𝑦 = 0, 𝑆𝑆𝑆𝑆 𝑡𝑡 = 0 𝑒𝑒 𝑦𝑦 = 1, 𝑆𝑆𝑆𝑆 𝑡𝑡 = 𝑦𝑦, 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 + 𝑥𝑥 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 − 𝑥𝑥 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 Las reglas propuestas se pueden expresar como una sola utilizando el término denominado error (e), el cual se define como: 𝑒𝑒 = 𝑡𝑡 − 𝑦𝑦 (3.34) 65 Ahora se redefinen las reglas. 𝑆𝑆𝑆𝑆 𝑒𝑒 = 1, 𝑆𝑆𝑆𝑆 𝑒𝑒 = −1, 𝑆𝑆𝑆𝑆 𝑒𝑒 = 0, 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 + 𝑥𝑥 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 − 𝑥𝑥 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 Mirando las nuevas expresiones, las primeras 2 se asemejan mucho, donde el signo de la variable x es exactamente el mismo que el signo que acompaña el valor unitario del resultado de la variable e, por último la tercera regla se relaciona con un 𝑒𝑒 = 0, por lo que se pueden escribir las 3 en una sola de la forma. 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 + 𝑒𝑒𝑒𝑒 𝑤𝑤𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑤𝑤𝑜𝑜𝑜𝑜𝑜𝑜 + (𝑡𝑡 − 𝑦𝑦)𝑥𝑥 (3.35) Esta regla también se extiende al término Bias, donde. 𝑏𝑏𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑏𝑏𝑜𝑜𝑜𝑜𝑜𝑜 + 𝑒𝑒 (3.36) Este análisis es simple y demostrativo para visualizar de forma clara la calibración básica de una red neuronal, el problema es que el método de calibración de la red se vuelve tedioso para entrenar redes neuronales multicapa, las cuales son necesarias para poder realizar tareas con un mayor grado de complejidad. Para poder realizar esto de forma autónoma se utiliza el algoritmo que se verá en el capítulo que viene a continuación. 66 2.3.4. Backpropagation El algoritmo de Backpropagation o propagación regresiva, es una de las formas más eficientes de entrenamiento autónomo en redes neuronales, ya que al tener redes multicapa demasiado grandes, es difícil calcular el nivel de error para cada nodo neuronal por la reacción en cadena que tienen cada uno de estos con el proceso que se hace en cada capa [Hecht-Nirlsen,91 in Del Brío, 2004]. Antiguamente lo que se realizaba para determinar el ajuste de cada uno de los nodos era ver de forma secuencial como afectaba el ajuste de cada nodo en el resultado final de la red, lo que volvía el entrenamiento muy lento, ya que la información se propaga de forma masiva y muchas veces no es posible determinar con exactitud qué efecto tendrá la corrección de una neurona en las que le preceden. Por ejemplo, en la figura se puede apreciar uno de los múltiples caminos que se pueden afectar de variar los parámetros de una sola neurona, pero no es el único posible ya que como se observa en la misma red puede haber muchas posibilidades para cada uno de los nodos. Figura 2-33. Secuencia de entrenamiento de una red neuronal sin Retro Propagación Fuente: Elaboración propia Lo que el algoritmo de retro propagación propone, es realizar un análisis de cada capa neuronal de forma regresiva, según el nivel de error que se calcule en la capa posterior, de esta forma se logra optimizar tanto el tiempo del entrenamiento como el nivel de procesamiento. 67 Lo que se realiza internamente dentro de la red es introducir los parámetros de entrada que se presentan a la red y comparar la salida de la red con nuestros parámetros de objetivo. Si el resultado tiene un porcentaje de error elevado entonces se alteran los parámetros de la capa posterior hasta lograr minimizar lo máximo el error final, una vez disminuido el error el análisis se desplaza a la capa anterior a la analizada para calcula nuevamente los parámetros a modificar para minimizar el coste de error para la capa que se modificó anteriormente. Esto se realiza de forma iterativa en sentido contrario al de propagación de la información para así ir corrigiendo cada nodo neuronal mediante el análisis capa tras capa de la red. Figura 2-34. Secuencia de entrenamiento de una red con Retro Propagación Fuente: Elaboración Propia El proceso para modificar los parámetros (𝑤𝑤𝑖𝑖 y b) y calibrar de la red se suelen realizar de la misma forma que en la subsección 2.1.1 utilizando derivadas parciales para identificar el mínimo de la función de coste S en función de los parámetros 𝑤𝑤𝑖𝑖 y b, la diferencia es que en este caso como se requiere hacer un análisis de cada neurona y ésta está sujeta a distintas funciones (función de activación, transferencia y salida) se requiere aplicar la regla de la cadena. Ejemplificando estos conceptos si se desea modificar por ejemplo una red neuronal de “L” capas, lo primero sería introducir las variables de entrada para entrenamiento y comprar la salida real con la salida objetivo, como los parámetros de calibración en el punto inicial se asignan de forma aleatoria muy probablemente la diferencia entre la salida objetivo y real será grande, por lo que la función de coste asumirá un nivel de error grande. 68 En la secuencia de operaciones que realiza la neurona se tienen. ℎ𝑖𝑖 = 𝑥𝑥𝑖𝑖 𝑤𝑤𝑖𝑖 + 𝑏𝑏𝑖𝑖 Función de activación 𝑎𝑎𝑖𝑖 = 𝑓𝑓(𝑥𝑥𝑖𝑖 𝑤𝑤𝑖𝑖 + 𝑏𝑏𝑖𝑖 ) Función de transferencia 𝑦𝑦𝑖𝑖 = F(𝑎𝑎𝑖𝑖 ) Función de salida 𝑆𝑆 = S(𝑤𝑤𝑖𝑖 , 𝑏𝑏𝑖𝑖 ) Función de coste Como la función de transferencia y la de salida toman valores iguales entonces el proceso interno de la neurona queda de la forma. (3.37) 𝑆𝑆(𝑦𝑦𝑖𝑖 (ℎ𝑖𝑖𝐿𝐿 )) A la función ℎ𝑖𝑖 se le añade el sub índice L asumiendo que el análisis se empieza desde la última capa de la red según el algoritmo de Backpropagation, la capa L. Como lo que se quiere saber es cómo varía la función de coste cuando se varían los parámetros de la red, las derivadas respectivas serán de la cadena quedarían [Bel Brío, 2004]. 𝜕𝜕𝜕𝜕 𝜕𝜕𝑤𝑤 𝐿𝐿 𝜕𝜕𝜕𝜕 𝜕𝜕𝜕𝜕 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 = ∗ ∗ 𝜕𝜕𝑤𝑤 𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 𝜕𝜕𝑤𝑤 𝐿𝐿 𝜕𝜕𝜕𝜕 𝜕𝜕𝜕𝜕 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 = ∗ ∗ 𝜕𝜕𝑏𝑏𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 𝜕𝜕𝑏𝑏𝐿𝐿 y 𝜕𝜕𝜕𝜕 𝜕𝜕𝑏𝑏𝐿𝐿 que utilizando la regla (3.38) (3.39) La primera derivada indica cuando varía la función de coste al variar la función de salida de la red, si la función de coste es el error cuadrático medio la derivada quedaría de la forma: 𝑆𝑆(𝑦𝑦 𝐿𝐿 ) = 1 �(𝑦𝑦𝑗𝑗 − 𝑦𝑦𝑖𝑖 𝐿𝐿 )2 2 𝑗𝑗 𝜕𝜕𝜕𝜕 = (𝑦𝑦𝑖𝑖 𝐿𝐿 − 𝑦𝑦𝑗𝑗 ) 𝐿𝐿 𝜕𝜕𝑦𝑦𝑖𝑖 69 La segunda derivada en la regla de la cadena indica cómo varía la salida de la neurona cuando variamos la suma ponderada de la neurona, intermedio a este proceso está la función de transferencia por lo que se necesita derivar dicha función, ésta depende del modelo neuronal que se esté utilizando, si por ejemplo para este caso se utiliza la función sigmoidal como función de transferencia la derivada quedaría. 𝑦𝑦 𝐿𝐿 (ℎ𝐿𝐿 ) = 1 1 + 𝑒𝑒 −ℎ 𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿 = 𝑦𝑦 𝐿𝐿 (ℎ𝐿𝐿 ) ∗ (1 − 𝑦𝑦 𝐿𝐿 (ℎ𝐿𝐿 )) 𝜕𝜕ℎ𝐿𝐿 La última derivada respectiva para cada regla de la cadena solo indica como varía la suma ponderada ℎ𝐿𝐿 en función de los parámetros ajustables w y b, la derivada de la suma ponderada respecto del bias (b) es igual a la unidad ya que el término de bias es independiente por lo cual la derivada es constante. Con respecto al peso (w), la derivada es el valor de entrada a dicha neurona que conecta a dicha conexión para la cual el parámetro hace referencia, recordando que una neurona tiene múltiples entradas y por consiguiente múltiples parámetros w. ℎ𝐿𝐿 = �( 𝑦𝑦𝑖𝑖 𝐿𝐿−1 𝑤𝑤𝑖𝑖 𝐿𝐿 + 𝑏𝑏 𝐿𝐿 ) 𝑗𝑗 𝜕𝜕ℎ𝐿𝐿 =1 𝜕𝜕𝑏𝑏 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 = 𝑦𝑦𝑖𝑖 𝐿𝐿−1 𝜕𝜕𝑤𝑤 𝐿𝐿 En la última derivada los valores de entrada a la neurona 𝑦𝑦𝑖𝑖 𝐿𝐿−1 hacen referencia a la salida de la neurona de la capa anterior, la capa L-1. Finalmente la solución que se busca para los parámetros de la última capa se calcula computando la ecuación (3.11) y (3.12) donde cada uno de los términos se multiplican entre sí. 70 Ahora tomando un bloque de la ecuación (3.11), este representa cómo varía el error en función del valor de ℎ𝐿𝐿 que es la suma ponderada calculada dentro de la neurona 𝜕𝜕𝜕𝜕 𝜕𝜕𝜕𝜕 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 = ∗ ∗ 𝜕𝜕𝑤𝑤 𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 𝜕𝜕𝑤𝑤 𝐿𝐿 𝜕𝜕𝜕𝜕 𝜕𝜕ℎ𝐿𝐿 Si la derivada es muy grande, esto supondrá una alta variación en el error de la salida general de la neurona, si la derivada es pequeña, indica que la variación de los parámetros de esta neurona tendrá poco efecto en la variación de la función de coste de la salida general, esto se aplica para cada neurona de la capa que se esté analizando. El bloque entonces que se menciona indica el nivel de error imputado a la neurona y se representa con el siguiente símbolo. 𝜕𝜕𝜕𝜕 𝜕𝜕𝑦𝑦 𝐿𝐿 ∗ = 𝛿𝛿 𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 (3.40) Por tanto las ecuaciones (3.11) y (3.12) quedan de la forma. 𝜕𝜕𝜕𝜕 𝜕𝜕ℎ𝐿𝐿 𝐿𝐿 = 𝛿𝛿 ∗ 𝜕𝜕𝑤𝑤 𝐿𝐿 𝜕𝜕𝑤𝑤 𝐿𝐿 𝜕𝜕𝜕𝜕 𝜕𝜕ℎ𝐿𝐿 𝐿𝐿 = 𝛿𝛿 ∗ 𝜕𝜕𝑏𝑏𝐿𝐿 𝜕𝜕𝑏𝑏𝐿𝐿 Como la derivada del bias respecto de la suma ponderada es 1 y la derivada del parámetro 𝑤𝑤 𝐿𝐿 respecto a ℎ𝐿𝐿 se conoce. 𝜕𝜕𝜕𝜕 = 𝛿𝛿 𝐿𝐿 ∗ 𝑦𝑦𝑖𝑖 𝐿𝐿−1 𝜕𝜕𝑤𝑤 𝐿𝐿 (3.41) 71 𝜕𝜕𝜕𝜕 = 𝛿𝛿 𝐿𝐿 𝐿𝐿 𝜕𝜕𝑏𝑏 (3.42) Calculados los parámetros de la capa L, para calcular ahora los parámetros de la capa anterior L-1 según el algoritmo se repite el mismo razonamiento. (*) 𝜕𝜕𝜕𝜕 𝜕𝜕𝜕𝜕 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿−1 𝜕𝜕ℎ𝐿𝐿−1 = ∗ ∗ ∗ ∗ 𝜕𝜕𝑤𝑤 𝐿𝐿−1 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿−1 𝜕𝜕ℎ𝐿𝐿−1 𝜕𝜕𝑤𝑤 𝐿𝐿−1 𝜕𝜕𝜕𝜕 𝜕𝜕𝜕𝜕 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿−1 𝜕𝜕ℎ𝐿𝐿−1 = ∗ ∗ ∗ ∗ 𝜕𝜕𝑤𝑤 𝐿𝐿−1 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿−1 𝜕𝜕ℎ𝐿𝐿−1 𝜕𝜕𝑏𝑏𝐿𝐿−1 Pero las primeras derivadas respectivas de cada ecuación ya se conocen por el análisis anterior, las ecuaciones de (*) son las de la función de activación y ya se conocen las derivadas tanto de los pesos sinápticos y el bias respecto de la suma ponderada o regla de propagación, por lo que la derivada que queda sería la única que haría falta conocer. Lo que identifica sería cómo varía la suma ponderada de una capa cuando se varía la función de salida en la neurona de la capa previa. Lo que se observa es que ecuaciones van moviendo el error de forma regresiva, hacia atrás. Luego las primeras 4 derivadas juntas representan lo descrito en el análisis de la última capa, representar el error de las neuronas en dicha capa L-2, por lo que ahora el análisis es extensible a la totalidad de capas anteriores hasta llegar a la capa de entrada. De lo anterior se rescata que se requieren solo de cuatro ecuaciones para poder calcular los errores de todas las capas y ajustar según las respectivas funciones de coste los parámetros de cada una de las neuronas dentro de la red. Cálculo del error de la última capa (L) 𝜕𝜕𝜕𝜕 𝜕𝜕𝑦𝑦 𝐿𝐿 ∗ = 𝛿𝛿 𝐿𝐿 𝜕𝜕𝑦𝑦 𝐿𝐿 𝜕𝜕ℎ𝐿𝐿 (3.43) 72 Retro Propagación del error a la capa anterior 𝛿𝛿 𝐿𝐿−1 𝜕𝜕𝑦𝑦 𝐿𝐿−1 = 𝑤𝑤 𝛿𝛿 ∗ 𝐿𝐿−1 𝜕𝜕ℎ 𝐿𝐿 𝐿𝐿 , 𝜕𝜕ℎ𝐿𝐿−1 = 𝛿𝛿 𝐿𝐿−1 ∗ 𝑦𝑦𝐿𝐿−2 𝜕𝜕𝑤𝑤 𝐿𝐿−1 (3.44) Cálculo de las derivadas de la capa usando el error. 𝜕𝜕ℎ𝐿𝐿−1 = 𝛿𝛿 𝐿𝐿−1 𝐿𝐿−1 𝜕𝜕𝑏𝑏 (3.45) Con esto se demuestra que el algoritmo de retro-propagación o Backpropagation, puede realizar de forma mucho más eficiente la calibración de todos los parámetros de la red neuronal, la única diferencia con el modelo real es que este último trabaja con matrices de pesos sinápticos w y matrices de conjuntos de entrada x y salida y por lo que el planteamiento de las ecuaciones resultaría ser mucho más extensa. De todas formas realizar un cálculo de los parámetros de una red con matrices no sustenta un conocimiento necesario para entender el funcionamiento de la misma por lo que con lo visto previamente es suficiente para entender el concepto de aprendizaje. 72 CAPÍTULO 3: EJEMPLOS PRÁCTICOS 73 3.1. RECONOCIMIENTO DE CARACTERES NUMÉRICOS Una de las funciones de las redes neuronales que tiene una fácil implementación, es la de reconocer patrones de distribución en una matriz, por ejemplo, caracteres numéricos. Para hacer una demostración de esta función se procede a entrenar una red neuronal mediante el software de programación Matlab. El objetivo principal de esta red es reconocer los números 1, 2 y 4 mediante matrices numéricas presentadas de la siguiente forma: Tabla 3-1. Tablas representativas de los números uno, dos y cuatro 0 0 1 0 0 1 1 0 0 0 1 0 =1 0 0 1 0 1 1 1 0 0 0 1 0 =2 0 1 0 0 1 1 1 0 1 0 1 0 1 1 1 0 =3 0 0 1 0 0 0 1 0 Estas formas serán las generales para determinar la clasificación para cada uno de los tres números, los cuales serán presentados a una red neuronal para que los asimile y en función de esto sea capaz de reconocer variaciones de los mismos números. 74 3.1.1. Entrenamiento de la red Con la finalidad de que la clasificación de la red tenga una precisión óptima. Se crean nuevas matrices con la misma distribución que la anterior pero corridas en 1 pixel, tanto a la izquierda como a la derecha. Tabla 3-2. Tablas numéricas con pixel corrido Original A la derecha A la Izquierda 0 0 1 0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 Estas serán las entradas que se enseñarán a la red para que sea capaz clasificar. Como las salidas objetivo de la red solo pueden tomar valores entre 0 y 1 (digitales), se establecen 3 salidas donde: 𝑦𝑦1 = 1 Si la entrada es 1 la salida será �𝑦𝑦2 = 0 𝑦𝑦3 = 0 𝑦𝑦1 = 0 Si la entrada es 2 la salida será �𝑦𝑦2 = 1 𝑦𝑦3 = 0 75 𝑦𝑦1 = 0 Si la entrada es 4 la salida será �𝑦𝑦2 = 0 𝑦𝑦3 = 1 Nota: En la práctica no es bueno introducir patrones con ruido al entrenamiento de la red, ya que suele afectar la capacidad de generalización de la misma. Una vez establecidas tanto las variables de entrada (muestras), como las salidas objetivo que se presentarán a la red, estas deben ingresarse en Matlab ingresando en la sección “New Variable”. Figura 3-1. Barra de Navegación Matlab Fuente: Matlab Las matrices de entrada solo se pueden ingresar como filas o columnas dentro de la sección “New Variable” por lo que se deben rescribir. 76 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 Matriz de “1” Matriz de “2” Figura 3-2. Ventana creación de la variable de entradas nueva Fuente: Matlab Se cambia el nombre de la matriz general a “Entradas”. Luego se procede a generar la matriz que definirá las salidas objetivo de la misma forma y en el mismo orden que la matriz “Entradas”. Salida = 1 Salida = 2 Figura 3-3. Tabla de valores objetivo en Presentada Fuente: Matlab Salida = 4 77 Se ejecuta el comando “nnstart” en la ventana de comandos de Matlab, con esto se ingresa al toolbox de Matlab para redes neuronales. Figura 3-4. Ventana al ejecutar el comando "nnstart" Fuente: Matlab Se abre al apartado “Pattern Recognition App”, el cual se usará en este ejercicio para el reconocimiento de caracteres numéricos. Se seleccionan las matrices de entrada y objetivos, correspondientes a las antes creadas. En “Samples área” se elige la opción “Matrix Columns”: 78 1 2 3 Figura 3-5. Ventana para la selección de valores de entrenamiento (Entrada/Objetivo) Fuente: Matlab Se puede ver un total de entradas de 16x9, donde 16 corresponden al total de pixeles de cada entrada y 9 los ejemplos numéricos que se ingresan. Salidas objetivos se tiene una matriz de 3x9, 3 valores para cada una de las 9 salidas distintas que se obtienen de las entradas. Se usan 7 ejemplos para entrenamiento, 1 para validación y 1 para test. 79 Figura 3-6. Selección del porcentaje de datos para los pasos del entrenamiento de la red. Fuente: Matlab Donde: Training: El 70% de los datos presentados a la red se usarán como entrenamiento, esto quiere decir que con estos datos se modificarán los pesos de las entradas sinápticas y los bias. Validation: Los samples de validación se utilizan para detener el entrenamiento cuando la red sea capaz de generalizar de una forma correcta, realizar más épocas de las necesarias podría inducir a que el nivel de reconocimiento de la red sea efectivo más para ciertos parámetros que para total de ellos, por lo que es necesario ir haciendo test hasta que cada validación tenga un valor relativamente bueno. Testing: Las entradas seleccionadas como “test” no se usan en ningún momento de la etapa de entrenamiento y solo sirven para medir el nivel de efectividad de la red ya entrenada. El número de capas ocultas quedan en 10 que es el por defecto. 80 Figura 3-7. Ventana de selección del número de capas ocultas y arquitectura de la red Fuente: Matlab En el esquema neuronal se puede apreciar la estructura de la red que se utilizará para este propósito, la cual consta de 16 entradas, 10 capas ocultas con sus respectivas funciones de transferencia de tipo sigmoidal (Analogas) y 3 neuronas de salida con función de transferencia de tipo dinámica. La regla de aprendizaje que se utiliza es la de BackPropagation o propagación hacia atrás, ésta consiste en que a partir del nivel de error que se mida en la salida se irán ajustando los pesos sinápticos de las neuronas más cercanas a la salida y según el nivel de calibración de éstas se ajustan las neuronas de forma regresiva, hasta llegar a las de la primera capa oculta. Se procede a entrenar a la red: 81 Figura 3-8. Ventana del entrenamiento de la red y las diferentes caracteristicas Fuente: Matlab Se hacen un total de 25 Épocas o iteraciones. El programa enseña el tiempo transcurrido, Performance, correspondiente a el nivel de error de la red, el gradiente y las Validaciones. 82 Verificando el Performance, el gráfico enseña la mejor validación siendo está en la época número 25, habiendo en ésta un nivel mucho más bajo de error. Figura 3-9. Grafico Entropía Cruzada de error vs Épocas Fuente: Matlab Se guarda la red dentro del workspace, para realizar test con diferentes números, donde se consiguió identificar los patrones de números de entrada iguales a los de entrenamiento con un 100% de eficiencia. 83 Figura 3-10. Ventana de comandos, con resultado del test. Fuente: Matlab 3.1.2. Test de la red neuronal creada Para probar de una mejor manera la capacidad de reconocimiento de la red ya creada, se pueden introducir matrices que representen números similares a los que se utilizaron para entrenar a la red. Para ello se procede a ingresar matrices numéricas con ruido o distorsión. Tabla 3-3. Tablas numéricas de los números uno, dos y cuatro con distorsión 0 1 0 0 1 1 1 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 1 0 1 0 0 0 1 0 0 0 0 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1, 2 y 4 respectivamente, el nombre de las matrices será el mismo pero en mayúsculas, realizando el test nos queda. 84 Figura 3-11. Ventana de comandos, con resultado del segundo test. Fuente: Matlab El resultado se ve positivo, ahora ingresando números más alterados. Tabla 3-4. Números uno, dos y cuatro con mayor distorsión 0 0 0 1 1 1 1 0 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 0 1 0 85 Se obtienen los siguientes resultados en orden de izquierda a derecha. Figura 3-12. Ventana de comandos, con resultado del tercer test. Fuente: Matlab Se alcanza a percibir que si bien el nivel de exactitud baja un poco respecto de los números que se desea identificar, hay una cierta aproximación a 1 y 0 en los valores que corresponden, pero la red ya trabaja de forma óptima. 86 3.2. PREDICCIÓN DEL COMPORTAMIENTO DE UN MOTOR DC En el siguiente práctico se pretende entrenar una red neuronal que sea capaz de predecir gráficamente el comportamiento de un motor DC al aplicar un escalón en tensión eléctrica a la entrada de X [Volts]. Para esto se utilizará el toolbox de Matlab en el apartado de redes neuronales “Time Series App”. 3.2.1. Tomando datos en la planta de control. Se toma una serie de datos en una maqueta de control para un motor DC, aplicando diferentes escalones de tensión a tiempos constantes. Con ayuda de una tarjeta de adquisición de datos se toman muestras, tanto de la entrada en tensión, como de la respuesta del motor a su salida con una cantidad de 50 muestras por segundo. Para entrenar la red de la forma más general posible se recolectan datos de forma continua tanto en subida de tensión a la entrada como en bajada, gráficamente queda: Figura 3-13 Esquema planta de control para un Motor DC Fuente: Elaboración propia 87 Figura 3-14. Grafica respuesta de un Motor DC Fuente: Matlab Matlab almacena estos datos en una matriz llamada yout. Para presentar las variables en la red neuronal se separan los datos de entrada y salida, también se crea el vector de tiempo. Figura 3-15. Ventana Comandos para separar Variables Fuente: Matlab Para separar los valores de entrada (in) se iguala toda la fila 1 de la matriz de valores alojada en yout. Se realiza lo mismo para la matriz de valores de out. Para crear la matriz de tiempo se usa el comando linspace, el primer valor indica el tiempo inicial, la segunda el tiempo final y la ultima la cantidad de muestras, esta última debe tener el mismo largo que las variables in y out. 88 Matlab almacena los valores en filas, pero como se quiere entrenar una red de tipo dinámica se debe trasponer los valores a columnas, así se ingresarán los valores a una red de una entrada. Una vez traspuestas ambas variables, se transforman de valores estáticos a dinámicos mediante los comandos 3.2.2. Entrenando la red neuronal. Se abre el toolbox de Matlab con el comando “nnstart” y se elige el apartado “Time Series App”, para crear un perceptrón de entrada y salida dinámica. Se selecciona la red neuronal de tipo NARX (Nonlinear Autoregressive with External Input). Esta servirá para predecir la serie de valores de salida (muestras) de la salida “out”, utilizando todas muestras del estado anterior de y(t) “d” y comparándolas con nuevos valores de entrada x(t). Donde d es la cantidad de muestras desde la actual hasta la establecida en el Delay. 89 Figura 3-16. Esquema de la arquitectura básica del funcionamiento de la red Fuente: Matlab Como entradas se selecciona la matriz de valores in_cell y como salida out_cell. Matlab muestra la cantidad de datos que utilizaremos y cuantos se utilizarán como datos de entrenamiento, validación y test. Figura 3-17. Selección de los datos de muestreo para diferentes etapas de entrenamiento Fuente: Matlab La siguiente ventana nos pide la cantidad capas ocultas que se utilizarán y el “delay” o el valor de muestra que toma de la salida y lo compara con la entrada, para determinar ese valor se analiza el gráfico inicial, con el comando 90 Gráficamente aparecen los puntos de muestro de entrada y salida. Figura 3-18. Grafica por puntos de la entrada/salida de respuesta del Motor DC Fuente: Matlab Se aplica zoom en la respuesta del primer escalón Figura 3-19. Zoom de la gráfica de respuesta inicial al escalón aplicado Fuente: Matlab 91 Se cuenta la cantidad de muestras en las que al aplicar el escalón se ve un cambio notorio en la respuesta del motor, este dato se utilizará como delay para entrenamiento de la red. Se procede a entrenar la red y se revisan las respuestas del error cuadrático medio. Figura 3-20. Grafica Error cuadrático medio vs Épocas Fuente: Matlab Se realizaron un total de 125 Épocas donde el mejor resultado fue en la última. Con un MSE de 3,94𝑥𝑥10−5 Figura 3-21. Cuadro con resultados del entrenamiento Fuente: Matlab Se puede reentrenar a la red las veces que sea necesario para bajar el porcentaje de error si es necesario. Se guardan los resultados en el Workspace de Matlab y se aplica Sample Script 92 Figura 3-22. Ventana de comandos netc Fuente: Matlab En esta ventana se pueden leer todos los datos de la red y sus distintas aplicaciones. Para este caso práctico se requiere una red de tipo closeloop, se oprime en Run. Una vez terminada la secuencia nos muestra las arquitecturas de las distintas redes que se crean, incluida la de tipo closeloop para este caso. Figura 3-23. Arquitectura de la Red Neuronal Terminada Fuente: Matlab Se aprecia una red de dos entradas, una salida y un bias, con 10 capas ocultas y un retardo de 9 datos conectado a la segunda entrada. El performance de la red es de 1.3183𝑥𝑥10−4 93 Aparecerán los nuevos datos en el Workspace, para realizar una prueba de rendimiento aplicaremos a la red “netc” los mismos valores de entrada que utilizamos para entrenamiento. Se transforman los datos de la nueva variable “test” en datos estáticos, para poder graficarlos con el comando. Una vez lista la red neuronal tendremos una caja con una entrada en la cual se pueden ingresar los valores de entrada que se ingresan al motor en tensión, y la salida la cual nos predecirá los valores de respuesta del motor en función de la entrada en el tiempo. Entrada Red Neuronal Salida Figura 3-24. Esquema del funcionamiento de la red creada Fuente: Elaboración propia Ahora se grafican ambas respuestas, la real que se recolecto de las mediciones del motor y la respuesta predicha por la red neuronal. 94 Figura 3-25. Graficas comparativas de la respuesta de la red Fuente: Matlab Se pueden apreciar ambos gráficos, donde se nota una clara similitud, habiendo un error en los valores iniciales de la gráfica predicha por la red neuronal. Si se superponen ambas graficas se puede apreciar mejor las diferencias. Figura 3-26. Acercamiento de la gráfica real vs respuesta predicha Fuente: Matlab 95 Ahora se toman nuevos datos del motor, para ver la respuesta de la red ante valores de entrada/salida no vistos. Se deben aplicar los mismos cambios a los valores de matrices que se hicieron en la etapa inicial. Gráficamente los nuevos datos recolectados: Figura 3-27. Gráfica de los datos recolectados (Entrada y Salida) Fuente: Matlab Se aplicaron escalones de subida y bajada con incrementos de 0,5. Se crea la variable test2 con los datos de entrada de “in2”, correspondientes a los datos de muestra tomados a la entrada del motor: Se transforma la variable test en tipo estático, con el comando respectivo y se grafica la respuesta predicha comparada con la real. 96 Figura 3-28. Gráficas comparativas de la respuesta real vs la predicción de la red Fuente: Matlab Graficando ambas respuestas de forma superpuestas: Figura 3-29. Superposición de la respuesta real del motor y respuesta de la red Neuronal Fuente: Matlab 97 Se puede apreciar una clara respuesta predicha con éxito, con un margen de error razonable tomando en cuenta la diferencia de la respuesta con los datos que se le entreno. Graficando otra predicción de la red neuronal para respuesta del motor con incrementos no constantes. Figura 3-30. Respuesta predatoria de la red Fuente: Matlab Se puede apreciar un incremento de error en la predicción de la red neuronal, esto se debe entre otros factores a la irregularidad de los incrementos de tensión aplicada al motor y los niveles de ruido de la señal real de salida, debido a que la red neuronal esta entrenada para trabajar con parámetros más estables y se entrenó con una señal de salida más básica, se generan estas diferencias de lectura, sin embargo el nivel predictivo de la red se correlaciona con lo esperado 3.2.3. Consideraciones al entrenar una Red Hay que tener en consideración los datos de entrada con los que se quiere calibrar una red neuronal para distintos propósitos. Aplicar datos muy irregulares puede afectar la forma de generalización de la red, y provocar que no sea capaz de predecir de forma aproximada la totalidad de los valores que se deseen. 98 Un ejemplo de esto se puede realizar utilizando el mismo ejemplo del Motor DC, Figura 3-31. Ejemplo de la predicción de una red mal entrenada Fuente: Matlab Entrenando la red con valores muy dispares, puede provocar que al aplicar una entrada desconocida, se genere una señal oscilatoria en puntos que difieran mucho de los valores con los que se le entreno, como se aprecia en la figura. 99 Figura 3-32. Acercamiento de la respuesta oscilatoria erratica de la red Fuente: Matlab Señales con mucho ruido. Otra consideración a la hora de entrenar una red neuronal es que las señales de tipo objetivo contengan alto ruido, en este caso fue debido a tomar demasiadas muestras en la toma de datos. Figura 3-33. Grafica con exceso de muestras y ruido Fuente: Matlab 100 CONCLUSIONES Y RECOMENDACIONES En conclusión se puede rescatar que el uso de redes neuronales se extiende a una gran variedad de aplicaciones, el uso de este método algorítmico emplea modelos matemáticos estadísticos para lograr predecir ya sea variables lineales como no lineales, para el segundo de estos casos es muy necesario el saber que valores de entrenamiento ingreso a la red de modo que ésta quede calibrada de una forma óptima, la mala calibración de una red neuronal conlleva a que su aplicación no sea satisfactoria para la mayoría de casos o variaciones del modelo con el cual se entrenó. Existen algunos métodos de aprendizaje más avanzados como el Deep Learning (Aprendizaje profundo) que enseñan de mejor forma como entrenar una red neuronal, pero conllevan un nivel de aprendizaje más intenso por lo que no se recomiendan como punto de partida. Una de las ventajas de esta tecnología es que se puede complementar a procesos ya existentes para optimizar de mejor manera los mismos, realizando diagnósticos de forma autónoma y/o modelando las características de un proceso para adelantarse a futuras acciones. El toolbox de Matlab en el apartado de nnstart ofrece distintas opciones que serán más o menos eficientes dependiendo del tipo de tarea que se quiera llevar a cabo, para redes neuronales clasificadores es más efectivo utilizar el apartado de Pattern Recognition App que por ejemplo una red de tipo NARX que es más eficiente para hacer un análisis predictivo del comportamiento de un sistema dinámico, como el visto en capítulos anteriores, por lo que es necesario tener estudiados estos conceptos previamente antes de realizar cualquier simulación. Esto se puede llevar a cabo fácilmente con la ayuda de Matlab 101 BIBLIOGRAFÍA Y FUENTES DE LA INFORMACIÓN DEL BRIO, Bonifacio Martin y SANZ MOLINA, Alfredo. “Redes Neuronales y Sistemas Difusos”. México: Universidad de Zaragoza, 2002. ISBN 970-15-0733-9 HAGAN, Martin T. DEMUTH, Howard B. BEALE Mark H. DE JESÚS Orlando. “Neuronal Netword Design”. EE.UU. Oklahoma State University. ISBN 097-17-3211-6 MONTGOMERY, Douglas C. “Introducción al Análisis de regressión Lineal”. Arizona State University, Tercera Edición Mexico, 2006. ISBN 970-24-0327-8 MATICH, Damián Jorge. “Redes Neuronales: Conceptos Básicos y Aplicaciones”. Argentina: Universidad Tecnológica Nacional. 55p BASOGAIN Olabe Xabier, “Redes Neuronales Artificiales y sus Aplicaciones”. Euskadi: Escuela Superior de Ingeniería de Bilbao, UPV-EHU. 2008. P3BN11 IZAURIETA Fernando, SAAVEDRA Carlos. "Redes Neuronales Artificiales," Academic Emergency Medicine, vol. 21, (1), pp. 17, 2014. A Proposal for the Dartmouth Summer Research Project on Artificial Intelligence. (1° 1955, Dartmouth College, Nuevo Hampshire Estados Unidos) Eds Dartmouth College 1996 17p [Consulta: 9 abril de 2019] DR. DOVALE Andrés, MSc. IGLESIAS Belén, Tejido Nervioso [en línea] <http://www.sld.cu/> 2005 [Consulta: 11 abril de 2019] DUWAN Ernesto: Redes Neuronales [Diapositiva en línea] Ciencia de la información – Bibliotecología Bogotá D.C. 2014, col <https://darismendy.files.wordpress.com/> 102 BUENO Leandro, PONS José Luis. Un sistema de interfaz cerebro ordenador basado en redes neuronales auto-organizadas [en línea] 2016 <https://www.researchgate.net/> [Consulta: 12 abril 2019] SHANNON Claude E, Programming a Computer for Playing Chess [en línea] Philosophical Magazine, Ser.7, Vol. 41, No. 314, March 1950, Bell Telephone Laboratories <https://vision.unipv.it/> [consulta 10 junio de 2019] HOPFIELD John J., Neural networks and physical systems with emergent collective computational abilities [en línea] Division of Chemistry and Biology, California Institute of Technology, Pasadena, January 15, 1982 <https://www.pnas.org/ > [consulta 10 junio de 2019]