Una Introducción al Cómputo Neuronal Artificial Ricardo Pérez Aguila Profesor Investigador Titular Universidad Tecnológica de la Mixteca (UTM) Dedicatorias Con todo amor a mi hija Diana, mi esposa Kenia y mi(s) hij@(s) que aún está(n) por llegar a este mundo. Con todo cariño a mi sobrina Lucy, mi mamá María de la Luz, mi hermana Edna y mi cuñada Fernanda A quien me introdujo en el mundo de las Redes Neuronales: Dra. María del Pilar Gómez Gil A mis amigos Thelma García, Gabriel Gerónimo, Luis Javier Martínez, Omar Ramírez, Ricardo Ruiz, Aisa Santiago y Paola Soto Una introducción al cómputo neuronal artificial. 24 !"#978-1-4135-2424-6 $%&'(Septiembre) !"#* +&' +(978-1-4135-2424-6 !"#* +&',(978-1-4135-2434-5 Una Introducción al Cómputo Neuronal Artificial Acerca del Autor Ricardo Pérez Aguila es originario de la ciudad de Tehuacán, Puebla, México. Es egresado de la Universidad de las Américas Puebla (UDLAP, Cholula, Puebla, México) donde obtuvo los Títulos de Ingeniero en Sistemas Computacionales (2001), Maestro en Ciencias con Especialidad en Ingeniería en Sistemas Computacionales (2003) y Doctor en Ciencias de la Computación (2006). Durante el periodo 2003-2007 se desempeñó como Profesor de Tiempo Parcial en el Departamento de Actuaría, Física y Matemáticas de la UDLAP. En Otoño de 2007 se incorporó de Tiempo Completo como Profesor-Investigador Titular del Instituto de Computación en la Universidad Tecnológica de la Mixteca (UTM, Huajuapan de León, Oaxaca, México). Desde el año 2009 ostenta el nombramiento de Candidato a Investigador Nacional por parte del Sistema Nacional de Investigadores (Conacyt-SNI, México). En 2011 se le otorgó el Reconocimiento a Perfil Deseable y Apoyo por parte del Programa de Mejoramiento del Profesorado (PROMEP, México). Como docente ha impartido en varias ocasiones los cursos de Matemáticas Discretas, Análisis de Algoritmos, Redes Neuronales Artificiales, Teoría de Autómatas, Algoritmos Genéticos, Visión por Computadora, entre otros. Sus intereses de investigación consideran la visualización, geometría, topología, representación y aplicaciones de los Politopos n-Dimensionales. En el campo de las Redes Neuronales Artificiales ha tenido particular interés en las arquitecturas basadas en entrenamiento no supervisado. Cuenta en su haber con más de 30 artículos publicados, internacionalmente y con arbitraje, en congresos y revistas. Ricardo Pérez Aguila Instituto de Computación Universidad Tecnológica de la Mixteca (UTM) Carretera Huajuapan-Acatlima Km. 2.5 Huajuapan de León, Oaxaca 69000, México E-mails: aguila@mixteco.utm.mx, ricardo.perez.aguila@gmail.com Web site: http://ricardo.perez.aguila.googlepages.com iii Una Introducción al Cómputo Neuronal Artificial iv Una Introducción al Cómputo Neuronal Artificial También del Autor El objetivo principal de este texto es el de proporcionar las bases formales y fundamentales para que el alumno sea capaz de estudiar sus algoritmos y determinar si éstos son, desde un punto de vista de la Complejidad Temporal, eficientes o no. Este trabajo cuenta con cinco capítulos en donde se abordan tópicos como Preliminares Matemáticos (Logaritmos, Series, Sucesiones, Inducción Matemática, Teorema del Binomio), Notación Asintótica, Técnicas para el Análisis de Complejidad Temporal, Solución de Recurrencias (Método de Extensiones, Teorema Maestro), Teoría de Grafos, enfoques de diseño de algoritmos bajo Memoización, Bottom-Up y Voracidad. Finalmente, se presenta una introducción informal a las Clases de Problemas P y NP, Problemas NP-Completos y Reducción Polinomial. Las técnicas y conceptos son aplicados sobre los bien conocidos algoritmos de ordenamiento Insertion Sort, Quick Sort, Merge Sort, Counting Sort y Bucket Sort. También se estudia la Complejidad Temporal de algunos algoritmos que dan solución a problemas clásicos de Teoría de Grafos: Búsquedas por Profundidad y Amplitud, Algoritmos de Dijkstra, Bellman-Ford, Fleury y Kruskal. La forma de presentar los temas está dirigida a estudiantes que estén cursando el segundo año de las Licenciaturas en Computación, Sistemas Computacionales, Informática, Ciencias de la Computación y Matemáticas Aplicadas. Una Introducción a las Matemáticas para el Análisis y Diseño de Algoritmos Ricardo Pérez Aguila El Cid Editor, Argentina, 336 páginas, Primera Edición, 2012 ISBN Edición Impresa: 978-1-4135-7661-0, ISBN Edición Digital: 978-1-4135-7647-4 Registro SEP-INDAUTOR (México): 03-2011-111412410000-01 Web Site de Difusión y Distribución: http://www.e-libro.net/libros/libro.aspx?idlibro=6525 v Una Introducción al Cómputo Neuronal Artificial vi Una Introducción al Cómputo Neuronal Artificial Abstract En este trabajo se presenta una introducción al estudio y análisis de las Redes Neuronales Artificiales. Se hace mención de las bases neurofisiológicas que inspiran a algunas de las Arquitecturas Neuronales más populares y se plantean de manera formal sus procedimientos correspondientes haciendo uso de herramientas provenientes de áreas como el Álgebra Lineal y el Cálculo Diferencial de Varias Variables. Se estudian inicialmente las neuronas de tipo Adaline y Perceptrón. En el caso del Perceptrón se presentan el Problema de Representación y el Teorema de Convergencia a fin de plantear los alcances y limitaciones que se tiene con este tipo de Neurona Artificial. Posteriormente se aborda el estudio de la Red Madaline a fin de establecer los retos que surgen para el aprendizaje en una red formada por varias neuronas. Se da un especial énfasis a las redes compuestas por Perceptrones al estudiar los fundamentos de su popular mecanismo de aprendizaje, definido por el Algoritmo de Retropropagación. También se presentarán a las Redes de Kohonen como un ejemplo de Arquitectura Neuronal cuyo aprendizaje no requiere de supervisión. A lo largo del texto se desarrollan aplicaciones de las Redes Neuronales en los contextos del Modelado y Predicción de Señales, Modelado de Funciones Booleanas y Clasificación Automática de Imágenes. vii Una Introducción al Cómputo Neuronal Artificial viii Una Introducción al Cómputo Neuronal Artificial Prólogo "I propose we build a robot child, who can love. A robot child who will genuinely love the parent or parents it imprints on, with a love that will never end ... But a mecha with a mind, with neuronal feedback. You see what I'm suggesting is that live will be the key by which they acquire a kind of subconscious never before achieved. And inner world of metaphor, of intuition, of self motivated reasoning. Of dreams." Profesor Hobby en A.I. Artificial Intelligence, Dirigida por Steven Spielberg, Warner Bros. Pictures, 2001 Tuve la oportunidad de conocer el área de las Redes Neuronales Artificiales gracias a que formé parte, primero como alumno de Licenciatura y posteriormente como alumno de Posgrado, de dos interesantes cursos impartidos por la Dra. María del Pilar Gómez Gil. Fue en esas ocasiones en las que tuve acceso por primera vez a ese paradigma cuyo fundamento radica en tomar el poder del procesamiento cerebral y tratar de llevarlo a la implementación mediante nuestras computadoras actuales. Al incorporarme como Profesor Titular de la Universidad Tecnológica de la Mixteca (UTM) me fue asignada la impartición del curso de Redes Neuronales Artificiales. Se me presentó entonces la oportunidad de expandir mis conocimientos en el área, nuevamente con la ayuda de la Dra. Gómez Gil, y de ganar un poco más de experiencia. Desde entonces he tenido la oportunidad de transmitir lo que sé al respecto a alumnos tanto de nivel Licenciatura como de Posgrado. Hasta el día de hoy, teniendo identificadas las limitaciones teóricas de nuestras computadoras, no me ha dejado de ser sumamente interesante que mediante esas Redes Neuronales y sus sencillas implementaciones se han logrado resultados que han dado importantes soluciones a problemas tan variados como de Optimización, Predicción y Clasificación. Inclusive, se han dado soluciones aproximadas, pero muy cercanas a las exactas, a problemas que yacen en la frontera de las Ciencias de la Computación, como son los bien conocidos Problemas NP-Completos. Hemos de mencionarlo también, las Redes Neuronales Artificiales tienen sus limitaciones, pero éstas a su vez forman un gran panorama de Investigación y Desarrollo que ha de ser enfrentado y cubierto en los próximos años. ix Una Introducción al Cómputo Neuronal Artificial Muchas de mis experiencias como Docente y como Investigador en el área de Redes Neuronales Artificiales las he englobado en este texto, el cual se divide en siete Capítulos y cuyos contenidos enuncio brevemente: • Capítulo 1: Introducción. En donde se estudian las bases neurofisiológicas de las que toma su inspiración el Computo Neuronal. También se hace una breve visita a los principios de los que parte el diseño y expectativas de las Redes Neuronales Artificiales y sus mecanismos de aprendizaje. Finalmente, se mencionan las estructuras básicas de Neuronas y Redes más utilizadas en la actualidad. • Capítulo 2: Preliminares Matemáticos. Se hace un repaso de algunas herramientas Matemáticas que serán requeridas para la formalización de los Algoritmos de Aprendizaje a abordar en el texto. Se estudian los vectores gradientes desde el punto de vista del Cálculo Diferencial y su relación con los Máximos y Mínimos en una función de varias variables. También se aborda a la Regresión Lineal y en particular al Método de Mínimos Cuadrados. Finalmente se discutirá a la Desigualdad de Cauchy-Schwarz. • Capítulo 3: La Neurona Adaline. En donde se utiliza a tal neurona para introducir los métodos de Aprendizaje neuronal basados primeramente en el método de Mínimos Cuadrados, y posteriormente en el método de Descenso Escalonado. Los métodos serán formalizados desde un punto de vista que los analiza como procesos de búsqueda de gradientes. • Capítulo 4: El Perceptrón. En donde se abordará el estudio de la que quizás es la Neurona Artificial más popular. Se analizará su estructura y principios funcionales. También nos introduciremos en el Problema de Representación que se encarga de establecer de manera formal los alcances y limitaciones que presenta la neurona de tipo Perceptrón desde el punto de vista de los problemas a los que puede dar solución. Se hará mención de una aplicación orientada al Modelado de Señales. • Capítulo 5: La Red Madaline. En este Capítulo se introduce a esta red, formada por neuronas de tipo Adaline, como un primer ejemplo de una arquitectura de neuronas interconectadas. También se establecen los retos y consideraciones referentes al aprendizaje. En particular, se discuten los aspectos relacionados con la eficiencia de los métodos de aprendizaje desde el punto de vista de la solución que se encuentre para un problema dado, así como el tiempo requerido para llegar a ésta. Finalmente, se presenta una aplicación dirigida al Modelado de Funciones Booleanas. • Capítulo 6: Redes de Perceptrones. Se estudian las redes formadas por neuronas de tipo Perceptrón. Se retomará el estudio de la neurona de tipo Perceptrón al abordar la Regla de Aprendizaje de Rosenblatt. También se demostrará y discutirá el Teorema de Convergencia de Perceptrón, el cual formaliza la mencionada regla. Esta regla representa el punto de partida e inspiración para el popular Algoritmo de Retropropagación. Se estudiarán también las bases formales detrás de la Retropropagación tanto para redes formadas por una capa oculta así también para redes formadas por varias capas ocultas. Ubicaremos formalmente al Algoritmo de Retropropagación como un método de búsqueda de gradiente por medio de Descenso Escalonado. Por último, se presentará una aplicación de las redes de Perceptrones en la Predicción de Señales. x Una Introducción al Cómputo Neuronal Artificial • Capítulo 7: Redes de Kohonen. En este último Capítulo se abordará el modelo propuesto por el finlandés Teuvo Kohonen. Estas redes son un ejemplo de arquitectura basada en aprendizaje no supervisado, es decir, aprendizaje no sustentado en la presencia de un “maestro” o “evaluador”. Veremos como es que las Redes de Kohonen toman inspiración de la forma en la cual la corteza cerebral procesa y administra información proveniente de los sentidos. Se discutirá una aplicación para la Clasificación Automática de Imágenes. Este texto está pensado principalmente para estudiantes de nivel Licenciatura en las carreras de Ciencias de la Computación, Informática, Física, Matemáticas Aplicadas y afines. Desde el punto de vista Matemático se asume que el alumno se encuentra habilitado con las nociones básicas de Álgebra Lineal y Cálculo Diferencial de Varias Variables. Como se apreciará a lo largo del texto, desde el punto de vista Computacional sólo se requiere un buen manejo de algún lenguaje de programación de alto nivel. Nuestros algoritmos serán especificados utilizando únicamente estructuras de datos estáticas (arreglos y matrices). Reconozco que el área de las Redes Neuronales Artificiales no es mi principal nicho de Investigación. Pero mi objetivo es transmitir las nociones que forman a este campo tal y cómo las veo y las entiendo. Pero además, como se verá a través de este trabajo, lo haremos desde la perspectiva de la aplicación intensa del Cálculo Diferencial de Varias Variables. Esta es un área de estudio de la cual los estudiantes, sobre todo de Ingeniería (incluido el Autor), han renegado en su momento. Quiero hacerles ver a los alumnos como es que el Cálculo Diferencial es una poderosa herramienta que permite establecer los fundamentos detrás de los mecanismos de Aprendizaje para algunos modelos de Redes Neuronales. Veremos que términos como Derivada Parcial, Regla de la Cadena, Vector Gradiente, Máximos y Mínimos de una Función tendrán una gran relevancia en el estudio que presentamos. Espero haber cumplido con mis objetivos. Quiero agradecer, en primer lugar y como mi siempre, a mi hermosa hija Diana y a mi esposa Kenia. Ustedes han sido, y serán, mi motor y mi inspiración. Gracias por todos los ánimos, cariño y amor que me han dado para poder concluir este trabajo. También quiero dar las gracias a la Dra. María del Pilar Gómez Gil por ser, como ya mencioné antes, quien me introdujo a este maravilloso campo de estudio y con quien además he tenido el gran de honor de colaborar en varios artículos científicos. También agradezco profundamente a mis amigos por todo su apoyo. Cualquier comentario, sugerencia o corrección serán siempre bienvenidos. Éstos se podrán hacer llegar a través del e-mail ricardo.perez.aguila@gmail.com. Finalmente, solo me basta hacer saber que a final del texto se cuenta con una Sección de Referencias. Todas han sido utilizadas en la elaboración de este trabajo y además el lector interesado puede consultarlas para profundizar más aún en el área de Redes Neuronales Artificiales. Una buena opción, desde mi punto de vista, sería comenzar por lo excelentes textos de Graupe, Haykin, Hilera & Martínez, y Rojas. Ricardo Pérez Aguila Agosto de 2012 xi Una Introducción al Cómputo Neuronal Artificial xii Una Introducción al Cómputo Neuronal Artificial Índice General Índice de Ecuaciones Índice de Algoritmos Índice de Figuras Índice de Tablas 1. Introducción 1.1 Redes Neuronales Biológicas 1.2 Principios del Diseño de Redes Neuronales Artificiales 1.3 Principios del Aprendizaje o Entrenamiento de una Red Neuronal Artificial 1.4 Estructuras Básicas de Neuronas y Redes 2. Preliminares Matemáticos 2.1 Gradientes y Búsquedas de Máximos y Mínimos 2.2 Regresión Lineal 2.3 Regresión Lineal con Múltiples Variables 2.4 La Desigualdad de Cauchy-Schwarz 3. La Neurona Adaline 3.1 Estructura 3.2 Ajuste de Pesos de la Neurona Adaline por Mínimos Cuadrados 3.3 Ajuste de Pesos de la Neurona Adaline por Descenso Escalonado 3.3.1 Descenso Escalonado: Caso una entrada – una salida 3.3.2 Descenso Escalonado: Caso varias entradas – una salida 4. El Perceptrón 4.1. Estructura Básica y Funciones de Activación 4.2 El Problema de Representación 4.3 Aplicación: Identificación de Parámetros Autorregresivos en una Señal 5. La Red Madaline 5.1 Estructura Básica 5.2 Ajuste de Pesos en una Red Madaline 5.3 Modelado de Funciones Booleanas Página xv xxix xxxi xxxix 1 8 13 15 17 21 23 30 38 44 47 49 52 57 58 69 83 85 90 103 121 123 125 133 xiii Una Introducción al Cómputo Neuronal Artificial 6. Redes de Perceptrones 6.1 La Regla de Rosenblatt 6.2 Teorema de Convergencia del Perceptrón 6.2.1 Discusión 6.3 Retropropagación 6.3.1 Retropropagación en una Red de una Sola Capa Oculta 6.3.2 Justificación del Algoritmo de Retropropagación 6.4 Retropropagación en una Red con Múltiples Capas Ocultas 6.5 Aplicación: Predicción de Señales 7. Redes de Kohonen 7.1 Redes Neuronales Auto-Organizadas 7.2 La Corteza Cerebral 7.3 El Modelo de Kohonen 7.4 Aplicación: Clasificación Automática de Imágenes 7.4.1 Redistribución del Conjunto de Entrenamiento 7.4.2. Clasificación de Imágenes mediante una Red de Kohonen 1D Referencias xiv 153 155 159 168 173 174 184 201 227 243 245 246 248 262 263 268 279 Una Introducción al Cómputo Neuronal Artificial Índice de Ecuaciones Página Ecuación 2.1.1 Ecuación 2.1.2 Ecuación 2.1.3 Ecuación 2.2.1 Ecuación 2.2.2 Ecuación 2.2.3 Ecuación 2.2.4 Ecuación 2.2.5 Ecuación 2.2.6 Ecuación 2.2.7 Ecuación 2.2.8 Ecuación 2.2.9 Ecuación 2.2.10 Ecuación 2.2.11 Ecuación 2.2.12 ªδ f º «δ x » « 1» «δ f » ∇f ( x1 ,..., xn ) = «« δ x2 »» « # » « » «δ f » «¬ δ xn »¼ δf δf δf Du f ( x1 ,..., xn ) = u1 + u2 + ... + u δ x1 δ x2 δ xn n Duf(x1, …, xn) = ||∇f(x1, …, xn)|| cos θ di = wx1,i + b + εi di = x2,i + εi εi = di – (wx1,i + b) εi = di – di’ 1 N 2 J= ¦εi 2 N i =1 N x N δJ b N d = w¦ 1,i + ¦ − ¦ i δb i =1 N i =1 N i =1 N N x2 N x N d x δJ = w¦ 1,i + b¦ 1,i − ¦ i 1,i N δw i =1 N i =1 N i =1 N x N N d b w¦ 1,i + ¦ − ¦ i = 0 i =1 N i =1 N i =1 N 2 N x N x N d x w¦ 1,i + b¦ 1,i − ¦ i 1,i = 0 N i =1 N i =1 N i =1 wx + b − d = 0 wx 2 + bx − xd = 0 xd − d ⋅ x w= 2 x2 − x () 23 26 28 30 30 31 31 32 33 33 34 34 34 34 35 xv Una Introducción al Cómputo Neuronal Artificial Ecuación 2.2.13 d ⋅ x 2 − xd ⋅ x b= () x2 − x 2 35 Ecuación 2.3.1 di' = b + ¦ wk xi ,k 38 Ecuación 2.3.2 ε i = di − (b + w1 xi ,1 + w2 xi ,2 + ... + wP xi , P ) 38 P k =1 Ecuación 2.3.3 P ε i = di − ¦ wk xi ,k 39 k =0 Ecuación 2.3.4 1 2N J= § N P ¦ ¨© d − ¦ w x i k i ,k i =1 k =0 · ¸ ¹ 2 39 Ecuación 2.3.5 δJ 1 § · = − ¦ xi , j ¨ di − ¦ wk xi ,k ¸ δ wj N i =1 k =0 © ¹ Ecuación 2.3.6 § · di = ¦ ¨ xi , j ¦ wk xi ,k ¸ i =1 i =1 © k =0 ¹ N P P N § · ¦ ¨ xi , j ¦ wk xi , k ¸ = ¦ wk ¦ xi , j xi , k i =1 © k =0 ¹ k =0 i =1 N N P N ¦x i, j Ecuación 2.3.7 Ecuación 2.3.8 N ¦x i, j i =1 Ecuación 2.3.9 Ecuación 2.3.10 Ecuación 2.3.11 Ecuación 2.3.12 Ecuación 2.3.13 xvi 1 N P k =0 ¦x i, j i =1 di = ¦ wk k =0 N N 1 ¦ xi, j di N i =1 ª℘0 º «℘ » ℘= « 1 » « # » « » ¬℘P ¼ ℘j = 41 42 i =1 P 1 N N ¦x x i , j i,k i =1 1 ¦ xi, j xi,k N i =1 ª R0,0 R0,1 " R0, P º «R R1,1 " R1, P »» 1,0 « R= « # # % # » « » ¬ RP ,0 RP ,1 " RP , P ¼ Rk , j = 41 N di = ¦ wk ¦ xi , j xi ,k N 40 P k = 0,1, 2,..., P j = 0,1, 2,..., P 42 42 42 j = 0,1, 2,..., P 42 43 Una Introducción al Cómputo Neuronal Artificial Ecuación 2.3.14 Ecuación 2.3.15 Ecuación 2.3.16 Ecuación 3.1.1 Ecuación 3.2.1 ª w0 º «w » W =« 1» « # » « » ¬ wP ¼ ℘ = RW R-1℘ = W P § · y = sign ¨ w0 + ¦ wi xi ¸ i =1 © ¹ 43 43 43 49 P zi = ¦ wk xi ,k 54 54 k =0 Ecuación 3.2.2 Ecuación 3.2.3 Ecuación 3.3.1 Ecuación 3.3.2 Ecuación 3.3.3 Ecuación 3.3.4 Ecuación 3.3.5 Ecuación 3.3.6 Ecuación 3.3.7 Ecuación 3.3.8 Ecuación 3.3.9 Ecuación 3.3.10 εi = di - zi 1 N 2 ¦εi 2 N i =1 Wm+1 = Wm + Δwm Δwm = μ(-∇J(W)m) J(W)m = (dm – zm)2 = (dm – (wm,0xm,0 + wm,1xm,1))2 ª xm ,0 º ∇J (W ) m = −2(d m − ( wm,0 xm ,0 + wm,1 xm ,1 )) « » ¬ xm ,1 ¼ J (W ) = § · J (W ) m = (d m − Wm ⋅ X m ) 2 = ¨ d m − ¦ wm ,k xm ,k ¸ k =0 © ¹ ª δ J (W ) m º « δw » m ,0 « » « δ J (W ) m » « » ∇J (W ) m = « δ wm ,1 » « » # « » « δ J (W ) m » « δw » m,P ¼ ¬ P 54 58 63 63 64 2 δ J (W ) m = −2 xm , j (d m − Wm ⋅ X m ) δ wm , j ª xm,0 º «x » m ,1 » ∇J (W ) m = −2(d m − Wm ⋅ X m ) « « # » « » ¬ xm , P ¼ SDO(T, N, P) = TN(7P + 8) LSO(N, P) = (P + 1)2(2N + 1) + (P + 1)(2N + 1) + (P + 1)3 + (P + 1)2 70 71 71 72 75 77 xvii Una Introducción al Cómputo Neuronal Artificial Ecuación 3.3.11 « 2P2 + 6P + 4 » T ( P) = « » ¬ 7P + 8 ¼ Ecuación 4.1.1 z = ¦ wi xi Ecuación 4.1.2 Ecuación 4.1.3 Ecuación 4.1.4 z =W ⋅ X y = fN(z) 79 n 85 85 86 i =1 Ecuación 4.1.5 Ecuación 4.1.6 Ecuación 4.1.7 Ecuación 4.1.8 Ecuación 4.1.9 Ecuación 4.1.10 Ecuación 4.1.11 Ecuación 4.2.1 Ecuación 4.2.2 Ecuación 4.2.3 Ecuación 4.2.4 Ecuación 4.2.5 1 =y 1 + e− z e− z fN ' = (1 + e − z ) 2 §z· f N ( z ) = Tanh ¨ ¸ = y ©2¹ 2 §z· f N ( z ) = Tanh ¨ ¸ = −1 −z © 2 ¹ 1+ e 2e− z fN ' = 2 (1 + e− z ) fN ( z ) = f N ( z ) = Tanh ( z ) = fN ' = fN ' = 4e 1− e =y 1 + e−2 z 2z Ecuación 4.3.2 xviii 89 89 89 2z (1 + e ) 2z 2 z(x1, x2) = w1 x1 + w2 x2 w1x1 + w2x2 = v⋅x = ||v||⋅||x|| cos θ z(x1, x2, x3) = w1x1 + w2x2 + w3x3 z(x1, x2,…, xn) = w1x1 + w2x2 + … + wnxn = 0 2⋅ 2 ⋅ ... ⋅ 2 = 2n 2⋅ 2 ⋅ ... ⋅ 2 = 2 ­ ck si n = k , k ∈ {1, 2,..., M } °M xn = ® n>M °¦ ak xn − k + noise(n) si ¯ k =1 M x 'n = ¦ a 'k xn − k εn = xn – x 'n 90 92 92 94 95 99 (2n ) N ≥n>M k =1 Ecuación 4.3.3 88 2 2n Ecuación 4.3.1 88 −2 z n Ecuación 4.2.6 87 2z (1 + e ) 2e 86 N≥n>M 99 103 105 106 Una Introducción al Cómputo Neuronal Artificial Ecuación 4.3.4 1 MSE = N −M Ecuación 4.3.5 § · MSEn = ¨ xn − ¦ a 'n ,k xn − k ¸ k =1 © ¹ δ MSEn = −2ε n xn − j δ a 'n , j Ecuación 4.3.6 M § · ¦ ¨ xn − ¦ a 'k xn − k ¸ n = M +1 © k =1 ¹ N M 2 107 2 N ≥n>M 107 108 ª xn −1 º «x » ∇MSEn = −2ε n « n − 2 » « # » « » ¬ xn − M ¼ 108 ª a 'n ,1 º « » a 'n ,2 » « a 'n = « # » « » ¬« a 'n , M ¼» 109 Ecuación 4.3.9 a 'n +1 = a 'n + Δa'n 109 Ecuación 4.3.10 ª xn −1 º «x » Δa'n = μ2εn « n − 2 » « # » « » ¬ xn − M ¼ ck si n = k , k ∈ {1, 2,..., M } ­ °M x 'n = ® N ≥n>M °¦ a 'k xn − k si ¯ k =1 109 Ecuación 4.3.7 Ecuación 4.3.8 Ecuación 4.3.11 Ecuación 5.1.1 CM ( n, p, m, q, n1 , …, nm ) = np + pn1 + ¦ nA ⋅nA +1 + nm q A =1 Ecuación 5.2.1 Ecuación 5.2.2 2 ­ ½ S = ® w j ,0 + ¦ w j ,i yi : j = 3, 4 ¾ i =1 ¯ ¿ A( j ) = w j ,0 + ¦ w j ,i yi i =1 Ecuación 5.2.3 Ecuación 5.2.5 124 127 129 m M = q + ¦ nA A =1 Ecuación 5.2.4 115 m −1 §M · M! ¨ ¸= © k ¹ k !( M − k )! §M · §M · §M · §M · M §M · + + ... + + ... + ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ = ¦¨ ¸ ©1¹ ©2¹ ©k ¹ © M ¹ k =1 © k ¹ 131 131 131 xix Una Introducción al Cómputo Neuronal Artificial Ecuación 5.2.6 Ecuación 5.2.7 Ecuación 5.3.1 Ecuación 5.3.2 Ecuación 5.3.3 Ecuación 5.3.4 Ecuación 5.3.5 Ecuación 5.3.6 Ecuación 5.3.7 Ecuación 5.3.8 Ecuación 5.3.9 Ecuación 5.3.10 Ecuación 5.3.11 Ecuación 5.3.12 Ecuación 5.3.13 Ecuación 5.3.14 Ecuación 5.3.15 Ecuación 5.3.16 Ecuación 6.1.1 Ecuación 6.1.2 M §M · ( a + b) M = ¦ ¨ ¸ a M − k b k k =0 © k ¹ M § M · § M · M § M · M −k k M ¦ ¨ ¸ − ¨ ¸ = ¦ ¨ ¸1 1 − 1 = 2 − 1 0 k k k =1 © ¹ © ¹ k =1 © ¹ f(x1, x2, x3) = (¬x1 ∧ ¬x2 ∧ x3) ∨ (¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3) x1 ⊗ x2 = (¬x1 ∧ x2) ∨ (x1 ∧ ¬x2) Z1(x1, x2) = w1,0 + x1w1,1 + x2w1,2 x1 − x2 − 1 = 0 Z2(x1, x2) = w2,0 + x1w2,1 + x2w2,2 x1 − x2 + 1 = 0 − x1 + x2 − 1 = 0 − y1 − y2 − 1 = 0 Z3(y1, y2) = y1 + y2 + 1 − x1 − x2 + x3 − 2 = 0 x1 − x2 + x3 + 2 = 0 − x1 + x2 − x3 − 2 = 0 − x1 − x2 − x3 + 2 = 0 x1 + x2 + x3 − 2 = 0 y1 + y2 + y3 + 2 = 0 § 2n · (2n )! = ¨ ¸ n © n ¹ (2 − n)!n ! ª I1 º «I » E = « 2» «#» « » ¬ In ¼ ent = ¦ w j I j xx 135 136 137 137 138 138 138 139 140 144 145 145 145 145 146 149 155 156 Ecuación 6.1.5 Ecuación 6.2.1 § · O = g(ent) = g ¨ ¦ w j I j ¸ © j =1 ¹ § n · Err = T – O = T – g ¨ ¦ w j I j ¸ © j =1 ¹ wj = wj + α⋅Err⋅Ij j = 1, 2, …, n γ 1 = min {W * ⋅Ek } Ecuación 6.2.2 Wk+1 = Wk + Ek = (E1 + E2 + … + Ek-1) + Ek Ecuación 6.1.4 132 n j =1 Ecuación 6.1.3 132 n 156 156 157 162 162 Una Introducción al Cómputo Neuronal Artificial Ecuación 6.2.3 Ecuación 6.2.4 Ecuación 6.2.5 Ecuación 6.2.6 Ecuación 6.2.7 W*⋅Wk+1 = W*⋅(E1 + E2 + … + Ek-1 + Ek) W*⋅Wk+1 = W*⋅E1 + W*⋅E2 + … + W*⋅Ek-1 + W*⋅Ek ||Wk+1||2 = ||Wk||2 + 2Wk⋅Εk + ||Εk||2 ||Wk+1||2 – 2Wk⋅Εk = ||Wk||2 + ||Εk||2 2 Wk + Ek 2 { Ecuación 6.2.8 γ 2 = max Ek Ecuación 6.2.9 (k ) γ 2 W* Ecuación 6.2.10 Ecuación 6.2.11 Ecuación 6.2.12 Ecuación 6.2.13 Ecuación 6.3.1 k = 2 1 2 k 2 j =1 j =1 } Ecuación 6.3.7 Ecuación 6.3.8 Ecuación 6.3.10 166 167 1 N 168 N ¦ (T − Ok ) 2 k 170 k =1 2 § § n ·· MEk = (Tk – Ok)2 = ¨ Tk − g ¨ ¦ w j I j ¸ ¸ ¨ ¸ © j =1 ¹¹ © W*⋅Wk+1 = W*⋅W1 + W*⋅E1 + W*⋅E2 + … + W*⋅Ek-1 + W*⋅Ek 170 172 n2 enti = ¦ w j ,i a j Oi = g(enti) wj,I = wj,I + α⋅aj⋅Δi Δi = Erri ⋅ g’(enti) Erri = Ti – Oi § n2 · g '(enti ) = g ' ¨ ¦ w j ,i a j ¸ © j =1 ¹ wk,j = wk,j + α⋅Ik⋅Δj 176 176 176 176 176 177 177 n3 Δ j = g '(ent j ) ⋅ ¦ w j ,i Δ i i =1 Ecuación 6.3.9 165 2 j =1 Ecuación 6.3.2 Ecuación 6.3.3 Ecuación 6.3.4 Ecuación 6.3.5 Ecuación 6.3.6 2 = kγ 2 γ2 W * γ 12 ME = k −1 = ¦ 2W j ⋅ E j + ¦ E j 162 163 164 164 177 n1 ent j = ¦ wk , j I k E= k =1 n3 1 (Ti − Oi ) 2 ¦ 2 i =1 177 184 xxi Una Introducción al Cómputo Neuronal Artificial Ecuación 6.3.11 Ecuación 6.3.12 § n3 · SSE = ¦ ¨ ¦ (Ti ,A − Oi ,A ) 2 ¸ A =1 © i =1 ¹ n3 1 E = ¦ (Ti − g (enti )) 2 2 i =1 N Ecuación 6.3.13 E= Ecuación 6.3.14 Ecuación 6.3.15 Ecuación 6.3.16 xxii § n2 ·· 1 n3 § T g w a − ¨ ¨ ¦ i ¦ j ,i j ¸ ¸ ¸ 2 i =1 ¨© © j =1 ¹¹ 185 185 2 185 ∂E = −a j Δi ∂w j ,i ∂E = −Δ j ⋅ I k ∂wk , j 189 ª δE º « δw » 1,1 « » « # » « » « δE » « δ wn ,1 » 2 « » « # » « δE » « » « δ w1,n3 » « » « # » « δE » « » « δ wn2 , n3 » ∇E = « δ E »» « « δ w1,1 » « » « # » « δE » « » « δ wn1 ,1 » « # » « » « δE » « δw » « 1, n2 » « # » « » « δE » « δ wn ,n » ¬ 1 2 ¼ 190 187 Una Introducción al Cómputo Neuronal Artificial Ecuación 6.3.17 ª − a1Δ1 º « # » « » « −an2 Δ1 » « » « # » « −a Δ » « 1 n3 » « # » « » « −an2 Δ n3 » ∇E = « » « − I1Δ1 » « # » « » « − I n1 Δ1 » « # » « » « − I1Δ n2 » « » « # » « −I Δ » ¬ n1 n2 ¼ Ecuación 6.3.18 2 1 E = §¨ T12 − 2 ⋅ T1 ⋅ g w1,1 g ( w1,1 x1 ) + ª g w1,1 g ( w1,1 x1 ) º ·¸ ¬ ¼ ¹ 2© −2( w1,1x1 ) · § 1− e § ¸ · −2¨ w1,1 ⋅ −2 ( w1,1x1 ) ¸ ¨ 1+ e ¨ © ¹ ¸ 1− e ¨ T12 − 2 ⋅ T1 ⋅ ¸ −2 ( w1,1x1 ) · § 1− e ¸ ¸ ¨ −2¨ w1,1 ⋅ −2( w1,1x1 ) ¸ ¨ ¹ ¸ 1 + e © 1+ e 1¨ E= ¨ ¸ 2 −2( w1,1x1 ) · § 1− e 2¨ ª º ¸ ¸ −2¨ w1,1 ⋅ −2( w1,1x1 ) ¸ ¨ ¹ » ¨ «1 − e © 1+ e ¸ » ¨+« ¸ −2( w1,1x1 ) · § 1− e ¸ » −2¨ w1,1 ⋅ ¨ « ¸ −2 ( w1,1x1 ) ¸ ¨ ¹ » ¨ «1 + e © 1+ e ¸ ¼ © ¬ ¹ −2 ( w1,1⋅0.2) · § 1− e § ¸ · −2¨ w1,1 ⋅ −2 ( w1,1⋅0.2) ¸ ¨ 1+ e ¨ © ¹ ¸ 1− e ¨ (0.5) 2 − 2 ⋅ (0.5) ⋅ ¸ −2( w1,1⋅0.2 ) · § 1− e ¸ ¸ ¨ −2¨ w1,1 ⋅ −2( w1,1⋅0.2 ) ¸ ¨ ¹ ¸ 1 + e © 1+ e 1¨ E= ¨ ¸ 2 −2( w1,1⋅0.2) · § 1− e 2¨ ª ¸ ¸ º −2¨ w1,1 ⋅ −2( w1,1⋅0.2) ¸ ¨ ¹ » ¨ «1 − e © 1+ e ¸ » ¨+« ¸ −2 ( w1,1⋅0.2 ) · § 1− e ¸» −2¨ w1,1 ⋅ ¨ « ¸ −2 ( w1,1⋅0.2 ) ¸ ¨ ¹» ¨ «1 + e © 1+ e ¸ ¼ © ¬ ¹ 1 2 2 2 E = (T12 − 2T1w1,1w1,1 x1 + w1.1 w1,1 x1 ) 2 Ecuación 6.3.19 Ecuación 6.3.20 Ecuación 6.3.21 191 ( ) ( ) 193 193 194 195 xxiii Una Introducción al Cómputo Neuronal Artificial Ecuación 6.3.22 2 2 E = 0.125 − 0.1w1,1w1,1 + 0.02 w1.1 w1,1 Ecuación 6.3.23 δE 2 = −0.1w1,1 + 0.04w1,1w1,1 δ w1,1 δE 2 = −0.1w1,1 + 0.04w1,1 w1,1 δ w1,1 Ecuación 6.3.24 195 196 196 Ecuación 6.3.25 w1,1 = 2.5 , w1,1 ≠ 0 w1,1 197 Ecuación 6.3.26 2.5 w1,1 = , w1.1 ≠ 0 w1,1 197 Ecuación 6.4.1 enti = nm ¦w km =1 Ecuación 6.4.2 Ecuación 6.4.3 Ecuación 6.4.4 Ecuación 6.4.5 ⋅ am,km km ,i 204 § · Oi = g (enti ) = g ¨ ¦ wkm ,i ⋅ am ,km ¸ © km =1 ¹ nm entkA ,A = nA −1 ¦w kA−1 =1 kA−1 , kA ,A ⋅ aA −1, kA .−1 § · aA , kA = g (entkA ,A ) = g ¨ ¦ wkA−1 ,kA ,A ⋅ aA −1,kA−1 ¸ © kA−1 =1 ¹ Ecuación 6.4.7 Ecuación 6.4.8 Ecuación 6.4.10 Ecuación 6.4.11 xxiv 204 p entk1 ,1 = ¦ wk ,k1 ,1 ⋅ I k a1,k1 204 § p · = g (ent1,k1 ) = g ¨ ¦ wk ,k1 ,1 ⋅ I k ¸ © k =1 ¹ q E = ¦ (Ti − Oi ) δE δ wk Ecuación 6.4.9 204 nA−1 k =1 Ecuación 6.4.6 204 204 2 205 i =1 = − (Ti − Oi ) g ' ( enti ) am,km m ,i 207 § · Erri = Ti − Oi = Ti − g ¨ ¦ wkm ,i ⋅ am,km ¸ © km =1 ¹ Δ i = Erri ⋅ g '(enti ) 207 § § nm · · § nm · = ¨ Ti − g ¨ ¦ wkm ,i ⋅ am ,km ¸ ¸ ⋅ g ' ¨ ¦ wkm ,i ⋅ am,km ¸ ¨ ¸ © km =1 ¹ ¹ © km =1 ¹ © δE = −Δ i ⋅ am ,km δ wkm ,i 207 nm 207 Una Introducción al Cómputo Neuronal Artificial δE Ecuación 6.4.12 δ wk Ecuación 6.4.13 ( i =1 ( Δ km ,m = ¦ Δ i ⋅ wkm ,i ⋅ g ' entkm , m δE δ wk ) = −¦ Δ i wkm ,i g ' entkm ,m am −1,km−1 m−1 , km , m q Ecuación 6.4.14 Ecuación 6.4.15 q i =1 ) 210 210 = −Δ km , m ⋅ am −1, km−1 211 m−1 , k m , m nA+1 Δ kA ,A = g '(entkA ,A ) ¦ Δ kA+1,A +1 ⋅ wkA ,kA+1 ,A +1 kA+1 =1 δE Ecuación 6.4.16 δ wk A −1 , kA , A δE Ecuación 6.4.17 δ wk ,k ,1 = −Δ kA ,A aA −1,kA−1 215 1< A < m = −Δ k1 ,1 ⋅ I k 1 220 224 Ecuación 6.4.18 wkm ,i = wkm ,i + α⋅Δi⋅ am,km 225 Ecuación 6.4.19 wkm−1 ,km , m = wkm−1 ,km , m + α⋅ Δ km ,m ⋅ am −1, km−1 225 Ecuación 6.4.20 wkA−1 ,kA ,A = wkA−1 ,kA ,A + α⋅ Δ kA ,A ⋅ aA −1,kA−1 225 Ecuación 6.4.21 wk ,k1 ,1 = wk ,k1 ,1 + α⋅ Δ k1 ,1 ⋅Ιk 225 Ecuación 6.5.1 1 1+ t ª x1 º «x » X = « 2» «#» « » ¬ xn ¼ Wj = Wj + α⋅ϕ(j, k, r)⋅(E – Wj) H = [0,1] × [0,1] × ... × [0,1] Ecuación 7.3.1 Ecuación 7.3.2 Ecuación 7.4.1 α (t ) = n Ecuación 7.4.2 min xi ­ ½ ª # º ° ° « » = min ® x j ,i : E j = « x j ,i » , j = 1, 2,..., N ¾ ° ° «¬ # »¼ ¯ ¿ 233 248 250 263 264 xxv Una Introducción al Cómputo Neuronal Artificial Ecuación 7.4.3 Ecuación 7.4.4 Ecuación 7.4.5 ª x1min º « min » x Pmin = « 2 » « # » « min » «¬ xn »¼ ª x1max º « max » x Pmax = « 2 » « # » « max » ¬« xn ¼» ­ ½ ª # º ° ° « » xi = max ® x j ,i : E j = « x j ,i » , j = 1, 2,..., N ¾ ° ° «¬ # »¼ ¯ ¿ min ª x j ,1 º ª x1 º ª x ' j ,1 º » « « » « » E j ' = E j − Pmin = « # » − « # » = « # » « x j ,n » « xnmin » « x ' j ,n » ¬ ¼ ¬ ¼ ¼ ¬ max min ª x1 º ª x1 º ª x1max 'º « » « » « » Pmax ' = Pmax − Pmin = « # » − « # » = « # » « xnmax » « xnmin » « xnmax '» ¬ ¼ ¬ ¼ ¬ ¼ min min ª x1 º ª x1 º ª0 º « » « » Pmin ' = Pmin − Pmin = « # » − « # » = «« # »» « xnmin » « xnmin » «¬0 »¼ ¬ ¼ ¬ ¼ max xi '⋅ Si = 1, i = 1, 2,..., n 1 Si = max , i = 1, 2,..., n xi ' 264 265 max Ecuación 7.4.6 Ecuación 7.4.7 Ecuación 7.4.8 Ecuación 7.4.9 Ecuación 7.4.10 Ecuación 7.4.11 xxvi ª ·º 1 min § « ( x j ,1 − x1 ) ¨ max min ¸ » © x1 − x1 ¹ » « ª x*j ,1 º « » # « » « » # « » « » § · 1 E j * = « x*j ,i » = « ( x j ,i − ximin ) ¨ max min ¸ » « » « © xi − xi ¹ » « # » « » # « x* » « » , j n ¬ ¼ ·» « 1 min § « ( x j ,n − xn ) ¨ max min ¸ » © xn − xn ¹ ¼ ¬ 265 266 266 266 267 267 268 Una Introducción al Cómputo Neuronal Artificial Ecuación 7.4.12 Ecuación 7.4.13 Ecuación 7.4.14 G normalized = j Gj 256 1 α (t ) = t +1 « d » GW = « ⋅ 255» ¬ d max ¼ 268 270 274 xxvii Una Introducción al Cómputo Neuronal Artificial xxviii Una Introducción al Cómputo Neuronal Artificial Índice de Algoritmos Página Algoritmo 3.1. Algoritmo 3.2. Algoritmo 3.3. Algoritmo 3.4. Algoritmo 4.1. Algoritmo 6.1. Algoritmo 6.2. Algoritmo 6.3. Algoritmo 6.4. Algoritmo 6.5. Algoritmo 7.1. Algoritmo 7.2. Cálculo del mínimo de la función J(W) mediante búsqueda del vector gradiente ∇J(W) = 0 y actualización iterativa del vector de pesos. Método de Descenso Escalonado para la búsqueda de un mínimo: caso de una única entrada. Método de Descenso Escalonado para la búsqueda de un mínimo: caso de una única entrada y T presentaciones del conjunto de entrenamiento. Método de Descenso Escalonado para la búsqueda de un mínimo: caso de varias entradas y T presentaciones del conjunto de entrenamiento. Implementación del método de Descenso Escalonado para el entrenamiento de un Perceptrón y determinación de Parámetros Autorregresivos en una señal. Implementación de la Regla de Rosenblatt para el entrenamiento de un Perceptrón. Propagación de un vector de entrada en una red de Perceptrones con una única capa oculta. Método de Retropropagación para el entrenamiento de una Red de Perceptrones con una única capa oculta. Propagación de un vector de entrada en una red de Perceptrones con dos capas ocultas. Entrenamiento por Retropropagación para una Red de Perceptrones con dos capas ocultas. Entrenamiento de una Red de Kohonen Unidimensional. Determinando la neurona asociada a un vector de entrada E en una Red de Kohonen Unidimensional. 61 65 69 72 110 158 180 182 230 233 251 253 xxix Una Introducción al Cómputo Neuronal Artificial xxx Una Introducción al Cómputo Neuronal Artificial Índice de Figuras Figura 1.1. Figura 1.2. Figura 1.3. Figura 1.4. Figura 1.5. Figura 1.6. Figura 2.1. Figura 2.2. Figura 2.3. Figura 2.4. Figura 2.5. Figura 3.1. Figura 3.2. Figura 3.3. Figura 3.4. Figura 3.5. Figura 3.6. Componentes principales de una Neurona Biológica. Componentes de la Unión Sináptica entre dos neuronas. Porción de una Red Neuronal Biológica. Representación esquemática de una neurona (biológica o artificial). Ejemplo de Representación Esquemática de un fragmento de Red Neuronal. Un Red formada por 6 neuronas tipo Adaline. Interpretación del signo de las pendientes de las Rectas Tangentes a una función f. a) Una pendiente positiva señala la dirección de crecimiento de f. b) Una pendiente negativa indica que f decrece en la dirección positiva del eje X1. Ajuste de la recta wx1 + b. Disposición en el plano cartesiano de los puntos presentados en la Tabla 2.1. La recta d = 2.9818x1 + 3.9545 como el mejor estimador lineal para el conjunto de datos presentado en la Tabla 2.1. El paraboloide asociado a la función de error J = 5w2 + 0.5b2 – 29.81w – 3.95b + 52.397 Representación esquemática de una neurona Adaline. Gráfica de la función sign. Esquema de una neurona Adaline para dar solución al modelado de la compuerta lógica OR. Estructura de la neurona Adaline omitiendo el uso de la función sign. Sección transversal del paraboloide definido por J(W). El vector gradiente nos indica la dirección de máximo crecimiento de J(W). Sección transversal del paraboloide definido por J(W). La dirección opuesta del vector gradiente indica la dirección en donde se ubica el mínimo de J(W). Página 9 10 11 12 13 18 25 31 36 37 38 49 49 51 53 58 59 xxxi Una Introducción al Cómputo Neuronal Artificial Figura 3.7. Figura 4.1. Figura 4.2. Figura 4.3. Figura 4.4. Figura 4.5. Figura 4.6. Figura 4.7. Figura 4.8. Figura 4.9. Figura 4.10. Figura 4.11. xxxii Sección transversal del paraboloide definido por J(W). Dado un (punto) vector de pesos inicial W1 y -∇J(W1) se obtiene el nuevo (punto) vector de pesos W2. Usando a W2 y -∇J(W2) se obtiene el (punto) vector de pesos W3. Se procede de manera sucesiva hasta obtener un vector de pesos Wm tal que ∇J(Wm) = 0 o tan cercano a éste como sea posible. Representación esquemática de un Perceptrón. Algunas Funciones de Activación para el Perceptrón: a) Función Sigmoide; b) Tangente Hiperbólica con z argumento ; c) Tangente Hiperbólica; d) La función 2 1 + Tanh( z ) . 2 Una neurona de tipo Perceptrón con dos entradas. El umbral z(x1, x2) = w1 x1 + w2 x2 = 0 asociado a un Perceptrón de 2 entradas. El vector normal v del umbral z(x1, x2) = w1 x1 + w2 x2 = 0 asociado a un Perceptrón de 2 entradas. Los componentes de v son precisamente los valores de los pesos w1 y w2. Caracterización de los puntos en el Espacio Euclidiano Bidimensional en función del signo de su evaluación con la función z(x1, x2) = w1 x1 + w2 x2. Si w1 x1 + w2 x2 > 0 entonces el punto está en la misma región hacia la que apunta el vector normal v. Si w1 x1 + w2 x2 < 0 entonces el punto está en la región hacia la que apunta –v. Si w1 x1 + w2 x2 = 0 entonces el punto está sobre la recta z(x1, x2) = 0. \2 mediante el umbral Partición de z(x1, x2) = w1 x1 + w2 x2 = 0 y su vector normal v. R12 se forma por los puntos por encima de la recta z(x1, x2) = 0. R22 se forma por los puntos debajo de la recta z(x1, x2) = 0. R32 es el conjunto de puntos sobre la recta z(x1, x2) = 0. Una neurona de tipo Perceptrón con tres entradas. El lugar geométrico asociado a z(x1, x2, x3) = 0. Visualización en el plano de los cuatro posibles estados de la compuerta lógica AND (Véase el texto para detalles). Una recta que separa los estados con salida 0 del estado con salida 1 en la compuerta lógica AND. 60 85 87 91 91 92 93 94 94 95 96 97 Una Introducción al Cómputo Neuronal Artificial Figura 4.12. Figura 4.13. Figura 4.14. Figura 4.15. Figura 4.16. Figura 4.17. Figura 4.18. Figura 4.19. Figura 4.20. Figura 4.21. Figura 4.22. Figura 4.23. Figura 5.1. Figura 5.2. Figura 5.3. Visualización en el plano de los cuatro posibles estados de la compuerta lógica XOR (Véase el texto para detalles). a) Una recta que agrupa, para la compuerta lógica XOR, a los estados con salida 0 pero que también incluye a un estado con salida 1. b) Una recta que agrupa a los estados con salida 1 pero que también incluye a un estado con salida 0. Ejemplos de regiones convexas: a) Región Convexa Cerrada; b) Región Convexa Abierta. Separación de los estados de la compuerta lógica AND mediante dos regiones cerradas convexas disjuntas (véase el texto para detalles). Dos regiones convexas no disjuntas que agrupan, cada una, a los estados negros y a los estados blancos de la función XOR. Separación de los estados negros y los estados blancos de la función XOR. Se tienen dos regiones disjuntas, pero una de ellas es no convexa. Una serie de tiempo de 7 parámetros autorregresivos (véase el texto para detalles). Representación esquemática del Perceptrón que se utilizará para determinar los Parámetros Autorregresivos en una Señal de Séptimo Orden (Véase el texto para detalles). Evolución del valor MSE (Ecuación 4.3.4) a lo largo de las T = 100 presentaciones del conjunto de entrenamiento para un Perceptrón entrenado mediante el Algoritmo 4.1 (Véase el texto para detalles). Evolución del Coeficiente de Aprendizaje μ a lo largo de las T = 100 presentaciones del conjunto de entrenamiento para un Perceptrón entrenado mediante el Algoritmo 4.1 (Véase el texto para detalles). Serie de tiempo de 7 parámetros autorregresivos generada por un Perceptrón bajo la Ecuación 4.3.11 (véase el texto para detalles). En color gris, la serie de tiempo presentada en la Figura 4.22. En color negro, la serie de tiempo presentada en la Figura 4.18 (véase el texto para detalles). Una red Madaline formada por 5 neuronas. Una red Madaline formada por 5 neuronas que efectúa un mapeo de vectores en \ 2 a vectores (escalares) en \ . El umbral Z1(x1, x2) = 0 asociado a la neurona que modelará la función Booleana x1 ∧ ¬x2. 98 99 100 101 102 102 106 114 116 117 118 119 123 126 138 xxxiii Una Introducción al Cómputo Neuronal Artificial Figura 5.4. Figura 5.5. Figura 5.6. Figura 5.7. Figura 5.8. Figura 5.9. Figura 5.10. Figura 5.11. Figura 6.1. Figura 6.2. Figura 6.3. Figura 6.4. Figura 6.5. Figura 6.6. xxxiv El umbral Z2(x1, x2) = 0 asociado a la neurona que modelará la función Booleana ¬x1 ∧ x2. El umbral Z3(y1, y2) = 0 asociado a la neurona que modelará la función Booleana OR. Una red Madaline formada por 3 neuronas que resuelve el problema del modelado de la compuerta XOR. a), b) y c) En gris: Regiones del plano por encima de los umbrales asociados a las neuronas que modelan las funciones Booleanas x1 ∧ ¬x2, ¬x1 ∧ x2 y OR. d) Las tres regiones anteriores sobrepuestas. En gris obscuro: sus intersecciones. Partición del plano inducida por la Red Neuronal de la Figura 5.6 (Véase el texto para detalles). Visualización en el espacio 3D de los estados y las salidas de las funciones Booleanas a) ¬x1 ∧ ¬x2 ∧ x3, b) ¬x1 ∧ x2 ∧ ¬x3, c) x1 ∧ x2 ∧ x3, y d) y1 ∨ y2 ∨ y3. Los triángulos en gris están inmersos en los planos que separan a los estados negros de los estados blancos. Sus vértices son utilizados para determinar sus correspondientes ecuaciones y orientaciones (véase el texto para detalles). Red Madaline que modela a la función Booleana f(x1, x2, x3) = (¬x1 ∧ ¬x2 ∧ x3) ∨ (¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3). Los estados de las funciones Booleanas de 1 a 4 variables vistos como los vértices de hipercubos. a) Un hipercubo 1D: un segmento (2 vértices/estados). b) Un hipercubo 2D: un cuadrado (4 vértices/estados). c) Un hipercubo 3D: un cubo (8 vértices/estados). d) Un Hipercubo 4D (16 vértices/estados). Representación Esquemática de un Perceptrón. Una red de Perceptrones con una única capa oculta (Véase el texto para detalles). Una Red de Perceptrones de una sola capa oculta con una neurona en cada una de sus capas. Gráfica de la función de Error asociada a la red de Perceptrones de la Figura 6.3 (véase el texto para detalles). Gráfica de la Ecuación 2 2 E = 0.125 − 0.1w1,1w1,1 + 0.02 w1.1 w1,1 . El conjunto de puntos, resaltados en negro, para los cuales el vector gradiente de la función 2 2 E = 0.125 − 0.1w1,1w1,1 + 0.02 w1.1 w1,1 es el vector cero. 139 140 141 143 143 147 148 150 156 175 192 194 195 199 Una Introducción al Cómputo Neuronal Artificial Figura 6.7. Figura 6.8. Figura 6.9. Figura 6.10. Una Función de Error E con un único punto crítico: un máximo (punto remarcado). Una de red de Perceptrones formada por m capas ocultas, m ≥ 2 (Véase el texto para detalles). En color gris se muestran las neuronas involucradas en la actualización del peso wkm ,i . Tal peso se encuentra únicamente en la i-ésima neurona de la capa de salida. En color gris se muestran las neuronas involucradas en la actualización del peso wkm−1 ,km ,m el cual reside en la km-ésima neurona de la última capa oculta. Las actualizaciones aplicadas sobre las neuronas en la capa de salida influyen también en la actualización del peso wkm−1 ,km ,m . Figura 6.11. Figura 6.15. Figura 6.16. 205 208 211 En color gris se muestran las neuronas involucradas en la actualización del peso wk , k1 ,1 . Este peso se ubica específicamente en la k1-ésima neurona de la primera capa oculta. Las correcciones aplicadas sobre todas las neuronas de la red, a excepción de las neuronas en la capa de entrada y de las neuronas en la primera capa oculta (salvo la k1-ésima), influyen sobre la actualización del peso wk ,k1 ,1 . Figura 6.13. Figura 6.14. 202 En color gris se presentan a las neuronas involucradas en la actualización del peso wkA−1 , kA ,A . Éste se encuentra localizado específicamente en la kO-ésima neurona en la O-ésima capa oculta. Las actualizaciones aplicadas sobre las neuronas en las capas ocultas O+1, O+2, …, m y la capa de salida influyen sobre la actualización de wkA−1 ,kA ,A . Figura 6.12. 201 Una serie de tiempo formada por K = 2000 muestras. La serie de tiempo originalmente presentada en la Figura 6.13. En color negro, las muestras utilizadas para formar el conjunto de entrenamiento. En color gris, las muestras que conformarán al conjunto de evaluación. 1 a Evolución del Coeficiente de Aprendizaje α (t ) = 1+ t lo largo de 500 presentaciones del conjunto de entrenamiento. En la última instancia se tiene α(500) ≈ 0.0019. Una Red de Perceptrones con dos capas ocultas. Se utilizará para modelar a la serie de tiempo presentada en la Figura 6.13. 221 229 229 237 238 xxxv Una Introducción al Cómputo Neuronal Artificial Figura 6.17. Figura 6.18. Figura 7.1. Figura 7.2. Figura 7.3. Figura 7.4. Figura 7.5. Figura 7.6. Figura 7.7. xxxvi Evolución del Error Global de la Red de Perceptrones de la Figura 6.16 durante la aplicación del Algoritmo de Retropropagación. Se efectuaron 500 presentaciones del conjunto de entrenamiento. En color gris, serie de tiempo producida por la Red de Perceptrones de la Figura 6.16. En color negro, la serie de tiempo original. La recta punteada separa las muestras que conformaron al conjunto de entrenamiento (n = 1, …, 1000) de las muestras que dieron lugar al conjunto de evaluación (n = 1001, …, 2000). El conjunto A es particionado en 20 regiones. Una Red de Kohonen implementa a la función f de manera que los vectores en el conjunto A son asociados a su correspondiente clase. Una Red Unidimensional de Kohonen para la clasificación de vectores en \ n . La vecindad de radio r para la k-ésima neurona en una Red de Kohonen 1D. La vecindad se extiende r posiciones hacia la izquierda y r posiciones hacia la derecha. Una Red de Kohonen Bidimensional para la clasificación de puntos en \ n . Las neuronas son posicionadas en renglones y columnas. El vector de entrada X es enviado a todas las neuronas. La vecindad bidimensional de radio r para la k-ésima neurona en una Red de Kohonen 2D. La vecindad se extiende r posiciones cubriendo una región cuadrangular. Todas las neuronas dentro de esta región son vecinas de la neurona k. Evolución del ajuste de pesos para una Red de Kohonen 1D en la primeras 10 presentaciones del conjunto de entrenamiento. Los triángulos denotan las posiciones de los Centros de Gravedad (vectores de pesos) asociados a las neuronas que forman la red (véase el texto para detalles). Algunas fases de la evolución del ajuste de pesos para una Red de Kohonen 1D. Los triángulos denotan las posiciones de los Centros de Gravedad (vectores de pesos) asociados a las neuronas que forman la red (véase el texto para detalles). 240 241 246 249 250 254 255 257 258 Una Introducción al Cómputo Neuronal Artificial Figura 7.8. Figura 7.9. Figura 7.10. Figura 7.11. Figura 7.12. Figura 7.13. Figura 7.14. Figura 7.15. Figura 7.16. Partición de la región [0, 1] × [0, 1] inducida por los centros de gravedad (vectores de pesos, triángulos en la figura) asociados a las 10 neuronas que conforman a una Red de Kohonen 1D. La región ha sido subdividida en 10 clases después de 100 presentaciones del conjunto de entrenamiento (véase el texto para detalles). Evolución del ajuste de pesos para una Red de Kohonen 1D en la primeras 10 presentaciones de un conjunto de entrenamiento inmerso en un cubo unitario [0, 1] × [0, 1] × [0, 1]. Los círculos mayores denotan las posiciones de los Centros de Gravedad (vectores de pesos) asociados a las neuronas que forman la red (véase el texto para detalles). Algunas fases de la evolución del ajuste de pesos para una Red de Kohonen 1D. Se mapea un conjunto de entrenamiento inmerso en un cubo unitario [0, 1] × [0, 1] × [0, 1]. Los círculos mayores denotan las posiciones de los Centros de Gravedad (vectores de pesos) asociados a las neuronas que forman la red (véase el texto para detalles). Un conjunto de vectores inmersos en el cubo [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6] ⊆ [0,1] × [0,1] × [0,1]. La diagonal principal asociada al cubo [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6]. Traslación de los vectores originalmente inmersos en el cubo [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6] de manera que Pmin ' es ahora el origen del espacio 3D. Aplicación de factores de escalamiento de manera que el conjunto de vectores originalmente inmerso en el cubo [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6] (Figura 7.11) se redistribuya a lo largo del cubo [0, 1] × [0, 1] × [0, 1]. Una imagen correspondiente a una sección cerebral capturada mediante Tomografía Computada. Mapa de Falso Color que muestra las distancias entre los vectores de pesos asociados a una Red de Kohonen 1D formada por 20 neuronas. 259 260 261 264 265 266 267 269 276 xxxvii Una Introducción al Cómputo Neuronal Artificial xxxviii Una Introducción al Cómputo Neuronal Artificial Índice de Tablas Tabla 2.1. Tabla 3.1. Tabla 3.2. Tabla 3.3. Tabla 3.4. Tabla 3.5. Tabla 4.1. Tabla 4.2. Tabla 4.3. Tabla 4.4. Tabla 4.5. Tabla 5.1. Tabla 5.2. Tabla 5.3. Tabla 5.4. Un conjunto de 11 observaciones. Una compuerta lógica a ser modelada por una neurona Adaline. Un conjunto de entrenamiento al que se le aplicará el método de Descenso Escalonado a fin de que una neurona Adaline lo modele. Aplicación del método de Descenso Escalonado para el ajuste de pesos de una neurona Adaline con el conjunto de entrenamiento de la Tabla 3.2. Aplicación del método de Descenso Escalonado para el ajuste de pesos de una neurona Adaline presentando por segunda vez el conjunto de entrenamiento de la Tabla 3.2 ª1.2432 º y usando como vector de pesos iniciales W1 = « ». ¬3.4485¼ Vectores de pesos obtenidos al final de la t-ésima presentación, t = 1, 2, …, 10, mediante Descenso Escalonado, para el conjunto de entrenamiento de la Tabla 3.2. Tabla de verdad de la compuerta lógica AND. Tabla de verdad de la compuerta lógica XOR. Conteo de funciones Booleanas de 1 a 6 entradas linealmente separables. Las primeras 15 muestras asociadas a una serie de tiempo de 7 parámetros autorregresivos (véase el texto para detalles). Desempeño del aprendizaje de un Perceptrón entrenado mediante Descenso Escalonado y el Algoritmo 4.1 (véase el texto para detalles). Conjunto de entrenamiento a presentar a una red Madaline. Pesos iniciales de las neuronas en la red Madaline presentada en la Figura 5.2. Pesos de las neuronas en la red Madaline presentada en la Figura 5.2 una vez que se ha aplicado un ajuste sobre la neurona 4 (Véase el texto para detalles). Estados y salidas para una función Booleana de 3 variables. Página 36 55 67 67 68 70 96 98 100 105 115 125 126 128 133 xxxix Una Introducción al Cómputo Neuronal Artificial Tabla 5.5. Tabla 5.6. Tabla 5.7. Tabla 5.8. Tabla 5.9. Tabla 5.10. Tabla 6.1. Tabla 7.1. Tabla 7.2. Tabla 7.3. Tabla 7.4. Tabla 7.5. Tabla 7.6. Tabla 7.7. xl Estados para los cuales la función Booleana de la Tabla 5.4 tiene salida 1. Tabla de verdad asociada la función Booleana (¬x1 ∧ ¬x2 ∧ x3) ∨ (¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3). Estados y salidas para la función Booleana XOR. Estados y salidas para la función Booleana x1 ∧ ¬x2 (el valor 0 ha sido sustituido por -1). Estados y salidas para la función Booleana ¬x1 ∧ x2 (el valor 0 ha sido sustituido por -1). Estados y salidas para la función Booleana OR (el valor 0 ha sido sustituido por -1). Pesos asociados a la Red de Perceptrones de la Figura 6.16 una vez que se aplicó el Algoritmo de Retropropagación con 500 presentaciones del conjunto de entrenamiento. Distribución de los 100 elementos del conjunto de entrenamiento en las 10 clases obtenidas mediante una Red de Kohonen 1D. Se muestran también las coordenadas finales de los centros de gravedad de cada clase una vez efectuadas 100 presentaciones del conjunto de entrenamiento (véase el texto para detalles). Distribución de los 100 elementos del conjunto de entrenamiento, inmerso en un cubo unitario [0, 1] × [0, 1] × [0, 1], en las 10 clases obtenidas mediante una Red de Kohonen 1D. Se muestran también las coordenadas finales de los centros de gravedad de cada clase una vez efectuadas 100 presentaciones del conjunto de entrenamiento (véase el texto para detalles). Clasificación de las 340 imágenes en el conjunto de entrenamiento de acuerdo a una Red de Kohonen 1D con 20 neuronas (véase el texto para detalles). Los 16 miembros de la clase 17 asociada a un conjunto de entrenamiento formado por 340 imágenes y clasificado mediante una Red de Kohonen 1D. Los 25 miembros de la clase 12 asociada a un conjunto de entrenamiento formado por 340 imágenes y clasificado mediante una Red de Kohonen 1D. Visualización de las imágenes asociadas a los vectores de pesos de una Red de Kohonen 1D formada por 20 neuronas (Véase el texto para detalles). Distancias que tienen los vectores de pesos asociados a las clases 12 y 17 con todos los demás vectores de pesos que conforman a una Red de Kohonen 1D. 133 135 135 137 139 140 239 259 262 271 271 272 275 277 Una Introducción al Cómputo Neuronal Artificial 1. Introducción Una Introducción al Cómputo Neuronal Artificial 2 Capítulo 1. Introducción Las Redes Neuronales Artificiales son Redes Computacionales cuya finalidad es la de simular, en su totalidad, las redes de células nerviosas (neuronas) del sistema nervioso central (biológico) de humanos o mamíferos. Usamos el término totalidad para referirnos al hecho de que la simulación efectivamente es total: se detalla cada neurona a utilizar, la forma en que procesa la información, y también se especifican las conexiones entre las neuronas. Estas simulaciones se derivan del conocimiento neurofisiológico de las neuronas biológicas y las redes formadas por éstas. Se dice que el proceso de solución de problemas mediante Redes Neuronales, ya sean Biológicas o Artificiales, es llamado Cómputo Neuronal. Esta distinción tiene la intención también de diferenciarlo del Cómputo Digital “Convencional”, es decir, aquel cómputo que se sustenta en nuestras computadoras digitales actuales. También diremos que el Cómputo Neuronal Artificial es el proceso de solución de problemas pero utilizando específicamente Redes Neuronales Artificiales. El Cómputo Neuronal Artificial aspira a reemplazar, mejorar o acelerar el cómputo que se efectúa en el cerebro humano. Sabemos que la velocidad de procesamiento del cerebro es lenta comparada con la velocidad de procesamiento presente en las computadoras actuales. Operaciones simples pero en grandes volúmenes, como las aritméticas por ejemplo, en los inicios del siglo XX le requerían interminables horas de trabajo a un ser humano. Además, habría que tener en cuenta las posibilidades de cometer errores, que por lo regular eran considerables. Con la llegada de las primeras computadoras electrónicas de propósito general, como la ENIAC en 1946, cuyo poder de procesamiento es hoy comparable al de una calculadora de bolsillo, esas mismas operaciones aritméticas podían ser efectuadas con unos pocos segundos de procesamiento y con nulas probabilidades de error. Ahora bien, imaginemos lo que se puede lograr al proporcionar la misma velocidad de cómputo que nos da la electrónica al incorporarla a nivel neuronal y combinarla con el poder de solución de problemas con que cuenta nuestro cerebro. Tomemos en cuenta que hay una gran cantidad de problemas en los cuales el cerebro humano supera, por su capacidad para formar y proporcionar soluciones, a las computadoras digitales. La velocidad que nos da la electrónica junto con las capacidades del Cómputo Neuronal deja abiertas grandes posibilidades de contar con soluciones correctas a problemas realmente difíciles en tiempos sumamente cortos. Otro punto interesante es que el Cómputo Neuronal no considera explícitamente la organización de sus elementos de cómputo, las neuronas, y las redes que éstas forman. El cerebro se estructura en una red de neuronas realmente enorme. Se tiene un conteo aproximado de 1011 = 100,000,000,000 células nerviosas en el caso del cerebro humano. Esta red neuronal se encuentra trabajando activamente incluso en los periodos de sueño. Es la misma red que utilizamos para la solución de problemas. Sin embargo, es claro que ningún ser humano está consciente de que partes de esa red fueron utilizadas para dar solución a una Ecuación Diferencial, por ejemplo. Es decir, para solucionar problemas, no requerimos, a priori, determinar a que subred neuronal hay que dirigir nuestro razonamiento o bien cual de todas las subredes disponibles se adapta mejor para solucionarlo. Tampoco estamos conscientes de los mensajes transmitidos por cada neurona involucrada en la generación de la solución. Contamos con una arquitectura de Red Neuronal de la cual no necesitamos conocer su organización y funcionamiento internos. En el caso de las Redes 3 Una Introducción al Cómputo Neuronal Artificial Neuronales Artificiales veremos que si es necesario especificar una arquitectura y la manera en que las neuronas se conectan. También es necesario especificar puntos en los cuales proporcionaremos una entrada a la red y puntos en donde debemos esperar la salida que ésta dará para nuestro problema. Pero aparte de ello, veremos que los mecanismos de aprendizaje a utilizar no son dependientes en ninguna manera de la estructura de red. También veremos que si el aprendizaje fue exitoso, entonces realmente sólo nos preocuparemos de dar la entrada y obtener la salida correspondiente sin prestar mayor consideración a la organización interna, tal y como sucede con el procesamiento cerebral. Una Red Neuronal Artificial es computacionalmente y algorítmicamente muy simple. Si bien sabemos que se tienen contabilizadas aproximadamente 1011 neuronas en el cerebro humano, en la práctica, la implementación de una Red Neuronal Artificial sólo requiere, a lo más, unos cientos de neuronas. Pero, por otro lado, se verá que existen aplicaciones en las cuales una decena de neuronas basta para dar solución a un problema. Ello implica que los requerimientos espaciales (memoria primaria y secundaria) son en realidad pequeños. Adicionalmente, una Red Neuronal, y particularmente cada una de las neuronas que la componen, usan únicamente operaciones computacionales elementales tales como sumas, multiplicaciones y operadores lógicos. Esto tiene como consecuencia que la implementación, ya sea en software o en hardware, es en realidad sencilla y además cuenta con tiempos de ejecución, o respuesta, reducidos que de hecho dependen directamente del tamaño de la entrada que recibirá la red y el número de neuronas que la forman. En el sistema nervioso central miles de neuronas mueren al año. La perdida de neuronas inicia a partir del nacimiento y nunca se detiene. También hay que tomar en cuenta que las neuronas tienen entre una de sus características la de no reproducirse. Por lo tanto, la pérdida neuronal puede verse como un daño irreparable. Pero en este punto surge un aspecto sumamente interesante y que forma parte del gran poder del Cómputo Neuronal: las funciones del cerebro no se ven afectadas por daños menores (al menos bajo condiciones normales y durante los primeros dos tercios de vida del ser humano). Esta insensibilidad a daños menores se debe a tres propiedades trascendentales de las Redes Neuronales Biológicas: su Alto Paralelismo, su Adaptabilidad y la capacidad de Auto-Organización. El Alto Paralelismo se refiere al hecho de que una vez que se recibe una entrada, ésta es manipulada al mismo tiempo por varias neuronas. Cada neurona proporcionará su correspondiente aportación a la solución del problema la cual es enviada a su vez como entrada a otras neuronas que la procesarán también en paralelo. El punto trascendental es que la pérdida de neuronas no implica necesariamente que la red quede desconectada o bien que reduzca su eficiencia. La ventaja del paralelismo es que siempre existirán rutas disponibles para procesar la entrada y producir la salida correspondiente. Sólo para hacer un contraste: una computadora digital “convencional” es una máquina secuencial, ello implica que si un transistor falla entonces la máquina por completo se hace inservible. 4 Capítulo 1. Introducción El alto paralelismo presente en las Redes Neuronales permite siempre encontrar rutas alternas para procesar una entrada. Sin embargo, es probable que el daño neuronal reduzca la eficiencia de la red. Es cuando las propiedades de la Adaptabilidad y Auto-Organización entran en acción. Puede que se tengan neuronas especializadas en alguna tarea particular. Sin embargo, la pérdida neuronal puede obligar a éstas a especializarse en otras nuevas tareas. Ello implica que deben adaptarse a un nuevo ambiente e inclusive estar preparadas para recibir y procesar nuevos tipos de entradas y proporcionar las salidas correspondientes a esas nuevas tareas. La auto-organización toma lugar cuando se crean u omiten conexiones entre neuronas a fin de reforzar el proceso de adaptación. Son las mismas neuronas las que controlan las modificaciones a la estructura de la Red Neuronal a la que están asociadas. Los procesos de auto-organización y adaptación toman lugar a lo largo de toda la vida, dado que ya mencionamos que a lo largo de ésta se pierden neuronas, y además, se encuentra sumamente ligado a los procesos de aprendizaje. Para su estudio y análisis, el cerebro humano, y en particular la corteza cerebral, se dividen en regiones. Cada una de estas regiones es de hecho una Red Neuronal con una tarea específica. Una de estas zonas es la llamada Área de Broca la cual está asociada con el proceso de la comunicación oral. Mencionamos antes que bajo condiciones normales las pérdidas neuronales pueden ser controladas sin percibir los daños o efectos provocados por la ausencia de tales neuronas. Sin embargo, la adaptabilidad y auto-organización neuronales también actúan bajo situaciones más dramáticas. Un accidente cerebrovascular puede ser causado al incidir sobre una región del tejido cerebral un repentino bloqueo de la irrigación sanguínea o bien, por el contrario, una hemorragia. Como consecuencia, la región afectada queda por completo dañada. Si esta condición se presentara en el Área de Broca, el paciente entonces perdería la capacidad del habla. En la Literatura Médica se tienen identificados casos de pacientes con esta situación y que han regenerado su capacidad de comunicación gracias a los procesos de auto-organización y adaptabilidad. En estos casos se requieren intervalos de tiempo más largos para la recuperación, del orden de meses, debido a que son millones las neuronas involucradas. Las regiones en la corteza cerebral que son vecinas del Área de Broca deben adaptarse a la nueva función y al mismo tiempo continuar dando seguimiento a las tareas que ya tienen asignadas. En consecuencia, se tiene que una Red Neuronal, gracias a los procesos de adaptación y auto-organización, cuenta con un amplio potencial para abordar una gran cantidad de problemas. Aunque la base algorítmica sobre la que se sustentan Redes Neuronales Artificiales es muy simple, veremos que éstas efectivamente cuentan con las características del paralelismo, adaptabilidad y auto-organización. Dado un problema a ser resuelto, plantearemos una topología de red neuronal: se establecen las neuronas a utilizar, su posición dentro de la red y sus conexiones. Los algoritmos de aprendizaje ajustarán los elementos de cómputo de cada neurona a fin de maximizar su eficiencia de manera que la topología elegida se adapte tanto como sea posible para proporcionar una solución al problema y procesar adecuadamente las entradas y producir las salidas correctas. Inclusive, si la red es sometida en el futuro a cambios respecto a la naturaleza del problema, será posible esperar que mediante reajustes mínimos de sus elementos, ésta tenga la capacidad de responder exitosamente a tales cambios. 5 Una Introducción al Cómputo Neuronal Artificial Todos los puntos anteriores nos conducen a pensar que una Red Neuronal puede verse de hecho como una arquitectura novedosa a nivel computacional y algorítmico. Ello quiere decir que incluso podríamos pensar en una arquitectura computacional adicional a la arquitectura de Cómputo Digital “Convencional”. El cómputo “Convencional” debe entenderse, de manera concreta y formal, como aquel basado en las Máquinas de Turing y la electrónica. Las Máquinas de Turing proporcionan la Teoría y Fundamentos detrás de la Computación. Una Máquina de Turing expresa a nivel elemental la lógica detrás de un algoritmo. Una Máquina de Turing Universal T es aquella que es capaz de recibir como entrada una Máquina de Turing M y las entradas para M de manera que T simula la ejecución de M. Es decir, una Máquina de Turing Universal puede verse como el modelo matemático de una computadora de escritorio y de manera más específica, de su Unidad Central de Procesamiento (CPU). La electrónica nos proporciona los elementos para la materialización y aceleración de nuestras Máquinas de Turing. Ya hicimos mención de que el Cómputo Neuronal podría verse como un modelo adicional al Cómputo “Convencional”. Sin embargo, en realidad las Redes Neuronales Artificiales pueden simularse sin problema alguno en las computadoras convencionales. Ello implica que las herramientas algorítmicas que utilizamos comúnmente nos serán útiles para resolver problemas bajo el enfoque neuronal. El hardware y software que requiere el Cómputo Neuronal Artificial es el mismo que utilizamos hoy en día. Además, hemos de recalcar que una Red Neuronal usa únicamente operaciones computacionales elementales, como sumas, multiplicaciones y lógica elemental, para dar solución a una amplia gama de problemas. En este punto es posible plantearse una observación: Si el Cómputo Neuronal Artificial no requiere hardware y software específicos y además se basa en operaciones básicas, las mismas presentes en los CPUs, entonces, ¿qué ventajas puede tener sobre el Cómputo “Convencional”? Parte de la respuesta a ello viene de las características del Alto Paralelismo, Adaptabilidad y la capacidad de Auto-Organización que forman en sí una porción de la base de los procesos de razonamiento y aprendizaje en el cerebro. La otra parte de la respuesta surge al considerar las propiedades anteriores y su impacto en la solución de algunos de los problemas a los cuales el Cómputo Neuronal Artificial ha dado soluciones exitosas: • Problemas Mal Definidos: Todo problema a ser resuelto computacionalmente debe tener bien definidos sus conjuntos de entrada y de salida. Es decir, se debe especificar claramente las propiedades de las entradas y las propiedades de las salidas y cómo es que éstas pueden ser validadas como correctas o incorrectas. Sin embargo, no todos los problemas presentan estas propiedades. Considérese por ejemplo el reconocimiento de voz. Supongamos que se desean clasificar oraciones en general. Si bien los idiomas cuentan con reglas para definir la estructura de una oración, sujeto-verbo-predicado por ejemplo, la realidad es que muchas de las oraciones en ocasiones no se sujetan a una y sólo una estructura ya definida. Por lo regular una oración puede ajustarse a varias reglas o estructuras al mismo tiempo. Ello se debe a que si se busca clasificar oraciones es necesario tomar en cuenta su semántica o intención. Una misma oración puede ser entendida como una declaración, interrogación, exclamación, etc. Es claro que los conjuntos de entrada y salida, en este caso, oraciones y su clasificación esperada, no 6 Capítulo 1. Introducción • • • están bien delimitados y estructurados. Pero por otro lado, como seres humanos somos capaces de comunicarnos de manera oral y también somos capaces de entender y actuar en función de los mensajes recibidos y su intención. En este sentido, existen aplicaciones exitosas de Redes Neuronales Artificiales, bajo dominios restringidos, en el Área de Reconocimiento de Voz. Problemas No Lineales: Analicemos el caso particular de la Optimización Matemática. Aquí se tienen conjuntos de entradas y salidas bien especificadas. Por lo regular, se cuenta con una función objetivo y un conjunto de restricciones. La idea es Maximizar o Minimizar la función al encontrar los valores de sus variables que la optimicen y que además satisfagan las restricciones dadas. La instancia en la cual la función objetivo y las restricciones son todas funciones lineales está sumamente estudiada y se cuenta con soluciones algorítmicas “convencionales” eficientes. Sin embargo, la gran mayoría de los problemas de optimización no son de naturaleza lineal. Una búsqueda exhaustiva es no factible ya que el conjunto de los posibles valores de que pueden tomar las variables es por lo regular infinito. Actualmente la Optimización No Lineal es un área de Investigación de desarrollo intenso. Hay una gran cantidad de Investigadores involucrados en la búsqueda de metodologías y soluciones para este tipo de problemas. El campo de las Redes Neuronales Artificiales ha logrado aportar guías respecto a la manera en la que problemas particulares podrían ser abordados al proporcionar información geométrica y/o topológica respecto al espacio de búsqueda de posibles soluciones, o bien al proporcionar soluciones bastante cercanas a las soluciones óptimas. Problemas de Predicción: Consideremos la situación en la cual contamos con una serie de eventos dependientes del tiempo y para los cuales se desea saber como se comportará esa serie pero en el futuro. Este tipo de estudios han encontrado nichos de trascendencia vital para los seres humanos tales como la predicción de sismos, tornados, actividad volcánica, el clima, e incluso en cuestiones de salud como análisis de electrocardiogramas para predicción de infartos o bien en el diagnóstico de algunos tipos de cáncer. El “Santo Grial” de los Economistas es un modelo que les permita predecir el comportamiento futuro de las Bolsas de Valores. Es bien sabido que en este tipo de situaciones la sola medición de los factores involucrados directos por lo regular no es suficiente. Es decir, por ejemplo, el comportamiento de la Bolsa de Valores no sólo se rige por el intercambio de divisas o por el mercado accionario, también se puede ver afectado por factores externos como las declaraciones de un mandatario, por movimientos sociales, o hasta actividades como el terrorismo. Estos factores por lo regular son muy difíciles de modelar y predecir, pero influyen y están presentes de manera intrínseca en las mediciones. Las Redes Neuronales Artificiales han encontrado un nicho de aplicación exitoso al efectuar predicciones sobre series de tiempo o bien al identificar predictores dentro de éstas: subsecuencias dentro de una serie de tiempo que sirven como patrones para identificar eventos futuros como las devaluaciones de las monedas, por ejemplo. Problemas computacionalmente complejos: Dentro de la Teoría de la Computación existe la llamada Completez NP. Un problema caracterizado como NP-Completo se entiende, informalmente, como aquel para el cual no se ha encontrado una solución 7 Una Introducción al Cómputo Neuronal Artificial algorítmica eficiente, es decir, no se ha determinado un algoritmo ejecutado sobre una computadora convencional que lo resuelva en un tiempo razonable. Es importante mencionar también que para este tipo de problemas tampoco se ha demostrado que no puedan ser resueltos de manera eficiente. La clase de problemas NP-Completos tiene en su haber a algunos bien conocidos como el Problema del Agente Viajero (PAV), el Problema de la Satisfactibilidad de una Proposición en Forma Normal Conjuntiva (SAT-CNF), el Problema del Cliqué de Orden k (k-Cliqué), el Problema del Circuito Hamiltoniano, etc. De hecho, hasta el día de hoy se han caracterizado a millares de problemas como NP-Completos, y la cuenta sigue en aumento al publicarse en la literatura, año con año, nuevos problemas identificados. El consenso mayoritario entre los expertos de la Teoría de la Computación, y basado únicamente en las experiencias e información con que se cuenta, apunta a que para los problemas NP-Completos no existirán soluciones algorítmicas eficientes. Ello quiere decir que existiría una noción clara de lo que es un problema computacional “fácil” y un problema computacional “difícil”. Lo importante es que entonces se estaría reconocimiento la ausencia de soluciones eficientes para éstos últimos. Otra cuestión relevante es que existen una gran cantidad de problemas prácticos que a final de cuentas se reducen a un problema NP-Completo. Por lo tanto, tampoco podemos ignorarlos debido a que efectivamente, bajo tales instancias, se requiere solucionarlos. Nuevamente, se tienen arquitecturas de Redes Neuronales Artificiales que han proporcionado soluciones aproximadas a instancias de entrada para algunos problemas NP-Completos. Lo mejor es que de hecho estas arquitecturas proporcionan en algunos casos soluciones con rangos de error muy bajos, usando pocos elementos de Cómputo Neuronal y con un tiempo de ejecución sumamente corto. 1.1 Redes Neuronales Biológicas Como bien sabemos una Red Neuronal Biológica se forma por células nerviosas, las neuronas, las cuales se encuentran interconectadas. En el cuerpo de una neurona, el cuál contiene su Núcleo, es donde la mayor parte de la Computación Neuronal se efectúa. Véase la Figura 1.1. Las Dentritas son ramificaciones a través de las cuales una neurona recibe las señales de entrada. Por otro lado, el Axón es una ramificación que puede llegar a tener cientos o hasta miles de veces la longitud del diámetro del núcleo y su objetivo es propagar una señal. Por lo regular la propagación es en un único sentido pero de hecho es posible encontrar axones bidireccionales. El axón en su parte final se ramifica. A estas ramificaciones se les llama en conjunto Región Pre-Sináptica. Por último, cada ramificación termina en una Sinapsis. Es en las sinapsis donde precisamente una neurona transmite su señal al propagarla con todas aquellas neuronas con las cuales tiene conexiones. Nótese que la descripción que acabamos de presentar es muy similar a la clasificación comúnmente usada para presentar los componentes de una computadora digital “convencional”: tenemos entonces a las dentritas como los dispositivos de entrada, el núcleo de la neurona como su CPU y finalmente las sinapsis como los dispositivos de salida. De allí la razón de considerar a la neurona como la unidad básica del Cómputo Neuronal. 8 Capítulo 1. Introducción Dentritas (Entradas) Axón Región Pre-sináptica (Salidas) Núcleo Figura 1.1. Componentes principales de una Neurona Biológica. Las neuronas pueden ser clasificadas en 3 tipos de acuerdo al rol que cumplen dentro de una Red Neuronal: • Neuronas aferentes: o Transmiten mensajes al interior del organismo los cuales proceden de los receptores sensoriales (vista, tacto, olfato, etcétera). • Neuronas eferentes: o Llevan mensajes a las estructuras ejecutoras haciendo que los músculos se contraigan o relajen y también al ordenar a las glándulas la secreción de hormonas. • Interneuronas: o Sirven como puntos de conexión entre otras neuronas dentro del sistema nervioso central y constituyen aproximadamente el 97% de todas las células nerviosas. Veremos en secciones posteriores como que es que esta clasificación es sumamente útil, ya que en una Red Neuronal Artificial efectivamente identificaremos a las neuronas aferentes (la entrada de la red), las interneuronas y a las neuronas eferentes (la salida de la red). De acuerdo a su rol es como los algoritmos de aprendizaje aplican cambios y ajustes. Parte del poder del Cómputo Neuronal radica en la capacidad de las neuronas para transportar y transmitir mensajes. A esta propiedad se le conoce como Excitabilidad. Analicemos de manera superficial como que es que una neurona transmite un mensaje. Como cualquier célula, una neurona es delimitada por su membrana. La membrana de la neurona se encuentra Polarizada. Es decir, en el exterior se presenta una baja concentración de iones de potasio mientras que en su interior esta concentración es alta. Por otro lado, se tiene una alta concentración de iones de sodio en el exterior y una baja concentración en el interior. Estas concentraciones no se equilibran gracias a que la membrana tiene diferencias de permeabilidad lo que impide el paso de iones del interior al exterior y viceversa. 9 Una Introducción al Cómputo Neuronal Artificial Sin embargo, es posible que la permeabilidad de la membrana de una neurona se altere momentáneamente permitiendo que las concentraciones de los iones se equilibren. Este fenómeno provoca entonces un súbito incremento de actividad eléctrica lo cual da lugar a un Impulso Nervioso que se propaga a lo largo de la membrana. Una vez que la neurona se ha Despolarizado, es decir, se ha liberado del impulso nervioso, inicia un proceso rápido que la coloca en un estado de Reposo. En esta fase se reacomodan y redistribuyen los iones de sodio y potasio en el interior/exterior de la membrana, así como las moléculas que la forman para retornar a su estado de permeabilidad original. Durante esta fase a la neurona se le llama Refractaria ya que no es capaz de transmitir impulsos nerviosos. Los impulsos nerviosos, dentro de una neurona, se mueven de las dentritas al núcleo, del núcleo al axón y finalmente del axón a la región pre-sináptica. Cuando el impulso llega a los extremos finales de las ramificaciones en la región pre-sináptica, es decir, a las sinapsis, se encuentra con una discontinuidad. A este espacio, junto con una sinapsis de la neurona que porta el impulso y la dentrita de una neurona a la cual se le transmitirá el impulso, se le denomina Espacio Sináptico o Unión Sináptica. Véase la Figura 1.2. Dentrita (Entrada) Uni ón Sin áptica Neurotransmisor Sinapsis (Salida) Figura 1.2. Componentes de la Unión Sináptica entre dos neuronas. Cuando el impulso nervioso alcanza a una sinapsis provoca la liberación de una sustancia química denominada Neurotransmisor. Los neurotransmisores están alojados en vesículas adheridas a las terminaciones del axón. Al día de hoy se tienen identificados decenas de tipos de neurotransmisores entre los que se encuentran, por ejemplo, la adrenalina o la acetilcolina. La secreción ocupa el espacio sináptico y provoca los cambios de permeabilidad en la membrana de la neurona receptora. De esta manera el impulso nervioso pasa de una neurona a la siguiente y de hecho continúa su camino a través del nervio correspondiente. Finalmente, el neurotransmisor es destruido por la acción de enzimas con lo que se deja nuevamente libre el espacio sináptico. Dado que una neurona puede tener miles de sinapsis, entonces ésta se puede conectar, y por tanto transmitir su impulso, a otros miles de neuronas. Véase la Figura 1.3. Es más, una neurona puede conectarse consigo misma. En otras palabras, al procesar la 10 Capítulo 1. Introducción señal que ella misma generó se tiene un proceso que en ocasiones es llamado de Retroalimentación. No todas las conexiones entre neuronas tienen los mismos valores o pesos. Y de hecho esos valores o pesos determinan si la membrana de la neurona que recibe el impulso lo transmitirá o no. Ello se debe a la existencia de Sinapsis Excitadoras y Sinapsis Inhibidoras. Estas diferencias de pesos o prioridades son moduladas precisamente por los neurotransmisores involucrados, los cuales en ocasiones son clasificados en Neurotransmisores Excitadores y Neurotransmisores Inhibidores. Un neurotransmisor excitador incrementa las probabilidades de que la neurona receptora continúe con la transmisión del mensaje, mientras que un neurotransmisor inhibidor puede encargarse de bloquear su transmisión. Región Pre-sináptica Neurona i+1 Neurona i+1 Dentritas Neurona i+1 Dentritas Neurona i Axón i+1 Región Pre-sináptica Neurona i+3 Neurona i Dentritas Neurona i+2 Axón i Axón i+3 Región Pre-sináptica Neurona i Región Pre-sináptica Neurona i+2 Neurona i +3 Neurona i+2 Axón i+2 Dentritas Neurona i+3 Figura 1.3. Porción de una Red Neuronal Biológica. A partir de este punto nos será más conveniente representar a las neuronas (biológicas o artificiales) en términos esquemáticos. Véase la Figura 1.4. A toda neurona se le visualizará como una entidad que cuenta con n entradas (las dentritas). En cada entrada se recibirá un valor proveniente de otra neurona, o bien, tales valores pueden formar también una entrada proveniente del mundo exterior. En el primer caso estaríamos modelando una interneurona, mientras que en el segundo nuestra neurona sería del tipo 11 Una Introducción al Cómputo Neuronal Artificial aferente. Ello implica que el conjunto de las entradas de una neurona puede ser representado como un vector con n componentes. Cada entrada i, i = 1, 2, …, n, tendrá asociada un peso wi. Este peso tendrá la función de neurotransmisor. El peso wi se asociará al valor recibido en la entrada i. La combinación de ambos puede caracterizar a la conexión como excitadora o como inhibidora. Todo par (entrada i, peso wi) es llevado al núcleo en donde se efectuará el Cómputo Neural. El resultado obtenido es un único valor el cual es distribuido en m salidas (las sinapsis). Estas salidas pueden conectarse con el mundo exterior, en donde por instancia tenemos una neurona de tipo eferente. Si, por otro lado, cada salida se conecta con otra neurona entonces tenemos una interneurona. Nótese que de hecho podemos tener las siguientes caracterizaciones de neuronas en función de su relación con otras neuronas y con el mundo exterior: • Aferente/Eferente: entradas provenientes del exterior, salidas enviadas al exterior. • Aferente/Interneurona: entradas provenientes del exterior, salidas enviadas a otras neuronas. • Interneurona/Eferente: entradas provenientes de otras neuronas, salidas enviadas al exterior. • Interneurona: entradas provenientes de otras neuronas, salidas enviadas a otras neuronas. W1 W2 Salida 1 Núcleo Salida 2 Wn Salida m Figura 1.4. Representación esquemática de una neurona (biológica o artificial). Con base en los puntos anteriores, también contamos con los elementos para una representación esquemática de Red Neuronal (biológica o artificial). En la Figura 1.5 se presenta un ejemplo de fragmento de esquema de Red Neuronal. Se puede apreciar claramente la presencia de 3 neuronas y la manera en que se encuentran conectadas sus respectivas entradas y salidas. A cada neurona le es asignado un índice. Por lo tanto, para diferenciar los pesos a estos se les asignan dos índices de manera que wi,j denota al j-ésimo peso de la i-ésima neurona. 12 Capítulo 1. Introducción W i+2,1 W i+2,2 Neurona i+2 W i,1 W i+2,n W i,2 Neurona i W i,n W i+1,1 W i+1,2 Neurona i+1 W i+1,n Figura 1.5. Ejemplo de Representación Esquemática de un fragmento de Red Neuronal. 1.2 Principios del Diseño de Redes Neuronales Artificiales A partir de este punto nos adentraremos en los aspectos teóricos detrás de las Redes Neuronales Artificiales. También seremos más concretos y formales al especificar los principios detrás de su funcionamiento e interacción con su “mundo exterior” y sus procesos de aprendizaje. Finalmente, haremos mención de los modelos básicos de neuronas y también de las estructuras básicas de Redes Neuronales. Los principios básicos de las Redes Neuronales Artificiales fueron formulados por Warren McCulloch y Walter Pitts en 1943 al proponer la idea de analizar el Cómputo Neuronal (Biológico) por medio de operaciones elementales (sumas, multiplicaciones y lógica básica). Establecieron cinco principios como punto de partida: • La actividad de una neurona es “Todo o Nada”. Se refiere al hecho de que las salidas proporcionadas por la neurona son binarias: 0 o 1. La neurona proporcionará un 1 (el “todo”) si las entradas que recibe, y al ser “sumadas” de alguna manera, proporcionan un valor lo “suficientemente alto” precisamente para proporcionar la salida 1. De lo contrario, se proporciona la salida 0 (la “nada”). Es claro que entonces contamos con Neurona Binaria. • Un cierto número fijo de sinapsis, mayor a 1, deben ser estimuladas dentro de un intervalo de tiempo para que una neurona sea excitada. Entenderemos a la excitación de la neurona como el simple hecho de que inicia el procesamiento de su entrada. Es decir, sólo se ha planteado un criterio para “encender” una neurona. 13 Una Introducción al Cómputo Neuronal Artificial • El único retraso no despreciable dentro de la Red Neuronal es el retraso sináptico. En otras palabras, para efectuar Cómputo Neuronal se deben tomar en cuenta los tiempos de espera para que las sinapsis proporcionen su salida. • La actividad de cualquier sinapsis inhibidora impide por completo la excitación de la neurona en ese momento. De hecho, la activación de una sola sinapsis inhibidora “apagará” a la neurona durante un tiempo, independientemente de las sinapsis excitadoras que se hayan activado en ese mismo momento. • La estructura de las conexiones entre las neuronas de la red nunca cambia. Estos cinco principios aún se aplican (no necesariamente todos al mismo tiempo) en el diseño de Redes Neuronales Artificiales. Además cimentaron las bases a partir de las cuales, de acuerdo a McCulloch y Pitts, las neuronas y las Redes Neuronales deberían ser modeladas y estudiadas. Por otro lado, en 1949, Donald Hebb estableció un principio que también es utilizado en la actualidad: la Ley de Aprendizaje Hebbiano (Hebbian Rule, Hebbian Learning Law). Esta ley se cita de la siguiente manera: “Cuando un axón de una célula P está lo suficientemente cerca de una célula Q y cuando P de manera repetida y persistente toma parte en la excitación de Q, entonces algún proceso de crecimiento o cambio metabólico ocurre en una o ambas células tal que la eficiencia de P es incrementada.” ¿Qué significa que la eficiencia de una neurona sea incrementada? Veamos primero un ejemplo clásico que se utiliza para visualizar el proceso de Aprendizaje Hebbiano. a) Supóngase que una célula S causa salivación y es excitada por una célula F la cual, a su vez, es excitada por el avistamiento de comida. b) Supóngase además que una célula L, la cual es excitada al escuchar una campana, también se conecta con S, pero L no es capaz de encender o excitar, por sí sola, a S: necesita a F. c) Ahora, cada vez que S es excitada por F, también recibe estimulación proveniente de L. Sin embargo, la conexión entre S y L es débil o no cuenta con prioridad suficiente de manera que S no detecta o ignora el impulso proveniente de L. Como ya comentamos, para excitar a S, L necesita excitar a F y ésta a su vez excita a S. d) Eventualmente, por repetición sucesiva y por cambios metabólicos o de algún otro tipo, L será capaz de excitar a S sin que F intervenga. Es decir, tales cambios incrementan el peso (o prioridad) de la entrada de L hacia S. e) L ha aprendido a estimular a S y a su vez S ha aprendido a detectar y responder a las señales de L (sin intervención alguna de F). De acuerdo al ejemplo anterior, es claro que el la Ley de Aprendizaje Hebbiano implica la modificación de las sinapsis para controlar la memoria a largo plazo a través de la generación de nuevas conexiones entre neuronas o a través del refuerzo de las conexiones existentes entre éstas. Este tipo de modificaciones pueden incluso requerir el que las neuronas se desplacen. 14 Capítulo 1. Introducción Desde el punto de vista de las Redes Neuronales Artificiales se plantea la existencia de un proceso de modificación de pesos en las entradas de cualquier neurona a fin de mejorar su eficiencia. Esta variación de pesos es un evento que ocurre en todo modelo de Red Neuronal Artificial. En la siguiente Sección veremos los principios de los que parte el proceso de aprendizaje neuronal. 1.3 Principios del Aprendizaje o Entrenamiento de una Red Neuronal Artificial Considérese un conjunto formado por N vectores: {X1, X2, …, XN} Donde: ª xi ,1 º « # » « » X i = « xi ,k » « » « # » « xi , P » ¬ ¼ i = 1, 2, …, N xi,k ∈ \ k = 1, 2, …, P A tal conjunto se le llamará el Conjunto de Vectores de Entrada para una Red Neuronal. Ahora considérese un segundo conjunto de N vectores: {D1, D2, …, DN} Donde: ª di ,1 º « # » « » « d Di = i ,k » « » « # » « di ,m » ¬ ¼ i = 1, 2, …, N di,k ∈ \ k = 1, 2, …, m 15 Una Introducción al Cómputo Neuronal Artificial Al conjunto {D1, D2, …, DN} se le llamará el Conjunto de Vectores de Salida Esperada para una Red Neuronal. Se asumirá que dado un vector de entrada Xi, la salida que se espera proporcione la Red Neuronal será el vector Di. El conjunto de vectores de entrada y el conjunto de vectores de salida esperada forman el Conjunto de Entrenamiento de la Red Neuronal. Nótese que de hecho la Red Neuronal efectuará un mapeo de vectores de entrada en \ P a vectores de salida en \ m . El conjunto de entrenamiento se utiliza para ajustar a las neuronas que forman una Red Neuronal. El procedimiento de ajuste trata de modificar los pesos de las neuronas de manera que para cualquier vector de entrada Xi el vector de salida Si proporcionado por la red sea igual a Di. De hecho, en la práctica sólo se espera que Si sea tan cercano como sea posible a Di. Ello implica que las salidas proporcionadas por la red tendrán un error respecto a las esperadas. Por lo tanto, el procedimiento de ajuste en estos casos también tratará de minimizar los errores. El procedimiento de ajuste de las neuronas de una red es llamado Procedimiento de Aprendizaje o Procedimiento de Entrenamiento. Aquellas arquitecturas de Redes Neuronales que requieren un conjunto de entrenamiento formado por los vectores de entrada y por los vectores de salida esperada son agrupadas en una clase denominada Redes Neuronales Supervisadas. El término “Supervisado” surge del hecho de que los procedimientos de entrenamiento cuentan con un parámetro para supervisar el desempeño actual de la red. Tal parámetro es usado para determinar las mejores modificaciones a aplicar con la finalidad de mejorar el desempeño. En las Redes Supervisadas el desempeño por lo regular se mide numéricamente con la magnitud del Error de Aprendizaje, es decir, mediante la diferencia entre Di y Si. En función de la magnitud obtenida se deciden los cambios a aplicar. En ocasiones, sólo se cuenta con el conjunto de vectores de entrada. Estas situaciones por lo regular se presentan en problemas relacionados con la agrupación de tales vectores en clases de equivalencia. Un ejemplo clásico de un problema con este enfoque es el del Reconocimiento Automático de Caracteres Manuscritos. Tenemos conocimiento previo respecto a cuantas clases necesitamos para clasificar a los caracteres: deseamos que aquellos caracteres que corresponden a la letra x, por ejemplo, estén agrupados en la misma clase. Las arquitecturas de Redes Neuronales que parten de la hipótesis de que el conjunto de entrenamiento únicamente se forma por los vectores de entrada, forman parte de las denominadas Redes Neuronales No Supervisadas. Es claro que los procedimientos de entrenamiento de las Redes No Supervisadas no pueden medir numéricamente la magnitud del error de aprendizaje. Por lo tanto, estos procesos tratan de determinar la estructura que forman los vectores de entrada al tomar en cuenta las similitudes entre éstos. Para determinar en que clase debe ser colocado un vector, el proceso de análisis de similitud se puede apoyar, por ejemplo, en evaluación y comparación de características topológicas o geométricas. 16 Capítulo 1. Introducción 1.4 Estructuras Básicas de Neuronas y Redes Dentro de las neuronas artificiales básicas en primer lugar debemos mencionar al Perceptrón. Es quizás la neurona artificial más popular. Su mecanismo de aprendizaje está basado en un entrenamiento supervisado y fue propuesta en 1958 por el psicólogo Frank Rosenblatt. Por otro lado contamos con el Adaline (Adaptive Linear Neuron, Neurona Lineal Adaptiva), la cual fue propuesta por Bernard Widrow en 1960. Esta neurona es también conocida como ALC (Combinador Lineal Adaptivo). Si bien el Perceptrón, históricamente, precede al Adaline, la última será estudiada en primer lugar en el Capítulo 3 y posteriormente el Perceptrón en el Capítulo 4. Ello se debe a que el Adaline cuenta en su especificación con parte de la estructura básica del Perceptrón. También veremos que los mecanismos para entrenar a una neurona Adaline forman una serie de preliminares para comprender mejor los procedimientos para entrenar a un Perceptrón, y posteriormente, en el Capítulo 6, a una red formada por Perceptrones. En las décadas de los 50s y 60s se conjeturaba que una sola neurona sería capaz de representar una amplia gama de problemas. Desgraciadamente, veremos que una neurona, como único elemento de Cómputo Neural, no es capaz de aprender cualquier problema y de hecho el número de problemas que puede aprender es en realidad limitado. Sin embargo notaremos posteriormente que estas restricciones son superadas al utilizar una Red Neuronal. Entre los primeros problemas para los cuales se encontraron soluciones exitosas al considerar redes de varias neuronas podemos mencionar, por ejemplo, al Modelado de Funciones Booleanas de n variables, Reconocimiento de Patrones y Clasificación Automática. Sin embargo, ante tales éxitos, también es natural plantearnos las siguientes preguntas: • ¿Qué problemas pueden ser modelados mediante una Red Neuronal? • ¿Cuántas neuronas se requieren para garantizar que una red aprenderá un problema dado? • ¿Existe algún criterio que permita determinar el tiempo que requerirá el proceso de entrenamiento de manera que se asegure el contar con un modelo apropiado del problema y su solución? Si bien el campo de las Redes Neuronales Artificiales ha logrado importantes contribuciones, tal y como veremos a lo largo del texto, estas preguntas, de carácter fundamental, aún siguen abiertas. Las neuronas que forman parte de una red estarán interconectadas y agrupadas en Capas. Se tendrán 3 diferentes tipos de capas: • Capa de Entrada: el conjunto de neuronas que recibe información proveniente del exterior. • Capa de Salida: el conjunto de neuronas que proporciona la salida final proporcionada por la red. • Capas Ocultas: conjuntos de neuronas ubicadas entre las capas de entrada y salida. Todas las neuronas, independientemente de la capa en que se encuentren, contribuyen al Cómputo Neural. Por otro lado, es claro que el rol de las neuronas de acuerdo a su posición 17 Una Introducción al Cómputo Neuronal Artificial en una red es consistente con la clasificación que se tiene para las neuronas biológicas en Aferentes, Eferentes, e Interneuronas. Considérese por ejemplo la Red Neuronal presentada en la Figura 1.6. Se tiene una red formada por 6 neuronas de tipo Adaline. Las neuronas 1, 2 y 3 forman la capa de entrada y pueden ser caracterizadas como las neuronas aferentes. Sólo se cuenta en este caso con una neurona eferente, aquella etiquetada como la neurona 6. De hecho, la capa de salida de la red se forma exclusivamente por esta neurona. Finalmente, se tiene sólo una capa oculta formada por las neuronas 4 y 5. Si bien estas neuronas funcionan como puntos de conexión entre las capas de entrada y salida, lo que las caracterizaría como interneuronas, veremos que juegan un papel importante durante los procesos de aprendizaje. W1,1 Adaline 1 W 1,2 z =w + 1,1 1,0 ¦ z 1,1 sign(z ) y1,1 1,1 W 4,1 W1,n X1 W 4,2 Adaline 4 z =w + 4,1 W2,1 X2 ¦ z 4,1 sign(z ) y4,1 4,1 Adaline 6 W 4,3 W 2,2 z =w + 2,1 2,0 ¦ z 2,1 sign(z ) W6,1 y2,1 2,1 W 5,1 W2,n W 5,2 Xn 4,0 Adaline 2 Adaline 5 z =w + 5,1 W3,1 Adaline 3 5,0 ¦ z 5,1 sign(z ) W6,2 z =w + 6,1 6,0 ¦ z 6,1 sign(z ) 6,1 y 6,1 Network output y5,1 5,1 W 5,3 W 3,2 z =w + 3,1 3,0 ¦ z 3,1 sign(z ) y3,1 3,1 W3,n Figura 1.6. Un Red formada por 6 neuronas tipo Adaline. • • • 18 Entre las Redes Neuronales más populares podemos mencionar: Red Madaline (Many Adaline): También propuesta por Bernard Widrow en 1962. Es una Red Neuronal basada en neuronas tipo Adaline. Esta red ha proporcionado soluciones a problemas asociados a la Predicción de Señales y el Reconocimiento de Patrones. Red de Retropropagación (Back-Propagation Network): Quizás la más popular dentro del área de las Redes Neuronales. Se trata de una red multicapa formada por Perceptrones. Esta red, y de hecho el área misma de las Redes Neuronales Artificiales, adquieren relevancia científica al ser presentado en 1986, por David Rumelhart, Geoffrey Hinton y Ronald Williams, el Algoritmo de Retropropagación. Este algoritmo describe un método eficiente para el entrenamiento de este tipo de redes. Se tienen reportadas aplicaciones exitosas de la Red de Retropropagación en áreas relacionadas a la Predicción de Señales, Reconocimiento de Patrones, Reconocimiento de Caracteres Manuscritos y Búsqueda de Soluciones Aproximadas para problemas como la Identificación de Secuencias Proteínicas y el Problema del Agente Viajero, entre otras muchas más. Red de Hopfield: Propuesta por John Hopfield en 1982. Es una Red Neuronal que se diferencia de las anteriores debido a que permite retroalimentación recurrente entre neuronas. Es decir, cada neurona cuenta con una salida que a su vez se conecta con Capítulo 1. Introducción • alguna de sus propias entradas. En las áreas de Reconocimiento de Patrones, Reconocimiento de Caracteres Manuscritos y Clasificación Automática de Imágenes es donde la Red de Hopfield ha encontrado un nicho de aplicación. Red de Kohonen (Kohonen Network): Una aportación del finlandés Teuvo Kohonen. Se trata de redes basadas en aprendizaje no supervisado y cuya finalidad es resolver el problema de la clasificación automática. Esta red ha proporcionado soluciones a problemas asociados al Reconocimiento de Patrones, Reconocimiento de Caracteres Manuscritos, Clasificación Automática de Imágenes y Búsqueda de Soluciones Aproximadas para problemas como el del Agente Viajero. La solución de un problema mediante una única neurona o bien mediante una red de neuronas impone importantes diferencias en cuanto a los mecanismos de aprendizaje a usar. Intuitivamente se debe entender que entrenar a una Red Neuronal requiere procedimientos más sofisticados que aquellos para el ajuste de una única neurona, aunque no por ello éstos últimos son menos importantes. De hecho, por ejemplo, veremos como es que el mecanismo de aprendizaje del Perceptrón guarda una relación profunda con el mecanismo de entrenamiento de una Red de Retropropagación. En realidad, existe una gama de métodos de entrenamiento disponibles para redes como la Madaline o la de Perceptrones. Entre éstos podemos mencionar: • Aprendizaje basado en Solución por Mínimos Cuadrados • Madaline Rule I • Madaline Rule II • Madaline Rule III • Retropropagación (Back-Propagation) En los Capítulos 2, 5 y 6 describiremos a detalle algunas de estas metodologías. 19 Una Introducción al Cómputo Neuronal Artificial 20 Una Introducción al Cómputo Neuronal Artificial 2. Preliminares Matemáticos Una Introducción al Cómputo Neuronal Artificial 22 Capítulo 2. Preliminares Matemáticos El objetivo de este Capítulo es el de describir algunas de las herramientas Matemáticas necesarias para abordar el estudio de las Redes Neuronales Artificiales. En la Sección 2.1 efectuaremos un breve repaso relacionado con el Gradiente de una Función y su relación con sus Máximos y Mínimos. En la Sección 2.2 comentaremos los fundamentos del Método de Mínimos Cuadrados, una popular metodología de Regresión Lineal. Abordaremos primero el caso del ajuste con una recta en el plano y posteriormente, en la Sección 2.3, el ajuste con un hiperplano multidimensional. Finalmente, en la Sección 2.4 efectuaremos la demostración de la Desigualdad de Cauchy-Schwarz. Nuestro estudio de las Redes Neuronales Artificiales iniciará formalmente a partir del Capítulo 3, por lo que aquellos lectores que ya se encuentren familiarizados con los temas antes mencionados pueden sin problema alguno omitir el presente Capítulo. 2.1 Gradientes y Búsquedas de Máximos y Mínimos Consideremos una función f tal que f: \ n → \ . Es decir, nuestra función recibirá como entrada un vector n-Dimensional y producirá como salida un escalar. El Vector Gradiente de f en el punto (x1, …, xn), denotado por ∇f(x1, …, xn), se define como: ªδ f º «δ x » « 1» «δ f » ∇f ( x1 ,..., xn ) = «« δ x2 »» « # » « » «δ f » «¬ δ xn »¼ (Ecuación 2.1.1) δf denota a la derivada parcial de f respecto a la variable xi, i = 1, 2, …, n. δ xi δf no es más que la derivada “convencional”, aquella estudiada en los Recordemos que δ xi Donde cursos de Cálculo de una Única Variable, en donde las variables x1, x2, …, xn, excepto la variable xi, son todas asumidas como constantes. Sean e1, e2, …, en los vectores que forman la base canónica de \ n . Entonces el vector gradiente de f puede ser descrito como la combinación lineal: 23 Una Introducción al Cómputo Neuronal Artificial ªδ f º «δ x » « 1» «δ f » ∇f ( x1 ,..., xn ) = «« δ x2 »» « # » « » «δ f » «¬ δ xn »¼ δf δf δf δf ⇔ ∇f ( x1 ,..., xn ) = e1 + e2 + e3 + ... + e δ x1 δ x2 δ x3 δ xn n ª1 º «0» δf « » δf «0» + = δ x1 « » δ x2 «# » «¬ 0 »¼ ª0 º «1 » « » δf «0 » + « » δ x3 «# » «¬0 »¼ ª0º «0» « » δf «1 » + ... + δ xn « » # « » «¬0 »¼ ª0 º «0 » « » «0 » « » «# » «¬1 ¼» El i-ésimo componente de ∇f nos proporciona la razón de cambio de f en la dirección del vector unitario ei, i = 1, 2, …, n. ªδ f º Analicemos primero el caso con n = 1. Ello implica que ∇f(x1) = « » = [ f '( x1 ) ] . ¬ δ x1 ¼ Es decir, el único componente del gradiente de f, f: \ → \ , no es más que la derivada “convencional”. Ese único componente nos proporciona la razón de cambio de f en la dirección del eje X1. La evaluación de la derivada de f en el punto x0, f '( x0 ) , desde un punto de vista geométrico, nos proporciona la pendiente de la recta tangente a f en el punto (x0, f(x0)). Véase la Figura 2.1. El signo de la pendiente nos proporciona también información acerca de la dirección hacia la cual f crece más rápido. Una pendiente positiva nos informa que la función, partiendo de x0, crece más rápido en la dirección positiva del eje X1 (Figura 2.1.a). Una pendiente negativa es indicativo de que, partiendo de x0, f decrece en la dirección positiva del eje X1 (Figura 2.1.b). O de manera equivalente, una pendiente negativa nos indica que f crece cuando nos movemos en la dirección negativa del eje X1. Cuando f '( x0 ) = 0 entonces se ha encontrado un punto crítico que bien puede ser un máximo, un mínimo, o un punto de inflexión. 24 Capítulo 2. Preliminares Matemáticos f f x0 X1 x0 X1 a) b) Figura 2.1. Interpretación del signo de las pendientes de las Rectas Tangentes a una función f. a) Una pendiente positiva señala la dirección de crecimiento de f. b) Una pendiente negativa indica que f decrece en la dirección positiva del eje X1. Ahora bien, consideremos una función f tal que f: \ 2 → \ . Por ejemplo, sea f la función f(x1, x2) = x22 − x12 . Su vector gradiente estará dado por ª −2 x1 º ∇f = « » ¬ 2 x2 ¼ Al evaluar el vector gradiente en el punto (-2,3), y al expresarlo como combinación lineal de la base canónica {e1, e2}, obtenemos: ª 4 º ª 4 º ª0 º ∇f (−2,3) = « » = « » + « » = 4e1 + 6e2 ¬ 6 ¼ ¬ 0 ¼ ¬6 ¼ El primer componente de ∇f(-2,3) nos indica que la razón de cambio en dirección ª 4º del vector « » , el cual es paralelo al eje X1, es 4. El segundo componente de ∇f(-2,3) nos ¬0¼ ª0º indica que la razón de cambio en dirección del vector « » , paralelo al eje X2, es 6. De ¬6¼ hecho, las razones de cambio al ser ambas positivas denotan que la función crece al moverse en cualquiera de esas dos direcciones partiendo del punto (-2,3). Es más, se tiene ª0º mayor crecimiento en la dirección « » . ¬6¼ Los dos ejemplos anteriores nos permiten observar como es que efectivamente cada componente del vector gradiente nos informa acerca de la razón de cambio de una función en las direcciones de los ejes principales de \ n . En el caso particular de n = 1 de hecho no tenemos otras maneras de movernos más a que a lo largo del eje X1. Sin embargo, cuando 25 Una Introducción al Cómputo Neuronal Artificial n > 1 es claro que podemos considerar direcciones no necesariamente paralelas a los ejes principales. Y además, nos interesará conocer las razones de cambio de una función cuando nos movemos a lo largo de tales direcciones. Por ejemplo, ¿qué tanto crece o decrece la función f(x1, x2) = x22 − x12 cuando nos movemos, a partir de un punto dado, en la dirección ª −3 del vector « ¬ 18 T −3 º » ? 18 ¼ Si se requiere la razón de cambio de f en la dirección del vector arbitrario y unitario u, entonces se debe recurrir a la Derivada Direccional de f en la Dirección de u. Se le denota por Duf(x1, …, xn) y se calcula mediante el producto punto del vector gradiente de f (Ecuación 2.1.1) y el vector u: Du f ( x1 ,..., xn ) = ∇f ⋅ u ª u1 º «u » = ∇f ⋅ « 2 » «#» « » ¬un ¼ δf δf δf u1 + u2 + ... + u = δ x1 δ x2 δ xn n (Ecuación 2.1.2) A diferencia del gradiente, la derivada direccional nos proporciona un escalar. Ello se debe a que describe únicamente la razón de cambio de f cuando nos movemos, a partir del punto (x1, …, xn), en la dirección del vector u (nuestro vector de dirección arbitraria). El signo de tal escalar nos informará si la función crece o decrece al tomar la dirección u y partiendo del punto (x1, …, xn). Sea el vector unitario ª « u1 = « « « ¬ −3 º 18 » » −3 » 18 »¼ Ahora deseamos conocer la derivada direccional de f(x1, x2) = x22 − x12 en el punto (-2,3) en la dirección de u1. Por lo tanto, al aplicar la Ecuación 2.1.2, se tiene: 26 Capítulo 2. Preliminares Matemáticos Du1 f (−2,3) = ∇f (−2,3) ⋅ u1 −3 º § −3 · § −3 · 18 » » = 4¨ ¸ + 6¨ ¸ −3 » © 18 ¹ © 18 ¹ 18 »¼ ª ª4º « =« »⋅« ¬6 ¼ « « ¬ =−5 2 Ello implica que partiendo del punto (-2,3) y moviéndose en la dirección del vector u1, la función f tiene una razón de cambio −5 2 . Tal razón, al ser negativa, nos indica que de hecho la función decrece al moverse en esa dirección. Consideremos el vector unitario ª −1º u2 = « » ¬0¼ La derivada direccional de f en el punto (-2,3) en la dirección de u2 es: Du2 f (−2,3) = ∇f (−2,3) ⋅ u2 ª 4 º ª −1º =« »⋅« » ¬6¼ ¬ 0 ¼ =−4 Partiendo del punto (-2,3) y moviéndose en la dirección del vector u2, la función f tiene una razón de cambio -4. Nuevamente, la función decrece al moverse en esa dirección. Ahora sea el vector unitario ª «− u3 = « « « ¬ 2 º 13 » » 3 » 13 »¼ 27 Una Introducción al Cómputo Neuronal Artificial La derivada direccional de f en el punto (-2,3) en la dirección de u3 es: Du3 f (−2,3) = ∇f (−2,3) ⋅ u3 ª − ª 4º « =« »⋅« ¬6¼ « « ¬ 10 = 13 2 º 13 » » 3 » 13 »¼ Concluimos que partiendo del punto (-2,3) y moviéndonos en la dirección u3, la función f 10 tiene una razón de cambio . Aunque la razón es positiva, es menor que la obtenida 13 ª 4º para la dirección « » , con valor 4. Ello implica que en la dirección dada por u3 la función ¬0¼ ª4º crece aunque más “lento” que usando la dirección « » . ¬0¼ • • Plantearemos dos observaciones: Dado un punto (x1, …, xn) es claro que es posible determinar una cantidad enorme de derivadas direccionales de f en ese punto. ¿Cómo encontrar aquel vector cuya dirección, y partiendo del punto (x1, …, xn), nos indique la máxima razón de cambio de f? La dirección de ese vector será también la dirección de máximo crecimiento de f. Por la teoría del Algebra Lineal se sabe que el producto punto entre ∇f y el vector unitario u también puede ser expresado como: Duf(x1, …, xn) = ∇f(x1, …, xn)⋅u = ||∇f(x1, …, xn)|| ||u|| cos θ = ||∇f(x1, …, xn)|| cos θ (Por la Ecuación 2.1.2) (recuérdese que ||u|| = 1) (Ecuación 2.1.3) Donde θ es el ángulo formado por los vectores ∇f y u. El valor máximo del coseno se da cuando θ = 0. Ello implica que u y el vector gradiente, ∇f, tienen la misma dirección. En ese caso la derivada direccional tendrá un valor Duf(x1, …, xn) = ||∇f(x1, …, xn)||, que de hecho es también su valor máximo. Ello implica que la dirección del vector gradiente nos indica hacia donde f tiene su máxima razón de cambio. En este punto recalcamos que los componentes del vector gradiente, cada uno por separado, proporcionan las razones de cambio en dirección de los ejes principales. 28 Capítulo 2. Preliminares Matemáticos Pero en sí, el vector gradiente indica una dirección y es en esa dirección donde f tiene su máximo crecimiento. Esta propiedad es sumamente útil si se requieren identificar máximos en la función f. Previamente establecimos que para f(x1, x2) = x22 − x12 su vector gradiente en el ª 4º punto (-2, 3) era ∇f(-2,3) = « » . La magnitud del vector gradiente está dada por: ¬6¼ ||∇f(-2,3)|| = 42 + 62 = 52 ª 4º Por lo tanto, partiendo del punto (-2, 3) y en la dirección dada por el vector « » , el vector ¬6¼ gradiente, se tiene la máxima razón de cambio de f, 52 , y en consecuencia su dirección de máximo crecimiento. Cualquier derivada direccional en el punto (-2, 3) indicará una razón de cambio menor o igual a la proporcionada por el vector gradiente. Ahora nos plantearemos una nueva pregunta: ¿Cómo encontrar aquel vector cuya dirección, y partiendo del punto (x1, …, xn), nos indique la mínima razón de cambio de f? Sabemos por la Ecuación 2.1.3 que: Duf(x1, …, xn) = ||∇f(x1, …, xn)|| cos θ La función coseno tiene su valor mínimo cuando θ = π. Ello implica que los vectores u y ∇f apuntan en direcciones opuestas. Por lo tanto, en ese caso, se tendrá que Duf(x1, …, xn) = -||∇f(x1, …, xn)|| Entonces, es claro que la dirección opuesta a la del vector gradiente nos indica hacia donde f tiene su mínima razón de cambio. Esta propiedad es sumamente útil si se requieren identificar mínimos en la función f. ª 4º Para f(x1, x2) = x22 − x12 su vector gradiente en el punto (-2, 3) era ∇f(-2,3) = « » con ¬6¼ magnitud ||∇f(-2, 3)|| = 52 . Por lo tanto, partiendo del punto (-2, 3) y en la dirección dada ª 4º por el vector (-1) « » se tiene la mínima razón de cambio de f, - 52 . Cualquier otra ¬6¼ derivada direccional en el punto (-2, 3) indicará una razón de cambio mayor o igual a la proporcionada por la dirección opuesta del vector gradiente. 29 Una Introducción al Cómputo Neuronal Artificial 2.2 Regresión Lineal En ocasiones se requiere inferir un modelo o sistema a partir de datos experimentales. La importancia y finalidad de tal inferencia radica en que entonces podrá ser posible entender, predecir y controlar al sistema que generó tales datos. En esta Sección aplicaremos razonamientos Matemáticos a fin de presentar una bien conocida metodología de estimación: la Regresión Lineal. Primero, presentaremos el caso particular cuando los datos son pares de la forma (x, d), donde x es la única variable de entrada y d el valor que se espera genere el sistema para tal entrada. Posteriormente, en la Sección 2.3 discutiremos el fundamento matemático detrás del caso general, en el cual se tienen varias variables. Existen tres condiciones a las cuales los datos experimentales deben sujetarse y que de hecho asumiremos se cumplen: • Deben ser suficientes en cantidad. • Deben capturar los principios fundamentales del sistema o modelo de origen. • Y finalmente, deben ser libres, tanto como sea posible, de ruido. Como ya comentamos previamente, se tendrán pares de observaciones (x1,i, di) tal que x1,i se asume es libre de errores y di está contaminado por ruido. El objetivo es buscar una relación lineal entre las variables x1 y d tal que d ≈ wx1 + b Es decir, buscaremos valores para las variables w y b de manera que contemos con un modelo lineal tal que dado un valor para la variable x1, obtengamos, tan justa como sea posible, la correspondiente predicción d. O de manera más específica, dado un valor de entrada particular x1,i y el correspondiente ruido o error εi, el cual se agrega a wx1,i + b, entonces podemos garantizar una predicción exacta di: di = wx1,i + b + εi (Ecuación 2.2.1) Sea x2,i = wx1,i + b. Entonces al sustituir en la Ecuación 2.2.1 se tendrá: di = x2,i + εi (Ecuación 2.2.2) Donde εi es ahora el error agregado a x2,i, w es una pendiente y b es una intersección con el eje X2. Al valor b también se le llama sesgo. Es claro que se buscará entonces una recta en el plano que se ajuste a las observaciones (x1,i, di). Véase la Figura 2.2. Es bien sabido que cualquier recta se ajusta perfectamente a dos observaciones, pero ésta no necesariamente se ajustará al resto de las observaciones. Nuestro problema a resolver se plantea en el siguiente cuestionamiento: ¿Cuál es la mejor elección de w y b tal que la recta wx1 + b esté tan “cerca” como sea posible a todas las observaciones? 30 Capítulo 2. Preliminares Matemáticos (x1,i, di) (x1,4, d4) (x1,5, d5) (x1,2, d2) wx1 + b (x1,3, d3) (x1,1, d1) X1 Figura 2.2. Ajuste de la recta wx1 + b. Una solución muy popular para nuestro problema es el método de Mínimos Cuadrados. Se trata de un método sistemático que permite determinar los mejores valores para las constantes b y w. El método parte de la consideración de que todo di contiene ruido, de manera que no será posible ajustar la relación sin error, por lo tanto se tiene que: di = wx1,i + b + εi ⇔ εi = di – (wx1,i + b) (Ecuación 2.2.3) Sea di’ = wx1,i + b. Entonces al sustituir en la Ecuación 2.2.3: εi = di – di’ (Ecuación 2.2.4) Es claro que εi es el error o diferencia que existe entre el valor experimental di y el valor predicho por la recta, es decir di’. A fin de encontrar aquella recta que mejor se ajuste a los datos, se requerirá de un criterio para determinar que tan bueno es un estimador lineal. Para este fin, se tiene que el Promedio de los Errores al Cuadrado es un criterio bastante recurrido. Básicamente considera, para cada una de las observaciones, y dada una recta candidata, la diferencia εi entre la predicción que ésta proporciona y el valor esperado. Nótese que εi puede ser positivo o negativo. Por ello es posible, en un caso extremo, que la suma de todas las diferencias sea cero. Ello implica que la sola suma de diferencias puede no proporcionarnos información real de cómo se comporta el estimador lineal con el conjunto de observaciones. Por ello, a fin de que los signos de las diferencias no afecten la elección de la mejor recta, 31 Una Introducción al Cómputo Neuronal Artificial es que estas diferencias son todas elevadas al cuadrado y posteriormente sumadas. Claramente el Promedio de los Errores al Cuadrado queda definido como: J= 1 2N N ¦ε 2 i (Ecuación 2.2.5) i =1 Donde N es el número de observaciones. J nos proporciona, para una recta candidata, el error total que ésta tiene con el conjunto de observaciones. Ahora el objetivo será minimizar a J. La Sección anterior nos proporcionó herramientas para lograr este objetivo. J puede ser vista como una Función de Error para la cual se quiere determinar su mínimo global. Se garantiza la existencia de un único mínimo ya que si se observan las Ecuaciones 2.2.3 y 2.2.5, se tiene que J describe un paraboloide en el espacio tridimensional debido a que depende de las variables w y b. Es en este mínimo donde el vector gradiente de J es precisamente el vector cero. Por lo tanto, el primer paso es determinar ∇J. Ello implica encontrar las derivadas parciales de J respecto a las variables w y b. Posteriormente, el segundo paso consistirá en igualar a las expresiones resultantes a cero. Esto genera un sistema de ecuaciones: ­δ J °° δ b = 0 ® °δ J = 0 °̄ δ w La solución del sistema de ecuaciones nos proporcionará los valores óptimos de b y w de tal forma que la función de error J sea minimizada tanto como sea posible. De esta forma, habremos encontrado a la mejor recta para ajustar nuestros datos. Procedamos a determinar la derivada parcial de J respecto a la variable b: δJ δ 1 N 2 = ¦ε δ b δ b 2 N i =1 i 1 N δ 2 = ¦ εi 2 N i =1 δ b 2 1 N δ = d i − wx1,i − b ) ( ¦ 2 N i =1 δ b 1 N δ = 2 ( di − wx1,i − b ) ( di − wx1,i − b ) ¦ δb 2 N i =1 = 32 1 N N ¦(d i =1 i − wx1,i − b ) (−1) (Por la Ecuación 2.2.3) (Regla de la Cadena) § di y wx1,i son constantes · ¨ ¸ © respecto a b ¹ Capítulo 2. Preliminares Matemáticos = 1 N N ¦ ( wx 1,i i =1 + b − di ) § wx b d · = ¦ ¨ 1,i + − i ¸ N N¹ i =1 © N N x N b N d = w¦ 1,i + ¦ − ¦ i i =1 N i =1 N i =1 N N Por lo tanto tenemos que: N x N δJ b N d = w¦ 1,i + ¦ − ¦ i δb i =1 N i =1 N i =1 N (Ecuación 2.2.6) Ahora determinaremos la derivada parcial de J respecto a la variable w: δJ δ 1 N 2 = ¦ε δ w δ w 2 N i =1 i 1 N δ 2 = ¦ εi 2 N i =1 δ w 2 1 N δ di − wx1,i − b ) = ( ¦ 2 N i =1 δ w 1 N δ 2 ( di − wx1,i − b ) = ( d − wx1,i − b ) ¦ 2 N i =1 δw i = 1 N 1 = N N ¦(d − wx1,i − b ) (− x1,i ) i i =1 N ¦ ( wx 2 1,i i =1 (Por la Ecuación 2.2.3) (Regla de la Cadena) § di y b son constantes · ¨ ¸ © respecto a w ¹ + bx1,i − di x1,i ) § wx1,2i bx1,i di x1,i · = ¦ ¨¨ + − ¸ N N ¹¸ i =1 © N N x2 N x N d x = w¦ 1,i + b¦ 1,i − ¦ i 1,i N i =1 N i =1 N i =1 N Es decir: N x N x N d x δJ = w¦ 1,i + b¦ 1,i − ¦ i 1,i δw N i =1 N i =1 N i =1 2 (Ecuación 2.2.7) 33 Una Introducción al Cómputo Neuronal Artificial Ahora tanto δJ δJ como son igualadas a cero y se cuenta con el siguiente δb δw sistema de ecuaciones: ­ N x1,i N b N di +¦ −¦ = 0 ° w¦ °° i =1 N i =1 N i =1 N ® ° N x2 N N ° w¦ 1,i + b¦ x1,i − ¦ di x1,i = 0 °̄ i =1 N N i =1 N i =1 (Ecuación 2.2.8) (Ecuación 2.2.9) Hagamos: N x1,i i =1 N x=¦ N x1,2i i =1 N x2 = ¦ N d =¦ i =1 di N N di x1,i i =1 N xd = ¦ Entonces al sustituir en las Ecuaciones 2.2.8 y 2.2.9 el sistema se reescribe como: ­ wx + b − d = 0 ° ® ° 2 ¯ wx + bx − xd = 0 (Ecuación 2.2.10) (Ecuación 2.2.11) Procedemos a resolver el sistema de ecuaciones lineales. Para la Ecuación 2.2.10 tenemos: wx + b − d = 0 ⇔ b = d − wx Sustituyendo el valor de b en la Ecuación 2.2.11: wx 2 + (d − wx) x − xd = 0 () 2 ⇔ wx 2 + d ⋅ x − w x − xd = 0 34 Capítulo 2. Preliminares Matemáticos () ⇔ wx 2 − w x ⇔ w= 2 = xd − d ⋅ x xd − d ⋅ x () x2 − x (Ecuación 2.2.12) 2 Al sustituir el valor de w (Ecuación 2.2.12) en la Ecuación 2.2.10 tenemos finalmente: b = d − wx =d− =d− ( xd − d ⋅ x = 2 x () x − ( x) − ( x ) ) − xd ⋅ x + d ⋅ ( x ) x − ( x) xd ⋅ x − d ⋅ x d x2 = () x − x 2 2 2 2 2 2 2 2 d ⋅ x 2 − xd ⋅ x () x2 − x 2 Es decir: b= d ⋅ x 2 − xd ⋅ x () x − x 2 2 (Ecuación 2.2.13) Las Ecuaciones 2.2.12 y 2.2.13 representan los valores óptimos para las variables w y b respectivamente. Ello se debe a que se determinó para qué valores precisamente de w y b el vector gradiente de la función de error J es el vector cero. Analicemos un ejemplo práctico simple. En la Tabla 2.1 se presenta un conjunto de observaciones para las cuales deseamos obtener un estimador lineal que se ajuste lo mejor posible. En Figura 2.3 se puede apreciar la disposición de los puntos (x1,i, di). 35 Una Introducción al Cómputo Neuronal Artificial Tabla 2.1. Un conjunto de 11 observaciones. di x1,i -5 -10.5 -4 -8.5 -3 -4.5 -2 -2.5 -1 0.5 0 4.5 1 6.5 2 10.5 3 12.5 4 16.5 5 18.5 È 15 È 10 5È 4 2 È È È È È È È È 2 4 5 10 Figura 2.3. Disposición en el plano cartesiano de los puntos presentados en la Tabla 2.1. • Para el conjunto de datos en cuestión tenemos: x=0 • x 2 = 10 • d = 3.9545 • xd = 29.8182 Que al sustituir en las Ecuaciones 2.2.12 y 2.2.13 obtenemos respectivamente: w = 2.9818 b = 3.9545 Ello implica que la recta que mejor se ajusta a nuestro conjunto de datos está dada por: d = 2.9818x1 + 3.9545 En la Figura 2.4 se muestra al conjunto de datos y la recta obtenida. 36 Capítulo 2. Preliminares Matemáticos È È 15 È È 10 È 5È 4 2 È 2 È È È È 4 5 10 Figura 2.4. La recta d = 2.9818x1 + 3.9545 como el mejor estimador lineal para el conjunto de datos presentado en la Tabla 2.1. Ahora bien, sustituiremos el conjunto de datos de la Tabla 2.1 en la Ecuación 2.2.5, es decir, aquella correspondiente al Promedio de los Errores al Cuadrado: J = 5w2 + 0.5b2 – 29.81w – 3.95b + 52.397 Como ya mencionamos, J describe un paraboloide inmerso en el espacio tridimensional. En la Figura 2.5 se puede apreciar la gráfica de J. Cada punto sobre la superficie es de la forma (w, b, J(w,b)) y describe el error total que se obtiene al usar los valores de w y b como parámetros para una recta candidata. Es claro que al visualizar la superficie contamos con una descripción gráfica del desempeño de todos los posibles estimadores lineales para nuestro conjunto de datos. Sustituyendo w = 2.9818 y b = 3.9545, los valores encontrados previamente, al aplicar directamente las Ecuaciones 2.2.12 y 2.2.13, obtenemos el error total J = 0.122314. Por la Teoría antes presentada, sabemos que el punto (w = 2.9818, b = 3.9545, J = 0.122314) es precisamente el mínimo global de la función de error y es donde también el vector gradiente de J es precisamente el vector cero. Es claro, observando la Figura 2.5, que cualquier otro valor para w y b nos proporcionará un error total J mayor a 0.122314. 37 Una Introducción al Cómputo Neuronal Artificial Figura 2.5. El paraboloide asociado a la función de error J = 5w2 + 0.5b2 – 29.81w – 3.95b + 52.397 2.3 Regresión Lineal con Múltiples Variables Sea el vector xi en \ P una medición libre de ruido y sea di un escalar posiblemente P contaminado con ruido. Sea b + ¦ wk xi ,k un hiperplano multidimensional. Este hiperplano k =1 modelará la correlación lineal entre el vector xi y el escalar di. Sea di’ el valor proporcionado por nuestro estimador: P di' = b + ¦ wk xi ,k (Ecuación 2.3.1) k =1 Sea εi el error que existe entre di y di’: ε i = di − di' P § · = di − ¨ b + ¦ wk xi ,k ¸ k =1 © ¹ = di − (b + w1 xi ,1 + w2 xi ,2 + ... + wP xi , P ) (Ecuación 2.3.2) El término b es llamado término de sesgo. A fin de incorporarlo en la sumatoria haremos w0 = b y agregaremos un 0-ésimo componente a nuestros vectores xi de manera que xi,0 = 1. Entonces al sustituir en la Ecuación 2.3.2 ahora tendremos: 38 Capítulo 2. Preliminares Matemáticos P ε i = di − ¦ wk xi ,k (Ecuación 2.3.3) k =0 El Promedio de los Errores al Cuadrado tiene la forma: 1 J= 2N P § · d − ¦ ¨ i ¦ wk xi ,k ¸ i =1 © k =0 ¹ N 2 (Ecuación 2.3.4) Donde N es el número de mediciones. J será minimizada al resolver el sistema de ecuaciones formado precisamente al igualar a cero sus derivadas parciales respecto a las variables w0, w1, w2, …, wP: ­ δJ °δ w = 0 ° 0 ° δJ =0 ° ® δ w1 ° # ° ° δJ °δ w = 0 ¯ P Es decir, se buscará la solución de ∇J = 0. En términos geométricos, lo que buscamos son los valores de los coeficientes w0, w1, …, wP de manera que el hiperplano multidimensional w0 xi ,0 + w1 xi ,1 + w2 xi ,2 + w3 xi ,3 + ... + wP xi , P se ajuste lo mejor posible a nuestro conjunto de mediciones (xi, di), xi ∈ \ P +1 , di ∈ \ , i = 1, 2, 3, …, N. Por otro lado, la función de error J describe a una hipersuperficie, en particular, un hiperparaboloide multidimensional. La ecuación de tal lugar geométrico está dada en función de las variables w0, w1, …, wP. Por lo tanto, el hiperparaboloide asociado a J está inmerso en un espacio Euclidiano (P+2)-Dimensional. Sin embargo, demostraremos que, tal como sucede en el caso bidimensional (véase la Sección anterior), J cuenta con un único mínimo. En ese punto el vector gradiente es el vector cero. Es precisamente en esa localidad donde encontramos los valores óptimos para w0, w1, …, wP. Considérese la j-ésima variable wj, 0 ≤ j ≤ P. Obtendremos la correspondiente derivada parcial de la función de error J respecto a wj: 39 Una Introducción al Cómputo Neuronal Artificial P δJ δ 1 N § · di − ¦ wk xi ,k ¸ = ¦ ¨ δ w j δ w j 2 N i =1 © k =0 ¹ · di − ¦ wk xi , k ¸ ¦ ¨ i =1 δ w j © k =0 ¹ N 1 = 2N = δ § 2 P (Por la Ecuación 2.3.4) 2 P § · δ 2 − d ¦ ¨ i ¦ wk xi ,k ¸ δ w i =1 © k =0 ¹ j N 1 2N 1 = N P § ·§ δ ¦ ¨ di − ¦ wk xi ,k ¸ ¨¨ − δ w i =1 © k =0 ¹© j 1 = N P § · − d ¦ ¨ i ¦ wk xi ,k ¸ ( − xi , j ) i =1 © k =0 ¹ =− N P § · − d ¨ i ¦ wk xi ,k ¸ k =0 © ¹ P ¦w x k i ,k k =0 · ¸¸ ¹ N 1 N (di es constante respecto a w j ) § Todas las variables wk son ¨ ¨ constantes respecto a w j excepto ¨ aquella para la cual k = j © · ¸ ¸ ¸ ¹ P § · − x d wk xi ,k ¸ ¦ ¦ i, j ¨ i i =1 k =0 © ¹ N Concretizando: P δJ 1 N § · = − ¦ xi , j ¨ di − ¦ wk xi , k ¸ δ wj N i =1 k =0 © ¹ (Ecuación 2.3.5) Nótese que la Ecuación 2.3.5 define la derivada parcial de wj para todo valor de j desde 0 hasta P. Ello implica que efectivamente hemos encontrado los valores de los componentes del vector gradiente de J, ∇J. Como ya comentamos antes, resolver la ecuación ∇J = 0 es equivalente a resolver el sistema de ecuaciones: ­ 1 ®− ¯ N P § · x d − wk xi ,k ¸ = 0 ¦ ¦ i, j ¨ i i =1 k =0 © ¹ N j = 0,1, 2,...P Consideremos la j-ésima ecuación: − 1 N N ¦x i, j i =1 P § · − d wk xi ,k ¸ = 0 ¦ i ¨ k =0 © ¹ P § · ⇔ ¦ xi , j ¨ di − ¦ wk xi ,k ¸ = 0 i =1 k =0 © ¹ N P § · ⇔ ¦ ¨ xi , j di − xi , j ¦ wk xi ,k ¸ = 0 i =1 © k =0 ¹ N 40 (Al multiplicar ambos lados por - N ). Capítulo 2. Preliminares Matemáticos N N P § · ⇔ ¦ xi , j di − ¦ ¨ xi , j ¦ wk xi , k ¸ = 0 i =1 i =1 © k =0 ¹ N N P § · ⇔ ¦ xi , j di = ¦ ¨ xi , j ¦ wk xi , k ¸ i =1 i =1 © k =0 ¹ (La sumatoria principal es expresada como dos sumatorias) (Ecuación 2.3.6) Considérese el lado derecho de la Ecuación 2.3.6. En primer lugar desarrollaremos la sumatoria principal y posteriormente cada sumatoria con índice de suma k: P P P P P § · = + + + + x w x x w x x w x x w x ... x ¦ N , j ¦ wk xN , k 2, j ¦ k 2, k 3, j ¦ k 3, k ¨ i , j ¦ k i ,k ¸ 1, j ¦ k 1,k i =1 © k =0 k =0 k =0 k =0 k =0 ¹ N P P P P k =0 k =0 k =0 k =0 = ¦ wk x1, j x1,k + ¦ wk x2, j x2, k + ¦ wk x3, j x3,k + ... + ¦ wk xN , j xN ,k = ( w0 x1, j x1,0 + w1 x1, j x1,1 + w2 x1, j x1,2 + ... + wP x1, j x1, P (w x (w x x + w1 x2, j x2,1 + w2 x2, j x2,2 + ... + wP x2, j x2, P x + w1 x3, j x3,1 + w2 x3, j x3,2 + ... + wP x3, j x3, P 0 2, j 2,0 0 3, j 3,0 (w x 0 N, j )+ )+ )+ # xN ,0 + w1 xN , j xN ,1 + w2 xN , j xN ,2 + ... + wP xN , j xN , P ) Es claro que los términos entre paréntesis, con factor común xi , j , corresponden al P desarrollo “horizontal” de cada suma xi , j ¦ wk xi ,k . Pero nótense los recuadros punteados k =0 que hemos agregado. Los términos en cada uno de estos recuadros pueden ser vistos como N el desarrollo “vertical” de una sumatoria de la forma wk ¦ xi , j xi , k , donde evidentemente sus i =1 términos cuentan con el factor común wk. Reagrupando los términos de las sumatorias en forma “vertical” tenemos ahora: N N N N i =1 i =1 i =1 = w0 ¦ xi , j xi ,0 + w1 ¦ xi , j xi ,1 + w2 ¦ xi , j xi ,2 + ... + wP ¦ xi , j xi , P i =1 P N k =0 i =1 = ¦ wk ¦ xi , j xi ,k Es decir, el lado derecho de la Ecuación 2.3.6 queda ahora expresado como: P § · x ¦ ¨ i , j ¦ wk xi , k ¸ = i =1 © k =0 ¹ N P N k =0 i =1 ¦ wk ¦ xi, j xi,k (Ecuación 2.3.7) 41 Una Introducción al Cómputo Neuronal Artificial Igualamos con el lado izquierdo de la Ecuación 2.3.6: N P N i =1 k =0 i =1 ¦ xi, j di = ¦ wk ¦ xi, j xi ,k (Ecuación 2.3.8) Se dividen ambos lados de la Ecuación 2.3.8 por N: N ¦ xi, j di i =1 N = P N k =0 i =1 ¦ wk ¦ xi, j xi,k = N 1 N P N k =0 i =1 ¦ wk ¦ xi, j xi,k P 1 N ¦ xi, j xi,k N i =1 k =0 P 1 N 1 N ⇔ ¦ xi , j di = ¦ wk ¦ xi , j xi ,k N i =1 N i =1 k =0 = ¦ wk (Ecuación 2.3.9) Consideraremos ahora, del lado derecho de la Ecuación 2.3.9 la sumatoria con 1 . Sea Rk,j definido como: índice i y su factor N Rk , j = 1 N ¦ xi, j xi,k N i =1 k = 0,1, 2,..., P j = 0,1, 2,..., P (Ecuación 2.3.10) Ahora, sea R la matriz de (P+1) × (P+1) dada por: ª R0,0 «R 1,0 R=« « # « ¬ RP ,0 R0,1 " R0, P º R1,1 " R1, P »» # % # » » RP ,1 " RP , P ¼ (Ecuación 2.3.11) Sea ℘j igual al lado izquierdo de la Ecuación 2.3.9: ℘j = 42 1 N N ¦x i, j i =1 di j = 0,1, 2,..., P (Ecuación 2.3.12) Capítulo 2. Preliminares Matemáticos Definimos a ℘ como un vector de P+1 elementos: ª℘0 º «℘ » ℘= « 1 » « # » « » ¬℘P ¼ (Ecuación 2.3.13) Y sea W el vector de P+1 elementos dado por: ª w0 º «w » W =« 1» « # » « » ¬ wP ¼ (Ecuación 2.3.14) El sistema de ecuaciones que se obtuvo originalmente al calcular las derivadas parciales de la función de error J ­ 1 ®− ¯ N P § · x d − wk xi ,k ¸ = 0 ¦ ¦ i, j ¨ i i =1 k =0 © ¹ N j = 0,1, 2,...P Ahora puede ser reescrito como el producto matricial: ℘ = RW (Ecuación 2.3.15) Supongamos la existencia de la matriz inversa de R, es decir R-1, entonces tendremos manera de determinar al vector W (Ecuación 2.3.14), cuyos componentes son precisamente los valores de las variables w0, w1, …, wP: ℘ = RW ⇔ R-1℘ = R-1RW ⇔ R-1℘ = I W ⇔ R-1℘ = W (I: matriz identidad) (Ecuación 2.3.16) La Ecuación 2.3.16 expresa de manera sumamente concreta, en términos de un producto matricial, el procedimiento de Mínimos Cuadrados. Nótese que la existencia de la solución depende precisamente de que se cuente con la inversa de la matriz R (Ecuación 2.3.11). 43 Una Introducción al Cómputo Neuronal Artificial Consideremos el caso particular cuando P = 1, entonces la matriz R tendrá la forma: ª R0,0 «R ¬ 1,0 R0,1 º R1,1 »¼ Específicamente, por la Ecuación 2.3.10 y dado que xi,0 = 1, i = 1, 2, …, N: ª1 N « N ¦ xi ,0 xi ,0 i =1 R=« «1 N « N ¦ xi ,0 xi ,1 ¬ i =1 1 N º ª xi ,1 xi ,0 » « 1 ¦ N i =1 »=« » «1 N 1 N x x xi ,1 ¦ i,1 i,1 »¼ «¬ N ¦ N i =1 i =1 1 N º xi ,1 » ¦ ª1 N i =1 »=« 1 N 2 » «¬ x ¦x N i =1 i ,1 »¼ xº » x 2 »¼ Por las Ecuaciones 2.3.12 y 2.3.13, y haciendo xi,0 = 1, i = 1, 2, …, N, el vector ℘ estará dado por: ª1 N º ª 1 N º x d di » ¦ ¦ i ,0 i » « « ªd º N i =1 N i =1 ª℘ º »=« »=« » ℘= « 0 » = « N » «1 N » ¬« xd ¼» ¬℘1 ¼ « 1 x d « N ¦ i ,1 i » « N ¦ xi ,1di » ¬ i =1 ¼ ¬ i =1 ¼ Suponiendo que el sistema ha de ser resuelto usando la Regla de Crammer, se tiene que los valores para w0 y w1 están dados por: w0 = d x xd x2 1 x x x2 1 = d ⋅ x 2 − xd ⋅ x () x2 − x 2 w1 = d x xd 1 x x x2 = xd − d ⋅ x () x2 − x 2 Es claro que las expresiones encontradas para w0 y w1 corresponden con las Ecuaciones 2.2.12 y 2.2.13 presentadas en la Sección anterior. 2.4 La Desigualdad de Cauchy-Schwarz Sean u y v cualesquiera vectores en \ n . Su producto punto puede ser calculado mediante u ⋅ v = u ⋅ v ⋅ cos θ 44 Capítulo 2. Preliminares Matemáticos Donde θ es el ángulo que forman u y v. Es bien sabido que cos θ ∈ [-1,1] y que por tanto el valor absoluto aplicado sobre la función coseno hará que ésta tenga sus valores en [0, 1]. Por ello se plantea entonces la siguiente desigualdad: u ⋅v = u ⋅ v ⋅ cos θ ≤ u ⋅ v ⋅ cos θ Es claro que el término |cos θ| puede interpretarse como un factor de escalamiento que puede reducir el valor del producto de las magnitudes de u y v, u ⋅ v . Por lo tanto, se tiene que: u ⋅ v = u ⋅ v ⋅ cos θ ≤ u ⋅ v ⋅ cos θ ≤ u ⋅ v u ⋅v ≤ u ⋅ v Precisamente la última desigualdad, u ⋅ v ≤ u ⋅ v , es conocida como la Desigualdad de Cauchy-Schwarz. 45 Una Introducción al Cómputo Neuronal Artificial 46 Una Introducción al Cómputo Neuronal Artificial 3. La Neurona Adaline Una Introducción al Cómputo Neuronal Artificial 48 Capítulo 3. La Neurona Adaline 3.1 Estructura Sea X = [x1, x2, …, xP]T un vector en \ P . La neurona Adaline procesará a X y producirá su salida, un escalar, de la siguiente manera (véase la Figura 3.1): P § · y = sign ¨ w0 + ¦ wi xi ¸ i =1 © ¹ (Ecuación 3.1.1) Donde: • w0 es llamado término de Predisposición o Sesgo (Bias Term). • wi es el peso en la entrada xi, i = 1, 2, …, P. P • w0 + ¦ wi xi es llamada Sumatoria de Salida. • La función sign se define como (Véase la Figura 3.2): i =1 sign : \ → {−1,1} ­−1 si z sign( z ) = ® ¯ 1 si z<0 z≥0 W1 # Wi Xi # P z = w0 + ¦ wi xi z y y = sign( z ) i =1 Salida Entradas X1 WP XP Figura 3.1. Representación esquemática de una neurona Adaline. sign(z) 1 0 -1 Figura 3.2. Gráfica de la función sign. 49 Una Introducción al Cómputo Neuronal Artificial Ahora bien, considérese un conjunto compuesto por N vectores de entrada a presentar a la neurona: {X1, X2, …, XN} Como ya se comentó en la Sección 1.3, cada vector será de la forma: ª xi ,1 º « # » « » X i = « xi ,k » « » « # » « xi , P » ¬ ¼ También considérese un segundo conjunto compuesto por N vectores: {D1, D2, …, DN} Tales vectores formaran la salida esperada para la neurona. Cada vector será de la forma: ª di ,1 º « # » « » Di = « di ,k » « » « # » « di ,m » ¬ ¼ La relación entre el conjunto de vectores de entrada y el conjunto de vectores de salida está dada por el objetivo de que para un vector de entrada Xi se espera que la neurona proporcione la salida Di. El entrenamiento de una neurona tipo Adaline tiene por finalidad encontrar los pesos w0, w1, w2, …, wP tales que para todo vector de entrada Xi se proporcione como salida un vector Si tal que Si = Di o bien la diferencia Si - Di sea aceptable. De acuerdo a la Ecuación 3.1.1 tanto Di como Si tendrán únicamente un componente. • Por ejemplo, considérese el siguiente conjunto de entrenamiento: Se tienen los vectores de entrada: ª0 º ª1 º ª0º ª1º X1 = « » , X 2 = « » , X 3 = « » , X 4 = « » ¬0 ¼ ¬0 ¼ ¬1 ¼ ¬1¼ 50 Capítulo 3. La Neurona Adaline • El conjunto de vectores de salida se forma por: D1 = [ 0] , D2 = [1] , D3 = [1] , D4 = [1] • De manera que se espera que dado el vector de entrada ª0º o « » , la neurona proporcione [0] ¬0¼ ª1 º o « » , la neurona proporcione [1] ¬0¼ ª0º o « » , la neurona proporcione [1] ¬1 ¼ ª1º o « » , la neurona proporcione [1] ¬1¼ En este punto debe ser claro que nuestro objetivo es modelar la compuerta lógica OR. En la Figura 3.3 se presenta la correspondiente representación esquemática de la neurona para este problema en particular. Se tendrán 2 entradas y se proporcionará un escalar como salida. Dado que la función sign tiene por dominio el conjunto {-1, 1} entonces el conjunto de entrenamiento, y en particular el conjunto de vectores de salida, deberá ser ajustado de manera que sus valores estén precisamente en {-1, 1}. Es evidente que la única modificación a aplicar tiene que ver con el valor cero y ésta no altera el problema original: • D1 = [ −1] , D2 = [1] , D3 = [1] , D4 = [1] W1 2 z = w0 + ¦ wi xi i =1 z y = sign( z ) y Salidas Entradas X1 W2 X2 Figura 3.3. Esquema de una neurona Adaline para dar solución al modelado de la compuerta lógica OR. Por el momento sólo verificaremos la existencia de los pesos w0, w1 y w2 de manera que se obtienen siempre las salidas correctas. Considérense los pesos: • w1 = 0.5 • w2 = 0.5 • w0 = -0.25 51 Una Introducción al Cómputo Neuronal Artificial Ello implica que la Sumatoria de Salida tendrá la forma: z = 0.5x1 + 0.5x2 – 0.25 Aplicando cada vector de entrada a la sumatoria se obtiene: • 0.5(0) + 0.5(0) – 0.25 = -0.25 • 0.5(1) + 0.5(0) – 0.25 = 0.25 • 0.5(0) + 0.5(1) – 0.25 = 0.25 • 0.5(1) + 0.5(1) – 0.25 = 0.75 Finalmente, a cada salida z se le aplica la función sign. Con lo que se obtiene respectivamente: • sign(-0.25) = -1 • sign(0.25) = 1 • sign(0.25) = 1 • sign(0.75) = 1 Por lo tanto, hemos demostrado la existencia de pesos tales que una neurona Adaline es capaz de aprender y modelar la compuerta lógica OR. Evidentemente surge la pregunta de cómo es posible determinar tales pesos. Un mecanismo obvio, pero sumamente ineficiente en la práctica, es mediante prueba y error. Es claro que se requiere una metodología sistemática que nos permita encontrar los pesos. En las siguientes Secciones presentaremos dos métodos a fin de lograr tal objetivo. 3.2 Ajuste de Pesos de la Neurona Adaline por Mínimos Cuadrados En la Sección 2.3 describimos al Método de Mínimos Cuadrados como una solución al problema de la Correlación Lineal. Al observar la estructura interna de la neurona Adaline y en particular su Sumatoria de Salida P w0 + ¦ wi xi i =1 es claro que el objetivo es el ajuste de los pesos w0, w1, w2, … wP de manera que para cada vector de entrada se obtenga la salida correcta o tan cercana como sea posible al valor correcto. Además, tal como nos indica la misma sumatoria, el ajuste debe ser de manera que todo valor de salida proporcionado por la neurona es una combinación lineal de su correspondiente vector de entrada y el conjunto de pesos. Es por ello que el Método de Mínimos Cuadrados resultará ser una primera metodología para el ajuste de pesos en una neurona Adaline. El mismo método, y la Teoría que lo sustenta, nos garantiza que este ajuste será el mejor posible. 52 Capítulo 3. La Neurona Adaline Establezcamos primero puntos de conexión con la Teoría presentada en la Sección 2.3. Contaremos con N pares (Xi, di) en donde Xi es un vector en \ P+1 tal que ª xi ,0 = 1º « x » « i ,1 » X i = « xi ,2 » « » « # » « xi , P » ¬ ¼ y di es un escalar que corresponde a la salida que se espera proporcione la neurona cuando Xi le es enviado como entrada, i = 1, 2, 3, …, N. Sea W el vector de pesos de la neurona. Éste también estará en \ P+1 : ª w0 º «w » « 1» W = « w2 » « » « # » «¬ wP »¼ En este punto haremos una leve modificación a la estructura de la neurona en el sentido de que no será requerido el uso de la función sign. Por lo tanto tendremos una estructura neuronal como la presentada en la Figura 3.4. W1 # # P z = w0 + ¦ wk xi ,k z k =1 Salida Entradas Xi,1 WP Xi,P Figura 3.4. Estructura de la neurona Adaline omitiendo el uso de la función sign. 53 Una Introducción al Cómputo Neuronal Artificial Sea zi el escalar que produce la neurona como salida cuando se le envía como entrada el vector Xi. De hecho: P zi = ¦ wk xi ,k (Ecuación 3.2.1) k =0 Nótese que hemos incorporado al peso w0 a la sumatoria haciendo xi,0 = 1 para todo vector de entrada. Se define al Error de Entrenamiento para el i-ésimo par (Xi, di) como: εi = di - zi (Ecuación 3.2.2) Ahora se define al Costo de Entrenamiento para el vector de pesos W como: J (W ) = 1 2N N ¦ε 2 i (Ecuación 3.2.3) i =1 Es claro que el Costo de Entrenamiento no es más que la fórmula para el Promedio de los Errores al Cuadrado originalmente presentada en la Sección 2.3 (Ecuación 2.3.4). Es precisamente en este punto en que tenemos ya una conexión directa entre el objetivo de ajustar los pesos de la neurona Adaline y el método de Mínimos Cuadrados. Evidentemente, el costo de entrenamiento se minimiza al resolver la ecuación matricial (Véase la Sección 2.3, Ecuación 2.3.15): ℘ = RW El vector W contiene, una vez resuelta la ecuación, los pesos que deben ser aplicados a la Sumatoria de Salida P zi = ¦ wk xi ,k k =0 54 Capítulo 3. La Neurona Adaline Consideremos el caso del ajuste de pesos de manera que una neurona Adaline modele a la función Booleana presentada en la Tabla 3.1. Recuérdese que se agrega un 0-ésimo componente a los vectores de entrada: xi,0. Su valor es siempre igual a 1 y tiene la finalidad de incorporar al peso w0 en la Sumatoria de Salida. Tenemos entonces el conjunto de entrenamiento: ª1 º ª1 º ª1 º ª1º « » « » « » • X 1 = «0 » , X 2 = «1 » , X 3 = «0 » , X 4 = ««1»» «¬0 »¼ «¬0 »¼ «¬1 »¼ «¬1»¼ • • d1 = 1, d 2 = 0, d3 = 1, d 4 = 0 N=4 Tabla 3.1. Una compuerta lógica a ser modelada por una neurona Adaline. i xi,1 xi,2 di 1 2 3 4 0 1 0 1 0 0 1 1 1 0 1 0 Definimos en primer lugar a la matriz R. En este caso será de tamaño 3 × 3. De acuerdo a la Ecuación 2.3.10 (Sección 2.3) sus elementos están dados por: 1 4 1 4 • R0,0 = ¦ xi ,0 xi ,0 = ¦1 = 1 4 i =1 4 i =1 1 4 1 4 1 • R0,1 = ¦ xi ,1 xi ,0 = ¦ xi ,1 = 4 i =1 4 i =1 2 4 4 1 1 1 • R0,2 = ¦ xi ,2 xi ,0 = ¦ xi ,2 = 4 i =1 4 i =1 2 1 4 1 4 1 • R1,0 = ¦ xi ,0 xi ,1 = ¦ xi ,1 = 4 i =1 4 i =1 2 4 4 1 1 1 • R1,1 = ¦ xi ,1 xi ,1 = ¦ xi2,1 = 4 i =1 4 i =1 2 1 4 1 1 • R1,2 = ¦ xi ,2 xi ,1 = ( 0 + 0 + 0 + 1) = 4 i =1 4 4 4 4 1 1 1 • R2,0 = ¦ xi ,0 xi ,2 = ¦ xi ,2 = 4 i =1 4 i =1 2 1 4 1 1 • R2,1 = ¦ xi ,1 xi ,2 = ( 0 + 0 + 0 + 1) = 4 i =1 4 4 4 4 1 1 1 • R2,2 = ¦ xi ,2 xi ,2 = ¦ xi2,2 = 4 i =1 4 i =1 2 55 Una Introducción al Cómputo Neuronal Artificial Por lo tanto: ª «1 « 1 R=« «2 «1 « ¬« 2 1 2 1 2 1 4 1º 2» » 1» 4» 1 »» 2 »¼ La inversa de la matriz R está dada por: ª 3 −2 −2 º R = «« −2 4 0 »» «¬ −2 0 4 »¼ −1 Al aplicar la Ecuación 2.3.12 (Sección 2.3) tenemos que los elementos del vector ℘ están dados por: 1 4 1 4 1 • ℘0 = ¦ xi ,0 di = ¦ di = 4 i =1 4 i =1 2 1 4 • ℘1 = ¦ xi ,1di = 0 4 i =1 1 4 1 • ℘2 = ¦ xi ,2 di = 4 i =1 4 Entonces: ª1º «2» « » ℘= «0» «1» « » ¬4¼ Encontramos los valores del vector W mediante el producto matricial W = R-1℘ (Ecuación 2.3.16, Sección 2.3): ª1º − − 3 2 2 ª º «2» ª 1 º « » « W = « −2 4 0 »» « 0 » = «« −1»» « » ¬« −2 0 4 ¼» « 1 » ¬« 0 ¼» ¬4¼ 56 Capítulo 3. La Neurona Adaline • • • Por lo tanto se han identificado los siguientes pesos: w0 = 1 w1 = -1 w2 = 0 La Ecuación 3.2.3, correspondiente al costo de entrenamiento, describe, para este ejemplo en particular, a un hiperparaboloide inmerso en el espacio Euclidiano tetradimensional. La ecuación específica de tal lugar geométrico se obtiene al sustituir con los valores del conjunto de entrenamiento: w02 w12 w22 w0 w1 w0 w2 w1w2 w2 w0 1 J (W ) = + + + + + − − + 2 4 4 2 2 4 4 2 4 Calculemos el error de entrenamiento asociado a los pesos identificados al sustituirlos precisamente en la ecuación anterior: (1) 2 (−1) 2 (0) 2 (1)(−1) (1)(0) (−1)(0) 0 1 1 J (W ) = + + + + + − − + 2 4 4 2 2 4 4 2 4 =0 El punto (w0 = 1, w1 = -1, w2 = 0, J(W) = 0) es el único mínimo en la hipersuperficie de nuestro hiperparaboloide, lo que nos garantiza que los pesos encontrados son los mejores. De hecho estamos en la mejor de las situaciones al tener un error cero. Contamos entonces con una neurona Adaline óptima para el modelado de la compuerta lógica presentada en la Tabla 3.1. 3.3 Ajuste de Pesos de la Neurona Adaline por Descenso Escalonado A continuación describiremos al método de Descenso Escalonado. Se trata de un método de búsqueda de mínimos en una función f usando información proporcionada por el vector gradiente. Un punto interesante de esta metodología es que los gradientes usados no necesariamente se obtienen de la función a optimizar f, sino que éstos se calculan a partir de funciones auxiliares construidas a partir de f. Veremos que de hecho algunas definiciones asociadas al método de Mínimos Cuadrados son el punto de partida para la definición del Descenso Escalonado. Sin embargo, se observará que éste último proporciona un método más eficiente en términos del número de operaciones efectuadas. En la siguiente Sección se abordará primero el caso del Descenso Escalonado en el contexto de una neurona Adaline con una única entrada. Posteriormente, en la Sección 3.3.2 comentaremos el caso con múltiples entradas. En ambas situaciones se asume que la neurona proporciona como salida un único escalar. 57 Una Introducción al Cómputo Neuronal Artificial 3.3.1 Descenso Escalonado: Caso una entrada – una salida Sea N el número de elementos en el conjunto de entrenamiento, N > 2. Supóngase que se cuenta con un método iterativo para el entrenamiento de la neurona Adaline de manera que su vector de pesos es actualizado en cada iteración. Para la m-ésima iteración, sea Wm el vector de pesos actual de la neurona. El vector Wm es entonces actualizado de manera que se obtendrá un nuevo vector de pesos Wm+1. La actualización se efectuará mediante la siguiente regla: Wm+1 = Wm + Δwm (Ecuación 3.3.1) Donde Δwm es el llamado el Término de Variación o Cambio en Wm. Por otro lado, la instancia particular de la Ecuación 3.2.3 que describe el error de entrenamiento cuando se ajustan dos pesos está dada por: J (W ) = 1 2N N ¦ ε i2 = i =1 1 2N N ¦ (d i − ( w0 xi ,0 + w1 xi ,1 )) 2 i =1 Sabemos que la función J(W) define un paraboloide ya que sólo depende de las variables w0 y w1, y por tanto sólo tiene un mínimo. También sabemos que este mínimo puede ser determinado por el método de Mínimos Cuadrados. J(W) ∇J(W) Figura 3.5. Sección transversal del paraboloide definido por J(W). El vector gradiente nos indica la dirección de máximo crecimiento de J(W). Ahora bien, la teoría presentada en la Sección 2.1 nos dejó claro que un vector gradiente de J(W), es decir ∇J(W), es un vector que apunta a la dirección de máximo crecimiento. Este vector nos indica la dirección hacia la cual el error se maximiza (Véase la 58 Capítulo 3. La Neurona Adaline Figura 3.5 en la cual se presenta una sección transversal del paraboloide definido por J(W)). Sin embargo, el vector gradiente ∇J(W) también puede ser usado para buscar el mínimo de J(W). ∇J(W) puede ser calculado de manera local al ubicarnos en un punto dado (w0, w1). Dado que la meta es alcanzar al mínimo de J(W) entonces partiendo de (w0, w1), la dirección a tomar para efectuar la búsqueda debe ser la opuesta al gradiente, es decir, usar la dirección dada por -∇J(W) (Véase la Figura 3.6). -∇J(W) ∇J(W) J(W) Figura 3.6. Sección transversal del paraboloide definido por J(W). La dirección opuesta del vector gradiente indica la dirección en donde se ubica el mínimo de J(W). Ahora conectaremos estos últimos puntos para definir de manera más precisa el proceso iterativo que mencionamos al inicio de esta Sección y hacer uso de la Ecuación 3.3.1 para la actualización del vector de pesos de la neurona. Véase la Figura 3.7. Dado un vector de pesos iniciales W1, se calcula el gradiente de J(W) en W1: ∇J(W1). Nótese que la función J(W) está definida para cualquier punto, por lo tanto, W1 podría ser inicializado con valores aleatorios. Se inicia la búsqueda del mínimo en dirección opuesta a ∇J(W1). Para ello, se requiere que nos desplacemos a otro punto. Entonces, modificamos proporcionalmente al vector W1 usando -∇J(W1) de tal forma que obtenemos un nuevo vector de pesos W2. Ya ubicados en el punto W2, se calcula nuevamente el gradiente de J(W) en W2, es decir, se obtiene ∇J(W2). Ahora debemos continuar la búsqueda en dirección opuesta a ∇J(W2). Se modifica al vector W2 de manera proporcional usando a ∇J(W2) de tal forma que se obtiene un nuevo vector de pesos W3. Este proceso continúa de manera iterativa de tal forma que en la m-ésima iteración estaremos ubicados en el punto Wm. Se calcula el gradiente de J(W) en Wm: ∇J(Wm). Se continúa la búsqueda en dirección opuesta a ∇J(Wm). Se modifica al vector Wm de manera proporcional usando -∇J(Wm) de donde se obtiene un nuevo vector de pesos Wm+1. Este proceso terminará cuando el vector 59 Una Introducción al Cómputo Neuronal Artificial gradiente en el punto actual sea el vector cero o esté tan cerca como sea posible al vector cero. La idea es que en cada iteración nos acerquemos cada vez más al mínimo de la función J(W). El punto final (w0, w1) es donde precisamente los valores de los pesos se optimizan. ∇J(W1) J(W) W1 ∇J(W3) ∇J(W2) W2 W3 ... Wm+1 Wm ∇J(Wm) Figura 3.7. Sección transversal del paraboloide definido por J(W). Dado un (punto) vector de pesos inicial W1 y -∇J(W1) se obtiene el nuevo (punto) vector de pesos W2. Usando a W2 y -∇J(W2) se obtiene el (punto) vector de pesos W3. Se procede de manera sucesiva hasta obtener un vector de pesos Wm tal que ∇J(Wm) = 0 o tan cercano a éste como sea posible. El Algoritmo 3.1 presenta la codificación del proceso que acabamos de definir. Nuestro procedimiento recibe al conjunto de vectores de entrada en la forma de una matriz de tamaño N × 2 de manera que la primer columna contiene únicamente el valor 1 = xi,0. En la columna 2 se tendrán los valores xi,1, i = 1, 2, …, N. El algoritmo recibe como entrada también 3 constantes: δ, α y maxIt. La constante δ ∈ \ + ∪ {0} representa el valor mínimo aceptable para la magnitud del vector gradiente de la función J(W). Mientras la magnitud de ∇J(W) sea mayor a δ el ciclo while del algoritmo seguirá efectuando iteraciones. Mencionamos previamente que el vector de pesos actual es actualizado de manera proporcional con el negativo del vector gradiente de J(W). La dirección opuesta del vector gradiente nos indica hacia donde mover al vector de pesos mientras que la constante de entrada α ∈ \ + servirá para establecer la magnitud de tal movimiento. Por lo regular, α es un valor en el intervalo (0,1). Por último, tenemos a la constante maxIt ∈ ` . Nótese que el número de iteraciones que efectuará el Algoritmo 3.1 depende del valor de las constantes δ y α. En un caso ideal se haría δ = 0. Sin embargo, es posible, debido a errores de redondeo o punto flotante, que se requiera un gran número de iteraciones para efectivamente lograr alcanzar el punto en la función J(W) tal que el vector gradiente sea el vector cero. Por lo tanto, maxIt simplemente indicará el número máximo de iteraciones que el algoritmo 60 Capítulo 3. La Neurona Adaline efectuará. Si tal número de iteraciones es alcanzado entonces el algoritmo retorna como salida al último vector de pesos calculado. Nótese que en consecuencia el Algoritmo 3.1 nos proporcionará como salida el punto donde J(W) tiene su mínimo o bien punto cercano a éste. Algoritmo 3.1. Cálculo del mínimo de la función J(W) mediante búsqueda del vector gradiente ∇J(W) = 0 y actualización iterativa del vector de pesos. Procedure FindMinimum (Matrix x[1, …, N][0,1], Array d[1, …, N], Real δ, Real α, Integer maxIt) // Se asignan valores aleatorios al vector de pesos iniciales. W = new Array[0,1] W[0] = Random( ) W[1] = Random( ) m=0 while (m < maxIt) do // Se calcula el vector gradiente en el punto dado por W. ∇J_W = GetGradientVector(x, d, W, N) // Se obtiene la magnitud del vector gradiente. ∇J_W[0]2 + ∇J_W[1]2 // Si la magnitud del vector gradiente es menor o igual a δ // entonces se retorna como salida el vector de pesos actual. if (mag ≤ δ) then return W end-of-if // Se obtiene la variación o cambio a aplicar al vector de pesos W. Δwm = new Array[0,1] Δwm[0] = α ∗ (−1) ∗ ∇J_W[0] Δwm[1] = α ∗ (−1) ∗ ∇J_W[1] // Se actualiza el vector de pesos. W[0] = W[0] + Δwm[0] W[1] = W[1] + Δwm[1] m=m+1 end-of-while // Si se alcanzó el número máximo de iteraciones entonces se retorna como // salida al último vector de pesos calculado. return W end-of-procedure Real mag = Hace falta especificar a la función GetGradientVector la cual es invocada en el Algoritmo 3.1. Ésta recibe como entrada el conjunto de entrenamiento de la neurona y el vector de pesos actual. Tal como indica su nombre, su objetivo es calcular al vector 61 Una Introducción al Cómputo Neuronal Artificial gradiente en el punto dado por el vector de pesos. Ello implica que entonces implementa las Ecuaciones 2.2.6 y 2.2.7 (Sección 2.2) que corresponden a las derivadas parciales de J(W): N x N d δ J (W ) • = w1 ¦ 1,i + w0 − ¦ i δ w0 i =1 N i =1 N N x N x N d x δ J (W ) = w1 ¦ 1,i + w0 ¦ 1,i − ¦ i 1,i δ w1 N i =1 N i =1 N i =1 2 • Nótese que las sumatorias dependen únicamente del conjunto de entrenamiento. Por lo que éstas podrían ser precalculadas y pasadas también como entrada al Algoritmo 3.1 y en consecuencia a la función GetGradientVector. El procedimiento de búsqueda de mínimo que acabamos de describir e implementar en el Algoritmo 3.1 es precisamente el método de Descenso Escalonado. La idea, como se puede apreciar, es ir descendiendo sobre la función de error J(W) usando “pasos escalonados” cuya dirección y longitud vienen dados por el vector de pesos actual Wm y la dirección opuesta del vector gradiente de J(W) en el punto Wm. Se espera que por cada paso ejecutado, el vector gradiente se acerque cada vez más al vector cero. Entre más nos aproximemos al vector cero, el vector de pesos se aproximará cada vez más a sus valores óptimos ubicados en el mínimo de la función J(W). El método de Descenso Escalonado que acabamos de describir requiere contar con el gradiente de la función J(W). Ello implica que todos los elementos del conjunto de entrenamiento son considerados en cada iteración en la forma de las sumatorias 2 N N d x di N x1,i N x1,i i 1,i , , , y . En el caso particular que estamos tratando en esta ¦ ¦ ¦ ¦ N i =1 N i =1 N i =1 N i =1 Sección, neurona con una entrada-una salida, pueden que se detecten situaciones con la eficiencia si el conjunto de entrenamiento es muy grande. Sin embargo, cuando tomamos en cuenta el caso una neurona varias entradas-una salida veremos que el cálculo del gradiente se vuelve ineficiente debido a que se deben considerar P+1 pesos. Para cada uno de éstos tendremos que obtener la derivada parcial de J(W) respecto al j-ésimo peso (Ecuación 2.3.5, Sección 2.3), j = 0, 1, 2, …, P, la cual a su vez requiere tomar en cuenta a todo el conjunto de entrenamiento para su cálculo: P N P δ J (W ) 1 N 1§ N § · · = − ¦ xi , j ¨ di − ¦ wk xi ,k ¸ = − ¨ ¦ xi , j di − ¦ xi , j ¦ wk xi ,k ¸ , j = 0, 1, …, P N i =1 N © i =1 δ wj k =0 i =1 k =0 © ¹ ¹ N Es posible precalcular la sumatoria ¦x i, j di ya que únicamente depende del conjunto de i =1 N entrenamiento. Sin embargo no es así con la sumatoria doble i, j i =1 depende también de los pesos w0, w1, …, wP. 62 P ¦x ¦w x k i ,k k =0 debido a que Capítulo 3. La Neurona Adaline Toda la problemática impuesta por la cuestión de la eficiencia encuentra una solución al simplificar los cálculos cuando consideremos en cada iteración sólo una parte de la función J(W). Es decir, formaremos funciones auxiliares a partir de J(W) que mejorarán la eficiencia de la búsqueda del mínimo al calcular gradientes que no dependen de todo el conjunto de entrenamiento en cada iteración: usarán únicamente una parte de éste. Sea N el número de elementos en el conjunto de entrenamiento, N > 2. Nuevamente partimos del hecho de que contamos con un método iterativo para el entrenamiento de la neurona Adaline de manera que su vector de pesos es actualizado en cada iteración. Para la m-ésima iteración, sea Wm el vector de pesos actual de la neurona. En esta misma iteración se le presentará a la neurona únicamente el m-ésimo elemento del conjunto de entrenamiento: (xm, dm), xm, dm ∈ \ . Recordemos que xm es el escalar de entrada y dm es el escalar que se espera proporcione la neurona como salida. El vector Wm es entonces actualizado de manera que se obtendrá un nuevo vector de pesos Wm+1. La actualización se efectuará mediante la regla dada por la Ecuación 3.3.1: Wm+1 = Wm + Δwm Sin embargo el Término de Variación o Cambio del vector de pesos, Δwm, ahora estará dado por: Δwm = μ(-∇J(W)m) (Ecuación 3.3.2) Para la m-ésima iteración se tendrá la función J(W)m. A ésta se le llama Error al Cuadrado Local y es precisamente el error que existe entre la salida esperada dm y la salida zm proporcionada por la neurona cuando se le equipa con el vector de pesos actual Wm y usando únicamente el m-ésimo elemento del conjunto de entrenamiento (xm, dm). El error al cuadrado local se define entonces como: J(W)m = (dm – zm)2 = (dm – (wm,0xm,0 + wm,1xm,1))2 (Ecuación 3.3.3) Recordemos que wm,0 es el término de sesgo o predisposición de la neurona Adaline y que xm,0 = 1 y xm,1 = xm, m = 1, 2, …, N. Nótese que J(W)m es también un paraboloide inmerso en el espacio tridimensional y que por lo tanto cuenta con un único mínimo. 63 Una Introducción al Cómputo Neuronal Artificial Ahora determinaremos al vector gradiente de la función J(W)m. Entonces calculamos las derivadas parciales de J(W)m respecto a las variables wm,0 y wm,1: δ J (W ) m δ ª(d − ( wm,0 xm ,0 + wm,1 xm ,1 )) 2 º¼ = δ wm,0 δ wm,0 ¬ m = 2(d m − ( wm,0 xm ,0 + wm,1 xm ,1 )) δ δ wm ,0 (d m − wm ,0 xm ,0 − wm,1 xm ,1 ) = 2(d m − ( wm,0 xm ,0 + wm,1 xm ,1 ))(− xm ,0 ) δ J (W ) m δ ª¬ (d m − ( wm ,0 xm ,0 + wm,1 xm ,1 )) 2 º¼ = δ wm ,1 δ wm,1 = 2(d m − ( wm,0 xm ,0 + wm,1 xm ,1 )) δ δ wm ,1 (d m − wm ,0 xm,0 − wm,1 xm,1 ) = 2(d m − ( wm,0 xm ,0 + wm,1 xm ,1 ))(− xm ,1 ) δ J (W ) m δ J (W ) m y tienen como factor común a −2(d m − ( wm,0 xm ,0 + wm,1 xm,1 )) δ wm ,0 δ wm ,1 entonces se tendrá finalmente que el vector gradiente de J(W)m esta dado por: Dado que ª xm ,0 º ∇J (W ) m = −2(d m − ( wm,0 xm ,0 + wm,1 xm ,1 )) « » ¬ xm ,1 ¼ (Ecuación 3.3.4) Nótese que ∇J(W)m es uno de los términos presentes en la variación o cambio del vector de pesos, Δwm, (Ecuación 3.3.2). Es claro que ∇J(W)m maximiza el error de la función J(W)m, por lo tanto, si nuestro objetivo es buscar su mínimo, usaremos la dirección opuesta: -∇J(W)m. El m-ésimo término de la sumatoria presente en la función de error J(W) es precisamente (d m − ( w0 xm,0 + w1 xm,1 ))2 . Ello implica que de hecho la función de error al cuadrado local J(W)m puede ser vista como obtenida a partir de J(W). En consecuencia, ∇J(W)m puede ser visto también como un estimador de ∇J(W) el cual se usará para aproximarnos también al mínimo global de J(W). La idea ahora es reespecificar el método de Descenso Escalonado para entrenar una neurona Adaline haciendo uso de las Ecuaciones 3.3.2 y 3.3.3. Se tendrá un proceso iterativo en el cual por cada elemento del conjunto de entrenamiento (xm, dm) se considerará una función de error J(W)m y el vector de pesos actual Wm. Específicamente se calculará el vector gradiente de J(W)m en el punto dado por Wm. Nótese que el cálculo de ∇J(W)m (Ecuación 3.3.4) es mucho más sencillo, en términos de eficiencia, que el cálculo del 64 Capítulo 3. La Neurona Adaline vector gradiente de la función J(W) (Ecuaciones 2.2.6 y 2.2.7, Sección 2.2) precisamente porque ∇J(W)m sólo requiere del m-ésimo par del conjunto de entrenamiento. Como ya se comentó antes, ∇J(W)m servirá como un estimador para ∇J(W). Algoritmo 3.2. Método de Descenso Escalonado para la búsqueda de un mínimo: caso de una única entrada. Procedure SteepestDescent(Matrix x[1, …, N][0,1], Array d[1, …, N], Real μ) // Se asignan valores aleatorios al vector de pesos iniciales. W = new Array[0,1] W[0] = Random( ) W[1] = Random( ) for m = 1 until N do Real ε_m = d[m] – (W[0] * x[m][0] + W[1] * x[m][1]) // Se calcula el vector gradiente de J(W)m en el punto dado por W. ∇J_Wm = new Array[0,1] ∇J_Wm[0] = -2 * ε_m * x[m][0] ∇J_Wm[1] = -2 * ε_m * x[m][1] // Se obtiene la variación o cambio a aplicar al vector de pesos W. Δwm = new Array[0,1] Δwm[0] = μ ∗ (−1) ∗ ∇J_Wm[0] Δwm[1] = μ ∗ (−1) ∗ ∇J_Wm[1] // Se actualiza el vector de pesos. W[0] = W[0] + Δwm[0] W[1] = W[1] + Δwm[1] end-of-for // Se retorna como salida al último vector de pesos calculado. return W end-of-procedure La implementación del proceso anterior requiere un vector de pesos inicial W1. Por lo regular sus valores son inicializados aleatoriamente. Para cada iteración m, m = 1, 2, 3, …, N, primero se selecciona al m-ésimo elemento del conjunto de entrenamiento. Posteriormente se calcula el valor de εm = [dm – (wm,0xm,0 + wm,1xm,1)] y entonces se obtiene el vector gradiente de J(W)m en el punto Wm mediante ª xm ,0 º ∇J (W ) m = −2ε m « » ¬ xm,1 ¼ Finalmente se actualiza proporcionalmente al vector de pesos Wm al sumarle el negativo de ∇J (W ) m . La proporción a aplicar viene dada por la constante μ ∈ \ + . De esta manera se obtiene el vector de pesos actualizado Wm+1. El Algoritmo 3.2 presenta entonces el procedimiento de entrenamiento de una neurona Adaline de una entrada y una salida mediante el método de Descenso Escalonado. Nótese que hemos establecido que el Algoritmo 3.2 efectúa en total N iteraciones, una por cada elemento del conjunto de 65 Una Introducción al Cómputo Neuronal Artificial entrenamiento. Sin embargo, y dependiendo del problema que se esté modelando, es posible que se requiera presentar en más de una ocasión al todo el conjunto de entrenamiento. Analizaremos esta situación en los siguientes párrafos. Considérese el conjunto de entrenamiento presentado en la Tabla 3.2. Veamos que resultados nos proporciona el método de Descenso Escalonado usando al vector inicial de pesos ª0.5º W1 = « » ¬0.5¼ y la constante μ = 0.02. Efectuaremos en total N = 11 actualizaciones del vector de pesos. Véase la Tabla 3.3. En la iteración m = 11 se tiene el vector de pesos ª1.2432 º W12 = « » ¬3.4485¼ El conjunto de entrenamiento de la Tabla 3.2 ya había sido presentado en la Sección 2.2 (Tabla 2.1) para ejemplificar el método de Mínimos Cuadrados. En ese caso se obtuvieron los pesos finales y óptimos w0 = 3.9545 y w1 = 2.9818. Después de 11 iteraciones el método de Descenso Escalonado nos ha proporcionado las aproximaciones w12,0 = 1.2432 y w12,1 = 3.4485 la cuales pueden considerarse un tanto alejadas de las óptimas. Sin embargo, comentamos previamente que es posible efectuar una presentación más del conjunto de entrenamiento si se considerase necesario, es decir, efectuar otras 11 iteraciones. En este caso aplicaríamos nuevamente el Algoritmo 3.2 pero usando como vector inicial W1 al vector de pesos final que se obtuvo en la presentación anterior del conjunto de entrenamiento, es decir, el vector W12. La Tabla 3.4 muestra los resultados obtenidos al aplicar nuevamente el método de Descenso Escalonado usando ahora como vector inicial ª1.2432 º W1 = « » ¬3.4485¼ En este caso se obtuvo la aproximación w12,0 = 2.1486 y w12,1 = 3.2661. Nótese que se ha obtenido una mejora bastante considerable respecto a los pesos obtenidos en la primer presentación del conjunto de entrenamiento. En realidad, es posible efectuar tantas presentaciones sean necesarias. El Algoritmo 3.3 es una versión modificada del Algoritmo 3.2. Recibe una entrada adicional T que indica el número de veces que el conjunto de entrenamiento será presentado. Nótese que hemos especificado que para la primer presentación, t = 1, el vector W1 es inicializado aleatoriamente. En las posteriores presentaciones, t ≥ 2, el vector W1 es el último vector de pesos que se obtuvo en la presentación anterior. 66 Capítulo 3. La Neurona Adaline Tabla 3.2. Un conjunto de entrenamiento al que se le aplicará el método de Descenso Escalonado a fin de que una neurona Adaline lo modele. di i x1,i 1 -5 -10.5 2 -4 -8.5 3 -3 -4.5 4 -2 -2.5 5 -1 0.5 6 0 4.5 7 1 6.5 8 2 10.5 9 3 12.5 10 4 16.5 11 5 18.5 Tabla 3.3.Aplicación del método de Descenso Escalonado para el ajuste de pesos de una neurona Adaline con el conjunto de entrenamiento de la Tabla 3.2. ª xm,0 º Iteración m εm = [dm – (wm,0xm,0 + wm,1xm,1)] ∇J (W ) m = −2ε m « » Wm+1 = Wm + μ(- ∇J (W ) m ) ¬ xm,1 ¼ 1 ε1 = −8.5 2 ε2 = 0.14 3 ε3 = 1.8672 4 ε4 = 1.667 5 ε5 = 2.0732 6 ε6 = 4.1301 7 ε7 = 4.1876 8 ε8 = 5.9078 9 ε9 = 4.3088 10 ε10 = 3.6508 11 ε11 = −0.3503 17 º ∇J (W )1 = ª« » ¬ −85¼ −0.28º ∇J (W ) 2 = ª« » ¬ 1.12 ¼ W2 = ª0.16 º « 2.2 » ¬ ¼ = ª 0.1656 º W3 « 2.1776 » ¬ ¼ −3.7344 º ∇J (W )3 = ª« » ¬11.2032 ¼ −2.3335º ∇J (W ) 4 = ª« » ¬ 4.6671 ¼ W4 = ª0.2402 º «1.9535 » ¬ ¼ −4.1464 º ∇J (W )5 = ª« » ¬ 4.1464 ¼ −8.2602 º ∇J (W )6 = ª« » ¬ 0 ¼ −8.3752 º ∇J (W )7 = ª« » ¬ −8.3752 ¼ −11.8157 º ∇J (W )8 = ª« » ¬ −23.6314 ¼ −8.6177 º ∇J (W )9 = ª« » − ¬ 25.8533¼ −7.3017 º ∇J (W )10 = ª« » ¬ −29.207 ¼ 0.7006 º ∇J (W )11 = ª« » ¬3.5032 ¼ W5 = ª0.2869 º «1.8601 » ¬ ¼ = ª 0.3698 º W6 «1.7772 » ¬ ¼ W7 = ª0.5350 º «1.7772 » ¬ ¼ = ª 0.7025 º W8 «1.9447 » ¬ ¼ W9 = ª 0.9389 º « 2.4174 » ¬ ¼ = ª1.1112 º W10 « 2.9344 » ¬ ¼ W11 = ª1.2573 º «3.5186 » ¬ ¼ W12 = ª1.2432 º «3.4485» ¬ ¼ 67 Una Introducción al Cómputo Neuronal Artificial Tabla 3.4. Aplicación del método de Descenso Escalonado para el ajuste de pesos de una neurona Adaline presentando por segunda vez el conjunto de entrenamiento de la Tabla 3.2 y usando como vector de pesos iniciales W = ª1.2432 º . 1 «3.4485» ¬ ¼ Iteración m εm = [dm – (wm,0xm,0 + wm,1xm,1)] 1 ε1 = 5.4994 2 ε2 = −0.5686 3 ε3 = 1.3784 4 ε4 = 0.5528 5 ε5 = 1.2122 6 ε6 = 2.9337 7 ε7 = 2.6348 8 ε8 = 4.1371 9 ε9 = 2.6918 10 ε10 = 2.6741 11 ε11 = −0.513 ª xm,0 º ∇J (W ) m = −2ε m « » ¬ xm,1 ¼ −10.9988º ∇J (W )1 = ª« » ¬ 54.9941 ¼ Wm+1 = Wm + μ(- ∇J (W ) m ) W2 = ª1.4632 º « 2.3486 » ¬ ¼ 1.1372 º ∇J (W ) 2 = ª« » ¬ −4.549 ¼ −2.7567 º ∇J (W )3 = ª« » ¬ 8.2703 ¼ W3 = ª1.4405 º « 2.4396 » ¬ ¼ = ª1.4956 º W4 « 2.2742 » ¬ ¼ −1.1056 º ∇J (W ) 4 = ª« » ¬ 2.2112 ¼ −2.4244 º ∇J (W )5 = ª« » ¬ 2.4244 ¼ W5 = ª1.5177 º « 2.23 » ¬ ¼ −5.8674 º ∇J (W )6 = ª« » ¬ 0 ¼ −5.2697 º ∇J (W )7 = ª« » ¬ −5.2697 ¼ −8.2743 º ∇J (W )8 = ª« » − ¬ 16.5487 ¼ −5.3837 º ∇J (W )9 = ª« » ¬ −16.1511¼ −5.3484 º ∇J (W )10 = ª« » ¬ −21.3936 ¼ 1.026 º ∇J (W )11 = ª« » ¬5.1303¼ W6 = ª1.5662 º « 2.1815» ¬ ¼ = ª1.6836 º W7 « 2.1815» ¬ ¼ W8 = ª 1.789 º « 2.2869 » ¬ ¼ W9 = ª1.9544 º « 2.6178» ¬ ¼ W10 = ª 2.0621º « 2.9409 » ¬ ¼ = ª 2.1691º W11 «3.3687 » ¬ ¼ W12 = ª 2.1486 º « 3.2661» ¬ ¼ En la Tabla 3.5 se presentan los vectores de pesos W12 en la t-ésima presentación, t = 1, 2, …, 10. Los vectores de pesos obtenidos en la primera y segunda presentación son los mismos que se habían descrito en las iteraciones m = 11 de las Tablas 3.3 y 3.4. En la última presentación, t = 10, se obtuvo la aproximación de pesos w12,0 = 3.7717 y w12,1 = 2.9389. Nótese que en este punto contamos ya con valores bastante cercanos a los óptimos w0 = 3.9545 y w1 = 2.9818. En el método de Descenso Escalonado es posible efectuar tantas presentaciones del conjunto de entrenamiento sean requeridas. En este punto es muy probable que no se aprecie una diferencia sustancial comparando con el método de Mínimos Cuadrados respecto al número de operaciones efectuadas. En la siguiente Sección se retomará este tópico, sin embargo, hemos de recalcar que parte la valía del Descenso Escalonado radica en la simplicidad de las operaciones utilizadas. 68 Capítulo 3. La Neurona Adaline Algoritmo 3.3. Método de Descenso Escalonado para la búsqueda de un mínimo: caso de una única entrada y T presentaciones del conjunto de entrenamiento. Procedure SteepestDescent(Matrix x[1,…,N][0,1], Array d[1, …, N], Real μ, Integer T) // Se asignan valores aleatorios al vector de pesos iniciales. W = new Array[0,1] W[0] = Random( ) W[1] = Random( ) for t = 1 until T do for m = 1 until N do Real ε_m = d[m] – (W[0] * x[m][0] + W[1] * x[m][1]) // Se calcula el vector gradiente de J(W)m en el punto dado por W. ∇J_Wm = new Array[0,1] ∇J_Wm[0] = -2 * ε_m * x[m][0] ∇J_Wm[1] = -2 * ε_m * x[m][1] // Se obtiene la variación o cambio a aplicar al vector de pesos W. Δwm = new Array[0,1] Δwm[0] = μ ∗ (−1) ∗ ∇J_Wm[0] Δwm[1] = μ ∗ (−1) ∗ ∇J_Wm[1] // Se actualiza el vector de pesos. W[0] = W[0] + Δwm[0] W[1] = W[1] + Δwm[1] end-of-for end-of-for return W // Se retorna como salida al último vector de pesos calculado. end-of-procedure 3.3.2 Descenso Escalonado: Caso varias entradas – una salida Consideremos ahora el caso de una neurona de tipo Adaline con P entradas y una única salida. Sea N el número de elementos del conjunto de entrenamiento tal que N > P+1. Formalmente, la neurona recibirá como entrada un vector Xm en \ P +1 , 1 ≤ m ≤ N: ª xm,0 = 1º « x » « m,1 » X m = « xm ,2 » « » « # » « xm , P » ¬ ¼ Recordemos que el componente agregado xm,0 = 1 se relacionará con el término de sesgo o predisposición de la neurona. 69 Una Introducción al Cómputo Neuronal Artificial Ahora retomaremos algunos conceptos ya presentados en la Sección anterior. Sea Wm el vector de pesos obtenido al presentar a la neurona el m-ésimo par del conjunto de entrenamiento (Xm, dm), dm ∈ \ . A partir de Wm y (Xm, dm) se actualiza al vector de pesos mediante la regla (Ecuación 3.3.1): Wm+1 = Wm + Δwm Donde Δwm es el Término de Variación o Cambio en Wm dado por (Ecuación 3.3.2): Δwm = μ(-∇J(W)m) J(W)m es el error entre la salida proporcionada por la neurona y el valor esperado dm al usar los pesos en Wm y el vector de entrada Xm. J(W)m se define ahora como (nótese la similitud con la Ecuación 3.3.3): P § · J (W ) m = (d m − Wm ⋅ X m ) = ¨ d m − ¦ wm ,k xm ,k ¸ k =0 © ¹ 2 2 (Ecuación 3.3.5) Tabla 3.5. Vectores de pesos obtenidos al final de la t-ésima presentación, t = 1, 2, …, 10, mediante Descenso Escalonado, para el conjunto de entrenamiento de la Tabla 3.2. Presentación t Vectores de Pesos en m = 11 ª1.2432 º 1 «3.4485» ¬ ¼ ª 2.1486 º 2 « 3.2661» ¬ ¼ ª 2.7364 º 3 «3.1476 » ¬ ¼ ª 3.1181º 4 «3.0707 » ¬ ¼ ª3.3659 º 5 «3.0207 » ¬ ¼ ª3.5268º 6 « 2.9883» ¬ ¼ ª3.6312 º 7 « 2.9672 » ¬ ¼ ª 3.6991º 8 « 2.9535» ¬ ¼ ª 3.7431º 9 « 2.9447 » ¬ ¼ ª3.7717 º 10 « 2.9389 » ¬ ¼ 70 Capítulo 3. La Neurona Adaline De acuerdo a la Ecuación 3.3.2, se requiere calcular el vector gradiente de J(W)m, es decir, ∇J(W)m: ª δ J (W ) m º « δw » m ,0 « » « δ J (W ) m » « » ∇J (W ) m = « δ wm ,1 » « » # « » « δ J (W ) m » « δw » m,P ¼ ¬ (Ecuación 3.3.6) Consideremos el j-ésimo componente de ∇J(W)m. Entonces: P δ J (W ) m δ § · d m − ¦ wm ,k xm ,k ¸ = ¨ δ wm , j δ wm , j © k =0 ¹ 2 P § · δ = 2 ¨ d m − ¦ wm ,k xm ,k ¸ k =0 © ¹ δ wm , j P § · d − ¨ m ¦ wm ,k xm ,k ¸ k =0 © ¹ P δ § ·§ = 2 ¨ d m − ¦ wm ,k xm ,k ¸ ¨ − k =0 © ¹ ¨© δ wm, j P ¦w m,k k =0 · xm ,k ¸ ¸ ¹ P · δ § ·§ = 2 ¨ d m − ¦ wm ,k xm ,k ¸ ¨ − wm , j xm , j ¸ ¸ k =0 © ¹ ¨© δ wm, j ¹ P § · = 2 ¨ d m − ¦ wm ,k xm ,k ¸ ( − xm , j ) k =0 © ¹ = −2 xm , j (d m − Wm ⋅ X m ) Es decir: δ J (W ) m = −2 xm , j (d m − Wm ⋅ X m ) δ wm , j (Ecuación 3.3.7) 71 Una Introducción al Cómputo Neuronal Artificial Para cada m, m = 0, …, P, la Ecuación 3.3.7 nos proporciona el m-ésimo componente de ∇J (W ) m . Es claro que todos los componentes del vector gradiente de J (W ) m tienen el factor común −2(d m − Wm ⋅ X m ) . Por lo tanto ∇J (W ) m queda como: ª −2 xm ,0 (d m − Wm ⋅ X m ) º ª xm,0 º « −2 x (d − W ⋅ X ) » «x » m ,1 m m m » m ,1 » « « ∇J (W ) m = = −2(d m − Wm ⋅ X m ) « » « # » # « » « » ¬ −2 xm , P (d m − Wm ⋅ X m ) ¼ ¬ xm , P ¼ (Ecuación 3.3.8) Algoritmo 3.4. Método de Descenso Escalonado para la búsqueda de un mínimo: caso de varias entradas y T presentaciones del conjunto de entrenamiento. Procedure SteepestDescent (Matrix x[1,…,N][0,…,P], Array d[1, …, N], Real μ, Integer T) // Se asignan valores aleatorios al vector de pesos iniciales. W = new Array[0,…,P] for i = 0 until P W[i] = Random( ) end-of-for for t = 1 until T do for m = 1 until N do Real ε_m = 0 for i = 0 until P ε_m = ε_m + W[i] * x[m][i] end-of-for ε_m = d[m] − ε_m // Se calcula el vector gradiente de J(W)m en el punto dado por W. ∇J_Wm = new Array[0,…,P] for i = 0 until P ∇J_Wm[i] = -2 * ε_m * x[m][i] end-of-for // Se obtiene la variación o cambio a aplicar al vector de pesos W. Δwm = new Array[0,…,P] for i = 0 until P Δwm[i] = μ ∗ (−1) ∗ ∇J_Wm[i] end-of-for for i = 0 until P W[i] = W[i] + Δwm[i] // Se actualiza el vector de pesos. end-of-for end-of-for end-of-for return W // Se retorna como salida al último vector de pesos calculado. end-of-procedure 72 Capítulo 3. La Neurona Adaline Contamos ya con los elementos para definir el método de Descenso Escalonado en el caso de una neurona con P entradas y una salida. La Ecuación 3.3.5, J (W ) m = (d m − Wm ⋅ X m ) 2 , determina el error al cuadrado existente entre la salida actual de la neurona y el m-ésimo elemento del conjunto de entrenamiento (Xm, dm). Es claro que la función J (W ) m es uno de los términos que forman a la función J(W) de Costo de Entrenamiento para el vector de pesos W (Ecuación 3.2.3): J (W ) = 1 2N N ¦ ε i2 = i =1 1 2N N ¦ (d i − Wi ⋅ X i ) 2 i =1 En este sentido el método de Descenso Escalonado utiliza a J (W ) m para obtener gradientes que pueden ser vistos como estimaciones o aproximaciones de los vectores gradientes de J(W). La ventaja es que ∇J (W ) m se calcula únicamente en función de (Xm, dm) y Wm, mientras que el gradiente de J(W) requiere a todo el conjunto de entrenamiento (véase la Ecuación 2.3.5). Entonces, el procedimiento de Descenso Escalonado para actualizar a Wm es el siguiente: • Seleccionar al vector de entrada Xm y la salida esperada dm. • Se calcula el error de entrenamiento para los pesos en Wm mediante P ε m = d m − Wm ⋅ X m = d m − ¦ wm ,k xm ,k k =0 • Se aplica la Ecuación 3.3.8 de manera que se obtiene: ª xm,0 º «x » m ,1 » ∇J (W ) m = −2ε m « « # » « » ¬ xm , P ¼ 73 Una Introducción al Cómputo Neuronal Artificial • La dirección de ∇J (W ) m maximiza a la función de error J (W ) m , ello implica que el cambio o variación a aplicar al vector de pesos deberá ir en el sentido contrario a ∇J (W ) m . Por lo tanto, de la Ecuación 3.3.2, tenemos: Δwm = μ(-∇J(W)m) Donde μ es una constante positiva que definirá la proporción de -∇J(W)m a aplicar sobre Wm. Recordemos, por la Sección anterior, que μ determina que tanto se moverá Wm para obtener su correspondiente versión actualizada Wm+1. • Por último, el vector Wm+1 es obtenido mediante (Ecuación 3.3.1): Wm+1 = Wm + Δwm El proceso anterior ha de ser efectuado por cada uno de los elementos en el conjunto de entrenamiento. Ello implica que una vez terminada la presentación del conjunto de entrenamiento se contará con un vector de pesos aproximados WN+1. Si así se requiere, es posible efectuar más presentaciones a fin de mejorar al vector de pesos. A partir de la segunda presentación, el vector de pesos inicial es el último que se obtuvo en la presentación anterior. El Algoritmo 3.4 implementa el proceso de Descenso Escalonado. Recibe como entrada una matriz de tamaño N × (P+1) que contiene los vectores de entrada; un arreglo de N elementos con los escalares de salida esperada; la constante positiva μ para establecer la proporcionalidad de la actualización del vector de pesos y finalmente el número T de veces que el conjunto de entrenamiento será presentado. Es claro que el Algoritmo 3.4 es sólo una generalización de la especificación dada en el Algoritmo 3.3 al considerar que los vectores de entrada son ahora de tamaño P+1. Cuando P = 1 entonces el Algoritmo 3.4 cubre la misma instancia que el Algoritmo 3.3. Ahora efectuaremos una serie de conteos relacionados con el número de operaciones ejecutadas por el Algoritmo 3.4. Estos conteos irán de la mano con los valores de P (dimensionalidad de los vectores de entrada), N (número de elementos en el conjunto de entrenamiento) y T (número de veces que el conjunto de entrenamiento será presentado). Para calcular P ε m = d m − Wm ⋅ X m = d m − ¦ wm ,k xm ,k k =0 74 Capítulo 3. La Neurona Adaline Se requieren P + 1 multiplicaciones, P + 1 sumas y una resta. Es decir, 2P + 3 operaciones. Por otro lado, para obtener ª xm,0 º «x » m ,1 » ∇J (W ) m = −2ε m « « # » « » ¬ xm , P ¼ se deben efectuar, por cada componente de ∇J (W ) m , 2 multiplicaciones. Entonces tenemos en total 2(P+1) operaciones. Cada componente de ∇J (W ) m debe ser además multiplicado por -1 y por la constante μ. Tenemos entonces que para calcular al Término de Variación o Cambio Δwm = μ(-∇J(W)m) se requieren 2(P+1) operaciones. Finalmente, para la actualización del vector de pesos Wm+1 = Wm + Δwm Se deberán realizar P+1 sumas. Agrupando los conteos anteriores tenemos, que para obtener un vector de pesos actualizado, el número de operaciones requeridas en total es: (2P+3) + 2(P+1) + 2(P+1) + (P+1) = 7P + 8 Dado que en una presentación se efectúan N actualizaciones del vector de pesos entonces tenemos que se realizan N(7P + 8) operaciones. Por último, el conjunto de entrenamiento completo es presentado en T ocasiones. Entonces el número total de operaciones efectuadas por el Algoritmo 3.4 será representado por la función SDO(T, N, P) (Steepest Descent Operations) y la cual está dada por: SDO(T, N, P) = TN(7P + 8) (Ecuación 3.3.9) Ahora bien, tenemos pleno conocimiento de que el problema que estamos tratando puede ser debidamente resuelto mediante el método de Mínimos Cuadrados. Recordemos algunos puntos. Sea la matriz R de (P+1) × (P+1) dada por (Ecuación 2.3.11): ª R0,0 «R 1,0 R=« « # « ¬ RP ,0 R0,1 " R0, P º R1,1 " R1, P »» # % # » » RP ,1 " RP , P ¼ 75 Una Introducción al Cómputo Neuronal Artificial Donde cada uno de sus elementos está dado por (Ecuación 2.3.10): Rk , j = 1 N k = 0,1, 2,..., P N ¦x x j = 0,1, 2,..., P i , j i ,k i =1 Tenemos también al vector de P+1 elementos ℘ (Ecuación 2.3.13): ª℘0 º «℘ » ℘= « 1 » « # » « » ¬℘P ¼ Donde (Ecuación 2.3.12): ℘j = 1 N N ¦x i, j j = 0,1, 2,..., P di i =1 Por la Ecuación 2.3.15 tenemos que el método de Mínimos Cuadrados queda expresado como el producto matricial: ℘ = RW Donde W es precisamente nuestro vector de pesos. Dada la inversa de R, R-1, entonces la Ecuación 2.3.16 nos dice que el vector de pesos óptimo esta dado por: R-1℘ = W Para abordar la búsqueda de los pesos óptimos mediante Mínimos Cuadrados y usando el enfoque matricial es claro que tendremos tres fases: • La fase de inicialización de la matriz R y el vector ℘. • La fase de obtención de la matriz inversa de R. • Y finalmente, la fase donde efectuamos el producto matricial R-1℘. Calcularemos el número de operaciones efectuadas en cada una de estas fases. Cada 1 N elemento de la matriz R, Rk , j = ¦ xi , j xi ,k , es calculado al ejecutar una multiplicación que N i =1 involucra dos componentes por cada elemento del conjunto de entrenamiento. Los resultados de estas multiplicaciones son sumados y la suma total se divide por N. Entonces tenemos en total N multiplicaciones, N sumas y una división: 2N + 1 operaciones. Dado que R es de tamaño (P + 1) × (P + 1) entonces en total, para inicializar a R, se efectúan (P + 1)2(2N + 1) operaciones. Ahora bien, para inicializar al vector ℘, se debe obtener para 76 Capítulo 3. La Neurona Adaline 1 N ¦ xi, j di . Esta suma depende de N i =1 multiplicar un componente de cada vector de entrada en el conjunto de entrenamiento por su correspondiente escalar de salida esperada. Los resultados de cada multiplicación son sumados y la suma total dividida por N. Entonces se efectúan N productos, N sumas y una división: 2N + 1 operaciones. Este ultimo resultado se multiplica por (P + 1) de manera que para inicializar al vector ℘ se requieren (P + 1)(2N + 1) operaciones. Por lo tanto, la fase de inicialización de la matriz R y el vector ℘ requiere en total ejecutar (P + 1)2(2N + 1) + (P + 1)(2N + 1) operaciones. cada uno de sus P+1 componentes la suma ℘j = Ahora bien, la segunda fase requiere encontrar la matriz inversa de R. Supongamos que se aplica el bien conocido método de Eliminación de Gauss-Jordan. Es bien sabido que se requieren un número de operaciones de orden cúbico, respecto al número de renglones de la matriz, para encontrar su inversa. Tomemos tal cota justa. Por lo tanto, dado que R es de tamaño (P + 1) × (P + 1) entonces el número total de operaciones a ejecutar para encontrar su inversa es (P + 1)3. Por último, debemos determinar el número de operaciones requeridas para calcular los valores óptimos de los pesos. Estos dependen del resultado del producto matriz/vector R-1℘. Recordando el algoritmo clásico de multiplicación matricial, cada elemento de cada renglón de R-1 será multiplicado por cada elemento correspondiente en el vector ℘. Ello implica que se efectuarán (P + 1)2 operaciones para finalmente obtener al vector de pesos W. Entonces el número total de operaciones efectuadas por el método de Mínimos Cuadrados, a fin de entrenar a una neurona Adaline, será representado por la función LSO(N, P) (Least Squares Operations) la cual está dada por: LSO(N, P) = (P + 1)2(2N + 1) + (P + 1)(2N + 1) + (P + 1)3 + (P + 1)2 (Ecuación 3.3.10) Ahora efectuaremos una comparación entre el costo del entrenamiento bajo Descenso Escalonado contra el método de Mínimos Cuadrados. De hecho, partiremos de suponer que efectivamente el método de Descenso Escalonado es más eficiente, en términos del número de operaciones efectuadas, que el método de Mínimos Cuadrados. Para ello, verificaremos para qué valores de T (número de presentaciones), N (tamaño del conjunto de entrenamiento) y P (dimensionalidad de los vectores de entrada) la siguiente desigualdad se hace válida: SDO(T, N, P) < LSO(N, P) ⇔ TN(7P + 8) < (P + 1)2(2N + 1) + (P + 1)(2N + 1) + (P + 1)3 + (P + 1)2 77 Una Introducción al Cómputo Neuronal Artificial La idea ahora es acotar a T en función de N y P (lo cual en realidad será muy sencillo): TN (7 P + 8) < ( P + 1) 2 (2 N + 1) + ( P + 1)(2 N + 1) + ( P + 1)3 + ( P + 1) 2 ( P + 1) 2 (2 N + 1) + ( P + 1)(2 N + 1) + ( P + 1)3 + ( P + 1) 2 T < N (7 P + 8) P 3 + 2 NP 2 + 5 P 2 + 6 NP + 8 P + 4 N + 4 = 7 NP + 8 N Nótese que el denominador 7 NP + 8 N nunca se hace cero ya que N > 0 y P > 0. De hecho, el cociente, para cualquier valor de N y P, ambos positivos, proporciona siempre un valor positivo (todos los términos que lo conforman son positivos). Lo interesante es que contamos con una formulación tal que dados los valores de N y P determinaremos el número máximo de presentaciones del conjunto de entrenamiento que se deben efectuar de manera que el número de operaciones del método de Descenso Escalonado sea estrictamente menor al número de operaciones requeridas por el método de Mínimos Cuadrados. Por ejemplo, supongamos que se cuenta con un conjunto de entrenamiento de tamaño N = 100 y dimensionalidad P = 20. Entonces al sustituir en la cota superior para T tenemos que: (20)3 + 2(100)(20) 2 + 5(20) 2 + 6(100)(20) + 8(20) + 4(100) + 4 = 6.93 7(100)(20) + 8(100) Ello implica que con el método de Descenso Escalonado se deben efectuar a lo más T = 6 presentaciones del conjunto de entrenamiento antes de que sea más conveniente utilizar el método de Mínimos Cuadrados. Supongamos ahora que N = 1,000 y P continúa con su valor 20. Nuevamente, al sustituir en la cota superior para T obtenemos: (20)3 + 2(1, 000)(20) 2 + 5(20) 2 + 6(1, 000)(20) + 8(20) + 4(1, 000) + 4 = 6.3119 7(1, 000)(20) + 8(1, 000) En esta situación concluimos, de nueva cuenta, que a lo más se deben efectuar T = 6 presentaciones. Ahora si N = 10,000 y P = 20: (20)3 + 2(10, 000)(20) 2 + 5(20) 2 + 6(10, 000)(20) + 8(20) + 4(10, 000) + 4 = 6.25 7(10, 000)(20) + 8(10, 000) Nuevamente determinamos que cómo máximo T = 6 presentaciones son las convenientes. Surge entonces la observación de que quizás quien realmente determina el número máximo de presentaciones del conjunto de entrenamiento es la dimensionalidad P de los vectores de entrada. Veamos qué sucede cuando N → ∞ mientras P permanece constante. Para ello calculamos el siguiente límite asumiendo por el momento a N y P como reales positivos: 78 Capítulo 3. La Neurona Adaline P 3 + 2 NP 2 + 5P 2 + 6 NP + 8P + 4 N + 4 N →∞ 7 NP + 8 N (2 NP 2 + 6 NP + 4 N ) + ( P 3 + 5 P 2 + 8 P + 4) = lim N →∞ 7 NP + 8 N 2 (2 NP + 6 NP + 4 N ) P3 + 5P 2 + 8P + 4 = lim + lim N →∞ N →∞ N (7 P + 8) N (7 P + 8) lim = 2P2 + 6P + 4 N P3 + 5P 2 + 8P + 4 1 lim + lim N →∞ N N →∞ 7P + 8 7P + 8 N = 2P + 6P + 4 7P + 8 1 0 2 2P2 + 6P + 4 nos proporciona el número máximo 7P + 8 de veces que el conjunto de entrenamiento puede ser presentado, bajo Descenso Escalonado, suponiendo que su tamaño N es suficientemente grande. Entonces, sea T(P) definido como el número máximo de presentaciones de un conjunto de entrenamiento, de tamaño suficientemente grande, y con vectores de dimensionalidad P, de manera que el método de Descenso Escalonado requiera efectuar un número de operaciones menor que el método de Mínimos Cuadrados: Ello quiere decir que la expresión « 2P2 + 6P + 4 » T ( P) = « » ¬ 7P + 8 ¼ (Ecuación 3.3.11) Donde ¬«⋅»¼ denota a la Función Piso ( ¬« x ¼» = max{m ∈ ] : m ≤ x} ). Por lo tanto, retomando nuestro ejemplo con P = 20 y aplicando la Ecuación 3.3.11: « 2(20) 2 + 6(20) + 4 » T (20) = « »=6 7(20) + 8 ¬ ¼ Tenemos entonces que el número máximo de presentaciones a efectuar, para conjuntos de entrenamiento de tamaño N suficientemente grande, es 6. 79 Una Introducción al Cómputo Neuronal Artificial Supongamos, por ejemplo, que se requiere entrenar a una neurona Adaline usando un conjunto de imágenes con resolución 320 × 240. Supongamos también, y de hecho en ocasiones así se procede en la práctica, que tales imágenes son representadas como vectores en \ P +1 de manera que P = 320⋅240 = 76,800. Entonces tenemos que, por la Ecuación 3.3.11, el número máximo de presentaciones a efectuar es: « 2(76,800) 2 + 6(76,800) + 4 » T (76,800) = « » = 21,943 7(76,800) + 8 ¬ ¼ Tenemos entonces un margen bastante considerable de presentaciones a aplicar de manera que se satisfaga la eficiencia del método de Descenso Escalonado sobre el método de Mínimos Cuadrados, siempre y cuando se asuma al conjunto de entrenamiento como de un tamaño suficientemente grande (N → ∞). En términos más concretos, suponiendo que se contase con N = 1,000 imágenes y sustituyendo con P = 76,800 y T = 21,943 en las Ecuaciones 3.3.9 y 3.3.10 tenemos: • SDO(21943, 1000, 76800) = (21,943)(1, 000)(7(76,800) + 8) = 11,796,732,344,000 ª((76,800 + 1) 2 )(2(1, 000) + 1) + º « » • LSO(1000, 76800) = «(76,800 + 1)(2(1, 000) + 1) + » = 464,811,264,618,404 «(76,800 + 1)3 + (76, 800 + 1) 2 » ¬ ¼ LSO(1000, 76800) 464,811,264,618,404 = = 39.4016 • SDO(21943, 1000, 76800) 11,796,732,344,000 Es decir, el método de Mínimos Cuadrados, para esta situación, requiere efectuar casi 40 veces más operaciones que el método de Descenso Escalonado. Ahora bien, consideremos el caso en que P = 1, tal como sucede con el conjunto de entrenamiento presentado en la Sección anterior (Tabla 3.2). Tenemos entonces, por aplicación de la Ecuación 3.3.11: « 2(1) 2 + 6(1) + 4 » T (1) = « »=0 7(1) + 8 ¬ ¼ El valor T(1) = 0 es indicativo de que de hecho, para este caso, el método de Descenso Escalonado no es más eficiente que el método de Mínimos Cuadrados. Es más, este comentario ya había sido hecho en su momento en la Sección anterior. Cuando se tienen vectores de entrada de dimensionalidad P ≥ 2 se presentan los casos en los cuales el método de Descenso Escalonado es más eficiente que el método de Mínimos Cuadrados: « 2(2) 2 + 6(2) + 4 » T (2) = « » =1 7(2) + 8 ¬ ¼ 80 Capítulo 3. La Neurona Adaline Recordemos que usando la desigualdad SDO(T, N, P) < LSO(N, P) acotamos el valor de T en función de N y P. Simplemente debemos hacer la aclaración de que la desigualdad anterior es válida para todo N y todo P positivos (P ≥ 1) mientras que T(P) efectivamente acota a T pero bajo la suposición de que el tamaño del conjunto de entrenamiento es suficientemente grande, o en otras palabras, cuando N → ∞. Es precisamente por la última hipótesis que T(P) arroja valores positivos a partir de P ≥ 2 aparentemente dejando excluido el caso P = 1. Sin embargo, debe ser claro que para algunos valores pequeños de N y con P = 1 es posible que el método de Descenso Escalonado sea más eficiente que el método de Mínimos Cuadrados. Por último, y para concluir esta sección, debemos hacer notar que mientras que la Ecuación 3.3.9 nos indica el número de operaciones requeridas por el método de Descenso Escalonado y la Ecuación 3.3.11 nos proporciona el número máximo de presentaciones del conjunto de entrenamiento a efectuar, es importante tener en cuenta que la diferencia entre el vector de pesos final y el vector de pesos óptimo va también en función de μ, de que tan representativos son los elementos del conjunto de entrenamiento y del vector inicial W1. Ello quiere decir que el efectuar T(P) presentaciones no garantiza de ninguna manera que el vector de pesos final sea el vector óptimo o que incluso se encuentre sumamente cerca de éste. Podemos encontrar situaciones en las cuales se requieren presentaciones adicionales del conjunto de entrenamiento. Sin embargo, en la práctica se verá que el método de Descenso Escalonado por nada deja de ser un muy buen mecanismo para una aproximación rápida del vector de pesos. De hecho, es recurrente contar únicamente con un vector de pesos lo suficientemente cercano al vector óptimo, pero que de igual manera produce una solución bastante aceptable al problema que la correspondiente neurona Adaline esté modelando. Por otro lado, debe ser claro que conforme la dimensionalidad P de los vectores de entrada aumenta, la Ecuación 3.3.11 nos indica que el número de presentaciones del conjunto de entrenamiento crece de manera significativa y satisfaciendo el hecho de que se requieren menos operaciones que el método de Mínimos Cuadrados. En conclusión, la eficiencia del método de Descenso Escalonado mejora conforme P → ∞. 81 Una Introducción al Cómputo Neuronal Artificial 82 Una Introducción al Cómputo Neuronal Artificial 4. El Perceptrón Una Introducción al Cómputo Neuronal Artificial 84 Capítulo 4. El Perceptrón 4.1. Estructura Básica y Funciones de Activación La estructura del Perceptrón se basa en la estructura fundamental de una célula nerviosa, es decir, se cuenta con varias entradas cada una asociada a un peso y se tiene una única salida la cual puede ser direccionada a otras neuronas (véase la Figura 4.1). Es claro también que otras neuronas pueden conectarse a las entradas del Perceptrón. W1 W2 n X2 z = ¦ wi xi i =1 z y = f N ( z) y Salidas Entradas X1 Wn Xn Figura 4.1. Representación esquemática de un Perceptrón. Considérese el Perceptrón de la Figura 4.1. Éste cuenta con n entradas cada una asociada con su correspondiente peso wi, i = 1, 2, …, n. De acuerdo a la Figura, el escalar z es claramente producido por la Sumatoria de Salida del Perceptrón: n z = ¦ wi xi (Ecuación 4.1.1) i =1 La Ecuación anterior puede ser escrita en forma vectorial como: z =W ⋅ X (Ecuación 4.1.2) Donde: ª w1 º W = «« # »» «¬ wn »¼ ª x1 º X = «« # »» «¬ xn »¼ Hasta este punto nótese la similitud de la estructura del Perceptrón con la de la neurona Adaline (descrita en el Capítulo 3). La primera diferencia surge en el sentido de que el Perceptrón no cuenta con un término de sesgo o predisposición tal como sucede en el Adaline. La segunda diferencia es el uso, en el Perceptrón, de una Función de Activación. 85 Una Introducción al Cómputo Neuronal Artificial Como se aprecia en la Figura 4.1 la salida final de un Perceptrón no está dada por la ecuación z = W ⋅ X . El escalar z es sometido a la acción de una función fN cuyo resultado es efectivamente la salida final de la neurona: y = fN(z) (Ecuación 4.1.3) El objetivo de la Función de Activación es el de mantener la salida dentro de ciertos límites: una situación, tal como se describió en el Capítulo 1, que se da, desde un principio, en las neuronas biológicas. Es decir, la Función de Activación hará el papel de un neurotransmisor. Si bien mencionamos a la presencia de la Función de Activación como una diferencia entre el Perceptrón y la neurona Adaline, es claro que ésta última cuenta de hecho con una función que podría considerarse como de activación. En este caso, y tal como se comentó en el Capítulo 3, se trata de la función sign. Sin embargo, veremos que para efectos del proceso de entrenamiento del Perceptrón no se puede hacer fN(z) = sign(z) debido a que ésta no es diferenciable de -∞ a ∞. En Secciones posteriores justificaremos el porqué de la necesidad de que fN(z) sea diferenciable en el intervalo (-∞, ∞). De hecho, cualquier función diferenciable en el intervalo (-∞, ∞) puede ser utilizada como Función de Activación para el Perceptrón. Sin embargo, en la literatura son comúnmente mencionadas cuatro funciones. En primer lugar tenemos a la Función Sigmoide la cual está dada por: fN ( z ) = 1 =y 1 + e− z (Ecuación 4.1.4) Véase la Figura 4.2.a. Algunas de sus propiedades son: • fN: \ → (0, 1) y→0 • z → -∞ ⇔ ⇔ y = 0.5 • z=0 ⇔ y→1 • z→∞ • Dado que para todo z ∈ \ se tiene que e − z ≠ -1 entonces la función no se indefine en ningún punto. Determinemos la derivada de la Función Sigmoide: d d 1 fN = dz dz 1 + e − z d = (1 + e − z ) −1 dz d = − (1 + e − z ) −2 (1 + e − z ) dz 86 Capítulo 4. El Perceptrón d −z e dz d = − (1 + e− z ) −2 e− z (− z ) dz −z e = (1 + e− z )2 = − (1 + e− z ) −2 Concretizando: fN ' = e− z (1 + e − z ) 2 (Ecuación 4.1.5) Nótese que e− z ≠ -1 para todo valor de z. Por lo tanto es posible calcular la derivada de fN en cualquier punto z, con lo cual concluimos que efectivamente es diferenciable en el intervalo (-∞, ∞). 1.0 1.0 0.8 0.5 0.6 5 5 0.4 0.5 0.2 5 1.0 5 a) b) 1.0 1.0 0.8 0.5 0.6 10 5 5 10 0.4 0.5 0.2 1.0 10 5 5 10 c) d) Figura 4.2. Algunas Funciones de Activación para el Perceptrón: a) Función Sigmoide; b) Tangente Hiperbólica con argumento z ; c) Tangente Hiperbólica; d) La función 1 + Tanh( z ) . 2 2 87 Una Introducción al Cómputo Neuronal Artificial Otra función a considerar es la Tangente Hiperbólica con Argumento z 2 (Véase la Figura 4.2.b): §z· f N ( z ) = Tanh ¨ ¸ = y ©2¹ (Ecuación 4.1.6) La correspondiente expresión algebraica para la Ecuación 4.1.6 está dada por: 2 §z· −1 f N ( z ) = Tanh ¨ ¸ = −z © 2 ¹ 1+ e (Ecuación 4.1.7) Al dar un vistazo a la gráfica de la Tangente Hiperbólica con argumento z 2 serán evidentes las siguientes propiedades: • fN: \ → (-1, 1) • z → -∞ ⇔ y → -1 • z=0 ⇔ y=0 • z→∞ ⇔ y→1 −z • e ≠ -1, ∀z ∈ \ : por lo tanto no se indefine en ningún punto. §z· Determinemos la derivada de la función Tanh ¨ ¸ usando su correspondiente ©2¹ expresión algebraica: d §z· d § 2 · Tanh ¨ ¸ = ¨ − 1¸ −z dz © 2 ¹ dz © 1 + e ¹ −1 d = 2 1 + e− z dz ( ) ( = 2(−1) 1 + e− z ( = 88 −2 (1 + e ) −z 2 2e − z (1 + e ) −z 2 −2 ( d 1 + e− z dz d −z e dz d e− z (− z ) dz = − 2 1 + e− z = ) ) −2 ) Capítulo 4. El Perceptrón Es decir: fN ' = 2e− z (1 + e ) −z 2 (Ecuación 4.1.8) Dado que para todo valor de z se tiene que e− z ≠ -1 entonces concluimos que la función es también diferenciable en el intervalo (-∞, ∞). Consideremos también a la Tangente Hiperbólica junto con su correspondiente expresión algebraica (Véase la Figura 4.2.c): f N ( z ) = Tanh ( z ) = 1 − e −2 z =y 1 + e−2 z (Ecuación 4.1.9) Algunas de sus propiedades están dadas por: • fN: \ → (-1, 1) • z → -∞ ⇔ y → -1 • z=0 ⇔ y=0 • z→∞ ⇔ y→1 −2 z • e ≠ -1, ∀z ∈ \ . La derivada de la Tangente Hiperbólica está dada por: fN ' = 4e2 z (1 + e2 z ) 2 (Ecuación 4.1.10) Tenemos que su denominador no se indefine, por lo tanto la función Tangente Hiperbólica es diferenciable en (-∞,∞). La Tangente Hiperbólica se puede utilizar para construir otras funciones. Tal es el caso de la siguiente Función de Activación (Figura 4.2.d): fN ( z ) = 1 + Tanh( z ) e2 z = =y 2 1 + e2 z Haciendo referencia a su gráfica, la cual se presenta en la Figura 4.2.d, se visualizan claramente las siguientes propiedades: • fN: \ → (0, 1) • z → -∞ ⇔ y→0 • z=0 ⇔ y = 0.5 • z→∞ ⇔ y→1 2z • e ≠ -1, ∀z ∈ \ . 89 Una Introducción al Cómputo Neuronal Artificial Su derivada está dada por: fN ' = 2e2 z (1 + e ) 2z 2 (Ecuación 4.1.11) Analizando su denominador se concluye que es ésta diferenciable en el intervalo (-∞,∞). 1 + Tanh( z ) acotan la salida del Perceptrón a 2 valores únicamente dentro del intervalo (0, 1). Por otro lado las funciones Tangente z Hiperbólica y Tangente Hiperbólica con argumento restringen las salidas a valores en 2 (-1, 1). La Función de Activación a utilizar, tal como veremos en secciones posteriores, depende del problema a modelar. De hecho, mencionamos previamente, que cualquier función puede ser utilizada. El único requerimiento es que ésta sea diferenciable de -∞ a ∞. Por ejemplo, es válido considerar a la Función Identidad fN(z) = z. Ésta es diferenciable en el intervalo (-∞, ∞) y además hace que las salidas del Perceptrón se distribuyan sobre todo el conjunto de los números reales. De alguna manera ya habíamos considerado previamente a la Función Identidad cuando efectuamos el análisis del entrenamiento de la neurona Adaline mediante Mínimos Cuadrados (Sección 3.2) y Descenso Escalonado (Secciones 3.3.1 y 3.3.2). De allí identificamos otro punto de similitud entre ambos tipos de neuronas. Sin embargo, una desventaja que puede presentar la Función Identidad es que en un momento dado, y dependiendo del problema que se trate, se pueden generan valores cuyos valores absolutos son de gran magnitud, lo cual puede dificultar los cálculos. Nótese que las funciones Sigmoide y 4.2 El Problema de Representación Hicimos mención en el Capítulo 1 (Sección 1.4) que el Perceptrón fue presentado originalmente en 1958 por el psicólogo Frank Rosenblatt. Antes de proseguir debemos aclarar que el término Perceptrón, para Rosenblatt y algunos otros autores, puede hacer referencia a una única neurona o bien a una Red Neuronal formada por varios Perceptrones agrupados en capas. En nuestro caso, sólo basta aclarar que cuando hacemos referencia a un Perceptrón nos referimos a una única neurona de ese tipo. En los siguientes Capítulos, cuando hagamos referencia a una red formada por más de una neurona entonces haremos mención explícita del término Red de Perceptrones. 90 Capítulo 4. El Perceptrón En 1961, Rosenblatt publicó un texto titulado Principles of Neurodynamics en el cual, en referencia al Perceptrón, se establece: Un Perceptrón puede aprender (resolver) cualquier cosa que éste pueda representar (simular). Esta proposición de inmediato conduce a preguntarse: ¿Qué cosas puede representar, y por tanto, aprender un Perceptrón? La respuesta a esta pregunta está bien delimitada e identificada. De hecho el mismo Rosenblatt la abordó. En esta Sección discutiremos precisamente qué puede ser representado o simulado en un Perceptrón. W1 2 z = ¦ wi xi z i =1 = w1 x1 + w2 x2 y = f N ( z) Salidas Entradas X1 y W2 X2 Figura 4.3. Una neurona de tipo Perceptrón con dos entradas. X2 z(x1, x2) = w1x1 + w2x2 = 0 X 1 Figura 4.4. El umbral z(x1, x2) = w1 x1 + w2 x2 = 0 asociado a un Perceptrón de 2 entradas. Considérese el Perceptrón de la Figura 4.3. Supongamos que ya se tienen identificados los pesos w1 y w2 para tal neurona. La Sumatoria de Salida puede ser 91 Una Introducción al Cómputo Neuronal Artificial considerada de hecho como una función de los componentes x1 y x2 de los vectores de entrada. Entonces tenemos que: z(x1, x2) = w1 x1 + w2 x2 (Ecuación 4.2.1) Desde un punto de vista geométrico, cuando z(x1, x2) = 0 se tiene una recta que pasa por el origen del espacio Euclidiano Bidimensional. A la recta z(x1, x2) = w1x1 + w2x2 = 0 se le llamará Umbral. Véase la Figura 4.4. X2 ªw º v = « 1» ¬ w2 ¼ z(x1, x2) = w1x1 + w2x2 = 0 X 1 Figura 4.5. El vector normal v del umbral z(x1, x2) = w1 x1 + w2 x2 = 0 asociado a un Perceptrón de 2 entradas. Los componentes de v son precisamente los valores de los pesos w1 y w2. Ahora considérese cualquier punto (x1, x2) en \ 2 . Es claro que este punto puede ser evaluado en la función z(x1, x2). Dependiendo del signo del valor arrojado por la evaluación es posible ubicar al punto sobre la recta o bien por “encima” o por “debajo” de ésta. Claramente si z(x1, x2) = 0 entonces el punto forma parte de la recta. Ahora bien, sólo tenemos que precisar la noción de “encima” o “debajo” de la recta. De la Ecuación 4.2.1 tomaremos los coeficientes de x1 y x2, es decir, los valores de los pesos w1 y w2. Usando estos valores formaremos un vector v = [w1 w2]T, también en \ 2 , el cuál tendrá la propiedad de ser perpendicular a la recta y de hecho es llamado su Vector Normal. La dirección del vector normal de la recta z(x1, x2) = 0 es precisamente la referencia que usaremos para determinar cuando un punto está por “encima” o por “debajo” de ésta. Véase la Figura 4.5. Nótese que la evaluación w1x1 + w2x2 puede ser vista como un producto punto entre el vector v y el punto a evaluar x = [x1 x2]T. Por lo tanto w1x1 + w2x2 = v⋅x. A su vez, el producto punto nos permite inferir el ángulo θ que forman los vectores v y x: w1x1 + w2x2 = v⋅x = ||v||⋅||x|| cos θ 92 (Ecuación 4.2.2) Capítulo 4. El Perceptrón Dado que las magnitudes de los vectores son siempre no negativas entonces únicamente ª π· nos concentramos en el signo de cos θ. Es claro que si cos θ > 0 entonces θ ∈ «0, ¸ y por ¬ 2¹ § π 3π · otro lado, si cos θ < 0 entonces θ ∈ ¨ , ¸ . Por lo tanto diremos que si w1x1 + w2x2 > 0 ©2 2 ¹ entonces el punto (x1, x2) está por encima de la recta z(x1, x2) = 0 y por otro lado si w1x1 + w2x2 < 0 entonces el punto está por debajo de la recta. Véase la Figura 4.6. X2 w1x1 + w2x2 > 0 ªw º v = « 1» ¬ w2 ¼ z(x1, x2) = w1x1 + w2x2 = 0 X w1x1 + w2x2 < 0 1 w1x1 + w2x2 = 0 Figura 4.6. Caracterización de los puntos en el Espacio Euclidiano Bidimensional en función del signo de su evaluación con la función z(x1, x2) = w1 x1 + w2 x2. Si w1 x1 + w2 x2 > 0 entonces el punto está en la misma región hacia la que apunta el vector normal v. Si w1 x1 + w2 x2 < 0 entonces el punto está en la región hacia la que apunta –v. Si w1 x1 + w2 x2 = 0 entonces el punto está sobre la recta z(x1, x2) = 0. Los razonamientos anteriores nos permiten establecer ahora que el umbral z(x1, x2) = 0 divide al plano en tres regiones: • Región 1: El conjunto de puntos por encima del umbral. o R12 = {(x1, x2): w1 x1 + w2 x2 > 0} • Región 2: El conjunto de puntos por debajo del umbral. o R22 = {(x1, x2): w1 x1 + w2 x2 < 0} • Región 3: El conjunto de puntos inmersos en el umbral. o R32 = {(x1, x2): w1 x1 + w2 x2 = 0} Evidentemente \ 2 = R12 ∪ R22 ∪ R32 . Véase la Figura 4.7. 93 Una Introducción al Cómputo Neuronal Artificial X2 R12 ªw º v = « 1» ¬ w2 ¼ z(x1, x2) = w1x1 + w2x2 = 0 X 2 3 1 R R22 Figura 4.7. Partición de \ 2 mediante el umbral z(x1, x2) = w1 x1 + w2 x2 = 0 y su vector normal v. R12 se forma por los puntos por encima de la recta z(x1, x2) = 0. R22 se forma por los puntos debajo de la recta z(x1, x2) = 0. R32 es el conjunto de puntos sobre la recta z(x1, x2) = 0. W1 W2 X2 3 z = ¦ wi xi z i =1 = w1 x1 + w2 x2 + w3 x3 y = f N ( z) y Salidas Entradas X1 W3 X3 Figura 4.8. Una neurona de tipo Perceptrón con tres entradas. Ahora considérese el Perceptrón de la Figura 4.8. Su Sumatoria de Salida z puede ser considerada como una función de las variables x1, x2 y x3: z(x1, x2, x3) = w1x1 + w2x2 + w3x3 (Ecuación 4.2.3) Cuando se tiene z(x1, x2, x3) = 0 entonces se describe a un plano que pasa por el origen del Espacio Euclidiano Tridimensional (Figura 4.9). A este plano también se le denomina umbral. 94 Capítulo 4. El Perceptrón X3 X2 z(x1,x2,x3) = w1x1 + w2x2 + w3x3 = 0 X1 Figura 4.9. El lugar geométrico asociado a z(x1, x2, x3) = 0. Siguiendo una serie de razonamientos similares a aquellos referentes al Perceptrón de dos entradas, tenemos que para cualquier punto (x1, x2, x3) el signo de la evaluación w1x1 + w2x2 + w3x3 nos indica si éste está encima, debajo o inmerso en el plano z(x1, x2, x3) = 0. Se tiene entonces que el umbral z(x1, x2, x3) = 0 divide a \ 3 en tres regiones: • Región 1: El conjunto de puntos por encima del umbral. o R13 = {(x1, x2, x3): w1x1 + w2x2 + w3x3 > 0} • Región 2: El conjunto de puntos por debajo del umbral. o R23 = {(x1, x2, x3): w1x1 + w2x2 + w3x3 < 0} • Región 3: El conjunto de puntos inmersos en el umbral. o R33 = {(x1, x2, x3): w1x1 + w2x2 + w3x3 = 0} Debe ser claro que \ 3 = R13 ∪ R23 ∪ R33 . En general tenemos que para un Perceptrón con n entradas, el umbral z(x1, x2,…, xn) = w1x1 + w2x2 + … + wnxn = 0 (Ecuación 4.2.4) describirá a un hiperplano que divide al Espacio Euclidiano n-Dimensional, \ n , en tres regiones: • La Región 1 contendrá a todos los puntos (x1, …, xn) que están ubicados por encima del hiperplano z(x1, …, xn) = 0: o R1n = {(x1, …, xn): w1x1 + … + wnxn > 0} • La Región 2 contendrá a todos los puntos (x1, …, xn) que están ubicados por debajo del hiperplano z(x1, …, xn) = 0: o R2n = {(x1, …, xn): w1x1 + … + wnxn < 0} • La Región 3 contendrá a todos los puntos (x1, …, xn) inmersos en el hiperplano z(x1, …, xn) = 0: o R3n = {(x1, …, xn): w1x1 + … + wnxn = 0} 95 Una Introducción al Cómputo Neuronal Artificial Ahora analizaremos la relación que existe entre las particiones del espacio \ n inducidas por el umbral z(x1, …, xn) = 0 (Ecuación 4.2.4) y el conjunto de problemas que pueden ser representados por el Perceptrón. Precisamente la relación se establece de manera textual mediante el planteamiento del Problema de Representación: El Perceptrón únicamente puede resolver aquellos problemas que pueden ser reducidos a un Problema de Separación (Clasificación) Lineal. Por ejemplo, considérese la tabla de verdad de la compuerta lógica AND. Véase la Tabla 4.1. Tabla 4.1. Tabla de verdad de la compuerta lógica AND. Estado x1 x2 Z A 0 0 0 B 1 0 0 C 0 1 0 D 1 1 1 El operador AND es una función Booleana de dos variables. Ello claramente implica que contamos con 4 posibles estados o vectores de entrada. El objetivo es determinar si existe un umbral z(x1, x2) = 0 tal que un Perceptrón proporcione siempre la salida correcta z. Supongamos que la Función de Activación utilizada es la función identidad. Grafiquemos en el plano a cada una de las 4 posibles entradas (x1, x2). Nótese que para la entrada (1, 1) esperamos la salida z(1, 1) = 1. Para el resto de las entradas se espera la salida 0. Entonces los puntos con salida 0 serán puntos negros mientras que el punto (1, 1) será blanco. Véase la Figura 4.10. x2 (0,1) (0,0) (1,1) x1 (1,0) Figura 4.10. Visualización en el plano de los cuatro posibles estados de la compuerta lógica AND (Véase el texto para detalles). 96 Capítulo 4. El Perceptrón Si la compuerta AND ha de ser modelada mediante un Perceptrón entonces se deberán determinar los valores de los pesos w1 y w2 de manera que se verifique la existencia de una recta z(x1, x2) = w1x1 + w2x2 = 0 tal que ésta separe a los estados con salida 0 (A, B y C) de los estados con salida 1 (D) (véase la Tabla 4.1). Es precisamente este punto el que caracteriza a un problema como Linealmente Separable: se tiene un problema en el cual para una entrada formada por n escalares (x1, …, xn) se espera una salida que únicamente puede tomar uno de dos posibles valores, digamos, α1 y α2. Entonces, para aquellas entradas con salida α1 se espera que éstas estén inmersas en el hiperplano z(x1, …, xn) = 0 o bien por encima de éste. Las entradas con salida esperada α2 se ubicarán estrictamente por debajo del hiperplano z(x1, …, xn) = 0. Es claro que el modelado de la compuerta AND es un problema Linealmente Separable ya que efectivamente existe una recta que separa a los estados con salida esperada 0 del estado con salida esperada 1. Véase una posible recta en la Figura 4.11. Un comentario a hacer respecto a la recta presentada en la figura es que ésta evidentemente no pasa por el origen y por lo tanto no se ajusta a la Sumatoria de Salida del Perceptrón (Ecuación 4.2.1). Sin embargo, es posible considerar este tipo de rectas al agregar un término de sesgo o predisposición, tal como sucede en la neurona Adaline. Otra opción es simplemente trasladar a los 4 estados de manera que su centroide se ubique en el origen. El punto importante es que hemos verificado la existencia de una recta que permite caracterizar a nuestro problema en cuestión como linealmente separable. x2 (0,1) (0,0) (1,1) x1 (1,0) Figura 4.11. Una recta que separa los estados con salida 0 del estado con salida 1 en la compuerta lógica AND. Ahora considérese la tabla de verdad de la compuerta lógica XOR (OR Exclusivo). Véase la Tabla 4.2. Se tienen nuevamente dos variables y por tanto 4 estados. Ahora véase la Figura 4.12. Para dos de los estados se espera una salida 0 (puntos negros) mientras que para los dos restantes una salida 1 (puntos blancos). 97 Una Introducción al Cómputo Neuronal Artificial Tabla 4.2. Tabla de verdad de la compuerta lógica XOR. Estado x1 x2 Z A 0 0 0 B 1 0 1 C 0 1 1 D 1 1 0 x2 (0,1) (0,0) (1,1) x1 (1,0) Figura 4.12. Visualización en el plano de los cuatro posibles estados de la compuerta lógica XOR (Véase el texto para detalles). Es claro, en términos visuales, que cualquier recta en el plano no podrá separar a los puntos blancos de los puntos negros en la Figura 4.12. Si bien es posible hacer que los puntos blancos (negros) queden por encima o inmersos en la recta, siempre estará un punto negro (blanco) en esa misma región (véase la Figura 4.13). Por lo tanto, concluimos que no existe una recta o umbral z(x1, x2) = 0 tal que los estados A y D queden separados de los estados C y B. En consecuencia se tiene que el problema del modelado, mediante un Perceptrón, de la función XOR no es linealmente separable. La situación con el XOR nos conduce entonces a aceptar que existirán problemas para los cuales el Perceptrón no proporciona una solución o modelo. El siguiente cuestionamiento que surge es entonces aquel relacionado a determinar cuantos problemas linealmente separables existen, o bien, de manera complementaria, determinar la cantidad de problemas no linealmente separables. Para ello, nos concentraremos en un particular tipo de problemas: el Modelado de Funciones Booleanas. Sabemos que una función Booleana f es aquella para la que formalmente se tiene: f :{0,1}n = {0,1} × {0,1} × ... × {0,1} → {0,1} n 98 Capítulo 4. El Perceptrón x2 x2 (0,1) (0,0) (1,1) (0,1) x1 (1,0) (0,0) (1,1) x1 (1,0) a) b) Figura 4.13. a) Una recta que agrupa, para la compuerta lógica XOR, a los estados con salida 0 pero que también incluye a un estado con salida 1. b) Una recta que agrupa a los estados con salida 1 pero que también incluye a un estado con salida 0. Donde ⋅×⋅ denota al Producto Cartesiano de conjuntos. Es claro que las funciones AND y XOR (Tablas 4.1 y 4.2, respectivamente) son funciones Booleanas. Es más, la cardinalidad del dominio de una función Booleana es 2n. Ello se debe a que cada estado se forma por n componentes y a su vez cada componente puede tomar uno de 2 posibles valores: o el valor 0 o el valor 1. Por lo tanto se tienen en total 2⋅ 2 ⋅ ... ⋅ 2 = 2n (Ecuación 4.2.5) n posibles estados. Para las compuertas AND y XOR se tiene que n = 2 lo que en consecuencia nos indica que cuentan con 22 = 4 estados. Ahora bien, cada uno de los 2n estados de una función Booleana está asociado a una salida que la función debe proporcionar. Esta salida puede ser 0 o 1. Ello implica que se tienen en total 2⋅ 2 ⋅ ... ⋅ 2 = 2(2 n ) (Ecuación 4.2.6) 2n posibles funciones Booleanas con estados formados por n componentes. Retomando el caso n = 2, tenemos entonces que el número total de compuertas lógicas con 2 entradas es 2 2(2 ) = 24 = 16 . Entre esas 16 compuertas encontramos, como ya sabemos, a las funciones AND y XOR, pero también a otras bien conocidas como OR, NOR, NAND, NXOR, etc. En la década de los 60s, investigadores como R. O. Winder y Michael A. Harrison, el primero con su Tesis Doctoral Threshold Logic (1962) y el segundo con su artículo On the Classification of Boolean Functions by the General Linear and Affine Groups (1964), abordan estudios relacionados con la clasificación de funciones Booleanas. Entre sus 99 Una Introducción al Cómputo Neuronal Artificial resultados resaltan los conteos correspondientes al número de funciones Booleanas que efectivamente son linealmente separables. En la Tabla 4.3 se presentan los conteos para las funciones de 1 a 6 entradas. Todas las funciones de una única entrada son linealmente separables, mientras que de aquellas con dos entradas solo 14 son linealmente separables. Precisamente las compuertas XOR y NXOR son las no linealmente separables. Ello implica que para n = 2 el 87.5% de las funciones son linealmente separables lo cual puede considerarse como un número bastante aceptable de problemas factibles de ser resueltos por el Perceptrón. Sin embargo, nótese que para n = 3 únicamente el 40.62% de las funciones pueden ser modeladas por el Perceptrón. La situación se torna más dramática conforme el número de entradas aumenta. Cuando n = 5 tenemos que sólo 0.0022% de las funciones son linealmente separables y por tanto modelables por un Perceptrón. Ello nos lleva a concluir, de manera clara y evidente, que un número sumamente limitado de las posibles n 2(2 ) funciones Booleanas de n entradas son funciones linealmente separables. En la práctica se puede requerir el modelado de funciones con número de entradas realmente grande. Por tanto, el Perceptrón cuenta con una capacidad limitada para la solución de este tipo de problemas. Número de entradas n 1 2 3 4 5 6 Tabla 4.3. Conteo de funciones Booleanas de 1 a 6 entradas linealmente separables. Funciones con Estados Número de posibles n Funciones Booleanas: 2(2 ) Linealmente Separables 4 4 16 14 256 104 65,536 1,882 4,294,967,296 94,572 18,446,744,073,709,551,616 15,028,134 b) a) Figura 4.14. Ejemplos de regiones convexas: a) Región Convexa Cerrada; b) Región Convexa Abierta. Desde otro punto de vista, el Problema de Representación puede ser replanteado como el hecho de que un único Perceptrón sólo puede resolver problemas de clasificación de puntos que yacen en dos regiones convexas disjuntas. Recuérdese que una región es convexa si para cualesquiera dos puntos en ésta, el segmento de recta que los une está por completo dentro de la región (véase la Figura 4.14). Estas regiones pueden ser abiertas o cerradas. De manera más precisa, recordemos que tenemos problemas en los cuales para 100 Capítulo 4. El Perceptrón una entrada formada por n escalares (x1, …, xn) se espera una salida que únicamente puede tomar uno de dos posibles valores: α1 o α2. Cuando decimos que los puntos deben yacer en regiones convexas hacemos referencia a que los puntos con salida α1 deben formar parte de una región y los puntos con salida α2 deben estar en la otra región. Además, el que las dos regiones sean disjuntas implica que su intersección es vacía. Recordemos que la compuerta lógica AND es un problema linealmente separable ya que existe un umbral o recta z(x1, x2) = 0 tal que el conjunto de puntos negros queda separado del conjunto de puntos blancos (véase la Figura 4.11). Ahora bien, desde el nuevo punto de vista el problema se soluciona por un Perceptrón ya que al considerar a los puntos negros como los vértices de un polígono, en este caso un triángulo, se tiene que éste evidentemente describe a una región convexa cerrada (véase la Figura 4.15). El punto blanco por si mismo es un conjunto convexo cerrado. Nótese que no hay puntos comunes entre las dos regiones lo que las hace disjuntas. x2 (0,1) (0,0) (1,1) x1 (1,0) Figura 4.15. Separación de los estados de la compuerta lógica AND mediante dos regiones cerradas convexas disjuntas (véase el texto para detalles). Ahora bien, el mismo procedimiento aplicado sobre los estados de la compuerta XOR claramente nos permite agrupar a los puntos blancos en una región convexa y a los puntos negros en su correspondiente región convexa, ambas cerradas. Véase la Figura 4.16. El problema que surge es que tales regiones se intersectan. Si se busca que las regiones cuenten con intersección vacía entonces claramente habrá que definir a una de ellas como no convexa, tal como su sucede en el ejemplo presentado en la Figura 4.17. Esta situación hace que el XOR sea caracterizado, desde el punto de vista del uso de regiones convexas disjuntas como un problema no modelable mediante un Perceptrón. Si se espera que una neurona modele al XOR es entonces que habrá que considerar, por consecuencia, la formación de umbrales no lineales o bien regiones no convexas que agrupen adecuadamente a los estados de la función. Ambas posibilidades quedan fuera del alcance del Perceptrón debido a que precisamente su estructura interna, y en particular su sumatoria de salida, únicamente modelan umbrales lineales (Ecuación 4.1.1). 101 Una Introducción al Cómputo Neuronal Artificial x2 (0,1) (1,1) x1 (0,0) (1,0) Figura 4.16. Dos regiones convexas no disjuntas que agrupan, cada una, a los estados negros y a los estados blancos de la función XOR. x2 (0,1) (0,0) (1,1) x1 (1,0) Figura 4.17. Separación de los estados negros y los estados blancos de la función XOR. Se tienen dos regiones disjuntas, pero una de ellas es no convexa. La discusión que hemos efectuado en esta Sección puede conducir a perspectivas pesimistas para el área de Redes Neuronales Artificiales. Sin embargo, el mismo Rosenblatt y otros investigadores como Warren McCulloch y Walter Pitts (véase la Sección 1.2), ya tenían conocimiento de que redes formadas por más de un Perceptrón si eran capaces de modelar exitosamente compuertas lógicas como el XOR y de hecho otras funciones Booleanas no linealmente separables. Sin embargo, lo que no se tenía era un mecanismo eficiente para el ajuste de sus pesos. No fue sino hasta 1986 que David Rumelhart, Geoffrey Hinton y Ronald Williams presentan el Algoritmo de Retropropagación, lo cual significó un reimpulso importante para el área. En los Capítulos 5 y 6 nos concentraremos en estudiar a las redes formadas por más de una neurona artificial, y de manera particular, en el Capítulo 6 es donde abordaremos al Algoritmo de Retropropagación. 102 Capítulo 4. El Perceptrón 4.3 Aplicación: Identificación de Parámetros Autorregresivos en una Señal En las dos Subsecciones anteriores hemos discutido ya varios aspectos detrás del Perceptrón, sin embargo, no hemos planteado una metodología para el ajuste de sus pesos. Precisamente ese será el objetivo de esta Sección. Pero además, aplicaremos tal mecanismo de entrenamiento en el contexto del problema de Predicción de una Señal. Mencionábamos en el Capítulo 1 que el objetivo es modelar una serie de tiempo de manera que sea posible determinar como se comportará en el futuro. A continuación plantearemos algunas nociones necesarias respecto al problema en particular y posteriormente veremos como abordarlo a fin de que un Perceptrón nos proporcione una solución. Existen una gran cantidad de modelos matemáticos para generar series de tiempo. En particular nosotros trabajaremos con una Serie de Tiempo de M-ésimo Orden de Parámetros Autorregresivos. Ésta se define como: ­ ck si n = k , k ∈ {1, 2,..., M } °M xn = ® n>M °¦ ak xn − k + noise(n) si ¯ k =1 (Ecuación 4.3.1) Donde: • M: Orden del modelo. • ak: k-ésimo parámetro autorregresivo, una constante, k = 1, 2, …, M. • ck: k-ésima muestra, una constante, de la serie de tiempo para t = k, k ∈ {1, 2, …, M}. • xn: muestra de la serie de tiempo en t = n. • noise(n): ruido o perturbación a aplicar a la muestra de la serie de tiempo en t = n. Se utiliza para simular el hecho de que las muestras fueron obtenidas experimentalmente, sin embargo, por ello mismo, las mediciones efectuadas no pueden ser libres de errores. De acuerdo a la Ecuación 4.3.1, el valor de xn, cuando n > M, es una combinación lineal de los M valores previos, xn-1, xn-2, …, xn-M, y los parámetros autorregresivos a1, a2, …, aM. Cuando 1 ≤ n ≤ M entonces el valor de xn es uno de los M valores iniciales c1, c2, …, cM (o casos base) para la serie de tiempo. Es claro que el valor de cualquier muestra xn, n > M, tiene influencia de los valores de las muestras que le preceden y tendrá influencia sobre los valores que le prosiguen. 103 Una Introducción al Cómputo Neuronal Artificial Consideremos un ejemplo. Sea la serie de tiempo generada al usar los siguientes valores: • M=7 • a1 = -0.15 • a2 = 0.1 • a3 = -0.3 • a4 = -0.2 • a5 = -0.1 • a6 = -0.5 • a7 = 0.3 • c1 = -3 • c2 = 1 • c3 = 6 • c4 = -8 • c5 = -1 • c6 = -4 • c7 = 2 • noise(n): una función de ruido que retornará aleatoriamente números enteros en el conjunto {-7, -6, -5, …, 5, 6, 7}. • N = 2,000 muestras. La Tabla 4.4 muestra la aplicación de la Ecuación 4.3.1 utilizando la configuración dada para obtener las primeras 15 muestras de la serie de tiempo. Nótese que las primeras 7 muestras corresponden con los valores c1 a c7. A partir de la octava muestra se aplica la función de ruido. En la Figura 4.18 se muestra la gráfica de la serie de tiempo considerando las N = 2,000 muestras. El problema a tratar parte de que únicamente contamos con N muestras asociadas a una serie de tiempo. Supondremos que tal serie puede ser modelada como una serie de tiempo de M-ésimo orden de parámetros autorregresivos, N > M, es decir, que se ajusta la Ecuación 4.3.1. El objetivo es determinar sus correspondientes M parámetros autorregresivos a1, a2, …, aM. A fin de buscar una solución utilizaremos un Perceptrón que recibirá un vector en \ M . Los componentes de un vector de entrada estarán dados por: ª xn −1 º «x » « n−2 » « xn −3 » « » « # » «¬ xn − M »¼ Donde los escalares xn-1, xn-2, …, xn-M son una subsecuencia de las muestras que forman la serie de tiempo bajo estudio. 104 Capítulo 4. El Perceptrón n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Tabla 4.4. Las primeras 15 muestras asociadas a una serie de tiempo de 7 parámetros autorregresivos (véase el texto para detalles). noise(n) Muestra xn x1 = c1 = -3 x2 = c2 = 1 x3 = c3 = 6 x4 = c4 = -8 x5 = c5 = -1 x6 = c6 = -4 x7 = c7 = 2 x8 = a1 x7 + a2 x6 + a3 x5 + a4 x4 + a5 x3 + a6 x2 + a7 x1 + noise(8) -2 = − 2.8 x9 = a1 x8 + a2 x7 + a3 x6 + a4 x5 + a5 x4 + a6 x3 + a7 x2 + noise(9) -7 = − 6.88 x10 = a1 x9 + a2 x8 + a3 x7 + a4 x6 + a5 x5 + a6 x4 + a7 x3 + noise(10) 3 = − 9.852 x11 = a1 x10 + a2 x9 + a3 x8 + a4 x7 + a5 x6 + a6 x5 + a7 x4 + noise(11) -5 = − 8.2258 x12 = a1 x11 + a2 x10 + a3 x9 + a4 x8 + a5 x7 + a6 x6 + a7 x5 + noise(12) -7 = − 0.65693 x13 = a1 x12 + a2 x11 + a3 x10 + a4 x9 + a5 x8 + a6 x7 + a7 x6 + noise(13) 2 = − 2.22364 x14 = a1 x13 + a2 x12 + a3 x11 + a4 x10 + a5 x9 + a6 x8 + a7 x7 + noise(14) 0 = 3.45319 x15 = a1 x14 + a2 x13 + a3 x12 + a4 x11 + a5 x10 + a6 x9 + a7 x8 + noise(15) -4 = − 1.2833 El Perceptrón producirá como salida un escalar x 'n generado precisamente por su sumatoria de salida: M x 'n = ¦ a 'k xn − k N ≥n>M (Ecuación 4.3.2) k =1 Donde a '1 , a '2 ,..., a 'M son tanto los pesos de la neurona como los parámetros autorregresivos que se buscarán. Dado que el escalar producido por la sumatoria es la salida de la neurona entonces podemos considerar que la Función de Activación usada es la Función Identidad. Claramente x 'n es un estimado que proporciona el Perceptrón para la muestra xn dado el vector de entrada [xn-1 xn-2 … xn-M]T. Durante el entrenamiento de la neurona se buscará ajustar los pesos a '1 , a '2 ,..., a 'M de tal forma que el error existente entre x 'n y xn se reduzca tanto como sea posible. 105 Una Introducción al Cómputo Neuronal Artificial xn n 500 1000 1500 2000 Figura 4.18. Una serie de tiempo de 7 parámetros autorregresivos (véase el texto para detalles). Plantearemos ahora un método de entrenamiento basado en Descenso Escalonado (Sección 3.3). Sea εn la diferencia existente entre el estimado de la muestra que proporciona la neurona y el valor esperado, es decir: εn = xn – x 'n N≥n>M (Ecuación 4.3.3) Dado que tenemos N muestras entonces los vectores de entrada estarán dados por ª xM = cM º «x =c » « M −1 M −1 » « xM − 2 = cM − 2 » , « » # « » «¬ x1 = c1 ¼» 106 ª xM +1 º « x =c » M » « M « xM −1 = cM −1 » , « » # « » «¬ x2 = c2 ¼» ª xM + 2 º « x » « M +1 » « xM = cM » , « » « # » «¬ x3 = c3 ¼» ª xN −1 º ª xM +3 º « x » «x » « M +2 » « N −2 » « xM +1 » , ..., « xN −3 » « » « » « # » « # » ¬« x4 = c4 ¼» ¬« xN − M ¼» Capítulo 4. El Perceptrón Por lo tanto el conjunto de entrenamiento para el Perceptrón tendrá un tamaño N – M. El promedio de los errores al cuadrado ahora estará dado por N 1 ¦ ε n2 N − M n = M +1 N 1 = ¦ ( xn − x 'n )2 N − M n = M +1 MSE = = 1 N −M M § · − x ¦ ¨ n ¦ a 'k xn − k ¸ n = M +1 © k =1 ¹ N 2 (Ecuación 4.3.4) Tenemos pleno conocimiento de que es posible utilizar Mínimos Cuadrados a fin de minimizar la Ecuación 4.3.4, sin embargo el proceso será costoso ya que se requiere manipular todas las muestras al mismo tiempo. Para ello, definiremos a una serie de funciones que forman parte de la función de error MSE. Se define a la función MSEn como: MSEn = ε n2 = ( xn − x 'n ) 2 M § · = ¨ xn − ¦ a 'n ,k xn − k ¸ k =1 © ¹ 2 N ≥n>M (Ecuación 4.3.5) Claramente esta función corresponde al error al cuadrado entre la muestra xn y su valor estimado x 'n . En este caso, a 'n ,1 , a 'n ,2 ,..., a 'n , M son los valores actuales de los pesos, y también los parámetros autorregresivos de la señal a estimar, en el Perceptrón al presentar el vector de entrada cuyos componentes son las muestras xn-1, xn-2, …, xn-M. Se calculará el vector gradiente de MSEn. Es decir, buscaremos: ª δ MSE n º « δa' » n ,1 « » « δ MSE n » « » ∇MSEn = « δ a 'n ,2 » « # » « » « δ MSE n » « δa' » n,M ¼ ¬ 107 Una Introducción al Cómputo Neuronal Artificial Determinemos la derivada parcial de la función MSEn respecto al j-ésimo parámetro autorregresivo a 'n , j : M δ MSEn δ § · x a 'n ,k xn − k ¸ = − ¦ n ¨ δ a 'n , j δ a 'n , j © k =1 ¹ 2 M § · δ = 2 ¨ xn − ¦ a 'n ,k xn − k ¸ k =1 © ¹ δ a 'n , j (Por la Ecuación 4.3.5) M § · x − ¨ n ¦ a 'n, k xn − k ¸ k =1 © ¹ M δ § ·§ = 2 ¨ xn − ¦ a 'n ,k xn − k ¸ ¨ − ¨ k =1 © ¹ © δ a 'n , j M ¦a' n,k k =1 · xn − k ¸ ¸ ¹ § Aplicación de Regla de · ¨ ¸ © la cadena ¹ § El término xn es constante · ¨¨ ¸¸ © respecto a a 'n , j ¹ § Todos los términos de la · ¨ ¸ ¨ sumatoria son constantes ¸ ¨ excepto el j -ésimo ¸ © ¹ M § · δ = −2 ¨ xn − ¦ a 'n ,k xn − k ¸ a 'n , j xn − j k =1 © ¹ δ a 'n , j = −2 ( xn − x 'n ) xn − j (Por la Ecuación 4.3.2) = −2ε n xn − j (Por la Ecuación 4.3.3) Concretizando: δ MSEn = −2ε n xn − j δ a 'n , j (Ecuación 4.3.6) Tenemos los elementos para definir de manera precisa al vector gradiente de la función MSEn: ª δ MSE n º « δa' » n ,1 « » ª −2ε x º ª xn −1 º n n −1 « δ MSE n » « » «x » −2ε n xn − 2 » « » ∇MSEn = « δ a 'n ,2 » = « = −2ε n « n − 2 » « » « # » # « # » « » « » « » ¬ −2ε n xn − M ¼ ¬ xn − M ¼ « δ MSE n » « δa' » n,M ¼ ¬ (Ecuación 4.3.7) De acuerdo a la Teoría presentada en la Sección 3.3, el objetivo es minimizar a la función de error MSE (Ecuación 4.3.4) al determinar el punto en el cual su gradiente es el vector cero, sin embargo, utilizaremos los estimadores, los vectores gradientes, proporcionados por las funciones MSEn. Dado que para ello se requiere minimizar a MSEn entonces, como ya sabemos, se utilizará la dirección opuesta de su gradiente. 108 Capítulo 4. El Perceptrón Sea a 'n el vector en \ M formado por los M pesos del Perceptrón: ª a 'n ,1 º « » a 'n ,2 » « a 'n = « # » « » ¬« a 'n , M ¼» (Ecuación 4.3.8) El vector de pesos a 'n será actualizado mediante la regla: a 'n +1 = a 'n + Δa'n (Ecuación 4.3.9) Donde Δa'n es el Término de Variación o Cambio en el vector de pesos a 'n y está dado por: ª xn −1 º «x » Δa'n = μ2εn « n − 2 » « # » « » ¬ xn − M ¼ (Ecuación 4.3.10) Claramente el término Δa'n nos indica la dirección de mínimo crecimiento de MSEn. La constante μ fue introducida en la Sección 3.3 como la proporción del vector gradiente de la función MSEn que se utilizará para actualizar al vector de pesos. Su función es la acelerar el acercamiento del vector de pesos actual, o en términos formales su convergencia, al vector de pesos óptimos de la función MSE (Ecuación 4.3.4). Dado que la elección de μ tiene influencia sobre el número de iteraciones que el método de entrenamiento efectuará, es que a partir de ahora a éste se le llamará Coeficiente de Aprendizaje. Este nombre viene del hecho de que buena elección de μ inducirá un rápido aprendizaje por parte de la neurona, pero por otro lado, también puede provocar que ésta aprenda muy lentamente del conjunto de entrenamiento y por tanto requiera un número considerable de presentaciones. En el Algoritmo 4.1 se implementa el método de Descenso Escalonado para el entrenamiento de una neurona de tipo Perceptrón. El algoritmo recibe 6 entradas: • Un arreglo x que contiene las N muestras asociadas a la serie de tiempo. • Un entero M que indica el número de parámetros autorregresivos a determinar en la serie de tiempo dada. • El Coeficiente de Aprendizaje μ. Por lo regular es un valor en el intervalo (0, 1). • El número T de presentaciones del conjunto de entrenamiento a efectuar. • Un entero nInt que se usará para actualizar al Coeficiente de Aprendizaje. 109 Una Introducción al Cómputo Neuronal Artificial Algoritmo 4.1. Implementación del método de Descenso Escalonado para el entrenamiento de un Perceptrón y determinación de Parámetros Autorregresivos en una señal. Procedure TrainPerceptron (Integer N, Array x[1, …, N], Integer M, Real μ, Integer T, Integer nInt) // Se inicializa el vector de pesos con valores aleatorios en (-1, 1). a = new Array[1,…,M] for i = 1 until M do a[i] = Random( ) end-of-for for i = 1 until T do Integer n = M + 1 while n ≤ N do // Se calcula el valor proporcionado por la neurona // usando los pesos actuales y las muestras xn-1, xn-2, …, xn-M. Real x ' = 0 for k = 1 until M do x’ = x’ + a[k] * x[n – k] end-of-for Real εn = x[n] – x ' // Se calcula el cambio o variación a aplicar // sobre el vector de pesos. Δ = new Array[1,…,M] for k = 1 until M do Δ[k] = 2 * μ ∗ εn * x[n - k] end-of-for // Se obtiene el nuevo vector de pesos. for k = 1 until M do a[k] = a[k] + Δ[k] end-of-for // Se determina si μ debe ser actualizado. if n mod nInt = 0 then μ = μ / 1.01 end-of-if n=n+1 end-of-for 110 Capítulo 4. El Perceptrón // Se calcula MSE. Real MSE = 0 for n = M + 1 until N do Real x ' = 0 for k = 1 until M do x’ = x’ + a[k] * x[n – k] end-of-for MSE = MSE + Pow(x[n] – x ' , 2) end-of-for MSE = MSE / (N – M) Print(MSE) Print(μ) end-of-while // Se retorna el vector de pesos final. return a end-of-procedure Veamos como es que procede el Algoritmo 4.1. En primer lugar, se inicializa el vector de pesos a con valores aleatorios tomados del intervalo (-1, 1). Después se tiene el ciclo for principal que se encarga de controlar las T presentaciones del conjunto de entrenamiento. Dentro de esta estructura de repetición encontramos un ciclo while que controla la presentación de los vectores de entrada al Perceptrón y de la actualización del vector de pesos a. En párrafos anteriores mencionamos que a la neurona se le presentan vectores de entrada de tamaño M. Sin embargo, nuestra implementación, por cada iteración del ciclo while, forma una subsecuencia de M muestras consecutivas las cuales toma del vector de entrada x. Cada una de esas M muestras es multiplicada por su correspondiente peso, el cual se toma del vector a. Finalmente los M productos obtenidos se suman. Es claro que hemos implementado la Ecuación 4.3.2. Contamos entonces con la salida proporcionada por la neurona: x’. Se calcula el error εn mediante la diferencia de la salida de la neurona con la muestra esperada, la cual se encuentra en el arreglo de entrada x en la posición n. Ahora se calcula el cambio o variación a aplicar sobre el vector de pesos. Para ello se requiere usar la misma subsecuencia de M muestras que se presentaron a la neurona. Cada uno de sus componentes es multiplicado por 2, el coeficiente de aprendizaje y el error εn. El resultado, en la implementación, es almacenado en el arreglo Δ. Por ultimo, a cada elemento del vector de pesos a le es sumado su correspondiente elemento del vector Δ. Con ello se obtiene un nuevo vector de pesos. Mencionamos que el objetivo del Coeficiente de Aprendizaje μ es el de permitir la aceleración de la convergencia del vector de pesos. Uno de los parámetros de entrada del Algoritmo 4.1 es precisamente μ. Este valor de entrada se considerará de hecho un 111 Una Introducción al Cómputo Neuronal Artificial Coeficiente de Aprendizaje inicial ya que conforme avance la ejecución de algoritmo éste se irá modificando. Las modificaciones a aplicar harán que el valor de μ disminuya progresivamente. Justifiquemos esta manera de proceder. Recordemos primeramente que el lugar geométrico descrito por las funciones MSEn (Ecuación 4.3.5), y de hecho también por la función MSE (Ecuación 4.3.4), es un hiperparaboloide inmerso en el espacio (M+1)-Dimensional. El Algoritmo 4.1 genera en primer lugar un vector de pesos inicial con valores aleatorios. Este vector de pesos puede verse como un punto en el dominio tanto de MSEn como de MSE. Cuando éste se evalúa es que entonces nos colocamos en algún punto del espacio \ M +1 y que de hecho forma parte de la hipersuperficie del hiperparaboloide. Ahora bien, estableceremos la suposición de que el punto en el que nos encontramos se encuentra alejado del único mínimo global. A partir de este momento, se utiliza la regla de actualización de pesos (Ecuación 4.3.9). En el momento en que el vector de pesos es actualizado es que entonces estamos posicionados en otro nuevo punto sobre la hipersuperficie. La idea es que mientras supongamos que estamos alejados del mínimo global tendremos que aplicar un coeficiente de aprendizaje con un valor inicial “alto” que nos permita acercarnos rápidamente al mínimo. Es claro que después de varias iteraciones podríamos suponer que llegamos a una situación en la que ya nos encontramos lo suficientemente cerca del mínimo global. Sin embargo, el seguir usando el coeficiente de aprendizaje inicial podría ser contraproducente ya que en lugar de permitir que nos acerquemos cada vez más, podríamos estarnos alejando. Es aquí donde se debe actualizar a μ, con un valor más pequeño que el que tenía inicialmente, a fin de que las actualizaciones del vector de pesos, y por lo tanto los posicionamientos sobre el hiperparaboloide, sean cada vez más precisos en términos de su progresivo acercamiento al mínimo global. El Algoritmo 4.1 implementa el proceso antes mencionado utilizando también el valor de entrada nInt. Este valor determina un intervalo, de acuerdo al número de iteraciones efectuadas por el ciclo while, en el cual el valor de μ se conserva. Después de nInt iteraciones del ciclo while éste se actualiza. Su valor se reduce al dividirlo, en nuestra implementación, por 1.01. Una vez que el Algoritmo 4.1 termina la ejecución del ciclo while, se procede a calcular el valor de la función MSE (Ecuación 4.3.4) usando los pesos actuales en el vector a y el conjunto de entrenamiento en el vector de entrada x. Este cálculo es únicamente con fines de medir el desempeño de la neurona una vez que se ha efectuado una presentación del conjunto de entrenamiento. Cuando las T presentaciones del conjunto de entrenamiento han sido ejecutadas, el Algoritmo 4.1 finaliza su ejecución retornando los últimos valores para los pesos, los cuales se encuentran en el vector a. Aplicaremos el método de Descenso Escalonado, implementado en el Algoritmo 4.1, para entrenar a un Perceptrón de manera que sus pesos correspondan con los 7 parámetros autorregresivos de la serie de tiempo presentada en la Figura 4.18. Como sabemos, tal serie fue generada usando la Ecuación 4.3.1 y los siguientes valores: 112 Capítulo 4. El Perceptrón • M=7 • a1 = -0.15 • a2 = 0.1 • a3 = -0.3 • a4 = -0.2 • a5 = -0.1 • a6 = -0.5 • a7 = 0.3 • c1 = -3 • c2 = 1 • c3 = 6 • c4 = -8 • c5 = -1 • c6 = -4 • c7 = 2 • noise(n) ∈ {-7, -6, -5, …, 5, 6, 7} • N = 2,000 muestras. Las 2,000 muestras serán guardadas en el arreglo de entrada x. El Perceptrón únicamente recibirá la información asociada a tales muestras (véase la Figura 4.19). Ahora bien, para la ejecución del Algoritmo 4.1, establecemos los siguientes valores de entrada: • μ = 0.0003 • nInt = 500 • T = 100 Es decir, el conjunto de entrenamiento será presentado 100 veces. Se tendrá un coeficiente de aprendizaje inicial μ = 0.0003 el cual será actualizado cada 500 iteraciones del ciclo while en el Algoritmo 4.1. Una vez finalizada la ejecución del algoritmo esperaremos, idealmente, que para los pesos a '1 a a '7 en la neurona se tenga: • a '1 ≈ a1 = -0.15 • a '2 ≈ a2 = 0.1 • a '3 ≈ a3 = -0.3 • a '4 ≈ a4 = -0.2 • a '5 ≈ a5 = -0.1 • a '6 ≈ a6 = -0.5 • a '7 ≈ a7 = 0.3 La Tabla 4.5, junto con las Figuras 4.20 y 4.21, describen el desempeño de la neurona y la evolución del coeficiente de aprendizaje conforme se van efectuando las presentaciones del conjunto de entrenamiento. Recordemos que el desempeño se mide en función del resultado proporcionado por la función MSE (Ecuación 4.3.4). Nótese como es que de la primer a la quinta presentación los valores de MSE son bastante altos: se inicia 113 Una Introducción al Cómputo Neuronal Artificial con 2.90865 × 1017 y se termina en 381,223. Para este intervalo el valor de μ inició en 0.0003 (el valor de entrada) y terminó en 0.000245863. En las presentaciones del conjunto de entrenamiento 10 a 40 el desempeño del Perceptrón mejora considerablemente ya que MSE se ubicó entre 30 y 20. En la presentación 40 el Coeficiente de Aprendizaje μ tiene valor 0.0000610522, es decir, es 4.9138 veces más pequeño que su valor original de entrada. Esto viene a sustentar el hecho de que las modificaciones aplicadas a μ permiten un ajuste cada vez más preciso del vector de pesos. A partir de la presentación 50 se observa que el error MSE está por debajo de 20. Una vez finalizada la presentación 100 del conjunto de entrenamiento se tiene el error final MSE = 18.5939. El Coeficiente de Aprendizaje termina con valor final μ = 0.00000560495: el cual es 53.5231 veces más pequeño que el valor original 0.0003. a1' Xn-1 a2' Xn-2 Xn-3 a4' Xn-4 a5' Xn-5 7 x = ¦ ak' xn − k ' n k =1 xn' Salida Entradas a3' a6' Xn-6 a7' Xn-7 Figura 4.19. Representación esquemática del Perceptrón que se utilizará para determinar los Parámetros Autorregresivos en una Señal de Séptimo Orden (Véase el texto para detalles). Una vez finalizada la ejecución del Algoritmo 4.1 tenemos los siguientes pesos en la neurona que de hecho son los parámetros autorregresivos identificados: • a '1 = -0.165747 • a '2 = 0.0845436 • a '3 = -0.27829 • a '4 = -0.17541 • a '5 = -0.116675 • a '6 = -0.495401 • a '7 = 0.28155 Comparémoslos ahora con los parámetros utilizados para generar la serie de tiempo de la Figura 4.18: 114 Capítulo 4. El Perceptrón • a1 - a '1 = -0.15 – (-0.165747) = 0.015747 • a2 - a '2 = 0.1 – 0.0845436 = 0.0154564 • a3 - a '3 = -0.3 – (-0.27829) = -0.02171 • a4 - a '4 = -0.2 – (-0.17541) = -0.02459 • a5 - a '5 = -0.1 – (-0.116675) = 0.016675 • a6 - a '6 = -0.5 – (-0.495401) = -0.004599 • a7 - a '7 = 0.3 – 0.28155 = 0.01845 Lo que en consecuencia nos dice que el promedio de los errores al cuadrado existente entre los parámetros reales y aquellos identificados durante el entrenamiento del Perceptrón es 0.000314638. Ello implica que hemos obtenido aproximaciones bastante cercanas a las esperadas. Tabla 4.5. Desempeño del aprendizaje de un Perceptrón entrenado mediante Descenso Escalonado y el Algoritmo 4.1 (véase el texto para detalles). T-ésima Presentación N 1 MSE = ε n2 del Conjunto μ ¦ N − M n = M +1 de Entrenamiento 0.000288294 1 2.90865 × 1017 15 0.000277045 2 1.42666 × 10 12 0.000266235 3 7.17163 × 10 0.000255846 4 2.07356 × 108 5 381,223 0.000245863 10 26.2274 0.000201496 20 22.5903 0.000135335 30 20.9588 0.0000908984 40 20.0612 0.0000610522 50 19.5134 0.0000410059 60 19.1554 0.0000275418 70 18.9167 0.0000184985 80 18.7727 0.0000124246 90 18.6672 0.00000834501 100 18.5939 0.00000560495 Los pesos identificados a '1 a a '7 se utilizan para generar la señal correspondiente. Para este fin se utilizará la siguiente fórmula: ck ­ °M x 'n = ® °¦ a 'k xn − k ¯ k =1 si n = k , k ∈ {1, 2,..., M } si N ≥n>M (Ecuación 4.3.11) Nótese la similitud de ésta con la Ecuación 4.3.1, la cual fue utilizada para generar la serie de tiempo original (Figura 4.18). En el caso actual, las M muestras, para obtener al estimado x 'n , son tomadas del conjunto de entrenamiento. Ello implica que de hecho la 115 Una Introducción al Cómputo Neuronal Artificial sumatoria usada para generar a x 'n es la sumatoria de salida del Perceptrón. Por esa misma razón hemos omitido el término de ruido o perturbación ya que la neurona fue entrenada con muestras a las cuales ya se les había aplicado la función noise(n). Finalmente, agregamos el hecho de que la Función de Activación utilizada fue la Función Identidad. Por tanto, el caso cuando N ≥ n > M en la Ecuación 4.3.11 no hace más que enviar como entrada al Perceptrón el vector [xn-1 xn-2 xn-3 … xn-M]T y obtener la salida correspondiente x 'n . La Figura 4.22 muestra la señal generada al aplicar el Perceptrón bajo la Ecuación 4.3.11. En la Figura 4.23 se presenta la señal generada por el Perceptrón (en gris) sobrepuesta con la señal original (en negro). Debido a que los parámetros autorregresivos identificados cuentan con errores respecto a los originales, es que es fácil detectar pequeñas diferencias entre las señales. Sin embargo, es también claro que el error es en realidad pequeño. MSE 28 26 24 22 20 20 40 60 80 100 T Figura 4.20. Evolución del valor MSE (Ecuación 4.3.4) a lo largo de las T = 100 presentaciones del conjunto de entrenamiento para un Perceptrón entrenado mediante el Algoritmo 4.1 (Véase el texto para detalles). 116 Capítulo 4. El Perceptrón μ 0.0003 0.00025 0.0002 0.00015 0.0001 0.00005 20 40 60 80 100 T Figura 4.21. Evolución del Coeficiente de Aprendizaje μ a lo largo de las T = 100 presentaciones del conjunto de entrenamiento para un Perceptrón entrenado mediante el Algoritmo 4.1 (Véase el texto para detalles). En la Sección 4.2 reconocimos a las limitaciones del Perceptrón en términos del número de problemas que es capaz de modelar y resolver. Sin embargo, esta Sección ha presentado una aplicación interesante para la cual se ha proporcionado una solución, la cual si bien es aproximada, es bastante cercana a la óptima. Al mismo tiempo, hemos presentado un mecanismo de ajuste de pesos basado en el método de Descenso Escalonado. Es evidente que las operaciones aplicadas son realmente sencillas: sumas, restas y multiplicaciones. Por ello contamos con una unidad de cómputo neuronal cuya implementación algorítmica es realmente simple, tal como lo muestra el Algoritmo 4.1. En los siguientes dos Capítulos comenzaremos a considerar el uso de más de una neurona, lo cual da a lugar a la especificación de Redes Neuronales Artificiales y la solución de problemas mediante éstas. Será en ese punto cuando veamos que las limitaciones de una única neurona logran ser superadas al considerar varias neuronas para la solución de un problema. 117 Una Introducción al Cómputo Neuronal Artificial xn n 500 1000 1500 2000 Figura 4.22. Serie de tiempo de 7 parámetros autorregresivos generada por un Perceptrón bajo la Ecuación 4.3.11 (véase el texto para detalles). 118 Capítulo 4. El Perceptrón xn n 500 1000 1500 2000 Figura 4.23. En color gris, la serie de tiempo presentada en la Figura 4.22. En color negro, la serie de tiempo presentada en la Figura 4.18 (véase el texto para detalles). 119 Una Introducción al Cómputo Neuronal Artificial 120 Una Introducción al Cómputo Neuronal Artificial 5. La Red Madaline Una Introducción al Cómputo Neuronal Artificial 122 Capítulo 5. La Red Madaline La Red Madaline (Many Adaline) es una Red Neuronal Artificial formada por varias neuronas del tipo Adaline (Capítulo 3) las cuales se encuentran agrupadas en capas. En el Capítulo 1 comentamos que fue propuesta por Bernard Widrow en 1960. Existen varios mecanismos para el ajuste de los pesos de las neuronas que conforman a una red Madaline. Uno de ellos es la Madaline Rule II, la cual fue originalmente propuesta por Widrow junto con Rodney Winter en 1988. En la Sección 5.2 haremos mención de una metodología para el ajuste de pesos que toma algunos elementos de la Madaline Rule II. Por lo mientras, en la siguiente Sección describiremos las bases que forman el procesamiento de un vector de entrada para producir la correspondiente salida. 5.1 Estructura Básica Consideremos una red Madaline formada por 5 neuronas. Véase la Figura 5.1. Tal como comentamos previamente las neuronas estarán organizadas en capas. En el caso de la red que hemos definido en la Figura 5.1 tenemos la siguiente estructura: • Las neuronas 1 y 2 forman la Capa de Entrada. • Las neuronas 3 y 4 forman una Capa Interna o Capa Oculta. • La neurona 5 forma la Capa de Salida. z1 = w1,0 + x1 3 ¦w x 1,i i i =1 Adaline 1 y1 = sign( z1 ) z3 = w3,0 + w3,1 y1 + w3,2 y2 Adaline 3 y3 = sign( z3 ) z5 = w5,0 x2 x3 + w5,1 y3 z2 = w2,0 + 3 ¦w x 2,i i i =1 Adaline 2 y2 = sign( z2 ) z4 = w4,0 + w4,1 y1 + w4,2 y2 Adaline 4 + w5,2 y4 Adaline 5 y5 = sign( z5 ) y5 y4 = sign( z4 ) Figura 5.1. Una red Madaline formada por 5 neuronas. La red de la Figura 5.1 recibirá como entrada un vector en \ 3 : [x1 x2 x3]T. Los escalares x1, x2 y x3 se envían tanto a la neurona 1 como a la neurona 2. Sabemos, por la Sección 3.1, que las neuronas 1 y 2 producirán como salida los escalares y1 y y2 respectivamente. Ahora bien, los valores y1 y y2 formarán a su vez en un vector en \ 2 : [y1 y2]T. Este vector será enviado como entrada a las dos neuronas que forman la capa oculta. Las neuronas 3 y 4 producen entonces las salidas y3 y y4 respectivamente. De nueva cuenta formamos un vector en \ 2 cuyos componentes son los escalares y3 y y4. El vector [y3 y4]T es enviado como entrada a la única neurona en la capa de salida, es decir, la neurona 5. Finalmente, la neurona 5 procesa sus entradas y produce la salida y5. Este escalar es de hecho la salida final que proporciona la red. El proceso que acabamos de describir, para la red de la Figura 5.1, puede ser visto como una serie de mapeos de vectores que inicia desde la capa de entrada. Ésta recibe un 123 Una Introducción al Cómputo Neuronal Artificial vector en \ 3 el cual es mapeado, por las neuronas 1 y 2, en un vector en \ 2 . Posteriormente este vector es mapeado en un nuevo vector, también en \ 2 , por la acción de las neuronas en la capa oculta. Finalmente, la única neurona en la capa de salida mapea a su vector de entrada en un vector en \ . En general, es claro entonces que la dimensionalidad de los mapeos va directamente en función del número de neuronas presentes en cada capa de la red. Consideremos una red formada por m capas ocultas. Sean: • p: número de neuronas en la capa de entrada • nO: número de neuronas en la O-ésima capa oculta, 1 ≤ O ≤ m. • q: número de neuronas en la capa de salida. Suponiendo que los vectores de entrada están en \ n tenemos entonces la siguiente secuencia de mapeos entre las capas de neuronas: Capa de entrada Primer capa oculta \ n 6 \ p 6\ n1 Segunda capa oculta Tercer capa oculta 6\ 6 n2 " m -ésima capa oculta Capa de salida 6 \ 6\ nm q Considerando únicamente la dimensionalidad de los vectores de entrada y de los vectores en la salida final, es que se dice también que una red mapea vectores de \ n a \ q . Esta secuencia de mapeos de vectores entre las capas también nos permite determinar el número de conexiones existentes en la red. Dado que los n componentes del vector de entrada se propagan todos a las p neuronas en la capa de entrada es que entonces tenemos np conexiones. Sabemos que cada neurona en la capa de entrada contribuye con un escalar de salida de manera que en esta capa se forma un vector de p componentes. Este vector es propagado hacia todas las n1 neuronas que forman a la primera capa oculta. Por lo tanto se tienen pn1 conexiones entre la capa de entrada y la primera capa oculta. La O-ésima capa oculta se forma por nO neuronas. Las salidas de estas neuronas forman un vector de nO componentes el cual a su vez es propagado a la siguiente capa oculta la cual se forma por nO+1 neuronas. El número de conexiones entre estas dos capas ocultas estará dado por nO⋅nO+1. Por último, se tiene que la última capa oculta se formará por nm neuronas. Sus salidas forman un vector de nm componentes los cuales son todos propagados hacia las q neuronas en la capa de salida. Se tienen entonces nmq conexiones. Sea CM(n, p, m, q, n1, …, nm) el número de conexiones presentes en una red Madaline. De acuerdo a la descripción anterior tendremos que: m −1 CM ( n, p, m, q, n1 , …, nm ) = np + pn1 + ¦ nA ⋅nA +1 + nm q (Ecuación 5.1.1) A =1 Por ejemplo, para la red Madaline de la Figura 5.1 tenemos que la Ecuación 5.1.1 nos indica que existen 12 conexiones: 0 CM ( 3, 2,1,1, 2 ) = 3 ⋅ 2 + 2 ⋅ 2 + ¦ nA ⋅nA +1 + 2 ⋅1 = 6 + 4 + 0 + 2 = 12 A =1 124 Capítulo 5. La Red Madaline 5.2 Ajuste de Pesos en una Red Madaline En el Sistema Nervioso Central se tiene que los seres humanos no estamos conscientes del funcionamiento de las neuronas en las “capas ocultas” de nuestra red neuronal en procesos, por ejemplo, como el aprendizaje. Realmente no se conocen ni se pueden interpretar las salidas proporcionadas por tales neuronas. En realidad, solo estamos conscientes de las entradas que recibe nuestra red, que pueden provenir de los órganos sensoriales por ejemplo, y de las salidas que ésta proporciona y que pueden percibirse al final como una acción ejecutada. En el caso de una Red Neuronal Artificial se presenta una situación similar ya que el aprendizaje de una red sólo se mide en términos de las entradas y las salidas finales. Las salidas de las neuronas en las capas de entrada y las capas ocultas no se interpretan, aunque si son accesibles y por ello mismo se aplican modificaciones a los pesos de estas neuronas ya que sus salidas contribuyen a los valores de las salidas finales de la red. Esta actualización de pesos es consistente, por ejemplo, con la Ley de Aprendizaje Hebbiano (Sección 1.2), sin embargo, desde el punto de vista biológico, realmente no sabemos de manera precisa en qué momento se dan las modificaciones entre las conexiones de las neuronas ni tampoco que tanto se refuerzan o debilitan éstas. A continuación describiremos una metodología, la cual está basada en la propuesta de Widrow y Winter para el ajuste de pesos en una red Madaline. Se trata de un método de entrenamiento inspirado en la Madaline Rule II. Veremos que en realidad es una metodología bastante intuitiva y por tanto fácil de comprender. Sin embargo, también veremos que pueden existir problemas con su eficiencia. Pero no por ello nos dejará de ser útil para comprender los retos y perspectivas presentes al momento de entrenar una red formada por más de una neurona. Por eso mismo la metodología a detallar es una buena introducción antes de proceder al Algoritmo de Retropropagación, el cual se discutirá en el siguiente Capítulo. Considérese el conjunto de entrenamiento de la Tabla 5.1. Éste será presentado a la red Madaline de la Figura 5.2. Tal red se forma por 5 neuronas tipo Adaline. Se reciben como entrada vectores en \ 2 . La salida final de la red está dada por un escalar. Dado que todas las neuronas envían el resultado de sus respectivas sumatorias de salida a la función sign, es que entonces, a partir de la capa de entrada, todos los vectores generados tienen sus componentes en {-1, 1}. Tabla 5.1. Conjunto de entrenamiento a presentar a una red Madaline. Salida Entrada Esperada x1 x2 d -2 0 1 -1 0 -1 0 1 1 1 1 -1 2 3 1 125 Una Introducción al Cómputo Neuronal Artificial z1 = w1,0 x1 + w1,1 x1 + w1,2 x2 Adaline 1 y1 = sign( z1 ) z3 = w3,0 + w3,1 y1 + w3,2 y2 Adaline 3 y3 = sign( z3 ) z5 = w5,0 + w5,1 y3 x2 z2 = w2,0 + w2,1 x1 + w2,2 x2 Adaline 2 y2 = sign( z2 ) z4 = w4,0 + w4,1 y1 + w4,2 y2 Adaline 4 + w5,2 y4 Adaline 5 y5 = sign( z5 ) y5 y4 = sign( z4 ) Figura 5.2. Una red Madaline formada por 5 neuronas que efectúa un mapeo de vectores en \ 2 a vectores (escalares) en \ . Tabla 5.2. Pesos iniciales de las neuronas en la red Madaline presentada en la Figura 5.2. w j,1 w j,2 wj,0 -0.23 -0.3 Neurona 1 0.5 Neurona 2 -0.16 -0.46 -0.26 Neurona 3 0.75 0.22 0.78 Neurona 4 0.37 -0.59 -0.28 Neurona 5 0.76 -0.96 0.38 Supongamos que las neuronas de la red de la Figura 5.2 cuentan con los pesos iniciales mostrados en la Tabla 5.2. Veamos que sucede cuando enviamos como entrada al primer vector en el conjunto de entrenamiento de la Tabla 5.1: x1 = -2, x2 = 0. Para éste se espera que la red proporcione la salida final d = 1. Como sabemos, el vector es recibido inicialmente por las neuronas en la capa de entrada, es decir, los Adalines 1 y 2. Determinemos sus correspondientes salidas: • Neurona 1: o z1 = -2(-0.23) + 0(-0.3) + 0.5 = 0.96 o y1 = sign(0.96) = 1 • Neurona 2: o z2 = -2(-0.46) + 0(-0.26) – 0.16 = 0.76 o y2 = sign(0.76) = 1 ª y º ª1º Esto da lugar a la generación del vector « 1 » = « » . Éste ahora es enviado como entrada a ¬ y2 ¼ ¬1¼ las neuronas 3 y 4 que forman la única capa oculta: • Neurona 3: o z3 = 1(0.22) + 1(0.78) + 0.75 = 1.75 o y3 = sign(1.75) = 1 • Neurona 4: o z4 = 1(-0.59) + 1(-0.28) + 0.37 = -0.5 o y4 = sign(-0.5) = -1 126 Capítulo 5. La Red Madaline ªy º ª 1 º Por ultimo, el vector generado por las salidas de la capa oculta, « 3 » = « » , se envía a la ¬ y4 ¼ ¬ −1¼ única neurona en la capa de salida: • Neurona 5: o z5 = 1(-0.96) + -1(0.38) + 0.76 = -0.58 o y5 = sign(-0.58) = -1 En este punto nos es claro que la red proporciona una salida diferente a la esperada. Se deberá efectuar un ajuste de pesos de manera que para el vector de entrada [-2 0]T se obtenga la salida d = 1. Veamos como es que nuestra metodología procede para ajustar los pesos de la red de la Figura 5.2 de tal forma que para la entrada [-2 0]T se obtenga la salida d = 1. En primer lugar debemos considerar que las neuronas a ajustar serán aquellas en las capas ocultas y de salida, y en particular, se inicia con las neuronas en la capa oculta. Considérense las neuronas 3 y 4 de la Figura 5.2, suponemos que sus pesos son los presentados en la Tabla 5.2. Sea S el conjunto dado por: 2 ­ ½ S = ® w j ,0 + ¦ w j ,i yi : j = 3, 4 ¾ i =1 ¯ ¿ (Ecuación 5.2.1) Es decir, S se forma por los valores absolutos de las Sumatorias de Salida, sin aplicar la función sign, de las neuronas 3 y 4. El vector que se les envía es el vector generado por la capa de entrada una vez que ha procesado al vector de entrada en cuestión, es decir, el vector [-2 0]T. Por lo tanto, específicamente S tendrá los siguientes valores: S = {1.75, 0.5} Ahora bien, se seleccionará aquella neurona, de la capa oculta, cuyo valor en S sea el más pequeño. Tenemos que, para nuestro ejemplo, se trata de la neurona 4. La idea es ajustar primero los pesos a las neuronas cuyos valores absolutos de sus Sumatorias de Salida sean cercanos al cero. Debido a que las Sumatorias de Salida de estas neuronas son pequeñas en comparación con las de las neuronas restantes en la capa, también será más sencillo modificar sus pesos. De hecho, el objetivo es que la neurona seleccionada invierta su salida. Si la neurona proporcionó una salida 1 (-1), entonces se espera que su contribución a la solución del problema mejore, y en particular a obtener la salida final de la red correcta, al hacer que su salida ahora sea -1 (1). Asignemos los siguientes nuevos pesos a la neurona 4: • w4,0 = -0.39 • w4,1 = 0.58 • w4,2 = -0.60 Veamos en primer lugar si la salida de la neurona se invierte, para ello le enviamos el vector generado por la capa de entrada al procesar al vector en el Conjunto de Entrenamiento [-2 0]T: 127 Una Introducción al Cómputo Neuronal Artificial • z4 = 1(0.58) + 1(-0.60) - 0.39 = -0.41 • y4 = sign(-0.41) = -1 Es claro que la salida no se invirtió. Se asignan los nuevos pesos: • w4,0 = 0.9017 • w4,1 = -0.71 • w4,2 = 0.97 Se verifica si la salida se ha invertido: • z4 = 1(-0.71) + 1(0.97) + 0.9017 = 1.1617 • y4 = sign(1.16) = 1 Los nuevos pesos efectivamente permiten que la salida de la neurona 4 ahora sea igual a 1. Usando a éstos, se recalcula la salida final de la red y se verifica si se obtiene la salida correcta d = 1. El vector de entrada para la neurona 5 será ahora [1 1]T cuyo segundo componente es precisamente la nueva salida de la neurona 4: • z5 = 1(-0.96) + 1(0.38) + 0.76 = 0.18 • y5 = sign(0.18) = 1 Con el reajuste de pesos aplicado a la neurona 4 hemos obtenido la salida esperada para el vector de entrada x1 = -2, x2 = 0. Por lo tanto esta neurona preserva sus nuevos pesos. En la Tabla 5.3 se presentan los pesos actuales de la red Madaline de la Figura 5.2. Tabla 5.3. Pesos de las neuronas en la red Madaline presentada en la Figura 5.2 una vez que se ha aplicado un ajuste sobre la neurona 4 (Véase el texto para detalles). w j,1 w j,2 wj,0 0.5 -0.23 -0.3 Neurona 1 Neurona 2 -0.16 -0.46 -0.26 0.75 0.22 0.78 Neurona 3 Neurona 4 0.9017 -0.71 0.97 0.76 -0.96 0.38 Neurona 5 La idea ahora es presentar a la red un nuevo vector de entrada. En el caso en que dado un vector de entrada la red proporcione la salida correcta entonces es obvio que no se aplicará ninguna modificación. Si por otro lado, se obtiene salida final incorrecta y a todas las neuronas en la capa oculta se les ha invertido su salida sin obtener la salida final esperada, entonces se procede a efectuar modificaciones de pesos en las neuronas de la siguiente capa oculta. Si todas las capas ocultas han sido procesadas sin obtener la salida final correcta, entonces se procede a modificar los pesos de las neuronas en la capa de salida. Procedamos a describir el mecanismo para el entrenamiento de una red Madaline. Sea h un índice para enumerar las capas de la red de manera que tomará valores desde 1 hasta m+1, donde m es el número de capas ocultas. Si h = m+1 entonces estamos haciendo referencia a la capa de salida; si 1 ≤ h ≤ m entonces hacemos referencia a la h-ésima capa oculta. Sean los vectores X1, X2, …, XN los vectores de entrada en el conjunto de entrenamiento. Considérese al i-ésimo vector de entrada, Xi, 1 ≤ i ≤ N. Xi es presentado a 128 Capítulo 5. La Red Madaline la red y se obtiene la correspondiente salida final. Asumamos que la salida de la red con Xi es incorrecta. Se procede a recorrer cada una de las capas de la red comenzando desde la primer capa oculta, h = 1, hasta la capa de salida, h = m+1. Para cada Adaline j en la h-ésima capa de la red actualmente procesada se calcula: A( j ) = w j ,0 + ¦ w j ,i yi (Ecuación 5.2.2) i =1 Ahora, sea S el conjunto de valores A(j) ordenados de manera ascendente. Procesaremos a cada elemento de S de manera secuencial. Consideremos a la neurona Adaline asociada al elemento A(j) de S actualmente procesado. Se modifican los pesos de la neurona de manera que su salida se invierta. Se recalcula nuevamente la salida de la red cuando Xi le es presentado: • Si la salida final de la red es ahora correcta entonces se fijan los nuevos pesos a la neurona de manera definitiva, las restantes neuronas de la capa actual y las restantes capas de la red ya no son consideradas. Se procede a presentar al siguiente vector de entrada: Xi+1. • Si la salida de la red sigue siendo incorrecta entonces a la neurona actual le son reasignados sus pesos originales. Se analizan las restantes neuronas de la capa actual y de las siguientes capas de la red hasta encontrar una neurona que al invertir su salida permita que la red proporcione la salida correcta. Veamos algunas propiedades y conceptos asociados al procedimiento que acabamos de describir. En primer lugar, aquella neurona a la cual se le ha invertido su salida, y además hace que la red proporcione la salida final correcta, se le denotará, tal y como establecieron Windrow y Winter en la Madaline Rule II, Neurona de Disturbancia Mínima. Nótese que es posible que al invertir la salida de una neurona se obtenga la salida esperada para el vector de entrada actual. Pero también es posible que debido a este cambio otros vectores en el conjunto de entrenamiento dejen de ser reconocidos. Consideremos nuevamente a la red presentada en la Figura 5.2. Dados los pesos iniciales de la Tabla 5.2 y el vector de entrada [-2 0]T determinamos que la neurona de disturbancia mínima era la neurona 4 ubicada en la primer, y única, capa oculta. Al invertir la salida de esta neurona obtuvimos la salida correcta por parte de la red. Ahora bien, de acuerdo a la Tabla 5.1 el siguiente vector a presentar es [-1 0]T. Para éste se espera que la red proporcione como salida d = -1. Usando los pesos de la Tabla 5.3 tenemos que la red procesa a [-1 0]T como sigue: • • Neurona 1: o z1 = -1(-0.23) + 0(-0.3) + 0.5 = 0.73 o y1 = sign(0.73) = 1 Neurona 2: o z2 = -1(-0.46) + 0(-0.26) – 0.16 = 0.3 o y2 = sign(0.3) = 1 129 Una Introducción al Cómputo Neuronal Artificial • Neurona 3: o z3 = 1(0.22) + 1(0.78) + 0.75 = 1.75 o y3 = sign(1.75) = 1 • Neurona 4: o z4 = 1(-0.71) + 1(0.97) + 0.9017 = 1.1617 o y4 = sign(1.1617) = 1 • Neurona 5: o z5 = 1(-0.96) + 1(0.38) + 0.76 = 0.18 o y5 = sign(0.18) = 1 Lo cual nos indica que se tiene una salida final incorrecta. De acuerdo a la manera de proceder previamente establecida, la primera neurona cuyos pesos se modificarán será nuevamente la neurona 4. Su salida debe ser invertida. Consideremos los siguientes nuevos pesos (que no son más que aquellos presentados en la Tabla 5.3 pero con signo opuesto): • w4,0 = -0.9017 • w4,1 = 0.71 • w4,2 = -0.97 Ahora se tiene que: • z4 = 1(0.71) + 1(-0.97) - 0.9017 = -1.1617 • y4 = sign(-1.1617) = -1 Y para la neurona en la capa de salida: • z5 = 1(-0.96) + (-1)(0.38) + 0.76 = -0.58 • y5 = sign(-0.58) = -1 Lo cual hace que para el vector de entrada [-1 0]T ya se cuente con su correspondiente salida correcta. El problema ahora es que para el vector [-2 0]T la red ha dejado de proporcionar la salida esperada d = 1. El ejemplo anterior nos proporciona evidencia de que es factible que una Neurona de Disturbancia Mínima pueda permitir el aprendizaje de algunos vectores de entrada, pero también puede hacer que otros vectores que ya habían sido reconocidos por la red dejen de serlo. Para ello, es posible, una vez identificada la Neurona de Disturbancia Mínima, presentar cada uno de los vectores en el conjunto de entrenamiento a la red y contabilizar el número de vectores de entrada para los que se obtiene una salida incorrecta. Si el número de vectores no reconocidos aumenta respecto al número que se tenía antes de modificar los pesos de la neurona, entonces los pesos originales de tal neurona son restaurados y se busca otra neurona en la capa actual y en las capas restantes, si es necesario. La idea de esta modificación es forzar a que se busque una Neurona de Disturbancia Mínima que permita el mayor aprendizaje posible. Sin embargo se debe aceptar entonces un compromiso respecto a la eficiencia del algoritmo. Sea nh el número de neuronas en la capa h, 1 ≤ h ≤ m + 1. Entonces, en el peor de los casos, para la h-ésima capa se tendrían que determinar, a lo más, nh⋅N salidas finales de la red. Nótese que el enfoque para lograr el aprendizaje que se ha planteado se basa en la idea de identificar a una neurona “culpable”. Se parte del principio de que existe una neurona en las capas ocultas o de salida que hace que para el vector de entrada actual la red 130 Capítulo 5. La Red Madaline no proporcione la salida correcta. Precisamente la neurona “culpable” es la Neurona de Disturbancia Mínima. Sin embargo este razonamiento abre las posibilidades de considerar la existencia de más de una neurona “culpable”. Intuitivamente se entiende que pueden existir problemas en los cuales para algunos vectores de entrada se deban aplicar correcciones en los pesos de dos o más neuronas al mismo tiempo. Y de hecho, es posible modificar el proceso antes descrito a fin de que se identifiquen a la vez dos neuronas “culpables”. Cada neurona puede estar en una capa diferente. Una vez que dos neuronas han sido seleccionadas se modifican sus pesos de manera que se inviertan sus salidas y se verifica la salida final de la red. Esto abre más posibilidades ya que también es posible, por lo tanto, identificar a la vez tripletas, cuartetos, quintetos, etc. de neuronas “culpables”. El punto fundamental, al considerar tales subconjuntos de neuronas, es que debe elegirse de todos los posibles subconjuntos aquel que maximice el aprendizaje de la red de manera que al modificar sus pesos el número de vectores de entrada correctamente reconocidos aumente respecto al número que se tenia previo a la modificación. Sea M el número total de neuronas en las capas ocultas y de salida en una red Madaline: m M = q + ¦ nA (Ecuación 5.2.3) A =1 Recordemos que q es el número de neuronas en la capa de salida y nO es el número de neuronas en la O-ésima capa oculta, 1 ≤ O ≤ m. El número de subconjuntos de k neuronas tomadas del conjunto formado por las M neuronas en las capas ocultas y de salida está dado §M · por el bien conocido Coeficiente Binomial ¨ ¸ : ©k ¹ §M · M! ¨ ¸= © k ¹ k !( M − k )! (Ecuación 5.2.4) Supongamos la situación extrema en que analizamos primero si una única neurona “culpable” es la que no permite proporcionar la salida correcta final de la red. Asumamos que no hemos logrado identificar la única Neurona de Disturbancia Mínima. Entonces procedemos a determinar si son dos las neuronas “culpables”. Asumamos nuevamente que la red no proporciona la salida final correcta. Ahora determinemos si son tres las neuronas “culpables”, y así sucesivamente. Ello implica que el número total de subconjuntos a analizar es a lo más: §M · §M · §M · §M · M §M · + + ... + + ... + ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ = ¦¨ ¸ ©1¹ ©2¹ ©k ¹ © M ¹ k =1 © k ¹ (Ecuación 5.2.5) 131 Una Introducción al Cómputo Neuronal Artificial El Teorema del Binomio nos dice que el desarrollo de (a + b)M, donde a, b ∈ \ y M ∈ ] + ∪ {0} está dado por: M §M · ( a + b) M = ¦ ¨ ¸ a M − k b k k =0 © k ¹ (Ecuación 5.2.6) Haciendo a = 1 y b = 1 en el Teorema del Binomio tenemos el valor de la suma presentada en la Ecuación 5.2.5: § M · § M · M § M · M −k k M M ¦ ¨ ¸ − ¨ ¸ = ¦ ¨ ¸1 1 − 1 = (1 + 1) − 1 = 2 − 1 (Ecuación 5.2.7) k =0 © k ¹ © 0 ¹ k =0 © k ¹ M El índice inferior de la sumatoria asociada al Teorema del Binomio es k = 0 y por tanto el §M · coeficiente binomial correspondiente es ¨ ¸ el cual evidentemente denota al número de ©0¹ subconjuntos de 0 elementos: 1. Dado que este término no nos es de utilidad es por ello que lo restamos al formar la Ecuación 5.2.7. Por ejemplo, si contásemos con una red Madaline con M = 16 neuronas en sus capas ocultas y de salida entonces tendríamos que analizar a los más 2M - 1 = 65,535 subconjuntos de neuronas “culpables” a fin de hacer que el vector de entrada actual sea reconocido correctamente sin afectar el desempeño actual de la red. En general, suponiendo que contamos con un conjunto de entrenamiento formado por N vectores de entrada entonces el número total de evaluaciones a efectuar durante el entrenamiento de la Red Madaline, en el peor de los casos, sería N⋅(2M – 1). Es claro que el enfoque basado en la determinación de un subconjunto de neuronas “culpables” nos genera un problema de índole combinatoria. La metodología que hemos descrito en esta Sección para el entrenamiento de una red Madaline, y la cual toma varios elementos de la Madaline Rule II, deja claros algunos retos que se deben superar si efectivamente se desea un ajuste bastante bueno de los pesos de las neuronas en la red a fin de que ésta solucione y modele un problema dado. Por el momento adelantamos, tal como se verá en el siguiente Capítulo, que una de las novedades del Algoritmo de Retropropagación radica en no buscar un subconjunto de neuronas “culpables”, sino que asume desde un principio que si un vector de entrada no es reconocido correctamente ello se debe a que todas las neuronas contribuyen a esa falla de reconocimiento. El error que existe entre la salida final de la red y la salida esperada es entonces distribuido y usado para ajustar los pesos de todas las neuronas. Pero antes de presentar el Algoritmo de Retropropagación, veremos, en la siguiente Sección, como es que una red Madaline es capaz de dar solución al problema del modelado de la compuerta XOR. 132 Capítulo 5. La Red Madaline 5.3 Modelado de Funciones Booleanas Antes de abordar el modelado de la función XOR mediante una red Madaline, consideremos primero un procedimiento para determinar a una función Booleana al partir únicamente de sus estados y de los valores que ésta arroja para cada uno. Por ejemplo, sea f una función que depende de las tres variables x1, x2 y x3. Los valores que ésta proporciona para cada uno de sus 8 posibles estados son presentados en la Tabla 5.4. Tabla 5.4. Estados y salidas para una función Booleana de 3 variables. x1 x2 x3 f(x1, x2, x3) 1 1 1 1 1 1 0 0 1 0 1 0 1 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 0 La pregunta a plantear ahora es: ¿cómo se expresa a f en términos de las variables x1, x2 y x3? El procedimiento a definir permitirá determinar a f como una función de las variables dadas y los bien conocidos conectivos de conjunción, disyunción y negación. Nótese que son tres los estados para las cuales f proporciona como valor 1. Éstos se presentan en la Tabla 5.5. Tabla 5.5. Estados para los cuales la función Booleana de la Tabla 5.4 tiene salida 1. x1 x2 x3 f(x1, x2, x3) 1 1 1 1 0 1 0 1 0 0 1 1 De la Tabla 5.5, considérese el estado (0, 0, 1). Los siguientes razonamientos deben ser sumamente claros: • Si x1 = 0 entonces ¬x1 = 1. • Si x2 = 0 entonces ¬x2 = 1. • Si x3 = 1 entonces (obviamente) x3 = 1. Recordemos que buscamos que con el estado (0, 0, 1) la función f proporcione el valor 1. Por lo tanto, si x1, x2 y x3 son iguales a 0, 0 y 1, respectivamente, entonces se tiene que la función Booleana ¬x1 ∧ ¬x2 ∧ x3 arroja el valor 1. Esta función la construimos a partir de los consecuentes de las 3 condicionales que planteamos uniéndolas mediante el operador AND. De hecho, es fácil 133 Una Introducción al Cómputo Neuronal Artificial comprobar que con cualquier otro estado diferente de (0, 0, 1), la función anterior siempre proporciona el valor 0. Ahora tomemos de la Tabla 5.5 el estado (0, 1, 0): • Si x1 = 0 entonces ¬x1 = 1. • Si x2 = 1 entonces x2 = 1. • Si x3 = 0 entonces ¬x3 = 1. Tomemos los consecuentes de las tres condicionales anteriores y unámoslos mediante el operador de conjunción. Tenemos entonces la siguiente función Booleana: ¬x1 ∧ x2 ∧ ¬x3 Tal función proporciona el valor 1 únicamente con el estado (0, 1, 0). Finalmente, consideremos el estado (1, 1, 1) de la Tabla 5.5. Procedemos tal y como lo hicimos con los dos estados anteriores: • Si x1 = 1 entonces x1 = 1. • Si x2 = 1 entonces x2 = 1. • Si x3 = 1 entonces x3 = 1. Construimos en consecuencia la siguiente función Booleana: x1 ∧ x2 ∧ x3 Claramente el estado (1, 1, 1) es el único que hace que la función proporcione el valor 1. A partir de los 3 estados con los cuales la función f de la Tabla 5.4 arroja el valor 1 hemos obtenido 3 funciones Booleanas expresadas en términos de las variables x1, x2 y x3 y los operadores NOT y AND: • ¬x1 ∧ ¬x2 ∧ x3 • ¬x1 ∧ x2 ∧ ¬x3 • x1 ∧ x2 ∧ x3 Ahora uniremos a esas tres funciones Booleanas utilizado el operador OR, de manera que obtenemos una nueva función Booleana: (¬x1 ∧ ¬x2 ∧ x3) ∨ (¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3) Recordemos que dos funciones Booleanas son Lógicamente Equivalentes si sus correspondientes tablas de verdad son iguales. Para la función f su tabla de verdad es precisamente la Tabla 5.4. Ahora calcularemos la tabla de verdad de la función que acabamos de construir. Véase la Tabla 5.6. 134 Capítulo 5. La Red Madaline x1 x2 x3 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 Tabla 5.6. Tabla de verdad asociada la función Booleana (¬x1 ∧ ¬x2 ∧ x3) ∨ (¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3). (¬ ¬x1 ∧ ¬x2 ∧ x3) ¬x1 ∧ ¬x2 ∧ x3 ¬x1 ∧ x2 ∧ ¬x3 x1 ∧ x2 ∧ x3 ∨ (¬ ¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3) 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 Es claro que ambas funciones arrojan los mismos valores para los mismos estados. Entonces podemos concluir que la función f (Tabla 5.4) es lógicamente equivalente a la función Booleana (¬x1 ∧ ¬x2 ∧ x3) ∨ (¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3). Por lo tanto: f(x1, x2, x3) = (¬x1 ∧ ¬x2 ∧ x3) ∨ (¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3) (Ecuación 5.3.1) Hemos ilustrado un procedimiento mediante el cual es posible obtener para cualquier función Booleana, dada únicamente su tabla de verdad, aquella función Booleana que le es lógicamente equivalente pero que estará dada en términos de sus variables involucradas y las compuertas lógicas AND, OR y NOT. Ahora consideremos la compuerta lógica XOR. Su correspondiente tabla de verdad se presenta en la Tabla 5.7. Tabla 5.7. Estados y salidas para la función Booleana XOR. x1 x2 x1 ⊗ x 2 0 0 0 0 1 1 1 0 1 1 1 0 Determinemos su correspondiente expresión en términos de las compuertas AND, OR y NOT. Son dos los estados para los cuales la función tiene valor 1 (Véase la Tabla 5.7): • (0, 1): Si x1 = 0 entonces ¬x1 = 1. Si x2 = 1 entonces x2 = 1. Por lo tanto, para el estado (0, 1) se tiene la función Booleana ¬x1 ∧ x2. • (1, 0): Si x1 = 1 entonces x1 = 1. Si x2 = 0 entonces ¬x2 = 1. Para el estado (1, 0) obtenemos la función Booleana x1 ∧ ¬x2. Al conectar las dos funciones que obtuvimos mediante una disyunción se tiene: (¬x1 ∧ x2) ∨ (x1 ∧ ¬x2) 135 Una Introducción al Cómputo Neuronal Artificial Tal función Booleana no es más que la expresión de la compuerta XOR en términos de las compuertas AND, OR y NOT. Por lo tanto: x1 ⊗ x2 = (¬x1 ∧ x2) ∨ (x1 ∧ ¬x2) (Ecuación 5.3.2) En la Sección 4.2 comentamos que el modelado de la compuerta XOR representa el ejemplo clásico de un problema que es caracterizado como linealmente no separable. Por ello mismo, un único Perceptrón, e incluso una neurona tipo Adaline, no será capaz de representarlo en términos de un umbral Z(x1, x2) = 0, geométricamente una recta en el plano, que separe a los estados con salida 1 de los estados con salida 0. Sin embargo, la Ecuación 5.3.2, que expresa al XOR en términos de las compuertas AND, OR y NOT es interesante. Recordemos que las funciones Booleanas con una variable son todas linealmente separables, mientras que de aquellas con dos variables únicamente el XOR y XNOT no lo son. Es decir, la Ecuación 5.3.2 expresa a una compuerta lógica no linealmente separable en términos de compuertas que si son linealmente separables. Para tales compuertas podemos garantizar la existencia de sus correspondientes neuronas artificiales que las modelan adecuadamente. Esto tiene como consecuencia que una función Booleana puede ser modelada mediante una red neuronal usando neuronas que implementen efectivamente las funciones Booleanas “básicas” AND, OR y NOT. La forma en que se organizarán tales neuronas es especificada precisamente por el orden en que se aplicarán las conjunciones, disyunciones y negaciones. Ahora construiremos una red Madaline que modele a la compuerta lógica XOR. La red recibirá un vector de entrada formado por dos componentes. El vector será enviado en primer lugar a dos neuronas en la capa de entrada: una neurona implementa la función Booleana ¬x1 ∧ x2 mientras que la otra implementa la función x1 ∧ ¬x2 (véase la Ecuación 5.3.2). Nótese que hemos omitido el usar neuronas que implementen el operador de negación, sin embargo es posible hacerlo. Ahora bien, cuando las dos neuronas proporcionan sus correspondientes salidas se forma un nuevo vector, también de dos componentes, que es enviado a una neurona que modela al operador OR. Esta neurona de hecho proporciona la salida final de la red. Ello implica, por un lado, que tenemos una neurona en la capa de salida, y por otro lado, que nuestra red no cuenta con capas ocultas. Utilizaremos entonces una red Madaline de 3 neuronas para modelar al operador XOR. Dado que las neuronas a utilizar son de tipo Adaline, y por ende se utilizará la función sign, entonces para los estados (x1, x2) y para las salidas proporcionadas por las funciones Booleanas a utilizar reemplazaremos el valor 0 por el valor -1. Consideremos en primer lugar a la función Booleana x1 ∧ ¬x2. La Tabla 5.8 muestra cada uno de los estados de entrada y las salidas esperadas para éstos. En la Figura 5.3 se tiene la disposición de los 136 Capítulo 5. La Red Madaline estados en el plano cuando sus valores son considerados coordenadas. Los puntos negros representan estados con salida -1 mientras que el único punto blanco representa al estado con salida 1. La sumatoria de salida de la neurona 1, que modelará la función x1 ∧ ¬x2, está dada por Z1(x1, x2) = w1,0 + x1w1,1 + x2w1,2 (Ecuación 5.3.3) Nuestro objetivo es determinar los valores de sus pesos w1,0, w1,1 y w1,2 de tal forma que la recta Z1(x1, x2) = 0 separe al punto blanco de los puntos negros. Además, queremos que Z1(1, -1) sea un número positivo mientras que con el resto de los estados se obtenga un valor negativo. Esto es con la finalidad de que al aplicar la función sign se obtengan las salidas 1 o -1 tal como se tienen en la Tabla 5.8. En la Figura 5.3 se observa que una opción razonable es que la recta Z1(x1, x2) = 0 sea aquella que pase por los puntos (0, -1) y (1, 0). Por elementos bien conocidos de geometría analítica tenemos: 0 − (−1) 1(−1) − 0(0) + 1− 0 1− 0 ⇔ x2 = x1 − 1 x2 = x1 ⇔ x1 − x2 − 1 = 0 (Ecuación 5.3.4) Es decir, tenemos que los valores de los pesos de la neurona 1 están dados por w1,0 = -1, w1,1 = 1 y w1,2 = -1. El vector normal de la recta Z1(x1, x2) = x1 − x2 − 1 = 0 es [1 -1]T. Éste apunta precisamente al punto blanco por lo que se satisface que Z1(1, -1) > 0 mientras que para los puntos negros se tendrá que Z1(1, -1) < 0. Contamos ya con una neurona Adaline que modela la función Booleana x1 ∧ ¬x2. Tabla 5.8. Estados y salidas para la función Booleana x1 ∧ ¬x2 (el valor 0 ha sido sustituido por -1). x1 x2 ¬x2 x1 ∧ ¬x2 -1 -1 1 -1 -1 1 -1 -1 1 -1 1 1 1 1 -1 -1 137 Una Introducción al Cómputo Neuronal Artificial 1 (-1,1) (1,1) -1 1 (-1,-1) (1,-1) -1 Z1 (x 1 , x 2 ) = 0 Figura 5.3. El umbral Z1(x1, x2) = 0 asociado a la neurona que modelará la función Booleana x1 ∧ ¬x2. Consideremos ahora a la función Booleana ¬x1 ∧ x2. Sus estados y salidas se presentan en la Tabla 5.9. La Figura 5.4 presenta la disposición de los estados en plano (puntos blancos: estados con salida 1, puntos negros: estados con salida -1). Buscaremos los valores de los pesos para la sumatoria de salida de la neurona 2: Z2(x1, x2) = w2,0 + x1w2,1 + x2w2,2 (Ecuación 5.3.5) La Figura 5.4 muestra que una opción es buscar la ecuación de la recta Z2(x1, x2) = 0 que pase por los puntos (-1, 0) y (0, 1): 0 − 1 −1(1) − 0(0) + −1 − 0 −1 − 0 ⇔ x2 = x1 + 1 x2 = x1 ⇔ x1 − x2 + 1 = 0 (Ecuación 5.3.6) El vector normal de la recta obtenida es [1 -1]T. Éste apunta precisamente al estado (1, -1) cuya salida es -1. Requerimos que el vector normal apunte al único estado blanco. Para ello simplemente multiplicamos ambos lados de la ecuación de la recta por -1. Se tiene el nuevo lugar geométrico: − x1 + x2 − 1 = 0 (Ecuación 5.3.7) De esta forma tenemos que los valores de los pesos de la neurona 2, que se encarga de modelar la función Booleana ¬x1 ∧ x2, son w2,0 = -1, w2,1 = -1 y w2,2 = 1. 138 Capítulo 5. La Red Madaline Tabla 5.9. Estados y salidas para la función Booleana ¬x1 ∧ x2 (el valor 0 ha sido sustituido por -1). x1 x2 ¬x1 ¬x1 ∧ x2 -1 -1 1 -1 -1 1 1 1 1 -1 -1 -1 1 1 -1 -1 1 (-1,1) (1,1) -1 1 (-1,-1) (1,-1) -1 Z 2 (x 1 , x 2) = 0 Figura 5.4. El umbral Z2(x1, x2) = 0 asociado a la neurona que modelará la función Booleana ¬x1 ∧ x2. Ahora requerimos una neurona Adaline que modele la compuerta lógica OR. Sus estados y salidas se presentan en la Tabla 5.10 mientras que la Figura 5.5 muestra la disposición de los estados en plano (puntos blancos: estados con salida 1, puntos negros: estados con salida -1). De nueva cuenta requerimos un umbral Z3(y1, y2) que separe a los estados blancos del único estado negro. Calculamos la ecuación de la recta que pasa por los puntos (-1, 0) y (0, -1): −1 − 0 0(0) − (−1)(−1) + 0 − (−1) 0 − (−1) ⇔ y2 = − y1 − 1 y2 = y1 ⇔ − y1 − y2 − 1 = 0 ( Ecuación 5.3.8) El vector normal de la recta está orientado hacia el punto negro, para el cual se desea una salida negativa. Por lo tanto, multiplicamos la ecuación anterior por -1 y obtenemos la 139 Una Introducción al Cómputo Neuronal Artificial orientación deseada de manera que para todo punto blanco Z3(y1, y2) proporciona un valor positivo. Tenemos entonces que para la neurona 3 se tiene Z3(y1, y2) = y1 + y2 + 1 (Ecuación 5.3.9) Tabla 5.10. Estados y salidas para la función Booleana OR (el valor 0 ha sido sustituido por -1). y1 y2 y1 ∨ y2 -1 -1 -1 -1 1 1 1 -1 1 1 1 1 1 (-1,1) (1,1) -1 1 (-1,-1) (1,-1) -1 Z 3 (y 1 , y 2 ) = 0 Figura 5.5. El umbral Z3(y1, y2) = 0 asociado a la neurona que modelará la función Booleana OR. Contamos con las tres neuronas requeridas para formar una red Madaline que modele la compuerta XOR. En párrafos anteriores ya habíamos planteado la manera en la cual estas deberían ser conectadas. Recordemos que x1 ⊗ x2 = (¬x1 ∧ x2) ∨ (x1 ∧ ¬x2) (Ecuación 5.3.2). Véase la Figura 5.6. Las neuronas 1 y 2 reciben el vector de entrada [x1 x2]T el cual es de hecho uno de los estados de la compuerta lógica. La primer neurona calcula el valor correspondiente a x1 ∧ ¬x2 mientras que la segunda calcula ¬x1 ∧ x2. Se tienen entonces las respectivas salidas y1 y y2. Lo único que resta es efectuar una disyunción entre éstas. El operador OR está modelado por la neurona 3. En este punto tenemos que la salida y3 es de hecho la salida final de la neurona. 140 Capítulo 5. La Red Madaline Adaline 1 x1 z1 = x1 − x2 − 1 y1 = sign( z1 ) Adaline 3 z3 = y1 + y2 + 1 y3 = sign( z3 ) y3 Adaline 2 x2 z2 = − x1 + x2 − 1 y2 = sign( z2 ) Figura 5.6. Una red Madaline formada por 3 neuronas que resuelve el problema del modelado de la compuerta XOR. En la Sección 4.2 planteamos que si un problema es linealmente separable entonces existe un umbral Z(x1, x2, …, xn) = 0 que particiona al espacio n-Dimensional en tres regiones: • El conjunto de puntos de \ n que están por encima del umbral. • El conjunto de puntos de \ n que están por debajo del umbral. • El conjunto de puntos de \ n que están sobre el umbral. Para las tres neuronas que forman la red Madaline de la Figura 5.6 tenemos bien identificados sus respectivos umbrales (Figuras 5.3, 5.4 y 5.5) los cuales particionan al espacio bidimensional. En la Figura 5.7.a se muestra, en color gris, la región de \ 2 que está por encima del umbral Z1(x1, x2) = x1 − x2 − 1 = 0. En tal región se ubica el estado (1, -1) el cual tiene salida 1. La Figura 5.7.b muestra la región por encima del umbral Z2(x1, x2) = − x1 + x2 − 1 = 0 . En ésta se localiza el estado (-1, 1), también con salida 1. Finalmente, la Figura 5.7.c muestra la región por encima del umbral Z3(y1, y2) = y1 + y2 + 1 = 0 en donde se localizan los estados de salida 1: (-1, 1), (1, 1) y (1, -1). Lo que haremos ahora es presentar a las tres regiones que hemos descrito al mismo tiempo en el plano. Véase la Figura 5.7.d. En esta misma figura presentamos los estados de la compuerta XOR. La intersección entre las tres regiones, mostrada en gris obscuro en la figura, forma dos conjuntos convexos disjuntos abiertos. El estado (-1, 1) se ubica en uno de los conjuntos mientras que el estado (1, -1) se ubica en el otro. Ambos son estados con salida 1. La unión de los dos conjuntos resultantes es evidentemente un conjunto no convexo también abierto. Este conjunto en cuestión y los estados de la compuerta XOR se presentan ahora en la Figura 5.8. En nuestra discusión respecto al Problema de Representación (Sección 4.2) argumentábamos que si un elemento de cómputo neural daba solución al problema del modelado de la función XOR entonces debíamos aceptar que los estados con salida 1 deberían estar contenidos en un conjunto no convexo (abierto o cerrado) que los separara de los estados con salida -1. Una neurona Adaline o Perceptrón no puede generar este tipo de regiones. Pero acabamos de probar que mediante el uso de una Red Neuronal es posible que los umbrales, y las regiones que éstos definen, den lugar precisamente a las regiones no convexas requeridas para efectivamente dar solución al 141 Una Introducción al Cómputo Neuronal Artificial problema en cuestión, en nuestro caso, el problema del XOR. La Figura 5.8 muestra que los umbrales de las neuronas de la red Madaline de la Figura 5.6 permiten establecer las condiciones bajo las cuales se particiona al plano en dos regiones no convexas. Formalmente éstas son: • RC12 = {(a1 , a2 ) ∈ \ 2 : Z 3 (a1 , a2 ) ≥ 0 ∧ ( Z1 (a1 , a2 ) ≥ 0 ∨ Z 2 (a1 , a2 ) ≥ 0)} • RC22 = {(a1 , a2 ) ∈ \ 2 : Z 3 (a1 , a2 ) < 0 ∨ ( Z 3 (a1 , a2 ) ≥ 0 ∧ ( Z1 (a1 , a2 ) < 0 ∧ Z 2 (a1 , a2 ) < 0))} Textualmente tenemos que un punto (a1, a2) estará en la región RC12 si en primer lugar éste se ubica sobre o por encima del umbral Z3 (Ecuación 5.3.9). Si esta condición se cumple entonces sólo se debe determinar si (a1, a2) satisface el estar sobre o por encima del umbral Z1 (Ecuación 5.3.3) o bien sobre o por encima del umbral Z2 (Ecuación 5.3.5). El conjunto de puntos que cumplen las condiciones que acabamos de describir están en la región gris de la Figura 5.8. Es claro que los estados con salida 1 se ubicarán en la región RC12 . Por otro lado, analizando las condiciones establecidas para que un punto (a1, a2) se ubique en la región RC22 es claro que ésta es complementaria a la región RC12 . Aplicando Álgebra de Conjuntos se puede demostrar sin problema que RC12 ∪ RC22 = \ 2 . Finalmente, los estados con salida -1 estarán en RC22 . Procedamos ahora a modelar, mediante una Red Madaline, a la función Booleana descrita originalmente en la Ecuación 5.3.1: f(x1, x2, x3) = (¬x1 ∧ ¬x2 ∧ x3) ∨ (¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3) Analizaremos en primer lugar a las funciones Booleanas que la componen: • • • ¬x1 ∧ ¬x2 ∧ x3 ¬x1 ∧ x2 ∧ ¬x3 x1 ∧ x2 ∧ x3 La idea es que si las tres son linealmente separables entonces la capa de entrada de la correspondiente red Madaline se formará únicamente por tres neuronas. Cada una recibirá un vector de entrada [x1 x2 x3]T que contiene el estado a procesar. Debido al uso de la función sign y a fin de diferenciar adecuadamente los estados y sus salidas reemplazaremos el valor Booleano 0 por el valor -1. 142 Capítulo 5. La Red Madaline 1 (-1,1) 1 (1,1) -1 (-1,-1) (-1,1) 1 -1 (1,-1) (-1,-1) -1 (1,1) 1 (1,-1) -1 Z 1 (x1 ,x 2)=0 Z 2 (x1 ,x 2) = 0 a) b) 1 (-1,1) 1 (1,1) -1 (-1,-1) (-1,1) 1 -1 (1,-1) (-1,-1) -1 (1,1) 1 (1,-1) -1 Z 3 (y1 ,y 2)=0 c) d) Figura 5.7. a), b) y c) En gris: Regiones del plano por encima de los umbrales asociados a las neuronas que modelan las funciones Booleanas x1 ∧ ¬x2, ¬x1 ∧ x2 y OR. d) Las tres regiones anteriores sobrepuestas. En gris obscuro: sus intersecciones. 1 (-1,1) (1,1) -1 1 (-1,-1) (1,-1) -1 Figura 5.8. Partición del plano inducida por la Red Neuronal de la Figura 5.6 (Véase el texto para detalles). 143 Una Introducción al Cómputo Neuronal Artificial Consideremos en primer lugar a la función ¬x1 ∧ ¬x2 ∧ x3. Por la forma en la que fue construida sabemos que el único estado con el cual proporciona la salida 1 es (-1, -1, 1). En la Figura 5.9.a se presentan los estados de esta función caracterizados de manera que un estado negro es un estado con salida -1 y un estado blanco (el único) es de salida 1. Esta función es claramente linealmente separable. Requerimos un plano que separe al estado (-1, -1, 1) de los restantes. Para ello determinaremos la ecuación del plano usando los tres puntos no colineales (-1, -1, 0), (0, -1, 1) y (-1, 0, 1). Estos puntos, también en la Figura 5.9.a, forman un triángulo, presentado en gris, inmerso en el plano considerado. La ecuación, por elementos bien conocidos de Álgebra Lineal, se obtiene al resolver el siguiente determinante: x1 x2 x3 1 −1 −1 0 1 =0 0 −1 1 1 −1 0 1 1 ⇔ − x1 − x2 + x3 − 2 = 0 (Ecuación 5.3.10) Verifiquemos si el plano está bien orientado. Al sustituir el estado (-1, -1, 1) en el lado izquierdo de la Ecuación 5.3.10 tenemos que −(−1) − (−1) + 1 − 2 = 1 > 0 Por lo tanto el vector normal del plano apunta en dirección del estado (-1, -1, 1) lo cual indica que se cuenta con la orientación correcta. Recordemos que la orientación es importante ya que el valor proporcionado por Z1(x1, x2, x3) = − x1 − x2 + x3 − 2 será después sometido a la función sign, de manera que se busca que la neurona proporcione valores tal y como se presentan en la tabla de verdad de la función que se está modelando. Tenemos entonces que los pesos de la neurona 1, que representa a la función ¬x1 ∧ ¬x2 ∧ x3, están dados por: w1,1 = -1, w1,2 = -1, w1,3 = 1 y w1,0 = -2. Para el caso de la función ¬x1 ∧ x2 ∧ ¬x3 se tiene que únicamente con el estado (-1, 1, -1) ésta proporciona la salida 1. Véase la Figura 5.9.b. La función es evidentemente linealmente separable. Se requiere un plano que separe al estado blanco (-1, 1, -1) de los restantes estados negros. Usaremos de nueva cuenta tres puntos no colineales: (-1, 0, -1), (0, 1, -1) y (-1, 1, 0): 144 Capítulo 5. La Red Madaline x1 x2 −1 0 0 −1 1 x3 1 −1 1 =0 −1 1 1 0 1 ⇔ x1 − x2 + x3 + 2 = 0 (Ecuación 5.3.11) Veamos si el plano obtenido está correctamente orientado. Para ello sustituimos el lado izquierdo de la Ecuación 5.3.11 con los valores (-1, 1, -1): −1 − 1 + (−1) + 2 = −1 < 0 Se ha obtenido un número negativo, por lo tanto únicamente multiplicamos ambos lados de la ecuación por -1 a fin de que esté orientado tal como requerimos. Se obtiene entonces la ecuación final del plano: − x1 + x2 − x3 − 2 = 0 (Ecuación 5.3.12) Tenemos entonces una neurona 2 tipo Adaline que modela correctamente a la función Booleana ¬x1 ∧ x2 ∧ ¬x3 y cuyos pesos están dados por w2,1 = -1, w2,2 = 1, w2,3 = -1 y w2,0 = -2. Veamos ahora el caso de la función Booleana x1 ∧ x2 ∧ x3. La Figura 5.9.c permite apreciar claramente que es linealmente separable. Los vértices del triángulo en gris, de la Figura 5.9.c, muestran los puntos a utilizar para definir el plano que separará al estado blanco (1, 1, 1) de los restantes estados negros. Los tres puntos a usar son: (0, 1, 1), (1, 1, 0) y (1, 0, 1). Entonces tenemos: x1 x2 0 1 1 1 1 0 x3 1 1 1 =0 0 1 1 1 ⇔ − x1 − x2 − x3 + 2 = 0 (Ecuación 5.3.13) Verifiquemos si el plano está orientado correctamente: −1 − 1 − 1 + 2 = −1 < 0 El plano requiere ser reorientado. Al multiplicar por -1 en ambos lados de la Ecuación 5.3.13 tenemos el plano final: x1 + x2 + x3 − 2 = 0 (Ecuación 5.3.14) 145 Una Introducción al Cómputo Neuronal Artificial Por tanto, la neurona 3 que modela la función x1 ∧ x2 ∧ x3 tendrá por pesos: w2,1 = 1, w2,2 = 1, w2,3 = 1 y w2,0 = -2. Tenemos ya bien definidas las 3 neuronas que formarán la capa de entrada de nuestra red Madaline. Las neuronas 1, 2 y 3 proporcionarán respectivamente como salida los escalares y1, y2 y y3. Estos formarán un vector de entrada para una neurona que modela a la función y1 ∨ y2 ∨ y3. La salida de esta neurona será la salida final de la red. Por lo tanto es claro que no requeriremos de capas ocultas. Apreciando la Figura 5.9.d se tiene que la función y1 ∨ y2 ∨ y3 es linealmente separable. Siete de sus estados son de salida 1 (blancos) mientras que el estado (-1, -1, -1) es el único de salida -1 (negro). Por lo tanto, usaremos los puntos (-1, 0, -1), (-1, -1, 0) y (0, -1, -1) para encontrar la ecuación del plano que separa al único estado negro de los estados blancos: y1 y2 y3 1 −1 0 −1 1 =0 −1 −1 0 1 0 −1 −1 1 ⇔ y1 + y2 + y3 + 2 = 0 (Ecuación 5.3.15) Verifiquemos si el plano determinado está correctamente orientado: −1 + (−1) + (−1) + 2 = −1 < 0 Recordemos que el estado (-1, -1, -1) es de salida -1. Por lo tanto la Ecuación 5.3.15 no requiere modificación alguna. Tenemos que los pesos de la única neurona de salida de nuestra red Madaline son: w2,1 = 1, w2,2 = 1, w2,3 = 1 y w2,0 = 2. En la Figura 5.10 se presenta la red que precisamente nos permite modelar la función de la Ecuación 5.3.1. 146 Capítulo 5. La Red Madaline x2 (-1,1,-1) (1,1,-1) x2 x3 (-1,1,-1) (0,1,-1) (1,1,-1) x3 (-1,1,0) (1,1,1) (-1,1,1) (1,1,1) (-1,1,1) (-1,0,-1) x1 (-1,0,1) (1,-1,-1) (-1,-1,-1) x1 (-1,-1,-1) (1,-1,-1) (-1,-1,0) (-1,-1,1) (-1,-1,1) (1,-1,1) (0,-1,1) (1,-1,1) b) a) x2 (-1,1,-1) (1,1,-1) y2 x3 (-1,1,-1) (1,1,-1) y3 (1,1,0) (1,1,1) (-1,1,1) (-1,-1,-1) (1,1,1) (-1,1,1) (0,1,1) (-1,0,-1) (1,0,1) x1 y1 (-1,-1,-1) (1,-1,-1) (0,-1,-1) (1,-1,-1) (-1,-1,0) (-1,-1,1) (1,-1,1) (-1,-1,1) (1,-1,1) c) d) Figura 5.9. Visualización en el espacio 3D de los estados y las salidas de las funciones Booleanas a) ¬x1 ∧ ¬x2 ∧ x3, b) ¬x1 ∧ x2 ∧ ¬x3, c) x1 ∧ x2 ∧ x3, y d) y1 ∨ y2 ∨ y3. Los triángulos en gris están inmersos en los planos que separan a los estados negros de los estados blancos. Sus vértices son utilizados para determinar sus correspondientes ecuaciones y orientaciones (véase el texto para detalles). 147 Una Introducción al Cómputo Neuronal Artificial Adaline 1 x1 z1 = − x1 − x2 + x3 − 2 y1 = sign( z1 ) Adaline 4 Adaline 2 x2 z2 = − x1 + x2 − x3 − 2 y2 = sign( z2 ) z4 = y1 + y2 + y3 + 2 y4 = y4 sign( z4 ) Adaline 3 x3 z3 = x1 + x2 + x3 − 2 y3 = sign( z3 ) Figura 5.10. Red Madaline que modela a la función Booleana f(x1, x2, x3) = (¬x1 ∧ ¬x2 ∧ x3) ∨ (¬x1 ∧ x2 ∧ ¬x3) ∨ (x1 ∧ x2 ∧ x3). En esta Sección hemos descrito una serie de pasos a seguir a fin de que, en primer lugar, una función Booleana, dada su tabla de verdad, sea descrita en términos de las variables involucradas y los conectivos lógicos AND, OR y NOT. Posteriormente, en segundo lugar, y basado en el hecho de que tales conectivos son linealmente separables, es que hemos establecido una metodología para construir una red Madaline que dé solución al problema del modelado de funciones Booleanas no linealmente separables como el XOR. En la Sección 4.2 determinamos que una función Booleana de n variables tiene exactamente 2n posibles estados. Un punto interesante es que si estos estados son considerados puntos en el espacio n-Dimensional entonces es fácil apreciar que tales puntos corresponden con los vértices de un Hipercubo n-Dimensional. Véase la Figura 5.11. Cuando n = 1 se tienen funciones Booleanas de una variable con 2 estados: -1 y 1. Estos dos puntos sobre la línea recta definen a un hipercubo unidimensional, es decir, un segmento. Véase la Figura 5.11.a. Cuando n = 2 estamos considerando funciones Boolenas de dos variables con 4 posibles estados: (-1, -1), (1, -1), (-1, 1) y (1, 1). Estos cuatro puntos describen a un hipercubo bidimensional, o mejor dicho, un cuadrado centrado en el origen (Figura 5.11.b). Si ahora consideramos a las funciones Booleanas de n = 3 variables entonces tenemos que los estados corresponden a los 8 vértices de un cubo centrado en el origen (Figura 5.11.c). Nótese que en párrafos anteriores utilizamos elementos visuales para determinar de manera inmediata las rectas o planos requeridos para separar a los estados con salida 1 de los estados con salida -1. O de manera equivalente, buscábamos rectas o planos que nos permitieran particionar de manera adecuada a nuestros cuadrados o cubos, respectivamente. Ahora consideremos el caso de una función Booleana con n = 4 variables. Ello implica que debemos tomar en cuenta 24 = 16 posibles estados. Tales estados corresponden a los vértices de un hipercubo tetradimensional. Véase la Figura 5.11.d. Si la correspondiente función es linealmente separable debemos determinar un hiperplano tridimensional inmerso en el espacio de 4 dimensiones que separe apropiadamente a los 148 Capítulo 5. La Red Madaline estados. Cuando n = 5 entonces lidiamos con una función con 5 variables y 25 = 32 estados. El objetivo en esta instancia es encontrar un hiperplano tetradimensional inmerso en el espacio de 5 dimensiones. La situación que claramente surge es el hecho de que el número de estados crece de manera exponencial conforme consideramos más variables. Una función Booleana de 10 variables cuenta con 210 = 1,024 estados que corresponden a los vértices de un hipercubo de 10 dimensiones. Conceptualmente el problema es claro, dada una función de n variables determinar el hiperplano (n-1)-Dimensional inmerso en \ n que demuestre que la función es efectivamente linealmente separable. Es claro que el uso de auxiliares visuales también se complica. Existen metodologías variadas para visualizar espacios hiperdimensionales, sin embargo, debe entenderse que lo que se “ve” son únicamente proyecciones, “sombras”, de los elementos inmersos en tales hiperespacios, por lo que existirá pérdida de información. Ahora bien, es posible dejar a un lado la visualización y concentrarnos en una búsqueda de hiperplanos basada en el hecho de que los vértices de un hipercubo serán siempre particionados en dos conjuntos: los vértices que corresponden a estados con salida 1 y los vértices que corresponden a estados con salida -1. Esto en un momento puede original un problema de índole combinatoria. En \ 2 se requieren dos puntos para definir una recta (un hiperplano unidimensional), en \ 3 se requieren tres puntos para definir un plano (un hiperplano bidimensional), en \ 4 se requieren cuatro puntos para determinar la ecuación de un hiperplano tridimensional. Es claro que, en general, en \ n se requieren exactamente n puntos para definir un hiperplano (n-1)-Dimensional. Considerando que en nuestro caso los puntos se tomarían de los 2n vértices de nuestros hipercubos, entonces tendríamos que el número de posibilidades analizar es a lo más § 2n · (2n )! ¨ ¸= n © n ¹ (2 − n)!n ! (Ecuación 5.3.16) Retomando el caso n = 10, tendríamos en consecuencia que el número de subconjuntos de 10 vértices, para formar hiperplanos candidatos, tomados del conjunto de 1,024 vértices del hipercubo de 10 dimensiones es: § 210 · (210 )! 1, 024! = = = 334,265,867,498,622,145,619,456 ¨ ¸ 10 (2 10)!10! (1, 024 10)!10! − − 10 © ¹ En la práctica es claro que hemos de considerar el modelado de funciones con cientos de variables de entrada. 149 Una Introducción al Cómputo Neuronal Artificial x2 (-1,1) -1 (1,1) x1 x1 1 (-1,-1) a) (1,-1) b) x2 (-1,1,-1) x3 (1,1,-1) (1,1,1) (-1,1,1) x1 (-1,-1,-1) (1,-1,-1) (-1,-1,1) (1,-1,1) c) x2 x4 (1,1,-1,-1) (-1,1,-1,-1) x3 (-1,1,-1,1) (-1,1,1,-1) (1,1,-1,1) (1,1,1,-1) (1,1,1,1) (-1,1,1,1) (-1,-1,-1,-1) (1,-1,-1,-1) x1 (-1,-1,-1,1) (1,-1,-1,1) (-1,-1,1,-1) (1,-1,1,-1) (-1,-1,1,1) (1,-1,1,1) d) Figura 5.11. Los estados de las funciones Booleanas de 1 a 4 variables vistos como los vértices de hipercubos. a) Un hipercubo 1D: un segmento (2 vértices/estados). b) Un hipercubo 2D: un cuadrado (4 vértices/estados). c) Un hipercubo 3D: un cubo (8 vértices/estados). d) Un Hipercubo 4D (16 vértices/estados). 150 Capítulo 5. La Red Madaline Los resultados anteriores vienen a establecer que la metodología presentada en esta Sección, si bien es sumamente intuitiva e ilustrativa en lo que concierne al problema del ajuste de pesos de una red Madaline, en la práctica puede no ser muy recomendada. Lo que si debemos reconocer es que nos ha proporcionado elementos contundentes para verificar que efectivamente el uso de varias neuronas permite el modelado de funciones Booleanas no linealmente separables, tales como el XOR. También nos ha permitido visualizar, al menos en el caso 2D, las particiones del plano que inducen los umbrales asociados a cada neurona y las correspondientes reglas de separación entre estados con salida 1 y estados con salida -1. Este Capítulo nos ha planteado claramente los retos a considerar en lo que atañe a las metodologías para el ajuste de pesos en Redes Neuronales Multicapa. En el siguiente Capítulo presentaremos por fin al Algoritmo de Retropropagación, que representa una solución eficiente y fácil de implementar para el ajuste de pesos en redes formadas por neuronas del tipo Perceptrón. 151 Una Introducción al Cómputo Neuronal Artificial 152 Una Introducción al Cómputo Neuronal Artificial 6. Redes de Perceptrones Una Introducción al Cómputo Neuronal Artificial 154 Capítulo 6. Redes de Perceptrones Hemos llegado al punto en el cual estamos listos para abordar el estudio de las Redes Neuronales formadas por Perceptrones. En particular, hemos de considerar el análisis y justificación del popular Algoritmo de Retropropagación, el cual representa una de las opciones más eficientes y fáciles de implementar para el entrenamiento de este tipo de Redes Neuronales. Procederemos en primer lugar al reconsiderar, en la Sección 6.1, a la neurona de tipo Perceptrón al describir la Regla de Rosenblatt para la actualización de sus pesos. Posteriormente, en la Sección 6.2, presentaremos la Demostración del Teorema de Convergencia del Perceptrón. Este importante resultado servirá como punto de partida para entender los fundamentos detrás del proceso de ajuste de pesos por parte del Algoritmo de Retropropagación. En la Sección 6.3 describiremos el mecanismo de corrección de pesos, propiamente por el Algoritmo de Retropropagación, en una Red compuesta por Perceptrones bajo la suposición de que ésta se forma por una única capa oculta. También justificaremos de manera formal las reglas de actualización establecidas y analizaremos los aspectos relacionados con la convergencia de los pesos de las neuronas que forman la red. En la Sección 6.4 presentaremos la versión generalizada del Algoritmo de Retropropagación en el sentido de dar solución al problema del ajuste de pesos para redes formadas por más de dos capas ocultas. Será hasta la Sección 6.5 en donde haremos mención de un ejemplo de aplicación del Algoritmo de Retropropagación para la solución/modelado de un problema mediante redes formadas por Perceptrones. 6.1 La Regla de Rosenblatt Mencionábamos en las Secciones 1.4 y 4.2, que en 1958 el psicólogo Frank Rosenblatt presenta a la neurona tipo Perceptrón. De hecho, en ese mismo año, Rosenblatt introdujo un mecanismo de aprendizaje, un algoritmo de entrenamiento, para el Perceptrón que hoy en día se conoce como Regla de Rosenblatt. El punto fundamental es que la Regla viene acompañada con un Teorema que sustenta el hecho de que los pesos correctos de la neurona serán siempre encontrados bajo el supuesto de que efectivamente existen tales pesos para resolver el problema dado. Planteamos en primer lugar la Regla de Rosenblatt y posteriormente, en la siguiente Sección, efectuaremos la demostración de tal Teorema. Considérese un Perceptrón que recibe como entrada un vector E en \ n dado por: ª I1 º «I » E = « 2» «#» « » ¬ In ¼ (Ecuación 6.1.1) Supongamos que la neurona proporciona como salida un escalar O ∈ \ . Sea g una función continua y diferenciable en (-∞, ∞). Se tiene que g es de hecho la Función de Activación (Véase la Sección 4.1). Cada uno de los componentes del vector de entrada E estará 155 Una Introducción al Cómputo Neuronal Artificial asociado a un único peso de la neurona. La relación entre el vector E y los pesos, de manera que se produce a partir de éstos un escalar ent, está dada por la ya conocida Sumatoria de Salida del Perceptrón: n ent = ¦ w j I j (Ecuación 6.1.2) j =1 La salida O del Perceptrón se produce al aplicar la Función de Activación g sobre el escalar ent: § n · O = g(ent) = g ¨ ¦ w j I j ¸ © j =1 ¹ (Ecuación 6.1.3) La Figura 6.1 presenta esquemáticamente a todos los elementos del Perceptrón que hemos descrito. W1 W2 I2 n ent = ¦ w j I j ent j =1 In O = g (ent ) O Salida Entradas I1 Wn Figura 6.1. Representación Esquemática de un Perceptrón. Sea T la salida que se espera proporcione el Perceptrón para el vector de entrada E. Sabemos que el proceso de ajuste de los pesos wj de la neurona busca minimizar la diferencia entre la salida proporcionada por ésta y la salida esperada. Es decir, se busca optimizar: § n · Err = T – O = T – g ¨ ¦ w j I j ¸ © j =1 ¹ (Ecuación 6.1.4) Ahora bien, definamos los elementos detrás de la Regla de Rosenblatt. Primeramente, se debe contar con un conjunto de pesos iniciales para la neurona. Por lo regular éstos son inicializados con valores aleatorios, comúnmente en el intervalo (-1, 1) (Sección 4.3). Tenemos que el proceso de aprendizaje se dividirá en Épocas. En cada Época se presentan a la neurona todos los vectores de entrada en el conjunto de entrenamiento. Es claro que la noción de Época es la misma que la de Presentación del 156 Capítulo 6. Redes de Perceptrones Conjunto de Entrenamiento que planteamos desde la Sección 3.3.1. Por cada vector de entrada E, se determina la diferencia entre la salida generada por el Perceptrón O y la salida esperada T (Ecuación 6.1.4). De acuerdo a esa diferencia es que los pesos son actualizados. Nótese que el valor de Err = T – O puede ser positivo o negativo. Es claro que si el error, Err, es positivo entonces la salida O de la neurona debe ser incrementada. Por otro lado, si el error es negativo entonces la salida O de la neurona debe reducirse. De manera más específica, y observando la Ecuación 6.1.2, se tiene que el escalar de entrada Ij se multiplica con el j-ésimo peso wj. Tenemos entonces el siguiente par de observaciones: • Si Ij es positivo y el peso wj aumenta su valor entonces la salida O también aumentará su valor. • Si Ij es negativo y el peso wj aumenta su valor entonces la salida O disminuirá su valor. En ambos casos podemos concluir que para obtener el ajuste apropiado del peso wj se tiene que precisamente el valor de wj debe ser incrementado. Esto es interesante porque ya sea que la salida O se requiera aumentar o reducir, los pesos deben ser actualizados mediante una suma. Para tal efecto Rosenblatt propuso la siguiente regla de actualización de pesos: wj = wj + α⋅Err⋅Ij j = 1, 2, …, n (Ecuación 6.1.5) Donde α es la bien conocida constante positiva denominada, en la Sección 4.3, Coeficiente de Aprendizaje. La Ecuación 6.1.5 es de hecho la Regla de Rosenblatt. Nótese su similitud con la regla de actualización presentada en la Sección 4.3 la cual estaba basada en búsqueda del vector gradiente mediante Descenso Escalonado. El Algoritmo 6.1 es una implementación de la Regla de Rosenblatt. Éste recibe cuatro entradas: • Una matriz E de tamaño N × n, donde N es el número de vectores de entrada en el conjunto de entrenamiento y n su dimensionalidad. Cada renglón de la matriz es precisamente un vector de entrada. • Un arreglo T de N elementos. Contiene los escalares que se espera la neurona proporcione como salida (dados los correspondientes vectores de entrada). • El coeficiente de aprendizaje α. • Un entero L que indica el número de épocas, o presentaciones del conjunto de entrenamiento, que el algoritmo efectuará. El Algoritmo 6.1 efectúa los procedimientos antes mencionados al inicializar un vector de pesos W con valores aleatorios. Posteriormente, en cada presentación del conjunto de entrenamiento, cada vector de entrada en la matriz E es enviado a la neurona donde se calcula el valor de su sumatoria de salida el cual es guardado en la variable ent. Se invoca entonces a la Función de Activación g la cual debe ser continua y diferenciable en (-∞, ∞) por razones que clarificaremos en las siguientes Secciones. Se tiene entonces la salida O de la neurona. Se aplica la Ecuación 6.1.4 para obtener el error existente entre la salida O y la salida esperada T. Por último, se tiene la actualización del vector de pesos W haciendo uso del valor actual en la variable Err, el coeficiente de aprendizaje α y cada uno de los componentes del vector de entrada actual. 157 Una Introducción al Cómputo Neuronal Artificial Algoritmo 6.1. Implementación de la Regla de Rosenblatt para el entrenamiento de un Perceptrón. Procedure RosenblattRule (Matrix E[1, …, N][1, …, n], Array T[1, …, N], Real α, Integer L) // Se asignan valores aleatorios en (-1, 1) al vector de pesos. W = new Array[1,…,n] for j = 1 until n do W[j] = Random( ) end-of-for // Se lleva a efecto la t-ésima época. for t = 1 until L do for k = 1 until N do // El k-ésimo vector de entrada es enviado a la neurona. Real ent = 0 for j = 1 until n do ent = ent + W[j] * E[k][j] end-of-for // Se aplica la función de activación // y se obtiene la salida de la neurona. Real O = g(ent) // Se calcula el error entre la salida esperada // y la salida de la neurona. Real Err = T[k] – O // Se actualiza el vector de pesos. for j = 1 until n do W[j] = W[j] + α * Err * E[k][j] end-of-for end-of-for end-of-for // Se retorna como salida el vector de pesos obtenido. return W end-of-procedure Como se podrá observar, la Regla de Rosenblatt es, desde el punto de vista algorítmico, muy simple. Pero es más interesante el hecho de que precisamente Rosenblatt demostró que un Perceptrón convergerá a un conjunto de pesos que modela adecuadamente a los elementos del conjunto de entrenamiento siempre y cuando éstos representen una función linealmente separable. A tal proposición se le conoce como el Teorema de Convergencia del Perceptrón. En la siguiente Sección abordaremos precisamente la demostración del enunciado. 158 Capítulo 6. Redes de Perceptrones 6.2 Teorema de Convergencia del Perceptrón Teorema: Si existe un vector de pesos W* tal que para todo vector de entrada E y su correspondiente salida T, en el conjunto de entrenamiento, se tiene que g(W*⋅E) = T entonces para cualquier vector inicial de pesos se tiene que la regla de aprendizaje del Perceptrón convergerá a un vector de pesos (no necesariamente W*) tal que la neurona proporcionará la salida correcta para todo vector de entrada en el conjunto de entrenamiento. Además, la convergencia se tendrá en un número finito de pasos. El enunciado establece en primer lugar que debemos suponer la existencia de un vector de pesos W* tal que mediante éste el Perceptrón siempre proporcionará la salida correcta para todo vector de entrada en el conjunto de entrenamiento. Ahora bien, debemos demostrar que para cualquier vector de pesos inicial W, y al aplicar la Regla de Rosenblatt tal como lo especifica el Algoritmo 6.1, encontraremos un vector de pesos tal que con éste la neurona proporcionará siempre la salida correcta para todo vector de entrada en el conjunto de entrenamiento. También debemos probar que el número de pasos requeridos, para encontrar a tal vector de pesos, es finito. El enunciado nos dice también que el vector de pesos que encontremos no necesariamente es igual al vector de pesos W* que presuponemos existe. Esto implica que de hecho los vectores de pesos que se obtienen mediante la Regla de Rosenblatt no son únicos, y en consecuencia, pueden existir vectores de pesos diferentes que nos permiten resolver el mismo problema. Esto es consistente con el hecho de que los problemas con los cuales puede lidiar un Perceptrón son únicamente los linealmente separables. Efectivamente, esta es una presuposición que debemos tomar en cuenta ya que aunque no se menciona de manera explícita en el enunciado del Teorema, si la requeriremos para efectuar su demostración. La sumatoria de salida del Perceptrón, en términos geométricos, describe a un hiperplano que separará a los vectores de entrada en dos conjuntos. En este sentido, por ejemplo, vale la pena recordar el modelado de funciones Booleanas linealmente separables. Nuestros hiperplanos separaban a los vectores de entrada que correspondían a los estados con salida 1 de los vectores de entrada que correspondían a los estados con salida -1. Nos debe ser claro entonces que es posible la existencia de diferentes hiperplanos, y en consecuencia diferentes vectores de pesos, que nos permitan cumplir con este mismo fin haciendo que la neurona proporcione siempre las salidas correctas. Habiendo efectuado la mención de las consideraciones a tomar en cuenta, ahora procederemos a demostrar el Teorema de Convergencia del Perceptrón. 159 Una Introducción al Cómputo Neuronal Artificial En primer lugar asumamos que los vectores de entrada para la neurona fueron originados por dos clases linealmente separables. Llamemos a estas clases C1 y C2. Sea χ1 el subconjunto de los vectores de entrada que pertenecen a la clase C1 y sea χ2 el subconjunto de los vectores de entrada que pertenecen a la clase C2. Es claro que el conjunto de entrenamiento estará dado por χ1 ∪ χ2. Dados los conjuntos χ1 y χ2 para entrenar al Perceptrón, se tiene que el entrenamiento se encarga de ajustar su vector de pesos W tal que C1 y C2 sean linealmente separables, o en otras palabras, el hiperplano asociado a la sumatoria de salida de Perceptrón separe apropiadamente a C1 y C2. Se espera que, una vez finalizado el entrenamiento, el vector de pesos W, para todo vector de entrada E, satisfaga las siguientes dos condiciones: • • Si E ∈ C1 entonces W⋅E > 0. Si E ∈ C2 entonces W⋅E < 0. Es decir, que los vectores en la clase C1 serán aquellos hacia los cuales apunte el vector normal del hiperplano definido por la sumatoria de salida del Perceptrón. O bien, los vectores de entrada en C1 estarán por encima del hiperplano, y en consecuencia, los vectores en C2 estarán por debajo de tal hiperplano. Nótese que hemos establecido las propiedades que deberá cumplir el vector de pesos W una vez finalizado el entrenamiento. Ahora se debe establecer una metodología para su construcción. Considérese el siguiente procedimiento: a) Sea Wk el vector de pesos que actualmente tiene la neurona. b) Considérese al k-ésimo vector de entrada, Ek, en el conjunto de entrenamiento. Si Ek es correctamente clasificado ello implica que la neurona determinó acertadamente que Ek ∈ χ1 o bien que Ek ∈ χ2. Por lo tanto, se aplicará una “corrección” a Wk y se obtendrá el vector de pesos “actualizado” Wk+1: b.1) Wk+1 = Wk c) De lo contrario, si Ek fue clasificado de manera incorrecta por el Perceptrón, entonces el vector de pesos Wk debe ser apropiadamente corregido y se obtiene por lo tanto el nuevo vector de pesos Wk+1. Debemos manejar dos posibilidades de acuerdo al signo de la sumatoria de salida Wk⋅Ek: c.1) Ek ∈ χ2 pero Wk⋅Ek > 0, lo que implica que el vector fue incorrectamente ubicado en χ1. Entonces aplicamos la corrección: Wk+1 = Wk – Ek c.2) Ek ∈ χ1 pero Wk⋅Ek < 0, lo que implica que el vector fue incorrectamente ubicado en χ2. Entonces: Wk+1 = Wk + Ek 160 Capítulo 6. Redes de Perceptrones Asúmase, sin pérdida de generalidad, que se tiene el vector inicial de pesos W1 = 0, es decir, el vector cero. Es claro que para todo vector de entrada Ek, k = 1, 2, 3, …, Card(χ1), contenido precisamente en la clase χ1, se tiene que el Perceptrón, equipado con los pesos en W1, clasifica incorrectamente a los vectores en χ1 ya que para todos éstos se esperaría que W1⋅Ek > 0, lo cual evidentemente no se cumple (lo mismo sucede con los vectores en la clase χ2). Nótese que de hecho W1⋅E1 = 0, pero sabemos en que clase E1 debe ser ubicado. Usaremos entonces la regla de corrección Wk+1 = Wk + Ek. Lo que haremos es que a partir del vector de pesos inicial W1 = 0 obtendremos, usando los vectores de entrada en χ1, un vector Wk+1 que permita que la neurona los clasifique correctamente. El vector Wk+1 se obtiene de manera iterativa: • • • • • • • W1 = 0 W2 = W1 + E1 W3 = W2 + E2 W4 = W3 + E3 … (k-1)-ésima corrección: Wk = Wk-1 + Ek-1 k-ésima corrección: Wk+1 = Wk + Ek Vector de pesos inicial: Primer corrección: Segunda corrección: Tercer corrección: = (0) + E1 = E1 = (E1) + E2 = (E1 + E2) + E3 = (E1 + E2 + … + Ek-2) + Ek-1 = (E1 + E2 + … + Ek-2 + Ek-1) + Ek Recordemos que se presupone la existencia del vector de pesos W* el cual garantiza que la neurona clasificará correctamente a todos los vectores de entrada y que se asume que las clases C1 y C2 son linealmente separables. Entonces, se tiene que para todo vector Ek en el conjunto de entrenamiento el vector W* efectivamente satisface las siguientes dos condiciones: • • Si Ek ∈ χ1 entonces W*⋅Ek > 0. Si Ek ∈ χ2 entonces W*⋅Ek < 0. En un problema linealmente separable tenemos que las salidas del Perceptrón deben permitir inferir a cual de las dos clases, C1 o C2, pertenece un vector de entrada. Por ello mismo, la salida de la neurona nos dice si un vector E está en χ1 ⊂ C1 o bien si está en χ2 ⊂ C2. En este punto cabe hacer la aclaración de que C1 y C2 son particiones del espacio n-Dimensional de tal forma que cuentan con un número infinito de elementos. C1 es el conjunto de todos los puntos en \ n que están por encima del umbral definido por la sumatoria de salida del Perceptrón, y por otro lado, C2 es el conjunto de todos los puntos que están por debajo del umbral. De allí que hemos establecido, incluso en párrafos anteriores, que χ1 ⊂ C1 y χ2 ⊂ C2. Ahora definamos al conjunto χ'2 de la siguiente manera: χ'2 = {(-1)E ∈ \ n : E ∈ χ2} 161 Una Introducción al Cómputo Neuronal Artificial Es claro que χ'2 se conforma por todos los vectores en χ2 pero con dirección opuesta. Es entonces evidente que los vectores en χ'2 están en C1 (los vectores en χ2 están en C2). Esto tiene como consecuencia que el conjunto de entrenamiento del Perceptrón puede ser redefinido como: χ1 ∪ χ'2 Recordemos que el vector pesos W* satisface las condiciones: • W*⋅Ek > 0 si Ek ∈ χ1 • W*⋅Ek < 0 si Ek ∈ χ2 Pero ahora, con la redefinición del conjunto de entrenamiento como χ1 ∪ χ'2 tenemos entonces que las condiciones anteriores son equivalentes a la única condición: • W*⋅Ek > 0 si Ek ∈ χ1 ∪ χ'2 Ello se debe a que si Ek está en χ'2 entonces W*⋅Ek > 0, pero Ek = (-1)E’k donde E’k está en χ2 y por tanto W*⋅E’k < 0. Entonces tenemos que únicamente se requiere una sola regla de actualización, expresada en términos de una suma, para efectuar correcciones asociadas a vectores ubicados en χ1 o bien en χ2. El objetivo del conjunto χ'2 es únicamente el de permitir unificar las reglas de corrección especificadas en los pasos c.1 y c.2 del procedimiento de actualización del vector de pesos presentado previamente. A partir de este punto supondremos que todos los vectores de entrada están en χ1 ∪ χ'2. Se usará al vector de pesos W* para asegurar que la regla de actualización de pesos, efectivamente permite encontrar un vector de pesos tal que la neurona clasifique correctamente a todos los vectores de entrada del conjunto de entrenamiento. Sea γ1 definido como: γ 1 = min {W * ⋅Ek } (Ecuación 6.2.1) Es decir, γ1 es el mínimo escalar elegido a partir de todos los productos punto entre W* y cada vector de entrada Ek en el conjunto de entrenamiento. Previamente se verificó que dado el vector de pesos inicial W1 = 0 el vector Wk+1 estaba dado por: Wk+1 = Wk + Ek = (E1 + E2 + … + Ek-1) + Ek (Ecuación 6.2.2) Al efectuar un producto punto con el vector W* en ambos lados de la Ecuación 6.2.2 se tiene: W*⋅Wk+1 = W*⋅(E1 + E2 + … + Ek-1 + Ek) 162 (Ecuación 6.2.3) Capítulo 6. Redes de Perceptrones En el lado derecho de la Ecuación 6.2.3 haremos uso de la propiedad distributiva del producto punto de vectores. Por lo tanto obtenemos: W*⋅Wk+1 = W*⋅E1 + W*⋅E2 + … + W*⋅Ek-1 + W*⋅Ek (Ecuación 6.2.4) Por la definición de γ1 (Ecuación 6.2.1) se tiene que: W*⋅Wk+1 = W*⋅E1 + W*⋅E2 + … + W*⋅Ek-1 + W*⋅Ek ≥ γ1k ⇔ W*⋅Wk+1 ≥ γ1k Ello se debe a que cada término del lado derecho de la Ecuación 6.2.4 es mayor o igual a γ1. Se tienen en total k términos y en consecuencia W*⋅Wk+1 ≥ γ1k. Si elevamos al cuadrado ambos lados de la desigualdad tenemos que ésta claramente se preserva: W * ⋅W k +1 ≥ γ 1k ⇔ (W * ⋅W k +1 ) ≥ γ 12 k 2 2 Ahora bien, por la desigualdad de Cauchy-Schwarz (Sección 2.4) tenemos que: ||W*||2⋅||Wk+1||2 ≥ (W*⋅Wk+1)2 Entonces: W * ⋅ W k +1 ≥ (W * ⋅W k +1 ) ≥ γ 12 k 2 2 2 2 Al aplicar la propiedad transitiva del operador ≥ relacionamos directamente al extremo izquierdo con el extremo derecho de la desigualdad: W * ⋅ W k +1 ≥ γ 12 k 2 2 2 Nótese que el vector de pesos W* es diferente del vector cero. De lo contrario, con cualquier vector de entrada E se tendría que W*⋅E = 0, lo que contradice los supuestos establecidos respecto a W* en párrafos anteriores. De la desigualdad anterior multiplicamos 1 ambos lados por y obtenemos: 2 W* 2 W k +1 ≥ γ 12 k 2 W* 2 163 Una Introducción al Cómputo Neuronal Artificial Esta desigualdad nos indica que la magnitud al cuadrado del vector de pesos que se está calculando crece con un factor k2, donde k es el número de veces que éste ha sido actualizado. La misma desigualdad es también una Cota Inferior. Ésta nos dice que una vez efectuadas k actualizaciones del vector de pesos, su magnitud al cuadrado será mayor o γ 2k 2 igual al cociente 1 2 . W* Ahora se debe establecer una Cota Superior para el vector de pesos a fin de verificar que los valores de sus componentes no crecen indefinidamente. De la Ecuación 6.2.2 tenemos que, dado el vector de pesos inicial W1 = 0, el vector Wk+1 esta dado por: Wk+1 = (E1 + E2 + … + Ek-1) + Ek ⇔ Wk+1 = Wk + Ek Sabemos que Wk+1 surge de aplicar una corrección al vector de pesos Wk. Ello implica que con el vector de entrada Ek se obtuvo Wk⋅Ek < 0 (recuérdese que si el vector hubiese sido clasificado correctamente se habría obtenido Wk⋅Ek > 0). Tenemos entonces que: Wk+1 = Wk + Ek ⇔ ||Wk+1||2 = ||Wk + Ek||2 ⇔ ||Wk+1||2 = ||Wk||2 + 2Wk⋅Εk + ||Εk||2 (Ecuación 6.2.5) La Ecuación 6.2.5 surge del hecho de que para cualesquiera vectores u y v en \ n el cuadrado de la magnitud de su suma, ||u + v||2 es igual a ||u||2 + 2u⋅v + ||v||2 (nótese la analogía existente entre esta expresión con el desarrollo del binomio (a + b)2 = a2 + 2ab + b2, a, b ∈ \ ). Dado que presuponemos que Wk⋅Εk < 0 entonces es claro que -2Wk⋅Εk > 0. Al sumar precisamente -2Wk⋅Εk en ambos lados de la Ecuación 6.2.5 se obtiene: ||Wk+1||2 - 2Wk⋅Εk = ||Wk||2 + ||Εk||2 (Ecuación 6.2.6) Recalcamos que - 2Wk⋅Εk es un número positivo. Entonces debe ser claro que: ||Wk+1||2 ≤ ||Wk+1||2 - 2Wk⋅Εk = ||Wk||2 + ||Εk||2 Y por transitividad se tiene la siguiente desigualdad: ||Wk+1||2 ≤ ||Wk||2 + ||Εk||2 Recordemos que el vector Wk surge de la corrección aplicada al vector de pesos Wk-1 con el vector de entrada Ek-1. Es más, Wk-1 surge de actualizar al vector Wk-2 con el vector de entrada Ek-2, y así sucesivamente hasta llegar a la actualización del vector de pesos inicial 164 Capítulo 6. Redes de Perceptrones W1 usando el vector de entrada E1. Tomando esto en cuenta, desarrollemos el lado derecho de la desigualdad anterior: Wk 2 + Ek 2 2 2 = Wk −1 + Ek −1 + Ek (Wk = Wk −1 + Ek −1 ) 2 2 = Wk −1 + 2Wk −1 ⋅ Ek −1 + Ek −1 + Ek 2 2 2 = Wk − 2 + Ek − 2 + 2Wk −1 ⋅ Ek −1 + Ek −1 + Ek 2 2 2 (Wk −1 = Wk − 2 + Ek − 2 ) 2 = Wk − 2 + 2Wk − 2 ⋅ Ek − 2 + Ek − 2 + 2Wk −1 ⋅ Ek −1 + Ek −1 + Ek = 2 " # 2 = W2 + E2 + ... + 2 2 2 2 2 2 2 2 2 2 Wk − 2 + 2Wk − 2 ⋅ Ek − 2 + Ek − 2 + 2Wk −1 ⋅ Ek −1 + Ek −1 + Ek 2 (W3 = W2 + E2 ) 2 = W2 + 2W2 ⋅ E2 + E2 + ... + 2 2 Wk − 2 + 2Wk − 2 ⋅ Ek − 2 + Ek − 2 + 2Wk −1 ⋅ Ek −1 + Ek −1 + Ek 2 2 = W1 + E1 + 2W2 ⋅ E2 + E2 + ... + 2 2 Wk − 2 + 2Wk − 2 ⋅ Ek − 2 + Ek − 2 + 2Wk −1 ⋅ Ek −1 + Ek −1 + Ek 2 2 (W2 = W1 + E1 ) 2 = W1 + 2W1 ⋅ E1 + E1 + 2W2 ⋅ E2 + E2 + ... + 2 2 Wk − 2 + 2Wk − 2 ⋅ Ek − 2 + Ek − 2 + 2Wk −1 ⋅ Ek −1 + Ek −1 + Ek k −1 k j =1 j =1 = W1 + ¦ 2W j ⋅ E j + ¦ E j 2 k −1 k j =1 j =1 = ¦ 2W j ⋅ E j + ¦ E j 2 2 (Dado que W1 = 0) Concretizando: Wk 2 + Ek 2 k −1 k j =1 j =1 = ¦ 2W j ⋅ E j + ¦ E j 2 (Ecuación 6.2.7) Ahora bien, supongamos que para todo vector de pesos Wj, j = 1, …, k, se obtuvo que éste clasificaba incorrectamente al vector Ej, es decir, en su momento se detectó que Wj⋅Ej < 0 (si el vector hubiese sido clasificado correctamente se habría obtenido Wj⋅Ej > 0). Ello 165 Una Introducción al Cómputo Neuronal Artificial implica por un lado que tuvo que aplicarse una corrección a Wj a fin de obtener su versión actualizada Wj+1. Pero por otro lado tenemos que entonces en la Ecuación 6.2.7 la suma k −1 ¦ 2W ⋅ Ej j j =1 es de hecho un número negativo. Recordemos que la Ecuación 6.2.7 es el lado derecho de la desigualdad: ||Wk+1||2 ≤ ||Wk||2 + ||Εk||2 2 ⇔ Wk +1 ≤ Wk 2 2 + Ek k −1 k = ¦ 2W j ⋅ E j + ¦ E j j =1 j =1 k −1 k j =1 j =1 ⇔ Wk +1 ≤ ¦ 2W j ⋅ E j + ¦ E j 2 2 2 Ahora bien, incorporando la observación de que Wj⋅Ej < 0 para j = 1, 2, …, k, entonces podemos establecer: Wk +1 2 k −1 k ¦ 2W j ⋅ E j + ¦ E j ≤ j =1 2 j =1 ≤ k ¦ Ej 2 j =1 Y aplicando la propiedad transitiva del operador ≤ tenemos: k Wk +1 ≤ ¦ E j 2 2 j =1 Sea γ2 una constante positiva definida como: { γ 2 = max Ek 2 } (Ecuación 6.2.8) Es decir, γ2 es la mayor magnitud al cuadrado presente en los vectores de entrada del conjunto de entrenamiento. La siguiente desigualdad es claramente evidente: Wk +1 2 k ≤ ¦ Ei ≤ kγ 2 i =1 ⇔ Wk +1 166 2 2 ≤ kγ 2 Capítulo 6. Redes de Perceptrones Tenemos entonces que la magnitud al cuadrado del vector de pesos Wk+1 crece linealmente 2 con el número de iteraciones. Y en otras palabras, tenemos que Wk +1 está acotada superiormente por el producto kγ 2 . Dado que γ2 depende directamente de los vectores de entrada y k es el número de iteración, entonces hemos demostrado que la magnitud del vector de pesos no diverge y en consecuencia sus componentes tampoco divergen. Contamos ya con una Cota Superior y una Cota Inferior para el vector de pesos del Perceptrón en la k-ésima iteración: k 2γ 12 W* ≤ Wk +1 ≤ kγ 2 2 2 La Cota Inferior nos dice el valor mínimo esperado para la magnitud al cuadrado del vector k 2γ 12 . Mientras que la Cota Superior nos dice que el vector de de pesos. En este caso es 2 W* pesos no crece de manera indefinida y que de hecho su magnitud al cuadrado es a lo más kγ 2 . El último punto de la demostración de nuestro Teorema requiere determinar el número de iteraciones k necesarias para que la magnitud al cuadrado del vector de pesos del Perceptrón sea igual tanto a su Cota Superior como a su Cota Inferior. ¿Por qué buscamos igualar a las Cotas? Ello se debe a que queremos encontrar en que iteración los pesos han convergido. Si el número k existe entonces hemos probado que el entrenamiento de la neurona requiere de un número finito de iteraciones de tal forma que se tiene la convergencia del vector de pesos de manera que se da solución al correspondiente problema linealmente separable. Para tal efecto sea k = k . Por lo tanto, al igualar las Cotas 2 Superior e Inferior para Wk +1 se tiene: (k ) γ 2 W* 2 1 2 = kγ 2 (Ecuación 6.2.9) Realmente sólo se requieren unas manipulaciones simples para encontrar el valor de k : 167 Una Introducción al Cómputo Neuronal Artificial (k ) 2 γ 12 W* ⇔ 2 = kγ2 k γ 12 W* 2 = γ2 γ W* ⇔k = 2 2 γ1 2 (Ecuación 6.2.10) Por la Ecuación 6.2.1 tenemos que γ 1 = min {W * ⋅Ek } . Sabemos que el producto punto si puede proporcionar en un momento dado el valor 0. Sin embargo, en el inicio de nuestra demostración planteamos la suposición de que el vector W*, que presuponemos existe, corresponde a un hiperplano que está colocado de manera tal que W*⋅Ek > 0 si Ek ∈ C1 o bien que W*⋅Ek < 0 si Ek ∈ C2. Por lo tanto podemos garantizar que para todo vector en el conjunto de entrenamiento W*⋅Ek ≠ 0 y en consecuencia γ1 ≠ 0. Entonces, la Ecuación 6.2.10 nos indica el número de iteraciones requerido de manera que el vector de pesos resultante permita que el Perceptrón proporcione la salida correcta para todo vector de entrada en el conjunto de entrenamiento. Con este punto ya validado tenemos debidamente probado el Teorema de Convergencia del Perceptrón. 6.2.1 Discusión La Regla de Rosenblatt descrita en la Sección 6.1, y expresada en la Ecuación 6.1.5, nos dice que el j-ésimo peso de un Perceptrón, wj, debe ser actualizado en función de: • Un Coeficiente de Aprendizaje α; • El error Err existente entre la salida O proporcionada por la neurona y la salida T esperada; • Y finalmente, por el j-ésimo componente del vector de entrada E: Ij. Es decir: wj = wj + α⋅Err⋅Ij j = 1, 2, …, n O en términos vectoriales, donde W es el vector de pesos de la neurona: W = W + α⋅Err⋅E Donde, por la Ecuación 6.1.4, Err = T – O y a su vez, por la Ecuación 6.1.3, la salida O está dada por: O = g (W ⋅ E ) La Función de Activación g se asume continua y diferenciable en (-∞, ∞). 168 Capítulo 6. Redes de Perceptrones Ahora bien, consideremos algunos puntos que se establecen en el Teorema de Convergencia y que, de primera vista, pueden contrastar con lo previamente mencionado: • El Teorema hace alusión a la Función de Activación g únicamente en su enunciado, pero no la utilizamos en la demostración. • Tampoco se hace mención del error existente entre la salida de la neurona y la salida esperada, es decir, el valor Err. • Nunca se menciona al Coeficiente de Aprendizaje α. Ni en el enunciado ni en la demostración. • El enunciado del Teorema establece que la convergencia se debe garantizar para cualquier vector de pesos inicial, sin embargo, en la demostración utilizamos únicamente como vector de pesos inicial a W1 = 0 (el vector cero). El objetivo de esta Sección es el de analizar uno a uno los puntos antes enunciados a fin de clarificar las aparentes diferencias entre lo que se enuncia y demuestra en el Teorema de Convergencia y lo establecido por la Regla de Rosenblatt. Analicemos en primer lugar la aparente ausencia de la Función de Activación g en la demostración del Teorema de Convergencia. En la Sección 4.1 comentamos que el rol de la Función de Activación es el de mantener las salidas de las neuronas dentro de ciertos límites. O desde otra perspectiva, la Función de Activación simplemente aplica un escalamiento al valor de W⋅E. Recordemos que el Perceptrón solo es capaz de resolver problemas de clasificación binaria: el vector de entrada forma parte de una clase A o de una clase B, donde A y B son disjuntas. El valor de W⋅E se debe interpretar de manera que se determine en qué clase ha ubicado la neurona a su vector de entrada. Si la función g aplica un escalamiento sobre W⋅E entonces el valor escalado, g(W⋅E), debe interpretarse también de manera pueda inferirse correctamente a que clase pertenece el vector de entrada. La elección de g depende del problema en consideración. Y de hecho g podría ser la Función Identidad en donde tenemos que no se aplica escalamiento alguno al valor de W⋅E. En este sentido, la demostración del Teorema podría asumirse que trabaja específicamente usando como Función de Activación a la Función Identidad. Dado que el Teorema utiliza el signo de W⋅E para decidir si un vector de entrada fue correctamente clasificado, entonces si se deseara incorporar una Función de Activación g diferente a la Identidad simplemente habría que considerar el rango de valores arrojados por g(W⋅E) y establecer los intervalos bajo los cuales se determina una clasificación correcta o incorrecta del vector de entrada E. Ahora veamos la razón por la cual la Ecuación 6.1.4, Err = T – O, no es mencionada. El Teorema de Convergencia parte de la suposición de que el problema a resolver es efectivamente linealmente separable. Por ello mismo se asume la existencia de un vector de pesos W* que permite la separación lineal efectiva de los elementos del conjunto de entrenamiento en dos clases. Recordemos, tal como se estableció en la Sección 6.1, que el valor de Err = T – O puede ser positivo o negativo. Si el error, Err, es positivo entonces la salida O de la neurona debe ser incrementada. Por otro lado, si el error es negativo entonces la salida O de la neurona debe reducirse. En concreto, el objetivo del valor Err es simplemente indicarnos como deberán ser modulados los pesos de la neurona: 169 Una Introducción al Cómputo Neuronal Artificial si éstos se aumentan o se reducen. En la demostración del Teorema de Convergencia tenemos que precisamente por contar con el vector de pesos W* es que podemos determinar si el vector de pesos actual W en el Perceptrón clasifica correcta o incorrectamente. De acuerdo a la demostración tenemos que si, dado el vector de entrada E, W⋅E > 0 pero W*⋅E < 0 o bien, en el otro caso posible, si W⋅E < 0 pero W*⋅E > 0, entonces un ajuste de pesos era requerido. El ajuste simplemente consistía en aumentar o reducir los pesos. Tenemos entonces que el vector W* hace precisamente la función del valor Err: nos indica el criterio de actualización de pesos a utilizar. En la práctica realmente nunca contamos con el vector de pesos W*, de lo contrario, no se requeriría entrenar al Perceptrón porque precisamente ya contamos con su vector de pesos óptimo. Al no contar con W* es que requerimos de un criterio para determinar si los pesos deben ser aumentados o reducidos durante el entrenamiento y ese es precisamente el papel de la Ecuación 6.1.4. Para efectos de la demostración del Teorema, y para enfatizar el hecho de que se están tratando problemas linealmente separables, es que se presupone la existencia de W*, pero hemos visto que su papel es equivalente al del valor Err. ¿Por qué está ausente el Coeficiente de Aprendizaje α en la demostración del Teorema de Convergencia? Primeramente veamos algunas propiedades de la Regla de Rosenblatt, tal como la planteamos en la Sección 6.1. Vectorialmente, ésta está dada por: W = W + α⋅Err⋅E Ya habíamos hecho patente la similitud de esta regla de actualización con la presentada en la Sección 4.3, la cual estaba basada en búsqueda de vector gradiente mediante Descenso Escalonado. Para la Regla de Rosenblatt consideremos la siguiente Función de Error: ME = 1 N N ¦ (T k − Ok ) 2 (Ecuación 6.2.11) k =1 Donde Tk es la salida esperada para el k-ésimo vector de entrada Ek y Ok es la salida proporcionada por la neurona al presentarle precisamente Ek. Nótese que el lugar geométrico descrito por la Ecuación 6.2.11 es también dependiente de la Función de Activación utilizada. Si g es la Función Identidad entonces sabemos que ME es un hiperparaboloide. A partir de la función ME podemos obtener funciones de error que no dependen de todo el conjunto de entrenamiento (formado por N vectores de entrada). Es decir, y tal como lo hicimos en el método de Descenso Escalonado, podemos considerar únicamente el k-ésimo término de la sumatoria de la Ecuación 6.2.11: § § n ·· MEk = (Tk - Ok) = ¨ Tk − g ¨ ¦ w j I j ¸ ¸ ¨ ¸ © j =1 ¹¹ © 2 170 2 (Ecuación 6.2.12) Capítulo 6. Redes de Perceptrones Donde los escalares wj e Ij forman parte del vector de pesos actual W y del vector de entrada Ek, respectivamente. Es claro que la Ecuación 6.2.12 no es más que el cuadrado de la función Err presentada originalmente en la Ecuación 6.1.4. La función MEk, o de manera equivalente, Err2, es un estimador para la función ME (Ecuación 6.2.11). Por lo tanto, la minimización de Err2 = MEk es también un estimador para la minimización de ME. Ahora requerimos el vector gradiente de Err2. El vector gradiente, como bien sabemos, nos indica la dirección para maximizar a Err2. En consecuencia, nos movemos en la dirección opuesta para minimizarla. La Regla de Rosenblatt como tal no calcula un vector gradiente para determinar hacia que región, del lugar geométrico asociado a la función ME, nos debemos mover. Pero es claro que la interpretación que se da al signo de la función Err nos indica precisamente como debemos movernos. Si Err > 0 entonces debemos movernos de manera que la salida de la neurona aumente. Si Err < 0 entonces nos movemos de tal forma que el valor de salida de la neurona se reduce. Ahora bien, Err es un escalar, mientras que el gradiente es un vector. Tal vector, en el método de Descenso Escalonado, está dado, en parte, en función del vector de entrada actual Ek. Por lo tanto, tenemos que el valor de Err para tal fin, en la Regla de Rosenblatt, es multiplicado por el vector de entrada actual. Al final es claro que el vector Err⋅E cumple con la misma función que el vector gradiente de Err2. Ahora bien, en el entrenamiento del Perceptrón mediante Descenso Escalonado (Sección 4.3) establecimos que la función del Coeficiente de Aprendizaje es la de establecer la velocidad de aprendizaje por parte de la neurona. Sabemos que la elección de este valor influye sobre el número de iteraciones que el método de entrenamiento efectuará. Un número reducido de iteraciones puede verse como un rápido aprendizaje. En términos geométricos, el Coeficiente de Aprendizaje define, en parte, el tamaño del desplazamiento que efectuará el vector de pesos actual cuando es actualizado y por tanto colocado en otra región del lugar geométrico definido por la función de error ME. El valor del Coeficiente influye en gran medida en que tan rápido nos acercaremos, o alejaremos inclusive (si éste fue mal elegido), de manera progresiva a la minimización de la función ME. Debe ser claro que la función del Coeficiente α es la misma en la Regla de Rosenblatt: permitir la aceleración de la convergencia del vector de pesos. Por tanto, hemos posicionado a la Regla como un método de minimización de la función ME (Ecuación 6.2.11). La Regla no calcula vectores gradientes a lo largo de la búsqueda pero se puede apreciar que el término de actualización α⋅Err⋅E cumple precisamente con la función de ir dirigiéndola. Ahora bien, retomemos el punto referente al rol del Coeficiente del Aprendizaje en el Teorema de Convergencia. En párrafos anteriores mencionamos que en la práctica, a diferencia de las presuposiciones del Teorema, sólo contamos con un vector de pesos inicial, que por lo general es inicializado de manera aleatoria. Nótese que por lo regular tampoco analizamos las propiedades geométricas y topológicas asociadas al lugar geométrico relacionado con la función ME: la función que precisamente buscamos minimizar. El Coeficiente de Aprendizaje representa un parámetro que se nos proporciona para acelerar la convergencia de los pesos y también para modular la precisión con que se explora a la función ME. El Teorema de Convergencia, contando ya desde un principio con existencia del vector de pesos óptimo W*, únicamente establece que efectivamente se puede lograr la convergencia del vector de pesos, y que el número de iteraciones requerido 171 Una Introducción al Cómputo Neuronal Artificial es finito. El Teorema no considera el problema de minimizar tal número de iteraciones. Es decir, no lidia con la cuestión de la velocidad de aprendizaje. Sin embargo, nótese que es posible asumir que el Coeficiente de Aprendizaje utilizado en la demostración es α = 1. En conclusión debemos entender que el rol del Coeficiente de Aprendizaje queda fuera de los objetivos del Teorema de Convergencia, pero su importancia en la práctica se hace evidente cuando se entrena al Perceptrón a fin de modelar problemas particulares. Por último, hagamos mención de la cuestión relacionada al vector de pesos inicial. El enunciado del Teorema indica claramente que la convergencia se alcanza partiendo de cualquier vector de pesos inicial. Sin embargo, la demostración establece que el vector de pesos inicial utilizado es W1 = 0: el vector cero. Pero precisamente al establecer el uso del vector cero se hace mención que esta aplicación no produce pérdida de generalidad en la demostración del Teorema. El vector cero, como vector de pesos inicial, permite que la identificación de las cotas Superior e Inferior para el vector de pesos en la k-ésima iteración sean fáciles de calcular e interpretar. Gracias a ello sabemos, por la Cota Inferior, que la magnitud al cuadrado del vector de pesos crece con un factor k2, mientras que por otro lado, la Cota Superior nos dice que el vector de pesos no crece de manera indefinida y que de hecho su magnitud al cuadrado es a lo más kγ 2 . Si la prueba fuese efectuada considerando cualquier vector de pesos W1, y debido a que W2 = W1 + E1, donde, recalcamos, W1 no necesariamente es el vector cero, entonces la Ecuación 6.2.4 tendría la siguiente forma: W*⋅Wk+1 = W*⋅W1 + W*⋅E1 + W*⋅E2 + … + W*⋅Ek-1 + W*⋅Ek (Ecuación 6.2.13) Nótese que γ1k sigue acotando inferiormente a la suma W*⋅E1 + W*⋅E2 + … + W*⋅Ek-1 + W*⋅Ek Por lo tanto ahora tendríamos: W*⋅Wk+1 = W*⋅W1 + W*⋅E1 + W*⋅E2 + … + W*⋅Ek-1 + W*⋅Ek ≥ W*⋅W1 + γ1k ⇔ W*⋅Wk+1 ≥ W*⋅W1 + γ1k Por la desigualdad de Cauchy-Schwarz: W * ⋅ W k +1 ≥ (W * ⋅W k +1 ) ≥ ( γ 1 k + W * ⋅W1 ) 2 2 2 ⇔ W * ⋅ W k +1 ≥ ( γ 1 k + W * ⋅W1 ) 2 ⇔ W k +1 172 2 (γ ≥ 1 k + W * ⋅W1 ) W* 2 2 2 = 2 2 γ 12 k 2 + 2γ 1 k (W * ⋅W1 ) + (W * ⋅W1 ) W* 2 2 Capítulo 6. Redes de Perceptrones Se ha obtenido entonces la Cota Inferior para el cuadrado de la magnitud del vector de pesos en la k-ésima iteración y partiendo de cualquier vector de pesos inicial W1. Es claro que cuando W1 = 0 entonces γ 12 k 2 + 2γ 1 k (W * ⋅0 ) + (W * ⋅0 ) W* 2 2 = γ 12 k 2 W* 2 Que es precisamente la Cota Inferior presentada en la demostración del Teorema de Convergencia. Es evidente que esta Cota Inferior, considerando cualquier vector de pesos inicial, es tan válida como la que se proporcionó en la demostración del Teorema de Convergencia. De manera similar podemos obtener la correspondiente Cota Superior. Pero debe apreciarse que éstas, al contar con más términos, puede que dificulten su manipulación y hagan que la demostración se extienda de manera innecesaria sobre todo si se requiere que las cotas sean tan ajustadas como sea posible. Finalmente, ya sea que se use únicamente el vector de pesos inicial W1 = 0 o bien que éste sea cualesquiera, se llega a la misma conclusión: se tiene probada la convergencia de los pesos de la neurona, que éstos están debidamente acotados para cada iteración y que el número de iteraciones requeridas para alcanzar la convergencia es finito. 6.3 Retropropagación El lector se debe estar cuestionando acerca de la razón para revisitar al Perceptrón al considerar la Regla de Rosenblatt para su entrenamiento y su correspondiente Teorema de Convergencia. La razón es sencilla: la Regla de Rosenblatt representa el punto de partida para los fundamentos a adoptar en el Algoritmo de Retropropagación en lo que respecta al ajuste de pesos en una red formada por Perceptrones. Contrastemos este punto con el mecanismo de ajuste de pesos para una red Madaline presentado en la Sección 5.2. En tal procedimiento establecimos el principio de búsqueda de una neurona o neuronas “culpables”. Si éstas existían entonces modificábamos de manera “abrupta” sus pesos de tal forma que su salidas permitan que la salida final de la red sea la correcta, es decir, la esperada. ¿Qué queremos decir cuando usamos el término “abrupto”? Nos referimos a que los pesos originales de una neurona eran desechados por completo y sustituidos por otros nuevos. Sin embargo, la Regla de Rosenblatt, y también el método de Descenso Escalonado (Sección 4.3), realizan una actualización de pesos, pero ésta es gradual. Los pesos originales son en parte conservados al serles aplicada una modificación que no los reemplaza por completo por otros. Dado que esta modificación se aplica por cada vector de entrada en el conjunto de entrenamiento, es que entonces la modificación es gradual. Precisamente el principio del ajuste gradual de pesos fue adoptado por Rumelhart, Hinton y Williams al presentar, en 1986, al Algoritmo de Retropropagación (Back-Propagation Algorithm). Como a cualquier otro método de entrenamiento, se le presenta a la red un vector del conjunto de entrenamiento. Si ésta calcula una salida que coincida con la esperada entonces no se hace nada. Pero, si existen diferencias entre la 173 Una Introducción al Cómputo Neuronal Artificial salida de la red y la salida esperada entonces los pesos deben ser ajustados de manera que el error sea disminuido. Pero Rumelhart y compañía dieron un paso más que resulta ser una de las novedades del algoritmo. Cuando un error entre la salida de la red y la esperada ha sido identificado, entonces éste se distribuye y se utiliza para ajustar a todos los pesos de todas las neuronas que forman las capas ocultas y de salida de la red. El ajuste aplicado en ese momento busca hacer más pequeño el error entre la salida esperada y la salida producida por la red, pero tampoco busca eliminarlo por completo en ese momento. Es decir, se tiene por un lado un ajuste gradual de pesos que en consecuencia también reduce gradualmente los errores, y por otro lado, no se busca identificar una sola o varias neuronas culpables: a todas las neuronas se les atribuye una contribución al error generado y es por ello que a todas se les deben ajustar sus respectivos pesos. Al mecanismo de entrenamiento se le llama de Retropropagación debido a que inicialmente el error de salida de la red es identificado a nivel de su capa de salida. Se dice entonces que las salidas de las neuronas en esta capa se interpretan al compararlas con las salidas esperadas. Por ello mismo los pesos en la capa de salida son los primeros en ser modificados. Previamente mencionamos que las salidas de las capas ocultas realmente no se pueden interpretar, aunque si son accesibles y también contribuyeron en su momento a la salida errónea de la red. Por ello mismo una vez modificados los pesos en la capa de salida se procede a modificar los pesos en las neuronas de la última capa oculta, posteriormente los pesos de las neuronas en la penúltima capa oculta y así sucesivamente hasta llegar a la modificación de pesos en la primera capa oculta. Es decir, a diferencia de la propagación de un vector de entrada de la capa de entrada hacia las ocultas y finalmente a la de salida, la actualización de pesos implica una Retropropagación, que va en el sentido opuesto. Analizaremos en primer lugar, en la siguiente Sección, la instancia del Algoritmo de Retropropagación bajo redes de Perceptrones formadas únicamente por una única capa oculta. Posteriormente, en la Sección 6.4, veremos el caso general con varias capas ocultas. 6.3.1 Retropropagación en una Red de una Sola Capa Oculta Considérese la Red de Perceptrones, de una sola capa oculta, presentada en la Figura 6.2. Sean: • n1: el número de neuronas en la capa de entrada. • n2: el número de neuronas en la capa oculta. • n3: el número de neuronas en la capa de salida. Por la Figura 6.2 es claro que la red recibirá un vector de entrada X en \ n1 y proporcionará como salida un vector en \ n3 . Sea g la función de activación utilizada en todas las neuronas. Se asume que ésta es continua y diferenciable en (-∞, ∞). En nuestro caso, supondremos que el número de neuronas en la capa de entrada es el mismo que de componentes de los vectores de entrada: n1. Nótese también que cada neurona en la capa de entrada recibe únicamente un componente del vector de entrada y que la salida de cada una de estas neuronas se propaga a todas las neuronas de la capa oculta. Debe ser claro que las neuronas que forman la capa de entrada contarán con un único peso el cual se multiplica por el único escalar que reciben y el resultado es sometido a la Función de Activación g. 174 Capítulo 6. Redes de Perceptrones Por lo general, el rol de las neuronas de la capa de entrada es el de simplemente recibir su correspondiente escalar y propagarlo de manera inmediata a todas las neuronas de la capa oculta. Ello quiere decir que podría considerarse que el valor de su único peso es igual a 1 y que estas neuronas, en particular, cuentan con la Función Identidad como Función de Activación. Por lo mismo de que su función es la de recibir y propagar el vector de entrada, sin alterar los valores de sus componentes, es que estas neuronas no serán consideradas en el proceso de ajuste de pesos. Realmente nos interesará ajustar los pesos de las neuronas en las capas oculta y de salida que son las que se encargan de dar solución al problema que se esté considerando. Finalmente, y como bien sabemos, la salida de cada neurona en la capa oculta se propaga a todas las neuronas en la capa de salida. x1 I1 o1 ajj oi an2 o n3 I2 x2 Ik xk xn a1 1 In1 Figura 6.2. Una red de Perceptrones con una única capa oculta (Véase el texto para detalles). Sea T un vector en \ n3 . El vector T será de hecho un vector de salida esperada, en donde Ti será su i-ésimo componente. Sea Oi la salida proporcionada por la i-ésima neurona en la capa de salida de la red. Como ya mencionamos en la Sección anterior, la Retropropagación, para el ajuste de los pesos, en este tipo de red comprende dos fases: • • Fase 1: Actualización de los pesos en las Neuronas en la Capa de Salida. Fase 2: Actualización de los pesos en las Neuronas en la Capa Oculta. 175 Una Introducción al Cómputo Neuronal Artificial Describamos en primer lugar el ajuste de pesos en las Neuronas de la Capa de Salida. Considérese a la i-ésima neurona en esta capa, i = 1, 2, …, n3. Dado que ésta es una neurona de tipo Perceptrón tenemos que su Sumatoria de Salida está dada por: n2 enti = ¦ w j ,i a j (Ecuación 6.3.1) j =1 Nótese que esta neurona recibe como entrada un vector de n2 componentes que se forma precisamente por las salidas de las neuronas en la capa oculta (Véase la Figura 6.2). Por lo tanto, cada j-ésimo peso de nuestra i-ésima neurona en consideración, wj,i, se multiplicará por el j-ésimo componente del vector de entrada, es decir, por la salida generada por la j-ésima neurona en la capa oculta: aj. La salida final Oi está dada por la aplicación de la función de activación g sobre el valor enti de la Sumatoria de Salida: Oi = g(enti) (Ecuación 6.3.2) Ahora bien, suponiendo que debemos aplicar una corrección a nuestro Perceptrón, tenemos entonces que aplicar la siguiente regla a cada uno de sus n2 pesos. Es decir, la actualización del j-ésimo peso, wj,i, j = 1, 2, …, n2, estará dada por: wj,i = wj,i + α⋅aj⋅Δi (Ecuación 6.3.3) Donde: • wj,i: j-ésimo peso de la i-ésima neurona de la capa de salida. • α: Coeficiente de aprendizaje. • aj: Salida de la j-ésima neurona en la capa oculta. A Δi, llamado el Término de Variación o Cambio de la i-ésima neurona de la Capa de Salida, se le define de la siguiente manera: Δi = Erri ⋅ g’(enti) (Ecuación 6.3.4) Erri es la diferencia entre el i-ésimo componente del vector de salida esperada y la salida proporcionada por la i-ésima neurona en la capa de salida. Es decir: Erri = Ti - Oi 176 (Ecuación 6.3.5) Capítulo 6. Redes de Perceptrones Por otro lado, g’ no es más que la derivada de la función de activación. Dado que g se asume continua y diferenciable en cualquier punto, es que g’ no tendrá problemas de indefinición y por tanto el ajuste de pesos será posible para cualquier neurona de cualquier capa. En particular, g’ será evaluada, en el caso de las neuronas en la capa de salida, tal como lo indica la Ecuación 6.3.4, con el valor de la Ecuación 6.3.1: § n2 · g '(enti ) = g ' ¨ ¦ w j ,i a j ¸ © j =1 ¹ (Ecuación 6.3.6) Ahora procedamos a describir la manera en que los pesos de las neuronas en la capa oculta son actualizados. Consideremos a la j-ésima neurona en la capa oculta, 1 ≤ j ≤ n2. Véase la Figura 6.2. Ahora bien, la actualización del k-ésimo peso en la j-ésima neurona, wk,j, de la capa oculta se da mediante la aplicación de la regla: wk,j = wk,j + α⋅Ik⋅Δj (Ecuación 6.3.7) Donde Ik es la salida de la k-ésima neurona en la capa de entrada y α es el Coeficiente de aprendizaje (el mismo utilizado para actualizar a las neuronas en la capa de salida). Recordemos que, en base a lo establecido en párrafos anteriores, el valor Ik no es más que el valor del k-ésimo componente del vector de entrada X. Es decir, Ik = xk (véase la Figura 6.2). El término Δj, denominado Término de Variación o Cambio de la j-ésima neurona en la Capa Oculta, está dado por: n3 Δ j = g '(ent j ) ⋅ ¦ w j ,i Δ i (Ecuación 6.3.8) i =1 Se requiere la derivada de la Función de Activación g, es decir, g’. Está será evaluada con el valor proporcionado por la sumatoria de salida de la neurona que se está actualizado: n1 ent j = ¦ wk , j I k (Ecuación 6.3.9) k =1 Tomando como referencia a la Figura 6.2, la sumatoria se conforma por n1 términos debido a que cada uno de éstos es la salida que proporciona cada una de las neuronas en la capa de entrada. Es decir, cada neurona en la capa oculta recibe un vector de entrada en \ n1 . Ahora bien, en Secciones y párrafos anteriores mencionábamos que uno de los principios del Algoritmo de Retropropagación es el de distribuir el error de la red entre todas las neuronas que la conforman y utilizarlo para el ajuste de sus pesos. Previamente vimos como tal error era utilizado para actualizar los pesos de las neuronas en la capa de salida (Ecuaciones 6.3.3 a 6.3.5). Ahora debemos ver como es que el error de la red es también utilizado para actualizar los pesos de las neuronas en la capa oculta. Es claro que para toda neurona en la capa oculta su salida, el escalar aj, es enviado a todas las neuronas en la capa de salida 177 Una Introducción al Cómputo Neuronal Artificial (véase la Figura 6.2) y en particular se relacionará específicamente con su j-ésimo peso: w j ,i . Al final, el producto w j ,i ⋅ a j contribuye al valor de la Sumatoria de Salida de las neuronas en la capa de salida (véase la Ecuación 6.3.1), y en consecuencia, a la salida final de la red. Por tanto, es claro que las neuronas en la capa oculta son en parte responsables por el error que se produce en cada uno de los Perceptrones de salida con los que se conectan. Ahora observemos la sumatoria presente en el término Δj (Ecuación 6.3.8): n3 ¦w j ,i Δi i =1 Δi es precisamente el Término de Variación o Cambio que se utilizó para actualizar a la i-ésima neurona en la capa de salida y a su vez, tal como lo muestra la Ecuación 6.3.4, cuenta con el error existente entre la salida Oi proporcionada por la neurona y la salida Ti esperada. Es claro que entonces parte de la actualización, o corrección, aplicada sobre las neuronas en la capa de salida será también aplicada a las neuronas en la capa oculta. Esto también tiene como consecuencia que para aplicar la regla de actualización de la Ecuación 3.6.7 se requiere haber actualizado primeramente a las neuronas en la capa de salida mediante la Ecuación 6.3.3 y preservar los valores Δi. De allí el término Retropropagación. Dado que las Ecuaciones 6.3.4 y 6.3.8 requieren que la Función de Activación sea continua y diferenciable en (-∞, ∞), resulta obvio que funciones como sign (Sección 3.1) no pueden ser consideradas. En la Sección 4.1 comentamos que por lo regular se usan las siguientes funciones y sus correspondientes derivadas: • Función Sigmoide: • Función 1 + Tanh( z ) : 2 • Función Tanh(z/2): • Función Tanh(z): g ( z) = 1 , 1 + e− z e2 z , 1 + e2 z 2 g ( z) = −1 , 1 + e− z g ( z) = g ( z) = 1 − e −2 z , 1 + e −2 z g '( z ) = e− z (1 + e − z ) 2 g '( z ) = 2e 2 z (1 + e 2 z ) 2 2e − z g '( z ) = (1 + e − z ) 2 g '( z ) = 4e 2 z (1 + e 2 z ) 2 Debido a que el Algoritmo de Retropropagación requiere en primer lugar obtener la salida producida por la red cuando un vector de entrada le es presentado, entonces es que debemos implementar el mecanismo mediante el cual precisamente tal vector de entrada es procesado. El Algoritmo 6.2 implementa la propagación de un vector de entrada hacia cada una de las capas de la red. El algoritmo recibe como entrada 6 parámetros: 178 Capítulo 6. Redes de Perceptrones • • • • Tres enteros n1, n2 y n3 que denotan, respectivamente, el número de neuronas en la capa de entrada, el número de neuronas en la capa oculta y el número de neuronas en la capa de salida. Una matriz W_hidden de tamaño n2 × n1. Esta matriz contiene los pesos de las neuronas en la capa oculta. Recordemos que tal capa se forma por n2 neuronas y cada una de estas cuenta con n1 pesos. Por ello mismo, la información referente a la j-esima neurona está contenida en el j-ésimo renglón de la matriz. Una matriz W_output de tamaño n3 × n2. Contiene la información referente a las n3 neuronas que forman la capa de salida. Los n2 pesos del i-ésimo Perceptrón están localizados precisamente en el i-ésimo renglón de esta matriz. Un vector X en \ n1 . Es el vector de entrada que se presentará a la red. El Algoritmo 6.2 procede de la siguiente manera: • • Cada componente del vector de entrada X es enviado a su respectiva neurona en la capa de entrada. Dado que estamos considerando el hecho de que el rol de estas neuronas es el de simplemente propagar a X hacia la capa oculta, entonces en consecuencia tendremos que el vector I generado por la capa de salida no es más que una copia del vector de entrada X. El vector I es presentado a las neuronas en la capa oculta. Para la j-ésima neurona en esta capa, j = 1, …, n2: n1 o Se calcula su sumatoria de salida: ent j = ¦ wk , j I k . k =1 o Se determina su salida aj = g(entj). • Las salidas de las neuronas en la capa oculta forman un vector a de n2 componentes. Ahora el vector a será enviado como entrada a las neuronas en la capa de salida. Para la i-ésima neurona en la capa de salida, i = 1, …, n3: n2 o Se calcula su sumatoria de salida: enti = ¦ w j ,i a j . j =1 o Se determina su salida Oi = g(enti). • Las salidas de las neuronas en la capa de salida forman un vector O de n3 componentes. Este vector es precisamente la salida final que la red proporciona. El Algoritmo 6.2 proporciona como salida el vector O y también al vector a, el vector generado por la capa oculta, debido a que éste último es requerido por el Algoritmo de Retropropagación. Nótese que nuestro algoritmo invoca a un procedimiento g, que no es más que la implementación de la Función de Activación. 179 Una Introducción al Cómputo Neuronal Artificial Algoritmo 6.2. Propagación de un vector de entrada en una red de Perceptrones con una única capa oculta. Procedure Propagation (Integer n1, Integer n2, Integer n3, Matrix W_hidden[1,…,n2][1,…,n1], Matrix W_output[1,…,n3][1,…,n2], Array X[1,…,n1]) I = new Array[1,…,n1] a = new Array[1,…,n2] O = new Array[1,…,n3] // Cada componente del vector de entrada es enviado a su respectiva neurona // en la capa de entrada. for k = 1 until n1 do I[k] = X[k] end-of-for // El vector I es enviado como entrada a cada neurona en la capa oculta. for j = 1 until n2 do n1 // Se calcula, para la j-ésima neurona en la capa oculta, ent j = ¦ wk , j I k . k =1 Real ent_j = 0 for k = 1 until n1 do ent_j = ent_j + W_hidden[j][k] * I[k] end-of-for // Se obtiene, para la j-ésima neurona en la capa oculta, // su salida aj = g(entj). a[j] = g(ent_j) end-of-for // El vector a es enviado como entrada a cada neurona en la capa de salida. for i = 1 until n3 do n2 // Se calcula, para la i-ésima neurona en la capa de salida, enti = ¦ w j ,i a j . j =1 Real ent_i = 0 for j = 1 until n2 do ent_i = ent_i + W_output[i][j] * a[j] end-of-for // Se obtiene, para la i-ésima neurona en la capa de salida, // su salida Oi = g(enti). O[i] = g(ent_i) end-of-for // Se retornan como salida el vector a generado por las salidas de las neuronas // en la capa oculta y el vector O que corresponde a la salida final de la red. return {a, O} end-of-procedure 180 Capítulo 6. Redes de Perceptrones El Algoritmo 6.3 representa la implementación del método de Retropropagación para el entrenamiento de una red de Perceptrones con una única capa oculta. Se reciben en total 8 entradas: • Un entero N: el número de elementos en el conjunto de entrenamiento. • Tres enteros n1, n2 y n3 que denotan, respectivamente, el número de neuronas en la capa de entrada, el número de neuronas en la capa oculta y el número de neuronas en la capa de salida. • Un entero L: el número de veces que el conjunto de entrenamiento será presentado a la red. O en otras palabras, el número de épocas a aplicar. • Un número real positivo α: el Coeficiente de Aprendizaje. • Una matriz X de N × n1: contiene los N vectores de entrada del conjunto de entrenamiento. Cada vector cuenta con n1 componentes. Por tanto, el n-ésimo vector de entrada estará localizado en el renglón n de X. • Una matriz T de N × n3: contiene los vectores que se espera la red proporcione. El n-ésimo vector de salida esperada se ubica en el renglón n de la matriz T y cuenta con n3 componentes. En esencia, y de acuerdo al mecanismo de Retropropagación descrito en los párrafos anteriores, el Algoritmo 6.3 funciona de la siguiente manera: • Se inicializan los pesos de todas las neuronas en las capas oculta y de salida. Por lo regular los valores iniciales asignados están en el intervalo (-1, 1). • Repetir en L ocasiones: o Para cada vector X en el conjunto de entrenamiento: Se obtiene el vector de salida O de la red al presentarle X. Se obtiene el vector de salida esperada T asociado al vector X. Para cada neurona i en la capa de salida, i = 1, 2, …, n3: • Se calcula Erri = Ti - Oi. n2 • Se calcula la sumatoria de salida enti = ¦ w j ,i a j . • Se obtiene el término Δi = Erri ⋅ g’(enti). El valor de Δi deberá estar disponible para la actualización de las neuronas en la capa oculta. Para cada peso j en la neurona i, j = 1, 2, …, n2, se aplica la actualización: j =1 • wj,i = wj,i + α⋅aj⋅Δi Para cada neurona j en la capa oculta, j = 1, …, n2: • n1 Se calcula su sumatoria de salida: ent j = ¦ wk , j I k . k =1 • n3 Se obtiene el término Δ j = g '(ent j ) ⋅ ¦ w j ,i Δ i i =1 • Para cada peso k en la neurona j, k = 1, 2, …, n3, se usa la actualización: wk,j = wk,j + α⋅ak⋅Δj 181 Una Introducción al Cómputo Neuronal Artificial El Algoritmo 6.3 requiere la derivada de la Función de Activación evaluada en enti o entj, dependiendo de la capa de neuronas procesada. Para ello se invoca a la función g_derivative que precisamente implemente la derivada requerida. Por otro lado, dado que se requiere el vector de salida O proporcionado por la red usando los pesos actuales, es que entonces se invoca al Algoritmo 6.2 que se encarga de presentar al vector de entrada actual a la red y obtener la correspondiente salida. El Algoritmo 6.2 también retorna el vector a que se forma con las salidas de las n2 neuronas en la capa oculta. Recordemos que este vector es requerido para el cálculo de las sumatorias de salida de las neuronas en la capa de salida. El último punto a considerar es el relacionado a los valores de salida proporcionados por las neuronas en la capa de entrada. Tal como comentamos previamente, estas neuronas reciben únicamente un componente del vector de entrada actual. También sabemos que a esta capa se le puede especificar o no un procesamiento de tales entradas. En nuestro caso, vemos a la capa de entrada con la única función de recibir el vector de entrada y propagar sus componentes, sin alterarlos, a todas las neuronas de la capa oculta. Es por ello que en la especificación del Algoritmo 6.3, y particularmente al calcular las sumatorias de salida de las neuronas de la capa oculta y al aplicar la regla de actualización sobre sus pesos, se usará al k-ésimo componente del n-ésimo vector de entrada como el valor del término Ik. Algoritmo 6.3. Método de Retropropagación para el entrenamiento de una Red de Perceptrones con una única capa oculta. Procedure BackPropagation (Integer N, Integer n1, Integer n2, Integer n3, Integer L, Real α, Matrix X[1,…,N][1,…,n1], Matrix T[1,…,N][1,…,n3]) W_hidden = new Matrix[1,…,n2][1,…,n1] W_output = new Matrix[1,…,n3][1,…,n2] Δ = new Array[1,…,n3] // Los pesos de las neuronas en la capa oculta se inicializan // aleatoriamente en (-1, 1). for j = 1 until n2 do for k = 1 until n1 do W_hidden[j][k] = Random( ) end-of-for end-of-for // Los pesos de las neuronas en la capa de salida se inicializan // aleatoriamente en (-1, 1). for i = 1 until n3 do for j = 1 until n2 do W_output[i][j] = Random( ) end-of-for end-of-for 182 Capítulo 6. Redes de Perceptrones // Se efectuarán en total L épocas o presentaciones del conjunto de entrenamiento. for t = 1 until L do for n = 1 until N do // El n-ésimo vector de entrada, Xn, es enviado a la red. // Se utilizarán los pesos actuales de las neuronas. {a, O} = Propagation(n1, n2, n3, W_hidden, W_output, X[n]) // El vector a corresponde a las salidas de las neuronas // en la capa oculta, el vector O es la salida de las neuronas // en la capa de salida. for i = 1 until n3 do // Se procede a actualizar los pesos de la i-ésima neurona // de la capa de salida. // Se obtiene la diferencia entre la salida esperada y la salida // proporcionada por la neurona. Real Err_i = T[n][i] – O[i] n2 // Se calcula enti = ¦ w j ,i a j . j =1 Real ent_i = 0 for j = 1 until n2 do ent_i = ent_i + W_output[i][j] * a[j] end-of-for // Se obtiene el término Δi = Erri ⋅ g’(enti). Δ[i] = Err_i * g_derivative(ent_i) // Se aplica la regla de actualización wj,i = wj,i + α⋅aj⋅Δi // a cada peso de la neurona. for j = 1 until n2 do W_output[i][j] = W_output[i][j] + α * a[j] * Δ[i] end-of-for end-of-for for j = 1 until n2 do // Se procede a actualizar los pesos de la j-ésima neurona // de la capa oculta. n1 // Se calcula ent j = ¦ wk , j I k . k =1 Real ent_j = 0 for k = 1 until n1 do ent_j = ent_j + W_hidden[j][k] * X[n][k] end-of-for n3 // Se calcula Δ j = g '(ent j ) ⋅ ¦ w j ,i Δ i . i =1 Real Δ_j = 0 183 Una Introducción al Cómputo Neuronal Artificial for i = 1 until n3 do Δ_j = Δ_j + W_output[i][j] * Δ[i] end-of-for Δ_j = Δ_j * g_derivative(ent_j) // Se aplica la regla de actualización wk,j = wk,j + α⋅Ik⋅Δj // a cada peso de la neurona. for k = 1 until n1 do W_hidden[j][k] = W_hidden[j][k] + α * X[n][k] * Δ_j end-of-for end-of-for end-of-for end-of-for // Se retornan como salida los pesos de las neuronas en las capas oculta // y de salida. return {W_output, W_hidden} end-of-procedure 6.3.2 Justificación del Algoritmo de Retropropagación La Sección anterior tuvo el objetivo de plantear algorítmicamente al método de Retropropagación para el entrenamiento de una Red de Perceptrones con una única capa oculta. Ahora proporcionaremos las bases Matemáticas que sustentan al Algoritmo de Retropropagación. De hecho, lo ubicaremos como un método de búsqueda de vector gradiente, y específicamente, como un método de Descenso Escalonado. El Algoritmo de Retropropagación constituye un procedimiento para el cálculo del vector gradiente de la siguiente Función de Error: 1 n3 E = ¦ (Ti − Oi ) 2 2 i =1 (Ecuación 6.3.10) Cada término de la sumatoria en la Ecuación 6.3.10 contiene la diferencia entre la salida Oi proporcionada por la i-ésima neurona de la capa de salida y el i-ésimo escalar, Ti, del vector de salida esperada. Es claro que la función E calcula únicamente la suma de las diferencias al cuadrado existentes entre los correspondientes escalares de un vector de salida esperada particular y las salidas de las neuronas en la capa de salida. Nótese que esta función no considera en su totalidad al conjunto de entrenamiento, el cual se forma por N elementos. Únicamente considera al A -ésimo elemento, 1 ≤ A ≤ N, es decir, la pareja formada por el 184 Capítulo 6. Redes de Perceptrones A -ésimo vector de entrada y su correspondiente vector de salida esperada. Es posible definir a la Función de Error en términos de todo el conjunto de entrenamiento. Propiamente tendríamos en esta instancia la suma de todos los errores al cuadrado, SSE (Sum of Squared Errors), producidos por la red al presentarle todo el conjunto de entrenamiento: N § n3 · SSE = ¦ ¨ ¦ (Ti ,A − Oi ,A ) 2 ¸ A =1 © i =1 ¹ (Ecuación 6.3.11) Donde Ti ,A es el i-ésimo escalar del A -ésimo vector de salida esperada y Oi ,A es la salida de la i-ésima neurona en la capa de salida cuando se presenta a la red el A -ésimo vector de entrada del conjunto de entrenamiento. Sin embargo, tenemos conocimiento de que si bien es posible abordar la minimización de esta función, es claro que tendremos un proceso ineficiente, dado que precisamente se requiere en todo momento considerar al conjunto de entrenamiento por completo. Es claro que la función E de la Ecuación 6.3.10 forma parte de la función SSE ya que calcula una suma de errores al cuadrado específica. Por lo tanto, la función E puede verse como un estimador para la función SSE. Y en consecuencia, como bien sabemos, el vector gradiente de la función E es a su vez un estimador para el vector gradiente de la función SSE. La ventaja esencial de trabajar con la Ecuación 6.3.10 radica en el número reducido de operaciones a efectuar comparado con el número de operaciones requeridas al manipular la función SSE. Dado que Oi = g(enti), por la Ecuación 6.3.2, entonces tenemos que la Función de Error ahora tiene la forma: E= = 1 n3 ¦ (Ti − Oi )2 2 i =1 1 n3 ¦ (Ti − g (enti ))2 2 i =1 (Ecuación 6.3.12) Dado que enti es la Sumatoria de Salida de la i-ésima neurona de la capa de salida ahora se obtiene al aplicar la Ecuación 6.3.1 sobre la Ecuación 6.3.12: § n2 ·· 1 n3 § E = ¦ ¨ Ti − g ¨ ¦ w j ,i a j ¸ ¸ ¸ 2 i =1 ¨© © j =1 ¹¹ 2 (Ecuación 6.3.13) Donde, como ya sabemos, g es la Función de Activación, wj,i es el j-ésimo peso de la i-ésima neurona de la capa de salida y aj es la salida proporcionada por la j-ésima neurona en la capa oculta. Podemos sustituir al término aj por la aplicación de la Función de Activación g sobre entj, la sumatoria de salida de la j-ésima neurona en la capa oculta (Ecuación 6.3.9). Sin embargo, por el momento debe ser claro que la Función de Error 185 Una Introducción al Cómputo Neuronal Artificial tiene como variables a optimizar precisamente a todos los pesos de todas las neuronas que conforman a nuestras capas de salida y oculta. El objetivo, como siempre, es minimizarla: encontrar los valores de los pesos que hagan tan pequeño como sea posible el error existente entre el vector de salida O y el vector de salida esperada T. Ahora determinaremos al vector gradiente de la Función de Error. Recordemos que los componentes de tal vector serán sus derivadas parciales respecto a cada una de sus variables involucradas: los pesos en las neuronas de salida y los pesos en las neuronas en la capa oculta. Sea wj,i el j-ésimo peso de la i-ésima neurona en la capa de salida. Inicialmente ∂E calcularemos : ∂w j , i ∂E ∂ 1 n3 = ¦ (Ti − Oi )2 ∂w j ,i ∂w j ,i 2 i =1 La sumatoria considera a todas las neuronas en la capa de salida. Sin embargo, es sólo una, en particular la i-ésima neurona, la que cuenta con el peso wj,i. Por lo tanto, todos los términos de la suma, excepto el i-ésimo, son eliminados por ser constantes respecto a wj,i: = ∂ 1 (Ti − Oi ) 2 ∂w j ,i 2 = 2 ∂ 1 Ti − g ( enti ) ) ( ∂w j ,i 2 (Por la Ecuación 6.3.2) 2 § n2 ·· ∂ 1§ = − T g ¨¨ i ¨ ¦ w j ,i a j ¸ ¸¸ ∂w j ,i 2 © © j =1 ¹¹ n 2 ª § ·º ∂ § § n2 ·· T g = «Ti − g ¨ ¦ w j ,i a j ¸ » − ¨¨ i ¨ ¦ w j ,i a j ¸ ¸¸ «¬ © j =1 ¹ »¼ ∂w j ,i © © j =1 ¹¹ n n 2 2 ª § ·º § § ·· ∂ g ¨ ¦ w j ,i a j ¸ ¸ = «Ti − g ¨ ¦ w j ,i a j ¸ » ¨ − ¨ ¸ «¬ © j =1 ¹ »¼ © ∂w j ,i © j =1 ¹¹ ª § n2 ·º = «Ti − g ¨ ¦ w j ,i a j ¸ » ⋅ «¬ © j =1 ¹ »¼ ª § n2 · ∂ « − g ' ¨ ¦ w j ,i a j ¸ © j =1 ¹ ∂w j ,i ¬« 186 n2 ¦w j =1 º a j ,i j » ¼» (Por la Ecuación 6.3.1) § Aplicación de la · ¨ ¸ © Regla de la Cadena ¹ (Ti es constante respecto a wj,i) § Aplicación de la · ¨ ¸ © Regla de la Cadena ¹ Capítulo 6. Redes de Perceptrones ª § n2 ·º = «Ti − g ¨ ¦ w j ,i a j ¸ » ⋅ «¬ © j =1 ¹ »¼ ª º § n2 · ∂ w1,i a1 + ... + w j ,i a j + ... + wn2 ,i an2 » « − g ' ¨ ¦ w j ,i a j ¸ «¬ »¼ © j =1 ¹ ∂w j ,i § Todos los términos de la ¨ º ª § n2 ·º ª § n2 · ∂ ¨ última sumatoria son = «Ti − g ¨ ¦ w j ,i a j ¸ » « − g ' ¨ ¦ w j ,i a j ¸ w j ,i a j » ¨ constantes respecto a «¬ © j =1 ¹ »¼ ¬« © j =1 ¹ ∂w j ,i ¼» ¨¨ © w j ,i excepto el j -ésimo ( ) · ¸ ¸ ¸ ¸¸ ¹ ª § n2 ·º ª § n2 · º = «Ti − g ¨ ¦ w j ,i a j ¸ » « − g ' ¨ ¦ w j ,i a j ¸ a j » © j =1 ¹ ¼» ¬« © j =1 ¹ ¼» ¬« = ª¬Ti − g ( enti ) º¼ ª¬ − g ' ( enti ) a j º¼ = [Ti − Oi ] ª¬ − g ' ( enti ) a j º¼ = Erri ª¬ − g ' ( enti ) a j º¼ = −a j Δi (Por la Ecuación 6.3.1) (Por la Ecuación 6.3.2) (Por la Ecuación 6.3.5) (Por la Ecuación 6.3.4) Concretizando tenemos entonces que: ∂E = −a j Δi ∂w j ,i (Ecuación 6.3.14) Se ha obtenido la dirección de máximo crecimiento de la función de error E respecto a la variable (peso) wj,i. Sea wk,j el k-ésimo peso de la j-ésima neurona en la capa oculta. Ahora procederemos a calcular la derivada parcial de la función E, Ecuación 6.3.10, respecto a wk,j: ∂E ∂ 1 n3 = (Ti − Oi ) 2 ¦ ∂wk , j ∂wk , j 2 i =1 Recordemos que cada término de la sumatoria corresponde al error producido por cada neurona en la capa de salida. Ahora bien, obsérvese la Figura 6.2. El peso respecto al cual estamos derivando a la función E está contenido únicamente en la j-ésima neurona de la capa oculta. Sin embargo, este mismo peso es propagado hacia todas las neuronas en la capa de salida. Ello se debe a que forma parte del j-ésimo escalar del vector producido como salida en la capa oculta y el cual, a su vez, es enviado como entrada a todas las 187 Una Introducción al Cómputo Neuronal Artificial neuronas en la capa de salida. Por lo tanto, el peso wk,j está presente en todos los términos de la sumatoria que forma a la función E. Eso quiere decir que entonces ninguno de los términos de tal sumatoria puede ser visto como constante respecto a wk,j: = 1 n3 ∂ (Ti − Oi ) 2 ¦ 2 i =1 ∂wk , j n3 = ¦ (Ti − Oi ) i =1 ∂ (Ti − Oi ) ∂wk , j n3 = −¦ (Ti − Oi ) i =1 n3 = −¦ (Ti − Oi ) i =1 (Aplicación de la Regla de la Cadena) ∂ Oi ∂wk , j (Ti es constante respecto a wk,j) § n2 · ∂ g ¨ ¦ w j ,i a j ¸ ∂wk , j © j =1 ¹ (Por la Ecuación 6.3.2) n3 § n2 · ∂ n2 (Aplicación de la Regla de la Cadena) = −¦ (Ti − Oi )g ' ¨ ¦ w j ,i a j ¸ w j ,i a j ¦ ∂ w 1 1 = = i =1 j j , k j © ¹ n3 n2 § · ∂ = −¦ (Ti − Oi )g ' ¨ ¦ w j ,i a j ¸ w1,i a1 + ... + w j ,i a j + ... + wn2 ,i an2 i =1 © j =1 ¹ ∂wk , j ( ) n2 El término ¦w j ,i a j corresponde a la Sumatoria de Salida de la i-ésima neurona de la capa j =1 de salida. Para esta neurona en particular se tiene que la variable wk,j aparece únicamente en uno de sus términos. Tal término es el que corresponde a la salida proporcionada, aj, por la j-ésima neurona de la capa oculta, que es precisamente la neurona que nos interesa por contener al peso wk,j (Véase la Figura 6.2). Por lo tanto, todos los términos de la sumatoria n2 ¦w j ,i a j son constantes respecto a wk,j excepto el j-ésimo. Ahora bien, recordemos que la j =1 sumatoria con índice i es la que se encarga de procesar una a una las neuronas en la capa de salida. En consecuencia, se garantiza que para toda neurona en la capa de salida el j-ésimo término de su sumatoria de salida es debidamente preservado y el resto eliminado por ser constante respecto a wk,j: n3 § n2 · ∂ = −¦ (Ti − Oi )g ' ¨ ¦ w j ,i a j ¸ w j ,i a j i =1 © j =1 ¹ ∂wk , j n3 § n2 · = −¦ (Ti − Oi )g ' ¨ ¦ w j ,i a j ¸ w j ,i ⋅ i =1 © j =1 ¹ § n1 · ∂ g ¨ ¦ wk , j I k ¸ ∂wk , j © k =1 ¹ 188 § § n1 ·· Dado que a = g ¨¨ ¨ ¦ wk , j I k ¸ ¸¸ j © k =1 ¹¹ © Capítulo 6. Redes de Perceptrones n3 § n2 · = −¦ (Ti − Oi )g ' ¨ ¦ w j ,i a j ¸ w j ,i ⋅ i =1 © j =1 ¹ n1 § · ∂ n1 g ' ¨ ¦ wk , j I k ¸ ¦ wk , j I k © k =1 ¹ ∂wk , j k =1 § Aplicación de la regla · ¨ ¸ © de la cadena ¹ n3 § n2 · = −¦ (Ti − Oi )g ' ¨ ¦ w j ,i a j ¸ w j ,i ⋅ i =1 © j =1 ¹ n1 § · ∂ g ' ¨ ¦ wk , j I k ¸ w1, j I1 + ... + wk , j I k + ... + wn1 , j I n1 © k =1 ¹ ∂wk , j ( n3 § n2 · = −¦ (Ti − Oi )g ' ¨ ¦ w j ,i a j ¸ w j ,i ⋅ i =1 © j =1 ¹ ) § Todos los términos de la ¨ ¨ última sumatoria son ¨ constantes respecto a ¨¨ © wk , j excepto el k -ésimo § n1 · ∂ g ' ¨ ¦ wk , j I k ¸ wk , j I k © k =1 ¹ ∂wk , j · ¸ ¸ ¸ ¸¸ ¹ n3 § n2 · § n1 · = −¦ (Ti − Oi )g ' ¨ ¦ w j ,i a j ¸ w j ,i ⋅ g ' ¨ ¦ wk , j I k ¸ I k i =1 © k =1 ¹ © j =1 ¹ n3 § n1 · = −¦ Erri ⋅g ' ( enti ) w j ,i ⋅ g ' ¨ ¦ wk , j I k ¸ I k i =1 © k =1 ¹ § Por la Ecuación 6.3.5, Erri , · ¨ ¸ © y la Ecuación 6.3.1, enti ¹ n3 § n1 · = −¦ Δ i ⋅w j ,i ⋅ g ' ¨ ¦ wk , j I k ¸ I k i =1 © k =1 ¹ (Por la Ecuación 6.3.4) n3 = −¦ Δ i ⋅w j ,i ⋅ g ' ( ent j ) I k (Por la Ecuación 6.3.9) = −Δ j ⋅ I k (Por la Ecuación 6.3.8) i =1 En resumen tenemos: ∂E = −Δ j ⋅ I k ∂wk , j (Ecuación 6.3.15) Esta derivada parcial representa la dirección de máximo crecimiento de la función E respecto a wk,j. 189 Una Introducción al Cómputo Neuronal Artificial Las derivadas parciales de la función E (Ecuación 6.3.10) forman los componentes de su vector gradiente: ª δE º « δw » 1,1 « » « # » « » « δE » « δ wn ,1 » 2 « » # « » « δE » « » « δ w1,n3 » « » « # » « δE » « » « δ wn2 ,n3 » ∇E = « δ E »» « « δ w1,1 » « » « # » « δE » « » « δ wn1 ,1 » « # » « » « δE » « δw » « 1, n2 » « # » « » « δE » « δ wn , n » ¬ 1 2 ¼ ½ ° Derivadas parciales respecto °° ¾ a los pesos de la primer ° neurona en la capa de salida ° °¿ ½ ° Derivadas parciales respecto °° ¾ a los pesos de la n3 -ésima ° neurona en la capa de salida ° °¿ ½ ° Derivadas parciales respecto °° ¾ a los pesos de la primer ° neurona en la capa oculta ° °¿ (Ecuación 6.3.16) ½ ° Derivadas parciales respecto °° ¾ a los pesos de la última ° neurona en la capa oculta ° °¿ Es precisamente su posición en el vector ∇E la que claramente nos indica si un componente está asociado a una neurona en la capa de salida o pertenece a una neurona en la capa oculta. Al sustituir en ∇E con las Ecuaciones 6.3.14 y 6.3.15 se obtiene: 190 Capítulo 6. Redes de Perceptrones ª −a1Δ1 º « # » « » « − an2 Δ1 » « » « # » « −a Δ » « 1 n3 » « # » « » « −an2 Δ n3 » ∇E = « » « − I1Δ1 » « # » « » « − I n1 Δ1 » « # » « » « − I1Δ n2 » « » « # » « −I Δ » ¬ n1 n2 ¼ (Ecuación 6.3.17) El vector gradiente representa la dirección de máximo crecimiento de la función E. Entonces, para actualizar adecuadamente los pesos de todas las neuronas en la capa de salida y la capa oculta se requiere utilizar la dirección opuesta de ∇E tal que el error se minimice, es decir, requerimos a -∇E. Recordemos que las reglas de actualización de pesos wj,i = wj,i + α⋅aj⋅Δi y wk,j = wk,j + α⋅Ik⋅Δj hacen que nos movamos a una posición en el dominio de la función E. Tal dominio se forma por todos posibles valores que pueden tomar los pesos. Dado que en cada actualización nos movemos en dirección contraria a la del gradiente de E, entonces el objetivo es acercarnos cada vez más a aquella región, del lugar geométrico descrito por la función E, en donde los pesos minimizan el error de la red tanto como sea posible. El tamaño de los desplazamientos efectuados va también en función del Coeficiente de Aprendizaje α. Por ello, su elección de es vital importancia. Sabemos que es una constante positiva con valor por lo regular en (0, 1). Sin embargo, éste influye sobre la rapidez con la que nos acerquemos, o alejemos inclusive, de las regiones de E en donde los pesos permiten un buen aprendizaje. Ahora bien, tenemos bien claro que el objetivo del Algoritmo de Retropropagación es el de determinar aquellos pesos con que deben ser equipadas las neuronas que forman una Red de Perceptrones a fin de que un problema dado sea modelado tan bien como sea posible. El cuestionamiento que nos plantearemos ahora tiene que ver con determinar si tales pesos existen o bien si es posible encontrarlos. En el caso de la neurona Adaline (Capítulo 3), la función a optimizar describía, desde el punto de vista geométrico, a un hiperparaboloide. La buena noticia era que para este lugar geométrico podíamos garantizar 191 Una Introducción al Cómputo Neuronal Artificial la existencia de un único mínimo global. Por lo tanto, los pesos que optimizaban a la neurona, de manera que se obtenía el mejor aprendizaje, existen. Realmente el problema, en el caso de la neurona Adaline, era contar con una buena elección de pesos iniciales y un buen coeficiente de aprendizaje. En las Secciones 6.1 y 6.2 analizamos como es que el Teorema de Convergencia del Perceptrón nos garantiza que es posible encontrar un conjunto de pesos, precisamente para el Perceptrón, de manera que un problema linealmente separable es efectivamente modelado por la neurona. Ahora nos preguntamos: ¿existirá algún resultado similar para el caso de una Red de Perceptrones entrenada mediante el Algoritmo de Retropropagación? Consideremos a la más pequeña de todas las Redes de Perceptrones con una capa oculta. Véase la Figura 6.3. Es claro que para esta red tenemos que n1 = n2 = n3 = 1. Por ello mismo, solo debemos considerar el ajuste de dos pesos: el peso de la única neurona en la capa de salida y el peso de la única neurona en la capa oculta. Como siempre, asumimos que la función de la neurona en la capa de entrada es la de simplemente enviar el único escalar de entrada, sin modificarlo, a la neurona de la capa oculta. x1 I1 a1 o1 Figura 6.3. Una Red de Perceptrones de una sola capa oculta con una neurona en cada una de sus capas. Ahora procederemos a desarrollar tanto como sea posible a la Ecuación 6.3.10 considerando nuestra red de la Figura 6.3 (para distinguir al peso de la neurona en la capa de salida del peso de la neurona en la capa oculta usaremos la notación w para la primera y w para la segunda): E= 1 1 (Ti − Oi ) 2 ¦ 2 i =1 § Dado que únicamente se · ¨ ¸ ¨ tiene una neurona en la capa ¸ ¨ de salida ¸ © ¹ 1 = (T1 − O1 ) 2 2 § 1 ·· 1§ = ¨ T1 − g ¨ ¦ w j ,1a j ¸ ¸ ¸ 2 ¨© © j =1 ¹¹ ( 2 ( 192 § Sólo se tiene una neurona · ¨ ¸ © en la capa oculta ¹ ) 2 1 T1 − g ( w1,1a1 ) 2 1 = T1 − g w1,1 ⋅ g ( w1,1 I1 ) 2 = (Por la Ecuación 6.3.2) ( )) 2 ( Dado que a 1 = g ( w1,1 I1 ) ) Capítulo 6. Redes de Perceptrones ( ( 1 = T1 − g w1,1 ⋅ g ( w1,1 x1 ) 2 )) § I1 = x1 dado que la neurona en · ¨ ¸ ¨ la capa de entrada no efectúa ¸ ¨ ningun procesamiento ¸ © ¹ 2 ( ) ( ) 2 1 = ¨§ T12 − 2 ⋅ T1 ⋅ g w1,1 ⋅ g ( w1,1 x1 ) + ª g w1,1 ⋅ g ( w1,1 x1 ) º ·¸ ¬ ¼ ¹ 2© Resumiendo, tenemos para la red de la Figura 6.3: ( ) ( ) 2 1 E = ¨§ T12 − 2 ⋅ T1 ⋅ g w1,1 g ( w1,1 x1 ) + ª g w1,1 g ( w1,1 x1 ) º ·¸ ¬ ¼ ¹ 2© (Ecuación 6.3.18) En este punto tenemos que el lugar geométrico descrito por la Ecuación 6.3.18 está en relación directa con la Función de Activación g que se utilice. Por ejemplo, sea g = Tanh, entonces la Ecuación 6.3.18 toma la forma: ( ) ( ) 2 1 E = §¨ T12 − 2 ⋅ T1 ⋅ g w1,1 g ( w1,1 x1 ) + ª g w1,1 g ( w1,1 x1 ) º ·¸ ¬ ¼ ¹ 2© ( § T 2 − 2 ⋅ T1 ⋅ Tanh w1,1 ⋅ Tanh ( w1,1 x1 ) 1¨ 1 = 2 2 ¨¨ + ªTanh w ⋅ Tanh ( w x ) º 1,1 1,1 1 ¼ © ¬ ( ) −2( w1,1x1 ) · § 1− e § ¸ · −2¨ w1,1 ⋅ −2 ( w1,1x1 ) ¸ ¨ + 1 e ¨ © ¹ ¸ 1− e ¨ T12 − 2 ⋅ T1 ⋅ ¸ −2 ( w1,1x1 ) · § 1− e ¸ ¸ ¨ −2¨ w1,1 ⋅ 2 ( − w x ) 1,1 1 ¸ ¨ ¹ ¸ 1 + e © 1+ e 1¨ ¸ = ¨ 2 −2 ( w1,1x1 ) · § 1− e 2¨ ª ¸ ¸ º −2¨ w1,1 ⋅ −2( w1,1x1 ) ¸ ¨ ¹ » ¨ «1 − e © 1+ e ¸ » ¨+« ¸ 2( ) w x − 1,1 1 · § 1− e ¸ » −2¨ w1,1 ⋅ ¨ « ¸ −2 ( w1,1x1 ) ¸ ¨ ¹ » ¨ «1 + e © 1+ e ¸ ¼ © ¬ ¹ ) ·¸ ¸ ¸ ¹ (Por la Ecuación 4.1.9) (Ecuación 6.3.19) Recordemos que para evaluar a la función E requerimos de un vector de entrada y su correspondiente vector de salida esperada en el conjunto de entrenamiento. Por la estructura 193 Una Introducción al Cómputo Neuronal Artificial de la red sabemos que el vector de entrada tiene sólo un componente, así también el vector de salida esperada. Supongamos que para el vector de entrada x1 = 0.2 se espera que la red proporcione la salida T1 = 0.5. Sustituyendo tales valores en la Ecuación 6.3.19 tenemos: 2 −2( w1,1⋅0.2 ) · −2( w1,1⋅0.2 ) · § § § · 1− e 1− e ª ¸ ¨ w1,1 ⋅ ¸ º −2¨ w1,1 ⋅ − 2 −2( w1,1⋅0.2 ) ¸ −2( w1,1⋅0.2 ) ¸ ¨ ¨ ¨ ¸ ¹ ¹ » «1 − e © 1+ e 1¨ 1 − e © 1+ e 2 » ¸ E = (0.5) − 2 ⋅ (0.5) ⋅ +« −2 ( w1,1⋅0.2) · −2 ( w1,1⋅0.2) · § § 1− e 1− e 2¨ ¸ ¸ » ¸ −2¨ w1,1 ⋅ −2¨ w1,1 ⋅ « −2 ( w1,1⋅0.2) ¸ −2 ( w1,1⋅0.2) ¸ ¨ ¨ 1+ e 1+ e ¨ © ¹ © ¹ «¬1 + e »¼ ¸ 1+ e © ¹ (Ecuación 6.3.20) La Figura 6.4 muestra la correspondiente gráfica de la función E para el caso de la red de la Figura 6.3 y con el vector de entrada x1 = 0.2 y con salida esperada T1 = 0.5. Visualmente, debe ser evidente que no se aprecia un punto sobre la superficie que tenga la propiedad de ser un único mínimo global. Mencionábamos previamente que la presencia de un único mínimo global era una propiedad sumamente valiosa de las funciones de error asociadas, por ejemplo, a la neurona Adaline. Figura 6.4. Gráfica de la función de Error asociada a la red de Perceptrones de la Figura 6.3 (véase el texto para detalles). 194 Capítulo 6. Redes de Perceptrones Reconsideremos la Ecuación 6.3.18. Sustituyamos en ella a la Función Identidad. Por lo tanto obtendremos: ( ) ( )º¼ ( ) ( )º¼ 1 E = ¨§ T12 − 2 ⋅ T1 ⋅ g w1,1 g ( w1,1 x1 ) + ª g w1,1 g ( w1,1 x1 ) ¬ 2© 1 = §¨ T12 − 2 ⋅ T1 ⋅ι w1,1 ⋅ι ( w1,1 x1 ) + ªι w1,1 ⋅ι ( w1,1 x1 ) ¬ 2© 2 1 = T12 − 2T1w1,1w1,1 x1 + ª¬ w1,1w1,1 x1 º¼ 2 1 2 2 2 w1,1 x1 ) = (T12 − 2T1w1,1w1,1 x1 + w1.1 2 ( ) 2 2 · ¸ ¹ · ¸ ¹ (Ecuación 6.3.21) Utilizando nuevamente el vector de entrada x1 = 0.2 y la salida esperada T1 = 0.5 tenemos: 1 2 2 0.25 − 0.2w1,1w1,1 + 0.04w1.1 w1,1 ( ) 2 2 2 = 0.125 − 0.1w1,1w1,1 + 0.02 w1.1 w1,1 E= (Ecuación 6.3.22) La gráfica de la Ecuación 6.3.22 se presenta en la Figura 6.5. Es claro que, al menos en términos visuales, no se aprecia un punto sobre la función E que corresponda a un mínimo global. Sin embargo, la ventaja de utilizar a la Función Identidad como Función de Activación es que podemos manipular de manera más sencilla a la función de error y por tanto analizar si este punto existe o no y si es el caso, determinar si es único. 2 2 Figura 6.5. Gráfica de la Ecuación E = 0.125 − 0.1w1,1w1,1 + 0.02w1.1 . w1,1 195 Una Introducción al Cómputo Neuronal Artificial Procedamos a calcular las dos derivadas parciales de la función E (Ecuación 6.3.22): δE δ 2 2 = 0.125 − 0.1w1,1w1,1 + 0.02 w1,1 w1,1 ( ) δ w1,1 δ w1,1 = δ δ w1,1 = − 0.1 ( −0.1w 1,1 δ δ w1,1 2 2 w1,1 + 0.02w1,1 w1,1 ) w1,1w1,1 + 0.02 δ δ w1,1 2 2 w1,1 w1,1 2 = − 0.1w1,1 + 0.04 w1,1w1,1 (Ecuación 6.3.23) δE δ = ( 0.125 − 0.1w1,1w1,1 + 0.02w1,12 w1,12 ) δ w1,1 δ w1,1 = δ δ w1,1 = − 0.1 ( −0.1w 1,1 δ δ w1,1 2 2 w1,1 + 0.02w1,1 w1,1 ) w1,1w1,1 + 0.02 δ δ w1,1 2 2 w1,1 w1,1 2 = − 0.1w1,1 + 0.04 w1,1 w1,1 (Ecuación 6.3.24) Las Ecuaciones 6.3.23 y 6.3.24 forman precisamente los componentes del vector gradiente de la función de error E. Nuestro objetivo, y también el del algoritmo de Retropropagación, es determinar aquellos valores de los pesos que hacen que el vector gradiente sea el vector cero (o tan cerca como sea posible a éste). Por lo tanto, al igualar las derivadas parciales, previamente obtenidas, a cero tenemos el siguiente sistema de ecuaciones no lineales: 2 ­°−0.1w1,1 + 0.04 w1,1w1,1 =0 ® 2 °̄−0.1w1,1 + 0.04 w1,1w1,1 = 0 Una solución obvia e inmediata es w1,1 = w1,1 = 0 . Al sustituir tales valores en la Ecuación 6.3.22 tenemos: E (0, 0) = 0.125 − 0.1(0)(0) + 0.02(0) 2 (0) 2 = 0.125 196 Capítulo 6. Redes de Perceptrones Veamos que de hecho la solución w1,1 = w1,1 = 0 no es la única. Nótese en el sistema que el peso w1,1 puede ser expresado en términos del peso w1,1 usando la primer ecuación: 2 −0.1w1,1 + 0.04 w1,1w1,1 =0 2 ⇔ 0.04 w1,1w1,1 = 0.1w1,1 ⇔ w1,1 = 2.5 , w1,1 ≠ 0 w1,1 (Ecuación 6.3.25) De hecho, si despejamos a w1,1 de la Ecuación 6.3.25 obtenemos la misma expresión que si hubiésemos manipulado desde un principio la segunda ecuación de nuestro sistema: 2 −0.1w1,1 + 0.04w1,1 w1,1 = 0 2 ⇔ 0.04 w1,1 w1,1 = 0.1w1,1 ⇔ w1,1 = 2.5 , w1.1 ≠ 0 w1,1 (Ecuación 6.3.26) En cualquier caso, hemos verificado que el conjunto de puntos, en los cuales la función E tiene a su vector gradiente igual a cero, es infinito. Usemos la Ecuación 6.3.26 para generar algunos pesos. Por ejemplo, sea w1,1 = 1, entonces w1,1 = 2.5. Al evaluar el punto (1, 2.5) en la Ecuación 6.3.22, la función de error, se obtiene: E (1, 2.5) = 0.125 − 0.1(1)(2.5) + 0.02(1) 2 (2.5) 2 = 0.125 − 0.25 + 0.125 = 0 Si w1,1 = -1 entonces w1,1 = -2.5 y la función E nos proporciona: E (−1, −2.5) = 0.125 − 0.1(−1)(−2.5) + 0.02(−1) 2 (−2.5) 2 = 0.125 − 0.25 + 0.125 = 0 Se nos ha presentado una situación interesante para meditar. Previamente, con el punto (0, 0) la función E nos proporcionó el valor 0.125. Sin embargo, acabamos de encontrar dos puntos para los cuales la función E proporciona el valor cero. Los tres puntos tienen la propiedad de que los correspondientes vectores gradientes son cero. Por la comparación anterior podríamos hipotetizar entonces que el punto (0, 0) es en realidad un mínimo local. Sin embargo, para caracterizarlo como tal, y de manera contundente, es que tendríamos que recurrir al bien conocido análisis de puntos críticos. Del estudio, sabemos que el punto además de poder ser caracterizado como mínimo local también podría ser un máximo o inclusive un punto de ensilladura. Las tres caracterizaciones tienen en común que el vector gradiente es el vector cero. 197 Una Introducción al Cómputo Neuronal Artificial Ahora bien, por la manera en la que el método de Descenso Escalonado procede, y en consecuencia también el algoritmo de Retropropagación, tenemos que si el punto (0, 0) fuese caracterizado como mínimo local entonces es posible que el algoritmo dirija la búsqueda hacia éste y que de hecho allí finalice. Ello se debe a que, bajo la suposición de que (0, 0) fuese un mínimo local, es claro que dentro de cierta vecindad de este punto los vectores gradientes apuntaran en dirección opuesta a éste, buscando maximizar a la función E. Pero dado que utilizamos, para movernos sobre la función, a la dirección opuesta del gradiente, es que entonces nos acercaremos más a (0, 0) el cual suponemos es un mínimo. Claramente estamos minimizando a la función E, pero no de manera óptima. Esta afirmación se sustenta en el hecho de que hemos demostrado que existen al menos otros dos puntos, (1, 2.5) y (-1, -2.5), para los cuales la función puede ser minimizada aún más. La Figura 6.6 muestra la grafica de la Ecuación 6.3.26 sobrepuesta en la superficie definida por la Ecuación 6.3.22 (hemos resaltado también al punto (0, 0) para el cual sabemos que E(0,0) = 0.25). Este es el conjunto de puntos, o más bien pesos, para los cuales la función de error E retornará el valor cero. Ello se verifica algebraicamente al § 2.5 · , w1,1 ¸ en la Ecuación 6.3.22: sustituir con el punto ¨ ¨w ¸ © 1,1 ¹ 2 § 2.5 · § 2.5 · 2 2.5 , w1,1 ¸ = 0.125 − 0.1 E¨ w1,1 + 0.02 ¨ w ¨w ¸ ¨ w ¸¸ 1,1 w 1,1 1,1 1,1 © ¹ © ¹ = 0.125 − 0.25 + 0.125 =0 Ello implica que entonces el algoritmo de Retropropagación debería dirigir su búsqueda a alguno de estos pesos, y no hacia el punto (0, 0), ya que es en éstos donde precisamente se tendrá el mejor aprendizaje posible. Hemos señalado entonces un posible problema que se podría presentar durante el ajuste de pesos mediante el algoritmo de Retropropagación: que éste se quede “estancado” o “atrapado” en un mínimo local. Debe apreciarse con claridad que la función de error, y en consecuencia su geometría y topología, dependen en gran medida de la red de Perceptrones asociada. El número de neuronas en las capas oculta y de salida determina el número de pesos a ajustar. Ello quiere decir que podemos contar con una amplísima variedad de funciones de error, en muchas de las cuales es sumamente probable que exista más de un mínimo local. Es también posible que las funciones cuenten con más de un mínimo global, como es el caso de la Ecuación 6.3.22. Sin embargo, el problema radica en que la presencia de mínimos locales aumenta la probabilidad de que los pesos se ajusten en términos de éstos y no en términos de un mínimo global. También se debe tomar en cuenta que los valores iniciales de los pesos, en el algoritmo de Retropropagación, establecen el punto de partida de la búsqueda a efectuar sobre la función de error. Valores iniciales de pesos que sean cercanos a un mínimo local también aumentan las expectativas de que éste sea alcanzado. Pero también debe ser claro que valores iniciales de pesos que estén alejados de 198 Capítulo 6. Redes de Perceptrones un mínimo local no garantizan que éste no sea alcanzado ya que entonces entra en consideración la elección del Coeficiente de Aprendizaje. Recordemos que el coeficiente define el tamaño de las traslaciones, o “saltos”, que efectuaremos sobre la función de error y en consecuencia puede que nos lleve al mínimo local, o lo suficientemente cerca de éste, para que la búsqueda sea atraída hacia él. Figura 6.6. El conjunto de puntos, resaltados en negro, para los cuales el vector gradiente 2 2 de la función E = 0.125 − 0.1w1,1w1,1 + 0.02w1.1 es el vector cero. w1,1 Sabemos que el lugar geométrico descrito por la Función de Error va en relación directa con la dimensionalidad de los vectores de entrada y de los vectores de salida esperada en el conjunto de entrenamiento, el número de neuronas en la capa oculta, la Función de Activación elegida, y por último, los valores específicos de los componentes de los vectores que forman al conjunto de entrenamiento. Entonces, es lógico suponer que podemos encontrar un muy variado conjunto de posibles lugares geométricos asociados a las Funciones de Error cada uno con sus propiedades particulares respecto a sus puntos críticos: mínimos, máximos, puntos de ensilladura. Sin embargo, es también posible que algunos de tales lugares geométricos no cuenten con puntos críticos, y de nuestro interés particular, se tenga ausencia de mínimos. Por ejemplo, recordemos que la Función de Error asociada a nuestra red con una única neurona en cada capa (Figura 6.3) y usando la Función Identidad como Función de Activación está dada por la Ecuación 6.3.21: E= 1 2 2 2 2 T1 − 2T1w1,1w1,1 x1 + w1,1 w1,1 x1 ) ( 2 199 Una Introducción al Cómputo Neuronal Artificial Ahora bien, si consideramos al vector de entrada x1 = 0 y a la salida esperada T1 = 1 entonces la Ecuación 6.3.21 toma la siguiente forma: E= 1 2 La cual es evidentemente un plano. De manera inmediata se puede apreciar que su vector gradiente en cualquier punto es precisamente el vector cero. Sin embargo, ninguno de sus puntos es un punto crítico en el sentido de que no puede ser caracterizado como un mínimo, máximo o punto de ensilladura. Aunque también debe ser claro que cualquier punto sobre el plano sirve para minimizar de manera óptima a la Función de Error para los elementos en consideración del conjunto de entrenamiento. En este sentido la búsqueda por Descenso Escalonado, no importa hacia donde se mueva, siempre encontrará un punto que permite minimizar a la Función de Error. Ahora consideremos la situación en la cual el lugar geométrico descrito por la Función de Error es similar al presentado en la Figura 6.7. Supongamos que el punto marcado es el único punto crítico, un máximo, con el que se cuenta. Ahora bien, precisamente por esta última propiedad es que no importa en donde se ubiquen los pesos iniciales ( w1,1 , w1,1 ) porque el Descenso Escalonado procederá efectuando la búsqueda siempre en dirección contraria al máximo global dado que nuestro objetivo es minimizar a la función. Por cada par de nuevos pesos encontrados se determinará que el valor de E se reduce. El problema es que esta búsqueda no garantiza una convergencia de los pesos. Ello se debe precisamente a que por cada nuevo par de pesos se encontrará que es posible minimizar aún más a la Función de Error. Si se estableciera que el algoritmo de Retropropagación itere sucesivamente y además que se detenga una vez que un vector gradiente de valor cero haya sido encontrado, entonces tendremos que teóricamente el algoritmo tendrá una ejecución que requerirá un número infinito de pasos. Recordemos que la función de la Figura 6.7 si cuenta con un punto en donde el gradiente es el vector cero, pero se trata de un máximo y por nuestra manera de proceder siempre nos alejaremos de éste. Los puntos anteriores dan lugar a una segunda observación respecto al ajuste de pesos mediante el algoritmo de Retropropagación. Es posible que regiones en las funciones de error no cuenten con puntos críticos, y en particular que no tengan valores mínimos. Hemos visto que existen casos de Funciones de Error en donde las búsquedas de pesos conducirán a una situación en la cual precisamente los pesos no convergerán y el Algoritmo de Retropropagación efectuará una búsqueda que en teoría podría no terminar. En esta Sección hemos establecido, por un lado, los fundamentos detrás del Algoritmo de Retropropagación para el ajuste de pesos en una red de Perceptrones. Pero por otro lado, también hemos señalado los posibles problemas que se pueden presentar y que en conjunto permiten establecer que la convergencia de los pesos de las neuronas, y en específico, la convergencia hacia un mínimo global que permita obtener el mejor ajuste posible, no está garantizada. En un caso es posible que los pesos obtenidos correspondan a un mínimo local. En otro caso es probable que la función de error a optimizar, debido a sus propiedades geométricas y topológicas, hagan que los pesos se ajusten continuamente de 200 Capítulo 6. Redes de Perceptrones manera que no se tenga la convergencia. Estos dos escenarios deben ser tomados siempre en cuenta al momento de entrenar a una red neuronal. Es por ello mismo que por lo regular el ajuste de pesos se efectúa asignando pesos iniciales aleatorios y con un número fijo de presentaciones del conjunto de entrenamiento. Una vez que tal número de presentaciones ha sido alcanzado se evalúa a todo el conjunto de entrenamiento y se calcula el error total de aprendizaje de la red. A este proceso se le llama Corrida. La idea es que una vez que una corrida ha sido finalizada, se efectúe una nueva inicialización aleatoria de pesos y se ejecuten las presentaciones establecidas del conjunto de entrenamiento con el correspondiente cálculo del error total del aprendizaje de la red. Es decir, efectuar una nueva corrida. Se procede de manera que se efectúan varias corridas y de todas éstas se elige aquella que reporte el menor error total de aprendizaje. El fundamento detrás de este proceder se sustenta en que por cada corrida se explora una región diferente de la Función Error. El objetivo es que mediante estas exploraciones se pueda determinar, de manera empírica, cuales corridas corresponden a ajustes basados en mínimos locales o qué corridas corresponden a potenciales ajustes que no convergerán. Se espera que aquella corrida con el menor error de aprendizaje sea la que más cerca está de un mínimo global. Figura 6.7. Una Función de Error E con un único punto crítico: un máximo (punto remarcado). 6.4 Retropropagación en una Red con Múltiples Capas Ocultas Ahora consideraremos el caso del ajuste de pesos, mediante el Algoritmo de Retropropagación, para una red de Perceptrones formada por dos o más capas ocultas. Como veremos más adelante el principio para el ajuste de pesos sigue la misma idea para el caso con una única capa oculta, ya que se ajustan en primer lugar los pesos de las neuronas en la capa de salida. Posteriormente se ajustan los pesos de las neuronas en la última capa oculta. Dado que estas neuronas son responsables por el error producido en la capa de 201 Una Introducción al Cómputo Neuronal Artificial salida es que parte del ajuste aplicado en la capa de salida también les es aplicado. Después se efectúa el ajuste de pesos en las neuronas en la penúltima capa oculta. Es claro que las salidas de estas neuronas influyen sobre el error producido por las salidas de las neuronas en la última capa oculta. Por lo tanto, parte del ajuste aplicado en la última capa oculta, y en consecuencia también parte de la corrección efectuada en la capa de salida, es también aplicado sobre las neuronas en la penúltima capa oculta. Se procede de esta forma hasta considerar por último el ajuste de pesos en la primera capa oculta. Se deben tomar también en cuenta las correcciones efectuadas a los pesos en las restantes capas ocultas ya que éstas son aplicadas a estas neuronas. En concreto, tenemos que los errores producidos por la red, y los ajustes de pesos aplicados, son distribuidos entre todas las neuronas en las capas ocultas y de salida. El objetivo como siempre es minimizar el error tanto como sea posible. x1 I1 x2 I2 a 1,1 Ik xp Ip a m,1 O1 O2 a1,k1 xk a O,1 a O,k O a m,k m Oi a 1,n1 a O,n O a m,n m Oq Figura 6.8. Una de red de Perceptrones formada por m capas ocultas, m ≥ 2 (Véase el texto para detalles). A fin de establecer las reglas de actualización de pesos a utilizar para las neuronas en cada capa hemos de introducir notación apropiada. En primer lugar consideremos los términos básicos. Véase la Figura 6.8. Sean: • p: número de neuronas en la capa de entrada. • m: número de capas ocultas. • nO: número de neuronas en la O-ésima capa oculta, 1 ≤ O ≤ m. • q: número de neuronas en la capa de salida. • Ik: salida de la k-ésima neurona en la capa de entrada, 1 ≤ k ≤ p. • aA ,kA : salida de la kO -ésima neurona en la O-ésima capa oculta, 1 ≤ O ≤ m, 1 ≤ kO ≤ nO. • Oi: salida de la i-ésima neurona en la capa de salida, 1 ≤ i ≤ q. De acuerdo a la Figura 6.8, tenemos que el papel de las neuronas en la capa de entrada sigue siendo el mismo que el que les dimos en las dos Secciones anteriores: simplemente 202 Capítulo 6. Redes de Perceptrones cada una recibe un componente del vector de entrada y se encarga de propagarlo a todas las neuronas en la primer capa oculta. Por ello mismo tenemos que estas neuronas pueden tener a su único peso igualado a uno y como Función de Activación a la Función Identidad. Bajo esta última suposición, la cual consideraremos también en esta Sección, el proceso de actualización de pesos no considera a las neuronas en la capa de entrada. Por la notación establecida tenemos que nuestra red recibirá un vector de entrada en \ p . Las neuronas en la capa de entrada propagan sus componentes a todas las neuronas en la primera capa oculta. En este punto se produce como salida un vector en \ n1 . Todos sus componentes son propagados hacia todas las neuronas en la segunda capa oculta. Esta capa produce entonces un vector de salida en \ n2 . Se prosigue de esta manera al propagar todos los componentes del vector de salida en \ nA , producido por la O-ésima capa oculta, hacia todas las neuronas de la (O +1)-ésima capa oculta. La última capa oculta producirá un vector en \ nm cuyos componentes son enviados a todas las neuronas en la capa de salida. Finalmente esta capa produce la salida de la red: un vector en \ q . Tenemos entonces la secuencia de mapeos: Capa de entrada Primer capa oculta \ p 6 \ p 6\ n1 Segunda capa oculta Tercer capa oculta ( A +1)ésima capa oculta A -ésima capa oculta Última capa oculta Capa de salida 6 \ 6 " 6 \ 6 " 6\ 6\ n2 nA nm q Como ya tenemos conocimiento, las salidas producidas por las capas ocultas, aunque son accesibles, no se les puede dar una interpretación. Por ello, también se dice que simplemente la red neuronal efectúa un mapeo de un vector en \ p hacia un vector en \ q . Ahora redefinamos algunas notaciones previamente establecidas a fin de que éstas reflejen el hecho de que se está bajo el contexto de una red neuronal formada por más de una capa oculta. Sean: • wkm ,i : km -ésimo peso de la i-ésima neurona en la capa de salida, 1 ≤ i ≤ q, 1 ≤ km ≤ nm. • Sea wkA−1 , kA ,A el kO-1-ésimo peso de la kO-ésima neurona en la O-ésima capa oculta, 1 ≤ kO-1 ≤ nO-1, 1 ≤ kO ≤ nO, 1 < O ≤ m. En el caso de los pesos en las capas ocultas, tenemos que el uso de la notación en el primer índice ( kA −1 ) obedece a que toda neurona en la O-ésima capa oculta recibe en sus entradas las salidas de las neuronas en la capa oculta que le precede, la capa O-1. El número de tales entradas está dado por el número de neuronas en la capa O-1: nO-1. Nótese la restricción establecida para el tercer índice, O, ya que éste debe ser estrictamente mayor a 1. Ello se debe a que la notación es válida para cualquier capa oculta excepto la primera. Esto es porque estas neuronas reciben sus entradas provenientes no de una capa oculta sino de la capa de entrada. Por lo tanto, para estas neuronas en particular tendremos: • wk , k1 ,1 : el k-ésimo peso de la k1-ésima neurona en la primera capa oculta, 1 ≤ k ≤ p, 1 ≤ k1 ≤ n1. 203 Una Introducción al Cómputo Neuronal Artificial La Sumatoria de Salida de la i-ésima neurona en la capa de salida está dada por: enti = nm ¦w km =1 km ,i ⋅ am , k m (Ecuación 6.4.1) Por lo tanto, la salida de la i-ésima neurona en la capa de salida, Oi, ahora se define de manera precisa como: § nm · Oi = g (enti ) = g ¨ ¦ wkm ,i ⋅ am ,km ¸ © km =1 ¹ (Ecuación 6.4.2) Donde g es la Función de Activación continua y diferenciable en (-∞, ∞). Por otro lado, la Sumatoria de Salida de la kA -ésima neurona en la O-ésima capa oculta 1 ≤ kA ≤ nA , 1 < A ≤ m , estará dada por: entkA ,A = nA −1 ¦w kA−1 =1 kA−1 , kA ,A ⋅ aA −1, kA .−1 (Ecuación 6.4.3) En consecuencia, la salida de la kA -ésima neurona en la O-ésima capa oculta, aA ,kA , donde 1 ≤ kA ≤ nA y 1 < A ≤ m , estará dada por: § nA−1 · aA , kA = g (entkA ,A ) = g ¨ ¦ wkA−1 ,kA ,A ⋅ aA −1,kA−1 ¸ © kA−1 =1 ¹ (Ecuación 6.4.4) Nótese que la Ecuación 6.4.3 es válida para cualquier neurona en cualquier capa oculta excepto la primera (y por instancia también la Ecuación 6.4.4) De allí la condición de que 1 < A ≤ m . Ello se debe, tal como comentamos previamente, a que estas neuronas en particular reciben entradas provenientes de la capa de entrada. Para estas neuronas manejamos su caso especial. La Sumatoria de Salida de la k1-ésima neurona en la primera capa oculta está dada por: p entk1 ,1 = ¦ wk ,k1 ,1 ⋅ I k (Ecuación 6.4.5) k =1 Donde Ik es la salida de la k-ésima neurona en la capa de entrada. Finalmente tenemos que la salida de la k1-ésima neurona en la primer capa oculta, a1,k1 , 1 ≤ k1 ≤ n1 , se define como: § p · a1,k1 = g (entk1 ,1 ) = g ¨ ¦ wk ,k1 ,1 ⋅ I k ¸ © k =1 ¹ 204 (Ecuación 6.4.6) Capítulo 6. Redes de Perceptrones Consideremos ahora a la siguiente Función de Error (la cual es prácticamente la presentada en la Ecuación 6.3.10, excepto por la modificación en el índice superior de la sumatoria, para hacerla consistente con la notación introducida en párrafos anteriores): q E = ¦ (Ti − Oi ) 2 (Ecuación 6.4.7) i =1 Ti es el i-ésimo componente del vector de salida esperada T y Oi es la salida de la i-ésima neurona en la capa de salida cuando el vector de entrada asociado a T es presentado a la red. Recordemos que esta función sólo nos proporciona el error respecto a un elemento del conjunto de entrenamiento. La idea sigue siendo el efectuar la corrección de pesos al considerar únicamente a un elemento del conjunto de entrenamiento a la vez. Esto con la finalidad de simplificar los cálculos. Como ya comentamos antes, la actualización de pesos inicia con la corrección a las neuronas en la capa de salida. Posteriormente se efectúa la corrección de pesos en las neuronas en la última capa oculta y así sucesivamente hasta efectuar la corrección de pesos en las neuronas de la primera capa oculta. En consecuencia, cada componente del vector gradiente de la función de error está asociado a cada peso de cada neurona en cada capa considerada. Además, la actualización de los pesos en las neuronas de una capa oculta requiere que también se le aplique parte de la corrección efectuada en las neuronas de las capas que le siguen. En base a todo esto vamos a definir las reglas de actualización de pesos en el siguiente orden: • Etapa 1: Actualización de los pesos de las neuronas en la capa de salida. • Etapa 2: Actualización de los pesos de las neuronas en la última capa oculta. • Etapa 3: Actualización de los pesos de las neuronas en la O-ésima capa oculta, 1 < O < m. • Etapa 4: Actualización de los pesos de las neuronas en la primer capa oculta. x1 I1 x2 I2 a1,1 Ik xp Ip am,1 O1 O2 a1,k1 xk a O,1 aO,k O am,k m Oi a1,n1 aO,n O am,n m Oq Figura 6.9. En color gris se muestran las neuronas involucradas en la actualización del peso wk ,i . m Tal peso se encuentra únicamente en la i-ésima neurona de la capa de salida. 205 Una Introducción al Cómputo Neuronal Artificial Determinemos entonces el valor de la derivada parcial de E, Ecuación 6.4.7, respecto a wkm ,i , el km-ésimo peso de la i-ésima neurona en la capa de salida (Véase la Figura 6.9): δE δ wk = m ,i δ δ wk m ,i 1 q 2 (Ti − Oi ) ¦ 2 i =1 1 δ = 2 δ wkm ,i q ¦ (T − O ) i (Por la Ecuación 6.4.7) 2 i i =1 En este punto nótese que el peso wkm ,i está contenido únicamente en la i-ésima neurona de la capa de salida. Por lo tanto, todos los términos de la sumatoria, excepto el i-ésimo, son constantes respecto a wkm ,i : = 1 δ 2 (Ti − Oi ) 2 δ wkm ,i = (Ti − Oi ) δ δ wk = − (Ti − Oi ) (Ti − Oi ) (Regla de la Cadena) m ,i δ δ wk Oi (Ti es constante respecto a wkm ,i ) m ,i § nm · g ¨ ¦ wkm ,i ⋅ am, km ¸ δ wkm ,i © km =1 ¹ nm § · = − (Ti − Oi ) g ' ¨ ¦ wkm ,i ⋅ am ,km ¸ ⋅ © km =1 ¹ = − (Ti − Oi ) δ δ δ wk nm ¦w k =1 m ,i m k m ,i (Por la Ecuación 6.4.2) (Regla de la Cadena) ⋅ am,km La i-ésima neurona en la capa de salida cuenta con nm pesos, uno de los cuales es precisamente wkm ,i . Por lo tanto, todos los pesos, excepto el km-ésimo, son constantes respecto a wkm ,i : § nm · δ = − (Ti − Oi ) g ' ¨ ¦ wkm ,i ⋅ am, km ¸ wkm ,i ⋅ am, km δ w = 1 k , k i m © ¹ m 206 Capítulo 6. Redes de Perceptrones § nm · = − (Ti − Oi ) g ' ¨ ¦ wkm ,i ⋅ am ,km ¸ am ,km © km =1 ¹ = − (Ti − Oi ) g ' ( enti ) am,km (Por la Ecuación 6.4.1) En concreto tenemos: δE δ wk = − (Ti − Oi ) g ' ( enti ) am,km (Ecuación 6.4.8) m ,i Sea Erri la diferencia existente entre la salida proporcionada por la i-ésima neurona en la capa de salida y el i-ésimo componente, Ti, del vector de salida esperada: § nm · Erri = Ti − Oi = Ti − g ¨ ¦ wkm ,i ⋅ am,km ¸ © km =1 ¹ (Ecuación 6.4.9) Es claro que esta definición para Erri inicialmente coincide con la definición dada originalmente en la Ecuación 6.3.5. La diferencia ahora es que estamos considerándola bajo el contexto de una red de Perceptrones con al menos dos capas ocultas. El contraste con la Ecuación 6.3.5 se hace claro al sustituir Oi por la Ecuación 6.4.2. Algo similar sucede al definir inicialmente al Término de Variación o Cambio, Δ i , asociado a la i-ésima neurona en la capa de salida, ya que éste lo establecemos como el producto entre Erri y g’(enti). En este caso, la expresión resultante es igual a la presentada en la Ecuación 6.3.4, la cual esta asociada al caso de una red con una única capa oculta. Sin embargo las diferencias surgen al sustituir Erri y enti con las Ecuaciones 6.4.9 y 6.4.1, respectivamente: § § nm · · § nm · Δ i = Erri ⋅ g '(enti ) = ¨ Ti − g ¨ ¦ wkm ,i ⋅ am ,km ¸ ¸ ⋅ g ' ¨ ¦ wkm ,i ⋅ am,km ¸ ¨ ¸ © km =1 ¹ ¹ © km =1 ¹ © (Ecuación 6.4.10) Finalmente, tenemos los elementos para expresar de manera concisa a la derivada parcial de la función de error E respecto a wkm ,i . Por la Ecuación 6.4.8 sabemos que: δE δ wk = − (Ti − Oi ) g ' ( enti ) am,km m ,i Ahora, la sustituir con la Ecuación 6.4.10 tenemos finalmente: δE δ wk = −Δ i ⋅ am ,km (Ecuación 6.4.11) m ,i 207 Una Introducción al Cómputo Neuronal Artificial x1 I1 x2 I2 a1,1 a O,1 Ik xp Ip am,1 O1 O2 a1,k1 xk am-1,1 aO,k O am-1,k m m-1 am,k m Oi a1,n1 aO,n O a m-1,n m-1 am,n m Oq Figura 6.10. En color gris se muestran las neuronas involucradas en la actualización del peso wk ,k ,m el cual m−1 m reside en la km-ésima neurona de la última capa oculta. Las actualizaciones aplicadas sobre las neuronas en la capa de salida influyen también en la actualización del peso wk ,k ,m . m−1 m El siguiente paso en que nos concentraremos es el determinar la derivada parcial de la función de error E respecto a wkm−1 ,km , m . Es decir, respecto al km-1-ésimo peso de la km-ésima neurona en la última capa oculta. Véase la Figura 6.10. Suponemos que el número de capas ocultas en la red es al menos 2, es decir, asumimos m ≥ 2. δE δ wk = m−1 , k m , m = δ δ wk m−1 , km , m 1 q 2 (Ti − Oi ) ¦ 2 i =1 1 δ 2 δ wkm−1 , km , m q ¦ (T − O ) i (Por la Ecuación 6.4.7) 2 i i =1 Recordemos que el peso wkm−1 ,km ,m está ubicado en la km-ésima neurona en la última capa oculta. La salida de esta neurona es propagada hacia todas las neuronas en la capa de salida. Por lo tanto, el peso wkm−1 ,km ,m forma parte de la salida de todas las neuronas en esa capa. Ello implica que entonces todos los términos de la sumatoria deben ser considerados: 1 q δ 2 = ¦ (Ti − Oi ) 2 i =1 δ wkm−1 ,km , m δ q = ¦ (Ti − Oi ) i =1 δ wk δ q = − ¦ (Ti − Oi ) i =1 208 (Ti − Oi ) (Regla de la Cadena) m−1 , km , m δ wk m −1 , k m , m Oi § El término Ti es constante · ¨ ¸ © respecto a wkm−1 , km , m . ¹ Capítulo 6. Redes de Perceptrones § nm · g ¨ ¦ wkm ,i ⋅ am, km ¸ δ wkm−1 ,km ,m © km =1 i =1 ¹ nm q § · = − ¦ (Ti − Oi )g ' ¨ ¦ wkm ,i ⋅ am, km ¸ ⋅ i =1 © km =1 ¹ δ q = − ¦ (Ti − Oi ) δ δ wk nm La sumatoria ¦w k m ,i km =1 nm ¦w k =1 m−1 , k m , m m km ,i (Por la Ecuación 6.4.2) (Regla de la Cadena) ⋅ am ,km ⋅ am ,km es precisamente la Sumatoria de Salida de cada una de las neuronas en la capa de salida (Ecuación 6.4.1). De sus nm términos realmente sólo nos ocupa aquel que se relaciona con la neurona en la última capa oculta que contiene al peso de interés wkm−1 ,km ,m . Por lo tanto, todos los términos de la sumatoria son constantes respecto wkm−1 ,km ,m excepto el antes mencionado: q § nm · = − ¦ (Ti − Oi )g ' ¨ ¦ wkm ,i ⋅ am,km ¸ ⋅ i =1 © km =1 ¹ δ δ wk wkm ,i ⋅ am ,km m−1 , k m , m q § nm · = − ¦ (Ti − Oi )g ' ¨ ¦ wkm ,i ⋅ am, km ¸ ⋅ i =1 © km =1 ¹ wkm ,i δ δ wk § El término wkm ,i es constante ¨¨ © respecto a wkm−1 , km , m . ⋅ am ,km m−1 , k m , m q § nm · = − ¦ Erri ⋅g ' ¨ ¦ wkm ,i ⋅ am, km ¸ ⋅ i =1 © km =1 ¹ wkm ,i δ δ wk (Por la Ecuación 6.4.9) ⋅ am ,km m−1 , km , m δ q = − ¦ Erri ⋅g ' ( enti ) wkm ,i i =1 δ q = − ¦ Δ i ⋅wkm ,i i =1 · ¸¸ ¹ δ wk δ wk ⋅ am , k m (Por la Ecuación 6.4.1) m−1 , k m , m ⋅ am,km (Por la Ecuación 6.4.10) m −1 , k m , m 209 Una Introducción al Cómputo Neuronal Artificial q = − ¦ Δ i wkm ,i ⋅ i =1 § · g ¨ ¦ wkm−1 ,km , m ⋅ am −1,km−1 ¸ δ wkm−1 ,km ,m © km−1 =1 ¹ q § nm−1 · = − ¦ Δ i wkm ,i g ' ¨ ¦ wkm−1 , km ,m ⋅ am −1, km−1 ¸ ⋅ i =1 © km−1 =1 ¹ δ nm−1 δ δ wk nm−1 m−1 , k m , m ¦w ⋅ am −1,km−1 km−1 , km , m ⋅ am −1,km−1 corresponde a la neurona en la última capa ¦w km−1 =1 (Regla de la Cadena) km−1 , km , m km−1 =1 nm−1 La Sumatoria de Salida § Por la Ecuación 6.4.4, · ¨ ¸ © haciendo A = m ¹ oculta en la cual está contenido el peso que nos interesa: wkm−1 ,km ,m . Ello implica que respecto a wkm−1 ,km , m todos los términos son constantes excepto el km −1 -ésimo: q § nm−1 · = − ¦ Δ i wkm ,i g ' ¨ ¦ wkm−1 , km ,m ⋅ am −1, km−1 ¸ ⋅ i =1 © km−1 =1 ¹ δ δ wk wkm−1 , km ,m ⋅ am −1,km−1 m −1 , k m , m q § nm−1 · = − ¦ Δ i wkm ,i g ' ¨ ¦ wkm−1 , km ,m ⋅ am −1, km−1 ¸ am −1,km−1 i =1 © km−1 =1 ¹ q ( § Por la Ecuación 6.4.3, · ¨ ¸ © haciendo A = m ¹ ) = − ¦ Δ i wkm ,i g ' entkm ,m am −1, km−1 i =1 Resumiendo: δE δ wk q m−1 , k m , m ( ) = −¦ Δ i wkm ,i g ' entkm , m am −1, km−1 i =1 (Ecuación 6.4.12) Definamos ahora al Término de Variación o Cambio Asociado a la km-ésima Neurona en la Última Capa Oculta como: q ( Δ km ,m = ¦ Δ i ⋅ wkm ,i ⋅ g ' entkm , m i =1 ) (Ecuación 6.4.13) El término Δ km ,m hace explícito el hecho de que los cambios o correcciones aplicados a las neuronas en la capa de salida, el primer conjunto de neuronas ajustadas por el Algoritmo de 210 Capítulo 6. Redes de Perceptrones Retropropagación, también influyen sobre las correcciones a aplicar sobre la km-ésima neurona en la última capa oculta, 1 ≤ km ≤ nm. Sustituyendo la Ecuación 6.4.13 sobre la Ecuación 6.4.12 tenemos entonces expresada de manera concisa la derivada parcial de la Función de Error E respecto al km-1-ésimo peso en la km-ésima neurona de la última capa oculta: δE δ wk x1 I1 x2 I2 a1,1 Ik xp Ip (Ecuación 6.4.14) a O-1,1 a O,1 aO+1,1 am,1 O1 O2 a1,k1 xk = −Δ km ,m ⋅ am −1, km−1 m−1 , km , m a O-1,kO-1 aO ,kO a O+1,kO+1 am,k m Oi a1,n1 a O-1,nO-1 aO,n O a O+1,nO+1 am,n m Oq Figura 6.11. En color gris se presentan a las neuronas involucradas en la actualización del peso wk ,k ,A . A−1 A Éste se encuentra localizado específicamente en la kO-ésima neurona en la O-ésima capa oculta. Las actualizaciones aplicadas sobre las neuronas en las capas ocultas O+1, O+2, …, m y la capa de salida influyen sobre la actualización de wk ,k ,A . A−1 A Procedamos a determinar el valor de la derivada parcial de la Función de Error E respecto al kO-1-ésimo peso de la kO-ésima neurona en O-ésima capa oculta, es decir, wkA−1 , kA ,A . Suponemos que este peso corresponde a una neurona ubicada en cualquier capa oculta excepto la primera y la última: 1 < O < m. Véase la Figura 6.11. Como en los casos anteriores, partimos de la Ecuación 6.4.7: δE δ wk A −1 , kA , A = δ δ wk A −1 , kA , A 1 q 2 (Ti − Oi ) ¦ 2 i =1 Recordemos que el peso wkA−1 , kA ,A es propagado, por medio de la salida de su neurona correspondiente, hacia todas las neuronas en la (O+1)-ésima capa oculta. A su vez, este mismo peso es propagado hacia todas las neuronas en la (O+2)-ésima capa oculta. Tal propagación continúa hasta llegar a las neuronas en la capa de salida. En concreto, tenemos que el peso wkA−1 ,kA ,A está presente en todas las neuronas de la red, excepto aquellas en la 211 Una Introducción al Cómputo Neuronal Artificial capa de entrada, y las capas ocultas 1 a O-1. De la capa oculta O sólo nos interesa la kO-ésima q neurona. Por lo tanto, tenemos que para la sumatoria ¦ (T − O ) i i 2 , que considera a todas i =1 las neuronas en la capa de salida, ninguno de sus términos es constante respecto a wkA−1 ,kA ,A , por lo tanto éstos se preservan: = 1 q δ 2 (Ti − Oi ) ¦ 2 i =1 δ wkA−1 ,kA ,A δ q = ¦ (Ti − Oi ) i =1 δ wk A −1 , kA , A δ q = −¦ (Ti − Oi ) i =1 (Ti − Oi ) δ wk § Ti es constante · ¨ ¸ © respecto a wkA−1 , kA ,A ¹ Oi A−1 , kA , A § nm · g ¨ ¦ wkm ,i ⋅ am, km ¸ δ wkA−1 ,kA ,A © km =1 i =1 ¹ nm q § · = −¦ (Ti − Oi ) ⋅ g ' ¨ ¦ wkm ,i ⋅ am, km ¸ ⋅ i =1 © km =1 ¹ δ q = −¦ (Ti − Oi ) δ δ wk nm ¦w km ,i k =1 A −1 , kA , A m (Regla de la Cadena) (Por la Ecuación 6.4.2) (Regla de la Cadena) ⋅ am ,km q = −¦ Erri ⋅ g ' ( enti ) ⋅ i =1 δ δ wk i =1 ¦w k m ,i k =1 A −1 , kA , A m δ q = −¦ Δ i nm δ wk ⋅ am ,km nm A −1 , kA , A ¦w km =1 km ,i ⋅ am , k m § Por la Ecuación 6.4.9, ¨ ¨ Erri , y por la Ecuación ¨ 6.4.1, ent i © · ¸ ¸ ¸ ¹ (Por la Ecuación 6.4.10) Nótese que los pesos de las neuronas en la capa de salida, wkm ,i , son constantes respecto al peso que nos ocupa, wkA−1 , kA ,A y además éste último forma parte de las salidas, am,km , de las neuronas en la última capa oculta: q nm i =1 km =1 = −¦ Δ i ¦ wkm ,i 212 δ δ wk A −1 , kA , A am ,km Capítulo 6. Redes de Perceptrones q nm i =1 km =1 = −¦ Δ i ¦ wkm ,i ⋅ § Por la Ecuación 6.4.4, · ¨ ¸ © haciendo A = m ¹ § nm−1 · g ¨ ¦ wkm−1 ,km ,m ⋅ am −1, km−1 ¸ δ wkA−1 ,kA ,A © km−1 =1 ¹ nm q § nm−1 · = −¦ Δ i ¦ wkm ,i g ' ¨ ¦ wkm−1 ,km , m ⋅ am −1,km−1 ¸ ⋅ i =1 km =1 © km−1 =1 ¹ δ δ δ wk nm−1 A −1 , kA , A q nm i =1 km =1 ¦w km−1 =1 km−1 , km , m ( (Regla de la Cadena) ⋅ am −1,km−1 ) = −¦ Δ i ¦ wkm ,i g ' entkm , m ⋅ δ δ wk nm−1 ¦w k =1 A −1 , kA , A m−1 km−1 , km , m § Por la Ecuación 6.4.3, · ¨ ¸ © haciendo A = m ¹ ⋅ am −1, km−1 Supongamos que existe más de una capa entre la última capa oculta y la capa en donde la neurona con el peso wkA−1 , kA ,A reside. Por lo tanto, los pesos de todas las neuronas en la última capa oculta son constantes respecto al peso en consideración wkA−1 , kA ,A ya que no existen conexiones directas con la neurona que precisamente contiene a wkA−1 ,kA ,A . Pero el peso wkA−1 , kA ,A está contenido en las salidas de las neuronas de la (m-1)-ésima capa oculta. En nm−1 consecuencia, todos los términos de la sumatoria ¦w km−1 q nm i =1 km =1 ( km−1 , km , m ⋅ am −1,km−1 se conservan: ) = −¦ Δ i ¦ wkm ,i g ' entkm , m ⋅ nm−1 ¦w km−1 =1 nm = − ¦ Δ km , m km−1 , km , m nm nm−1 km−1 , km , m ¦w km−1 =1 δ δ wk δ wk ¦w km−1 =1 km =1 δ nm−1 km =1 = − ¦ Δ km , m ⋅ A −1 , kA , A km−1 , km , m am −1, km−1 A −1 , kA , A ⋅ δ δ wk A −1 , kA , A am −1, km−1 ⋅ § nm−2 · g ¨ ¦ wkm−2 ,km−1 , m −1 ⋅ am − 2, km−2 ¸ © km−2 =1 ¹ (Por la Ecuación 6.4.13) § Por la Ecuación 6.4.4, · ¨ ¸ © haciendo A = m − 1 ¹ 213 Una Introducción al Cómputo Neuronal Artificial nm = − ¦ Δ km , m km =1 nm−1 ¦w km−1 =1 km−1 , km , m ⋅ § nm−2 · g ' ¨ ¦ wkm−2 ,km−1 ,m −1 ⋅ am − 2,km−2 ¸ ⋅ © km−2 =1 ¹ δ δ wk nm−2 ¦ =1 k A−1 , kA , A m− 2 nm = − ¦ Δ km , m km =1 nm−1 δ δ wk wkm−2 ,km−1 , m −1 ⋅ am − 2,km−2 ¦w km−1 =1 km−1 , km , m nm−2 ¦ =1 k A −1 , kA , A m− 2 (Regla de la Cadena) ( ) ⋅g ' entk m−1, m −1 ⋅ wkm−2 ,km−1 ,m −1 ⋅ am − 2,km−2 § Por la Ecuación 6.4.3, · ¨ ¸ © haciendo A = m − 1 ¹ Los pesos de todas las neuronas en la (m-1)-ésima capa oculta son todos constantes respecto al peso wkA−1 , kA ,A ya que no existen conexiones directas con la neurona que precisamente contiene a wkA−1 ,kA ,A . Pero el peso wkA−1 ,kA ,A está contenido en las salidas de las neuronas de la (m-2)-ésima capa oculta. De nueva cuenta tenemos que todos los términos nm−2 de la sumatoria ¦ km−2 =1 nm = − ¦ Δ km , m km =1 nm−2 ¦ km−2 =1 wkm−2 , km−1 , m −1 ⋅ am − 2, km−2 se preservan: nm−1 ¦w km−1 =1 km−1 , km , m wkm−2 , km−1 ,m −1 ⋅ ( ) ⋅ g ' entk m−1 ,m −1 ⋅ δ δ wk A −1 , kA , A am − 2,km−2 En ese punto haremos una pausa ya que conviene introducir nueva notación. Reconsideremos al Término de Variación o Cambio asociado a la km-ésima neurona en la última capa oculta, presentado originalmente en la Ecuación 6.4.13: q Δ km ,m = ¦ Δ i ⋅ wkm ,i ⋅ g '(entkm ,m ) i =1 Este término representa parte de la corrección a aplicar a las neuronas en la última capa oculta. Dado que las salidas de estas neuronas influyen sobre el error que tuvieron en su momento las neuronas en la siguiente capa, en este caso la capa de salida, es que entonces parte de la corrección que se les aplicó a éstas últimas también debe ser aplicada a la última 214 Capítulo 6. Redes de Perceptrones capa oculta, de allí la presencia de los términos Δ i y wkm ,i . Ahora bien, obsérvense los ( términos Δ km ,m , wkm−1 ,km , m y g ' entk m−1,m −1 ) en la última expresión que obtuvimos para la derivada parcial de la Función de Error E respecto a wkA−1 , kA ,A : δE δ wk nm A −1 , kA , A = − ¦ Δ km , m km =1 nm−1 ¦ km−1 =1 ( ) nm−2 wkm−1 ,km , m ⋅ g ' entk m−1,m −1 ⋅ ¦ wkm−2 ,km−1 ,m −1 ⋅ km−2 =1 δ δ wk A −1 , kA , A am − 2,km−2 Recordemos que en este punto estamos procesando a las neuronas que forman a la (m-1)-ésima capa oculta. Las salidas de estas neuronas influyen en el error que en su momento tuvieron las salidas de la siguiente capa, es decir, las salidas de las neuronas en la m-ésima capa oculta, la última capa oculta de hecho. Las neuronas de la última capa fueron corregidas en su momento al usar su correspondiente Término de Variación o Cambio: Δ km ,m . Además de Δ km ,m , debe ser claro que para corregir a las neuronas de la capa actual, la (m-1)-esima, también requerimos de los pesos wkm−1 ,km , m (los cuales residen en la siguiente ( ) capa) y de g ' entk m−1,m −1 . Todos estos términos pueden ser agrupados bajo la sumatoria con índices inferior km y superior nm. Es decir tendríamos la sumatoria: nm ¦Δ km =1 km , m ( ⋅ wkm−1 , km ,m ⋅ g ' entk m−1, m −1 ) Nótese la similitud de ésta con la sumatoria de la Ecuación 6.4.13. Así como la sumatoria q ¦Δ ⋅w i i =1 k m ,i ⋅ g '(entkm ,m ) se definió como el Término de Variación o Cambio Δ km ,m para la km-ésima neurona en la última capa oculta, ahora podemos definir a la sumatoria nm ¦Δ km =1 km , m ( ) ⋅ wkm−1 ,km , m ⋅ g ' entk m−1 ,m −1 como el Término de Variación o Cambio Δ km−1 ,m −1 para la km-1-ésima neurona en la penúltima capa oculta. Pero como veremos más adelante, tendremos que definir para cada neurona en cada capa oculta su correspondiente Término de Variación o Cambio. La buena noticia es que las expresiones que se obtienen serán similares a las que hemos obtenido para Δ km−1 ,m−1 y para Δ km ,m . Por ello mismo, definiremos al Término de Variación o Cambio para la kO-ésima Neurona en la O-ésima Capa Oculta, 1 ≤ O < m, como: nA +1 Δ kA ,A = g '(entkA ,A ) ¦ Δ kA+1,A +1 ⋅ wkA ,kA+1 ,A +1 (Ecuación 6.4.15) kA+1 =1 215 Una Introducción al Cómputo Neuronal Artificial El caso cuando O = m ya está cubierto por la Ecuación 6.4.13. Teniendo ya a la mano esta nueva definición, podemos proseguir con nuestra derivada parcial de la Función de Error E respecto al peso wkA−1 , kA ,A . Aplicaremos la Ecuación 6.4.15 cuando sea requerido: δE δ wk A −1 , kA , A nm = − ¦ Δ km , m km =1 nm−2 ¦ km−2 =1 nm−1 ¦w km−1 , km , m km−1 =1 wkm−2 , km−1 , m −1 ⋅ nm−1 nm−2 km−1 =1 km−2 =1 = − ¦ Δ km−1 ,m −1 δ δ wk A −1 , kA , A ¦ nm−2 km−1 =1 km−2 =1 δ δ wk A −1 , kA , A ¦ δ δ wk A −1 , kA , A am − 2, km−2 wkm−2 ,km−1 ,m −1 ⋅ § Por la Ecuación 6.4.15, · ¨ ¸ © haciendo A = m − 1 ¹ wkm−2 , km−1 ,m −1 ⋅ § nm−3 · g ¨ ¦ wkm−3 ,km−2 , m − 2 ⋅ am −3,km−3 ¸ © km−3 =1 ¹ nm−1 nm−2 km−1 =1 km−2 =1 = − ¦ Δ km−1 ,m −1 ) am − 2,km−2 nm−1 = − ¦ Δ km−1 ,m −1 ( ⋅ g ' entk m−1 ,m −1 ⋅ ¦ wkm−2 ,km−1 ,m −1 ⋅ § nm−3 · g ' ¨ ¦ wkm−3 ,km−2 ,m − 2 ⋅ am −3,km−3 ¸ ⋅ © km−3 =1 ¹ δ δ wk nm−3 ¦w k =1 A −1 , kA , A m−3 nm−1 nm−2 km−1 =1 km−2 =1 = − ¦ Δ km−1 ,m −1 δ δ wk ¦ § Por la Ecuación 6.4.4, · ¨ ¸ © haciendo A = m − 2 ¹ km−3 , km−2 , m − 2 (Regla de la Cadena) ⋅ am −3, km−3 ( ) wkm−2 ,km−1 ,m −1 ⋅g ' entkm−2 , m − 2 ⋅ nm−3 ¦w k =1 A −1 , kA , A m−3 km−3 , km−2 , m − 2 ⋅ am −3,km−3 § Por la Ecuación 6.4.3, · ¨ ¸ © haciendo A = m − 2 ¹ Los pesos de todas las neuronas en la (m-2)-ésima capa oculta son todos constantes respecto al peso wkA−1 ,kA ,A ya que no existen conexiones directas con la neurona que precisamente contiene a wkA−1 , kA ,A . Pero el peso wkA−1 , kA ,A está contenido en las salidas de las neuronas de la (m-3)-ésima capa oculta. De nueva cuenta, todos los términos de la nm−3 sumatoria ¦w km−3 =1 216 km−3 , km−2 , m − 2 ⋅ am −3,km−3 se preservan: Capítulo 6. Redes de Perceptrones nm−1 nm−2 km−1 =1 km−2 =1 = − ¦ Δ km−1 ,m −1 ¦ ( δ nm−3 ¦w km−3 =1 =− nm−2 ¦ km−2 =1 k m −3 , k m − 2 , m − 2 Δ km −2 , m − 2 δ δ wk =− nm−2 ¦ km−2 =1 A −1 , kA , A Δ k m− 2 , m − 2 δ δ wk =− A −1 , kA , A nm−2 ¦Δ km−2 =1 δ wk A −1 , kA , A nm−3 ¦w km−3 , km−2 , m − 2 km−3 =1 am −3,km−3 ⋅ § Por la Ecuación 6.4.15, · ¨ ¸ © haciendo A = m − 2 ¹ am −3,km−3 nm−3 ¦w km−3 , km−2 , m − 2 km−3 =1 ⋅ § Por la Ecuación 6.4.4, · ¨ ¸ © haciendo A = m − 3 ¹ § nm−4 · g ¨ ¦ wkm−4 ,kk −3 , m −3 ⋅ am − 4, km−4 ¸ © km−4 =1 ¹ nm−3 km −2 , m − 2 ) wkm−2 , km−1 ,m −1 ⋅ g ' entkm−2 ,m − 2 ⋅ ¦w km−3 , km−2 , m − 2 km−3 =1 ⋅ § nm−4 · g ' ¨ ¦ wkm−4 ,kk −3 ,m −3 ⋅ am − 4,km−4 ¸ ⋅ © km−4 =1 ¹ δ δ wk =− nm−2 ¦ km−2 =1 ¦ =1 k A −1 , kA , A m− 4 Δ k m−2 , m − 2 δ δ wk nm−4 wkm−4 ,kk −3 ,m −3 ⋅ am − 4, km−4 nm−3 ¦w km−3 , km−2 , m − 2 km−3 =1 nm−4 ¦ =1 k A −1 , kA , A m− 4 (Regla de la Cadena) ( ) ⋅g ' entkm−3 ,m −3 ⋅ wkm−4 ,kk −3 ,m −3 ⋅ am − 4,km−4 § Por la Ecuación 6.4.3, · ¨ ¸ © haciendo A = m − 3 ¹ Los pesos de todas las neuronas en la (m-3)-ésima capa oculta son todos constantes respecto al peso wkA−1 , kA ,A ya que asumimos no existen conexiones directas con la neurona que contiene a wkA−1 ,kA ,A . Pero el peso wkA−1 ,kA ,A está contenido en las salidas de las neuronas de la (m-4)-ésima capa oculta. Tal como hemos procedido en párrafos anteriores, todos los nm−4 términos de la sumatoria ¦ km−4 =1 wkm−4 , kk −3 , m −3 ⋅ am − 4,km−4 se preservan: 217 Una Introducción al Cómputo Neuronal Artificial =− nm−2 ¦Δ km−2 =1 nm−3 k m−2 , m − 2 nm−4 ¦ km−4 =1 =− nm−3 ¦ km−3 =1 km−3 , km−2 , m − 2 wkm−4 ,kk −3 ,m −3 ⋅ Δ km−3 ,m −3 δ δ wk ¦w km−3 =1 A −1 , kA , A nm−4 ¦ km−4 =1 δ δ wk ( ) ⋅ g ' entkm−3 ,m −3 ⋅ A −1 , kA , A am − 4,km−4 wkm−4 ,km−3 ,m −3 ⋅ § Por la Ecuación 6.4.15, · ¨ ¸ © haciendo A = m − 3 ¹ am − 4,km−4 En este punto de nuestro desarrollo debe ser claro que mientras la capa oculta que contiene a la neurona en donde reside el peso wkA−1 ,kA ,A no haya sido alcanzada aún tendremos la secuencia de aplicaciones de la Ecuación 6.4.4, Regla de la Cadena, Ecuación 6.4.3, Regla de la Derivada de una Suma, y finalmente Ecuación 6.4.15 donde obtenemos el Término de Variación o Cambio asociado a cada neurona en la capa oculta actualmente procesada. Supongamos que la capa oculta donde se encuentra el peso wkA−1 ,kA ,A está suficientemente alejada de la última capa oculta de la red. Por lo tanto, la secuencia de aplicaciones antes descrita nos lleva a obtener una expresión que contiene los Términos de Variación o Cambio asociados a la (m-4)-ésima capa oculta: =" =− nm−4 ¦ km−4 =1 Δ k m− 4 , m − 4 nm−5 ¦ km−5 =1 wkm−5 ,km−4 ,m − 4 ⋅ δ δ wk A −1 , kA , A am −5, km−5 Nuevamente aplicamos a la expresión anterior, en este orden, la Ecuación 6.4.4, Regla de la Cadena, Ecuación 6.4.3, Regla de la Derivada de una Suma y finalmente Ecuación 6.4.15. Por lo tanto obtenemos: =" =− nm−5 ¦ km−5 =1 218 Δ k m −5 , m − 5 nm−6 ¦ km−6 =1 wkm−6 ,km−5 ,m −5 ⋅ δ δ wk A −1 , kA , A am −6,km−6 Capítulo 6. Redes de Perceptrones Debe ser claro que cada vez estamos más cerca de la capa oculta en cuestión: aquella que contiene al peso wkA−1 ,kA ,A . Supongamos que aplicamos sucesivamente la secuencia de pasos antes mencionada hasta que llegamos al punto en donde estamos procesando a las neuronas en la (O+1)-ésima capa oculta. Es decir, tenemos la siguiente expresión: =" nA+2 = − ¦ Δ kA + 2 , A + 2 kA+ 2 =1 nA+1 ¦w kA+1 =1 kA+1 , kA+2 , A + 2 ⋅ δ δ wk A −1 , kA , A aA +1,kA+1 Tenemos entonces: nA+ 2 = − ¦ Δ kA + 2 , A + 2 kA+2 =1 nA+1 ¦w kA+1 =1 δ δ wk A −1 , kA , A nA+ 2 = − ¦ Δ kA + 2 , A + 2 kA+2 =1 kA+1 , kA+2 ,A + 2 ⋅ § Por la Ecuación 6.4.4, · ¨ ¸ ¨ para la (A +1)-ésima ¸ ¨ capa oculta ¸ © ¹ § nA · g ¨ ¦ wkA , kA+1 ,A +1 ⋅ aA , kA ¸ © kA =1 ¹ nA+1 ¦w kA+1 =1 kA+1 , kA+2 ,A + 2 ⋅ § nA · g ' ¨ ¦ wkA , kA+1 ,A +1 ⋅ aA ,kA ¸ ⋅ © kA =1 ¹ δ δ wk nA A −1 , kA , A nA+2 = − ¦ Δ kA + 2 , A + 2 kA+ 2 =1 ¦w kA+1 =1 ¦w kA =1 ⋅ aA ,kA A −1 , kA , A kA+1 , kA+2 , A + 2 nA ¦w kA =1 nA La sumatoria kA , kA+1 , A +1 nA+1 δ δ wk ¦w kA =1 kA , kA+1 , A +1 kA , kA+1 , A +1 (Regla de la Cadena) ( ) ⋅g ' entkA+1 , A +1 ⋅ ⋅ aA , kA § Por la Ecuación 6.4.3, · ¨ ¸ ¨ para la (A +1)-ésima ¸ ¨ capa oculta ¸ © ¹ ⋅ aA ,kA considera a todas las neuronas en la O-ésima capa oculta. Sin embargo, es sólo una la neurona la que contiene a nuestro peso de interés wkA−1 , kA ,A . Por lo tanto, todos los términos de la sumatoria son constantes respecto a wkA−1 , kA ,A excepto el kO-ésimo: 219 Una Introducción al Cómputo Neuronal Artificial nA+ 2 = − ¦ Δ kA + 2 , A + 2 kA+2 =1 nA+1 δ δ wk A−1 , kA , A kA+1 =1 kA+1 , kA+2 , A + 2 ( ) ⋅ g ' entkA+1 ,A +1 ⋅ wkA ,kA+1 ,A +1 ⋅ aA , kA δ nA+1 = − ¦ Δ kA+1 ,A +1 ¦w kA+1 =1 δ wk A −1 , kA , A δ nA+1 = − ¦ Δ kA+1 ,A +1wkA ,kA+1 ,A +1 kA+1 =1 wkA , kA+1 ,A +1aA ,kA δ wk A −1 , kA , A aA ,kA § Por la Ecuación 6.4.15, · ¨ ¸ ¨ para la (A +1)-ésima ¸ ¨ capa oculta ¸ © ¹ § El peso wkA , kA+1 ,A +1 es constante · ¨¨ ¸¸ © respecto a wkA−1 ,kA ,A ¹ nA+1 = − ¦ Δ kA+1 ,A +1wkA ,kA+1 ,A +1 ⋅ kA+1 =1 δ δ wk A −1 , kA , A § nA−1 · g ¨ ¦ wkA−1 , kA ,A ⋅ aA −1, kA−1 ¸ © kA−1 =1 ¹ ( Por la Ecuación 6.4.4 ) nA+1 = − ¦ Δ kA+1 ,A +1wkA ,kA+1 ,A +1 ⋅ kA+1 =1 § nA−1 · g ' ¨ ¦ wkA−1 , kA ,A ⋅ aA −1,kA−1 ¸ ⋅ © kA−1 =1 ¹ δ δ wk nA−1 ¦w k =1 A −1 , kA , A A −1 (Regla de la Cadena) kA−1 , kA ,A ⋅ aA −1, kA−1 ( ) nA+1 = − ¦ Δ kA+1 ,A +1wkA ,kA+1 ,A +1 ⋅ g ' entkA ,A ⋅ kA+1 =1 δ δ wk A −1 , kA , A wkA−1 ,kA ,A ⋅ aA −1, kA−1 nA+1 ( ( Por la Ecuación 6.4.3 ) ) = − ¦ Δ kA+1 ,A +1wkA ,kA+1 ,A +1 ⋅ g ' entkA ,A ⋅ aA −1, kA−1 kA+1 =1 = −Δ kA ,A aA −1, kA−1 (Por la Ecuación 6.4.15) Finalmente, y después de un largo camino, tenemos que: δE δ wk 220 A −1 , kA , A = −Δ kA ,A aA −1,kA−1 1< A < m (Ecuación 6.4.16) Capítulo 6. Redes de Perceptrones Nótese que la notación impuesta por los Términos de Variación o Cambio permite que las derivadas parciales puedan ser expresadas de manera sumamente concisa. Sin embargo, debe tenerse en cuenta, sobre todo al momento de la implementación algorítmica, que para poder obtener el valor del término Δ kA ,A se requiere conocer al término Δ kA+1 ,A +1 . A su vez, para conocer el valor del término Δ kA+1 ,A +1 se requiere conocer a Δ kA+2 ,A + 2 , y así sucesivamente hasta llegar a requerir al término Δ km ,m y finalmente a Δi . Ello implica que conforme estos términos son calculados, es sumamente conveniente guardarlos ya que serán requeridos para la actualización de las capas ocultas que preceden a sus capas correspondientes. x1 I1 x2 I2 a1,1 Ik xp Ip a O,1 am,1 O1 O2 a1,k1 xk a 2,1 a 2,k2 aO ,kO am,k m Oi a1,n1 a 2,n2 aO,n O am,n m Oq Figura 6.12. En color gris se muestran las neuronas involucradas en la actualización del peso wk ,k ,1 . 1 Este peso se ubica específicamente en la k1-ésima neurona de la primera capa oculta. Las correcciones aplicadas sobre todas las neuronas de la red, a excepción de las neuronas en la capa de entrada y de las neuronas en la primera capa oculta (salvo la k1-ésima), influyen sobre la actualización del peso wk ,k ,1 . 1 Abordemos el último paso concerniente a la determinación de las derivadas parciales de la Función de Error E para la situación de una red de Perceptrones con al menos 2 capas ocultas. Requerimos ahora conocer el valor de la derivada parcial de E respecto al k-ésimo peso de la k1-ésima neurona en la primer capa oculta. Es decir, δE . Véase la Figura 6.12. Debe ser claro que la neurona que contiene al buscaremos δ wk ,k1 ,1 peso wk ,k1 ,1 únicamente envía sus salidas de manera directa a las neuronas en la segunda capa oculta. Obviamente está desconectada del resto de las capas ocultas y la capa de salida. Sin embargo, el peso wk ,k1 ,1 formará parte de todas las sumatorias de salida asociadas a las neuronas en tales capas incluyendo también a la segunda capa oculta. Esta propiedad es importante ya que por un lado nos dice que la manera de proceder para encontrar la derivada parcial es, en un principio, la misma que se aplicó para encontrar, tal como lo 221 Una Introducción al Cómputo Neuronal Artificial hicimos previamente, el valor de δE δ wk (Ecuación 6.4.16). Esto tiene como A −1 , kA , A consecuencia que todos los términos de las sumatorias obtenidas deberán ser preservados. La concisión en las expresiones que encontremos se da al utilizar las Ecuaciones 6.4.3 y 6.4.15. Sin embargo, por otro lado, la diferencia de proceder se da hasta el momento en que nos ubiquemos en la segunda capa oculta, que es cuando tendremos acceso directo a las neuronas en la primera capa oculta. Sabemos que tal acceso se expresa a través de una sumatoria en la cual cada término está asociado a cada neurona de la primera capa oculta. Dado que de todas estas neuronas sólo nos interesa la k1-ésima es que los demás términos de la sumatoria son eliminados. Finalmente, nos encontraremos con la sumatoria de salida de la neurona de interés, en la cual todos sus términos, excepto el k-ésimo, son eliminados por ser constantes respecto a wk ,k1 ,1 . Aplicaremos los pasos descritos anteriormente. Iniciaremos como siempre con la 1 q 2 sustitución de E por ¦ (Ti − Oi ) . Tal como se comentó previamente, se aplicarán las 2 i =1 derivaciones y Ecuaciones requeridas, de manera similar a como se hizo en la δE determinación de (Ecuación 6.4.16). Para este conjunto de operaciones el lector δ wkA−1 ,kA ,A puede hacer referencia a los párrafos anteriores. Sin embargo, volveremos a ser específicos al momento en que se llegue a la tercera capa oculta, donde efectuaremos las operaciones a detalle. δE δ wk ,k ,1 1 = δ δ wk ,k ,1 1 1 q 2 (Ti − Oi ) ¦ 2 i =1 (Por la Ecuación 6.4.7) = ... δ n3 = − ¦ Δ k3 ,3 k3 =1 n2 ¦w δ wk ,k ,1 k =1 1 k2 , k3 ,3 ⋅ a2,k2 2 Recordemos que los pesos de todas las neuronas en la tercera capa oculta son constantes respecto al peso wk , k1 ,1 ya que no existen conexiones directas con las neuronas en la primera capa oculta. Pero el peso wk ,k1 ,1 está contenido en las salidas de las neuronas de la segunda capa oculta: 222 Capítulo 6. Redes de Perceptrones n3 n2 k3 =1 k2 =1 n3 n2 k3 =1 k2 =1 = − ¦ Δ k3 ,3 ¦ wk2 ,k3 ,3 ⋅ δ δ wk ,k ,1 a2,k2 1 = − ¦ Δ k3 ,3 ¦ wk2 ,k3 ,3 ⋅ § n1 · g ¨ ¦ wk1 ,k2 ,2 ⋅ a1,k1 ¸ δ wk ,k1 ,1 © k1 =1 ¹ n3 n2 § n1 · = − ¦ Δ k3 ,3 ¦ wk2 ,k3 ,3 ⋅ g ' ¨ ¦ wk1 ,k2 ,2 ⋅ a1,k1 ¸ k3 =1 k2 =1 © k1 =1 ¹ δ δ n1 ¦w δ wk ,k ,1 k =1 1 n3 n2 k3 =1 k2 =1 k1 , k2 ,2 ⋅ a1,k1 ( n1 ¦w δ wk ,k ,1 k =1 1 k2 =1 k1 , k2 ,2 ) ⋅ a1,k1 § Por la Ecuación 6.4.3 · ¨ ¸ © haciendo A = 2 ¹ 1 δ n2 = − ¦ Δ k2 ,2 (Regla de la Cadena) 1 = − ¦ Δ k3 ,3 ¦ wk2 ,k3 ,3 ⋅ g ' entk2 ,2 δ § Por la Ecuación 6.4.4 · ¨ ¸ © haciendo A = 2 ¹ n1 ¦w δ wk ,k ,1 k =1 k1 , k2 ,2 ⋅ a1,k1 1 1 § Por la Ecuación 6.4.15, · ¨ ¸ © haciendo A = 2 ¹ Nótese que el peso wk ,k1 ,1 estará contenido únicamente en la salida de la k1-ésima neurona n1 en la primera capa oculta. Por lo tanto, todos los términos de la sumatoria ¦w k1 =1 k1 , k2 ,2 ⋅ a1,k1 son constantes, excepto el k1-ésimo, respecto a wk ,k1 ,1 : δ n2 = − ¦ Δ k2 ,2 wk1 ,k2 ,2 ⋅ k2 =1 δ wk ,k ,1 a1,k1 1 δ n2 = − ¦ Δ k2 ,2 wk1 ,k2 ,2 ⋅ k2 =1 δ wk ,k ,1 1 § p · g ¨ ¦ wk , k1 ,1 ⋅ I k ¸ © k =1 ¹ § · = − ¦ Δ k2 ,2 wk1 ,k2 ,2 ⋅ g ' ¨ ¦ wk ,k1 ,1 ⋅ I k ¸ k2 =1 © k =1 ¹ n2 § Por la Ecuación 6.4.6 · ¨ ¸ © haciendo A = 1 ¹ p δ p δ wk ,k ,1 1 ¦w k =1 k , k1 ,1 (Regla de la Cadena) ⋅ Ik 223 Una Introducción al Cómputo Neuronal Artificial De todos los términos en la Sumatoria de Salida de la k1-ésima neurona en la primera capa oculta únicamente nos interesa el k-ésimo, que es precisamente wk ,k1 ,1 ⋅ I k : § p · = − ¦ Δ k2 ,2 wk1 ,k2 ,2 ⋅ g ' ¨ ¦ wk , k1 ,1 ⋅ I k ¸ ⋅ k2 =1 © k =1 ¹ n2 δ δ wk ,k ,1 wk ,k1 ,1 ⋅ I k 1 n2 § p · = − ¦ Δ k2 ,2 wk1 ,k2 ,2 ⋅ g ' ¨ ¦ wk , k1 ,1 ⋅ I k ¸ ⋅ I k k2 =1 © k =1 ¹ n2 ( ) = − ¦ Δ k2 ,2 wk1 ,k2 ,2 ⋅ g ' entk1 ,1 ⋅ I k (Por la Ecuación 6.4.5) = −Δ k1 ,1 ⋅ I k § Por la Ecuación 6.4.15, · ¨ ¸ © haciendo A = 1 ¹ k2 =1 Concretizando: δE δ wk ,k ,1 = −Δ k1 ,1 ⋅ I k (Ecuación 6.4.17) 1 Por fin, y después de un largo viaje matemático, contamos con las derivadas parciales que forman al vector gradiente de la Función de Error E. Suponemos que el número de capas ocultas es al menos 2, es decir, m ≥ 2: • • • • δE δ wk = −Δ i ⋅ am, km m ,i δE δ wk = −Δ km ,m ⋅ am −1, km−1 m−1 , km , m δE δ wk A −1 , kA , A δ δ wk ,k ,1 = −Δ kA ,A aA −1, kA−1 , 1 < A < m = −Δ k1 ,1 ⋅ I k 1 Sabemos que estas derivadas parciales representan las direcciones de máximo crecimiento de la Función de Error E. Por lo tanto, para actualizar los pesos de las neuronas en la capa de salida y en las capas ocultas se requiere la dirección opuesta del gradiente a fin de minimizar el error. En consecuencia tendremos las siguientes reglas de actualización, o corrección, de pesos: 224 Capítulo 6. Redes de Perceptrones • Para los pesos de las neuronas en la capa de salida: wkm ,i = wkm ,i + α⋅Δi⋅ am,km • Para los pesos de las neuronas en la última capa oculta: wkm−1 ,km , m = wkm−1 ,km , m + α⋅ Δ km ,m ⋅ am −1, km−1 • (Ecuación 6.4.19) Para los pesos de las neuronas en la O-ésima capa oculta, 1 < O < m: wkA−1 , kA ,A = wkA−1 , kA ,A + α⋅ Δ kA ,A ⋅ aA −1,kA−1 • (Ecuación 6.4.18) (Ecuación 6.4.20) Para los pesos de las neuronas en la primera capa oculta: wk ,k1 ,1 = wk ,k1 ,1 + α⋅ Δ k1 ,1 ⋅Ιk (Ecuación 6.4.21) Donde α es nuestro bien conocido Coeficiente de Aprendizaje. Realmente lo que nos queda por hacer es especificar al Algoritmo de Retropropagación para el ajuste de pesos en una Red Neuronal de Perceptrones con al menos 2 capas ocultas. Como ya mencionamos al inicio de esta Sección, el proceso de ajuste de los pesos se dividirá en 4 fases. Dado un vector de entrada, tenemos en primer lugar que se ajustarán los pesos de las neuronas en la capa de salida, aplicando la Ecuación 6.4.18. Una vez finalizada esta etapa se procederá al ajuste de los pesos en las neuronas en la última capa oculta. Se deberá utilizar la Ecuación 6.4.19. La fase 3 comprende el ajuste de los pesos de las neuronas en las capas ocultas intermedias, comenzando a partir de la penúltima capa oculta y terminando en la segunda capa oculta. Las neuronas de cada capa son procesadas y actualizadas haciendo uso de la regla presentada en la Ecuación 6.4.20. Por último, en la cuarta fase tendremos que ajustar los pesos de las neuronas en la primera capa oculta aplicando la Ecuación 6.4.21. Como ya se comentó con anterioridad, es sumamente importante, a fin de no afectar la eficiencia del Algoritmo de Retropropagación, el guardar, conforme se van calculado, los valores de: • Δi: al actualizar los pesos de las neuronas en la capa de salida. • Δ km ,m : al actualizar los pesos de las neuronas en la última capa oculta. • Δ kA ,A : al actualizar los pesos de las neuronas en las capas ocultas intermedias, 1 < O < m. Ya que, como se ha visto, éstos son requeridos para la actualización de los pesos en las capas ocultas. Las 4 fases descritas se ejecutan por cada elemento del conjunto de entrenamiento. A su vez, el conjunto de entrenamiento es presentado tantas veces se requiera. Otra opción es establecer una Función de Error que permita medir el desempeño de la red una vez que se ha efectuado una presentación del conjunto de entrenamiento y si el error obtenido es menor o igual a un error mínimo aceptable entonces se finaliza el entrenamiento. 225 Una Introducción al Cómputo Neuronal Artificial De manera más específica tenemos entonces que la secuencia de pasos a efectuar por el Algoritmo de Retropropagación es la siguiente: • • Inicializar los pesos de todas las neuronas de manera aleatoria con valores en (-1, 1). Repetir hasta que la red proporcione salidas con un error aceptable o bien hasta que el número requerido de presentaciones del conjunto de entrenamiento haya sido alcanzado: o Para cada vector χ en el conjunto de entrenamiento: Obtener la correspondiente salida O de la red. Obtener el vector de salida esperada T asociado al vector de entrada χ. Para i = 1 hasta q: • Calcular Erri = Ti – Oi Fase 1 - Actualización de pesos en las neuronas de la capa de salida: • Para cada neurona i en la capa de salida, i = 1, 2, …, q: o Obtener Δi. o Para km = 1 hasta nm: wkm ,i = wkm ,i + α⋅Δi⋅ am,km Fase 2 - Actualización de pesos en las neuronas de la última capa oculta: • Para cada neurona km en la última capa oculta, km = 1, 2, …, nm: o Obtener Δ km ,m . o Para km-1 = 1 hasta nm-1: wkm−1 ,km , m = wkm−1 ,km , m + α⋅ Δ km ,m ⋅ am −1, km−1 Fase 3 - Actualización de pesos en las neuronas en la (m-1)-ésima capa oculta hasta la segunda capa oculta: • Para O = m-1 hasta 2: o Para cada neurona kOen la O-ésima capa oculta, kO = 1, 2, …, nO: Obtener Δ kA ,A . 226 Para kO-1 = 1 hasta nO-1: • wkA−1 ,kA ,A = wkA−1 ,kA ,A + α⋅ Δ kA ,A ⋅ aA −1,kA−1 Fase 4 - Actualización de pesos en las neuronas de la primer capa oculta: • Para cada neurona k1 en la primer capa oculta, k1 = 1, 2, …, n1: o Para k = 1 hasta p: wk , k1 ,1 = wk , k1 ,1 + α⋅ Δ k1 ,1 ⋅Ιk Capítulo 6. Redes de Perceptrones Sabemos que cuando el Algoritmo de Retropropagación ha finalizado es que se cuenta con una Corrida. Debe tenerse en consideración, tal como comentamos en la Sección anterior, que no es posible, aún en el caso de 2 o más capas ocultas, garantizar el aprendizaje óptimo en términos de que los pesos encontrados efectivamente minimizan a nuestra función de error. Es posible que éstos correspondan a un mínimo local. Otra situación que puede presentarse es que el lugar geométrico descrito por la función de error carezca de puntos críticos y en particular de mínimos. En este sentido la convergencia de los pesos nunca tendrá lugar. Por ello mismo, es que por lo regular se recomienda efectuar más de una corrida. La idea detrás de este proceder, como ya comentamos antes, es la de efectuar una exploración en diferentes regiones de la función de error. Aunque ello no garantiza que se encontrarán los pesos óptimos, es una manera empírica de identificar si los resultados obtenidos para una corrida, es decir los pesos encontrados, corresponden a mínimos locales o globales. 6.5 Aplicación: Predicción de Señales Recordemos que en los Capítulos 1 y 4 establecimos al problema de la Predicción de Señales como el modelado de una serie de tiempo de manera que sea posible determinar cómo se comportará en el futuro. En la Sección 4.3 este problema fue abordado como una aplicación de la Neurona tipo Perceptrón. En ese caso se asumía que la señal se ajustaba a un modelo de Serie de Tiempo de M-ésimo Orden de Parámetros Autorregresivos. El objetivo era determinar a los M parámetros que definían a la señal. Tales parámetros, como se recordará, estaban representados por los pesos de la neurona. Una vez que se finalizaba el entrenamiento es que recurríamos a inspeccionar tales pesos y éstos se utilizaban para generar una nueva señal, junto con los vectores en el conjunto de entrenamiento, y determinar si la aproximación obtenida era lo suficientemente buena al compararla con la señal original. En esta Sección veremos como es que una Red de Perceptrones puede proporcionarnos una solución interesante pero ahora partiremos de una suposición diferente: no tenemos conocimiento alguno respecto a qué modelo se ajusta la señal. Sólo contamos con las muestras que la forman y nada más. En particular, trabajaremos con un Red formada por exactamente dos capas ocultas. En primer lugar recordaremos algunos conceptos planteados en la Sección 4.3. Posteriormente aplicaremos las reglas de actualización definidas en la Sección anterior, pero las haremos instancias de nuestro caso con m = 2 capas ocultas. Definiremos entonces al Algoritmo de Retropropagación específico para el entrenamiento de una Red formada por dos capas ocultas y lo aplicaremos a fin de que nuestra red modele la señal dada. Sea K el número de muestras que conforman a nuestra señal. Cada muestra es de hecho un número xn que es el valor de la señal en el momento n. Supondremos que el valor de cualquier muestra xn tiene influencia de los valores de las muestras que le preceden y tendrá influencia sobre los valores que le prosiguen. Sabemos que este razonamiento parte de hecho de que los elementos de una serie de tiempo no son independientes entre sí. Por ejemplo, el comportamiento actual de la Bolsa de Valores depende en gran medida de los comportamientos de la misma en días previos. O bien, tenemos conocimiento que por lo 227 Una Introducción al Cómputo Neuronal Artificial regular un sismo de gran magnitud en un día dado incide sobre la actividad sísmica en días posteriores, de donde se tienen las llamadas Réplicas. En este sentido tenemos que las K muestras, a fin de formar el conjunto de entrenamiento, serán usadas para formar subsecuencias de la serie de tiempo. Tales subsecuencias serán de tamaño M ≥ 1 y cada una dará lugar a un vector de entrada para nuestra red neuronal: ª xn −1 º «x » « n −2 » « xn −3 » « » « # » «¬ xn − M »¼ La idea ahora es que dado un vector de entrada formado por la subsecuencia xn-M, …, xn-2, xn-1, la Red Neuronal proporcione como salida un estimado para la muestra xn. A tal estimado lo denotaremos por xn’. La idea, como siempre, es ajustar los pesos de la red de tal forma que la diferencia entre xn y xn’ sea tan pequeña como sea posible. Dado que tenemos K muestras entonces los vectores de entrada, en \ M , estarán dados por: ª xM º ª xM +1 º ª xM + 2 º ª xK −1 º «x » « x » «x » «x » « M −1 » « M » « M +1 » « K −2 » « xM − 2 » , « xM −1 » , « xM » , ! , « xK −3 » « » « » « » « » « # » « # » « # » « # » «¬ x1 »¼ «¬ x2 »¼ «¬ x3 »¼ «¬ xK − M »¼ Los respectivos vectores de salida esperada, en este caso en \ , serán entonces: [ xM +1 ] , [ xM +2 ] , [ xM +3 ] , ! , [ xK ] La señal con la que trabajaremos se conforma por K = 2,000 muestras. Véase la Figura 6.13. Dado que K = 2,000 entonces podemos formar K – M vectores de entrada. En nuestro caso trabajaremos con M = 7. Ello implica que contaremos con 1,993 vectores de entrada, pero nuestro conjunto de entrenamiento se conformará únicamente por los primeros 1,000 vectores. Los restantes 993 vectores serán utilizados, una vez finalizado el entrenamiento, como Conjunto de Evaluación. Un conjunto de evaluación es un conjunto de vectores los cuales se “ocultan” a la red y que se utiliza para medir su desempeño usando entradas que no fueron presentadas durante su entrenamiento. Para estas entradas tenemos también identificadas las salidas esperadas. La idea es determinar la robustez de nuestra red cuando información nueva le sea proporcionada. También sirve para establecer si el ajuste pesos no se sesgó a favor de una simple “memorización” de los vectores en el conjunto de entrenamiento. Véase entonces en la Figura 6.14 la sección de la señal que se presentará a la red durante el entrenamiento y la sección que se utilizará para efectos de evaluación. 228 Capítulo 6. Redes de Perceptrones 1.2 xn 1 0.8 0.6 0.4 0.2 n 0 0 200 400 600 800 1000 1200 1400 1600 1800 2000 1800 2000 Figura 6.13. Una serie de tiempo formada por K = 2,000 muestras. 1.2 xn 1 0.8 0.6 0.4 0.2 n 0 0 200 400 600 800 1000 1200 1400 1600 Figura 6.14. La serie de tiempo originalmente presentada en la Figura 6.13. En color negro, las muestras utilizadas para formar el conjunto de entrenamiento. En color gris, las muestras que conformarán al conjunto de evaluación. 229 Una Introducción al Cómputo Neuronal Artificial Concentrémonos ahora en los aspectos particulares del Algoritmo de Retropropagación bajo una red con dos capas ocultas. En primer lugar requerimos del procedimiento para que, dado un vector de entrada, la red proporcione, utilizando los pesos actuales, la salida correspondiente. Sabemos que entonces simplemente tenemos un proceso de propagación. El vector de entrada se presenta a la capa de entrada la cual meramente distribuye sus p componentes a la primer capa oculta. Las n1 neuronas en la primer capa oculta procesan entonces su vector de entrada y producen como salida un vector en \ n1 . Este nuevo vector es enviado como entrada a las n2 neuronas que forman a la segunda capa oculta, produciéndose como salida un vector en \ n2 . Finalmente este vector es llevado a las q neuronas que forman la capa de salida produciendo entonces la salida final de la red: un vector en \ q . Este proceso es implementado de manera directa en el Algoritmo 6.4. El procedimiento, aparte del vector de entrada X, recibe otras 7 entradas: • p: dimensionalidad de los vectores de entrada. • n1: número de neuronas en la primer capa oculta. • n2: número de neuronas en la segunda capa oculta. • q: número de neuronas en la capa de salida. • W_HLayer1: una matriz de tamaño n1 × p que contiene los pesos de las neuronas en la primer capa oculta. • W_HLayer2: una matriz de tamaño n2 × n1 que contiene los pesos de las neuronas en la segunda capa oculta. • W_Output: una matriz de tamaño q × n2 que contiene los pesos de las neuronas en la capa de salida. El Algoritmo 6.4 retorna como salida 3 vectores: el vector a1 que corresponde a la salida producida por la primer capa oculta, el vector a2 que corresponde a la salida producida por la segunda capa oculta y el vector O que es la salida final de la red. Como bien sabemos todos estos vectores son requeridos por el Algoritmo de Retropropagación. Algoritmo 6.4. Propagación de un vector de entrada en una red de Perceptrones con dos capas ocultas. Procedure TwoLayerPropagation(Integer p, Integer n1, Integer n2, Integer q, Matrix W_HLayer1[1,…,n1][1,…,p], Matrix W_HLayer2[1,…,n2][1,…,n1], Matrix W_Output[1,…,q][1,…,n2], Array X[1,…,p]) I = new Array[1,…,p] a1 = new Array[1,…,n1] a2 = new Array[1,…,n2] O = new Array[1,…,q] // Se obtiene la salida de la capa de entrada. El vector X se copia al arreglo I. for k = 1 until p do I[k] = X[k] end-of-for // El vector I es enviado como entrada a las neuronas en la primer capa oculta. // Se produce como salida el vector a1. 230 Capítulo 6. Redes de Perceptrones for k1 = 1 until n1 do // Se procesa a la k1-ésima neurona. p // Se calcula entk1 ,1 = ¦ wk ,k1 ,1 ⋅ I k . k =1 Real ent_k1_1 = 0 for k = 1 until p do ent_k1_1 = ent_k1_1 + W_HLayer1[k1][k] * I[k] end-of-for // Se aplica la función de activación y se obtiene la salida. a1[k1] = g(ent_k1_1) end-of-for // El vector a1 es enviado como entrada a las neuronas en la segunda capa oculta. // Se produce como salida el vector a2. for k2 = 1 until n2 do // Se procesa a la k2-ésima neurona. n1 // Se calcula entk2 ,2 = ¦ wk1 ,k2 ,2 ⋅ a1, k1 . k1 =1 Real ent_k2_2 = 0 for k1 = 1 until n1 do ent_k2_2 = ent_k2_2 + W_HLayer2[k2][k1] * a1[k1] end-of-for // Se aplica la función de activación y se obtiene la salida. a2[k2] = g(ent_k2_2) end-of-for // El vector a2 es enviado como entrada a las neuronas en la capa de salida. // Se produce como salida final de la red el vector O. for i = 1 until q do // Se procesa a la i-ésima neurona. n2 // Se calcula enti = ¦ wk2 ,i ⋅ a2,k2 k2 =1 Real ent_i = 0 for k2 = 1 until n2 do ent_i = ent_i + W_Output[i][k2] * a2[k2] end-of-for // Se aplica la función de activación y se obtiene la salida. O[i] = g(ent_i) end-of-for // Se retornan los vectores a1, a2 y O. return {a1, a2, O} end-of-procedure 231 Una Introducción al Cómputo Neuronal Artificial Veamos ahora la instancia del Algoritmo de Retropropagación bajo una red con dos capas ocultas. Es claro que haremos referencia a las Ecuaciones presentadas en la Sección anterior. Primero describamos textualmente los pasos que deberán ser efectuados: • Inicializar los pesos de todas las neuronas de manera aleatoria con valores en (-1, 1). • Repetir hasta que la red proporcione salidas con un error aceptable o bien hasta que el número requerido de presentaciones del conjunto de entrenamiento haya sido alcanzado: o Para cada vector χ en el conjunto de entrenamiento: Obtener la correspondiente salida O de la red. Obtener el vector de salida esperada T asociado al vector de entrada χ. Para i = 1 hasta q: • Calcular Erri = Ti – Oi Fase 1 - Actualización de pesos en las neuronas de la capa de salida: • Para cada neurona i en la capa de salida, i = 1, 2, …, q: o Calcular (Ecuación 6.4.10, haciendo m = 2): § § n2 · · § n2 · Δ i = Erri ⋅ g '(enti ) = ¨ Ti − g ¨ ¦ wk2 ,i ⋅ a2,k2 ¸ ¸ ⋅ g ' ¨ ¦ wk2 ,i ⋅ a2,k2 ¸ ¨ ¸ © k2 =1 ¹ ¹ © k2 =1 ¹ © o Para k2 = 1 hasta n2: wk2 ,i = wk2 ,i + α⋅Δi⋅ a2,k2 (Ecuación 6.4.18, m = 2) Fase 2 - Actualización de pesos en las neuronas de la segunda capa oculta: • Para cada neurona k2 en la segunda capa oculta, k2 = 1, 2, …, n2: o Calcular (Ecuación 6.4.13, haciendo O = 2, m = 2) q q § n1 · Δ k2 ,2 = ¦ Δi ⋅ wk2 ,i ⋅ g ' entk2 ,2 = ¦ Δ i ⋅ wk2 ,i ⋅ g ' ¨ ¦ wk1 ,k2 ,2 ⋅ a1,k1 ¸ i =1 i =1 © k1 =1 ¹ o Para k1 = 1 hasta n1: wk1 ,k2 ,2 = wk1 ,k2 ,2 + α⋅ Δ k2 ,2 ⋅ a1,k1 (Ecuación 6.4.19, m = 2) ( ) (Fase 3 - Actualización de pesos en las neuronas en las capas ocultas intermedias) Fase 4 - Actualización de pesos en las neuronas de la primer capa oculta: • Para cada neurona k1 en la primer capa oculta, k1 = 1, 2, …, n1: o Calcular (Ecuación 6.4.15, haciendo O = 1) n2 n2 § p · Δ k1 ,1 = ¦ Δ k2, 2 ⋅ wk1 ,k2 ,2 ⋅ g '(entk1 ,1 ) = ¦ Δ k2, 2 ⋅ wk1 ,k2 ,2 ⋅ g ' ¨ ¦ wk ,k1 ,1 ⋅ I k ¸ k2 =1 k2 =1 © k =1 ¹ o Para k = 1 hasta p: wk , k1 ,1 = wk , k1 ,1 + α⋅ Δ k1 ,1 ⋅Ιk (Ecuación 6.4.21) De acuerdo al procedimiento de Retropropagación descrito en la Sección anterior tenemos que considerar 4 fases: (1) actualización de los pesos la neuronas en la capa de entrada, (2) actualización de los pesos en la última capa oculta, (3) actualización de los pesos en las neuronas de las capas ocultas intermedias, y (4) actualización de los pesos en la primer capa oculta. En la instancia para una red de dos capas ocultas hemos hecho mención de la fase 3, sólo por consistencia con la Sección anterior, aunque es claro que realidad no se hace nada. 232 Capítulo 6. Redes de Perceptrones Contamos ya con los elementos para presentar la instancia específica del Algoritmo de Retropropagación para una Red de Perceptrones formada por dos capas ocultas. Véase el Algoritmo 6.5. Nuestro procedimiento recibe 8 entradas: • • • • • • • • Un entero N que denota al tamaño del conjunto de entrenamiento. Un entero p que indica la dimensionalidad de los vectores de entrada. Un entero n1 que corresponde al número de neuronas en la primer capa oculta. Un entero n2 que corresponde al número de neuronas en la segunda capa oculta. Un entero q que denota al número de neuronas en la capa de salida. Una matriz X de tamaño N × p que contiene a los vectores de entrada. Una matriz T de tamaño N × q que contiene a los vectores de salida esperada. Un entero L que indica el número de presentaciones del conjunto de entrenamiento. Nótese que el Algoritmo 6.5 no recibe un Coeficiente de Aprendizaje. Ello se debe a que utilizaremos un coeficiente que cambiará a lo largo del tiempo y en función de la presentación del conjunto de entrenamiento que se esté efectuando. La fórmula que utilizaremos para obtener a nuestro coeficiente será: α (t ) = 1 1+ t (Ecuación 6.5.1) Ello implica que en la primer presentación del conjunto (t = 1) el coeficiente a utilizar será 1 , en la segunda presentación (t = 2) tendremos α (2) = 1 y así sucesivamente. La 2 3 Figura 6.15 muestra la evolución del Coeficiente de Aprendizaje para una situación en la que se efectúan 500 presentaciones del conjunto de entrenamiento. El Algoritmo 6.5 retorna como salida tres matrices: • • • W_HLayer1: una matriz de n1 × p que contiene los pesos de las neuronas en la primer capa oculta. W_HLayer2: una matriz de n2 × n1 que contiene los pesos de las neuronas en la segunda capa oculta. W_Output: una matriz de q × n2 que contiene los pesos de las neuronas en la capa de salida. Algoritmo 6.5. Entrenamiento por Retropropagación para una Red de Perceptrones con dos capas ocultas. Procedure TwoLayerPropagation(Integer N, Integer p, Integer n1, Integer n2, Integer q, Matrix X[1,…,N][1,…,p], Matrix T[1,…,N][1,…q], Integer L) W_HLayer1 = new Matrix[1,…,n1][1,…,p] W_HLayer2 = new Matrix[1,…,n2][1,…,n1] W_Output = new Matrix[1,…,q][1,…,n2] 233 Una Introducción al Cómputo Neuronal Artificial // Los pesos de todas las neuronas se inicializan con valores aleatorios en (-1,1). // Se inicializan los pesos de las neuronas en la capa de salida. for i = 1 until q do for k2 = 1 until n2 do W_Output[i][k2] = Random( ) end-of-for end-of-for // Se inicializan los pesos de las neuronas en la segunda capa oculta. for k2 = 1 until n2 do for k1 = 1 until n1 do W_HLayer2[k2][k1] = Random( ) end-of-for end-of-for // Se inicializan los pesos de las neuronas en la primer capa oculta. for k1 = 1 until n1 do for k = 1 until p do W_HLayer1[k1][k] = Random( ) end-of-for end-of-for Δ_i = new Matrix[1,…,q] Δ_k2_2 = new Matrix[1,…,n2] Err = new Array[1,…,q] for t = 1 until L do // Se efectúa la t-ésima presentación del conjunto de entrenamiento. // Se actualiza el coeficiente de aprendizaje. Real α = 1 / (1 + t) for m = 1 until N do // Se envía a la red al m-ésimo vector de entrada. {a1, a2, O} = TwoLayerPropagation (p, n1, n2, q, W_HLayer1, W_HLayer2, W_Output, X[m]) // a1 es el vector de salida de la primer capa oculta. // a2 es el vector de salida de la segunda capa oculta. // O es el vector de salida final de la red. // Se determina al error entre la salida esperada y la salida // proporcionada por la red. for i = 1 until q do Err[i] = T[m][i] – O[i] end-of-for 234 Capítulo 6. Redes de Perceptrones // Se actualizan los pesos en las neuronas de la capa de salida. for i = 1 until q do // Se procesa a la i-ésima neurona. n2 // Se calcula enti = ¦w k2 =1 k 2 ,i ⋅ a2,k2 . Real ent_i = 0 for k2 = 1 until n2 do ent_i = ent_i + W_Output[i][k2] * a2[k2] end-of-for // Se calcula Δi = Erri ⋅ g '(enti ) . Δ_i[i] = Err[i] * g_derivative(ent_i) // Se actualiza cada peso de la i-ésima neurona. for k2 = 1 until n2 do W_Output[i][k2] = W_Output[i][k2] + α * Δ_i[i] * a2[k2] end-of-for end-of-for // Se actualizan los pesos en las neuronas de la segunda capa oculta. for k2 = 1 until n2 do // Se procesa a la k2-ésima neurona. n1 // Se calcula entk2 ,2 = ¦ wk1 ,k2 ,2 ⋅ a1, k1 . k1 =1 Real ent_k2_2 = 0 for k1 = 1 until n1 do ent_k2_2 = ent_k2_2 + W_HLayer2[k2][k1] * a1[k1] end-of-for q ( ) // Se calcula Δ k2 ,2 = ¦ Δ i ⋅ wk2 ,i ⋅ g ' entk2 ,2 . i =1 Δ_k2_2[k2] = 0 for i = 1 until q do Δ_k2_2[k2] = Δ_k2_2[k2] + Δ_i[i] * W_Output[i][k2] end-of-for Δ_k2_2[k2] = Δ_k2_2[k2] * g_derivative(ent_k2_2) // Se actualiza cada peso de la k2-ésima neurona. for k1 = 1 until n1 do W_HLayer2[k2][k1] = W_HLayer2[k2][k1] + α * Δ_k2_2[k2] * a1[k1] end-of-for end-of-for 235 Una Introducción al Cómputo Neuronal Artificial // Se actualizan los pesos en las neuronas de la primer capa oculta. for k1 = 1 until n1 do // Se procesa a la k1-ésima neurona. p // Se calcula entk1 ,1 = ¦ wk ,k1 ,1 ⋅ I k . k =1 Real ent_k1_1 = 0 for k = 1 until p do ent_k1_1 = ent_k1_1 + W_HLayer1[k1][k] * X[m][k] end-of-for n2 // Se calcula Δ k1 ,1 = ¦ Δ k2, 2 ⋅ wk1 , k2 ,2 ⋅ g '(entk1 ,1 ) . k2 =1 Real Δ_k1_1 = 0 for k2 = 1 until n2 do Δ_k1_1 = Δ_k1_1 + Δ_k2_2[k2] * W_HLayer2[k2][k1] end-of-for Δ_k1_1 = Δ_k1_1 * g_derivative(ent_k1_1) // Se actualiza cada peso de la k1-ésima neurona. for k = 1 until p do W_HLayer1[k1][k] = W_HLayer1[k1][k] + α * Δ_k1_1 * X[k] end-of-for end-of-for end-of-for // Se determina el error global de la red. // Se calcula el promedio de las distancias Euclidianas entre los vectores // de salida esperada y los vectores proporcionados por la red. Real error = 0 for m = 1 until N do // Se envía a la red al m-ésimo vector de entrada. {a1, a2, O} = TwoLayerPropagation (p, n1, n2, q, W_HLayer1, W_HLayer2, W_Output, X[m]) Real d = 0 for i = 1 until q do d = d + Pow(T[m][i] – O[i], 2) end-of-for error = error + d end-of-for error = error / N Print(error) end-of-for // Se retornan como salida los pesos encontrados. return {W_HLayer1, W_HLayer2, W_Output} end-of-procedure 236 Capítulo 6. Redes de Perceptrones α 1.2 1 0.8 0.6 0.4 0.2 0 1 50 100 150 200 250 300 350 400 450 500 t Figura 6.15. Evolución del Coeficiente de Aprendizaje α (t ) = 1 a lo largo 1+ t de 500 presentaciones del conjunto de entrenamiento. En la última instancia se tiene α(500) ≈ 0.0019. Una inspección de la codificación del Algoritmo 6.5 permitirá apreciar que se calcula un Error Global una vez que se ha efectuado una presentación del conjunto de entrenamiento. El cálculo de este error requiere que se presente a todos los vectores en el conjunto de entrenamiento utilizando los pesos actuales de las neuronas pero sin modificarlos. Utilizando el Algoritmo 6.4, cada vector de entrada es presentado y se obtiene el correspondiente vector de salida O proporcionada por la red. Posteriormente se calcula la Distancia Euclidiana entre el vector O y el correspondiente vector T de salida esperada. La idea es que si el error es mínimo entonces las distancias serán pequeñas. Las distancias se suman y finalmente se dividen entre el tamaño N del conjunto del entrenamiento. Es decir, nuestro Error Global no es mas que el promedio de las Distancias Euclidianas entre de los vectores de salida esperada y los vectores proporcionados por la red. Esta función de error se utiliza para medir el aprendizaje de la red conforme el proceso de entrenamiento se efectúa. Retornemos a nuestro caso de estudio, es decir, el modelado de la señal presentada en la Figura 6.13. Sabemos que ésta se conforma por K = 2,000 muestras. El tamaño de las subsecuencias a considerar, para formar los vectores de entrada, es M = 7. Ya comentamos que tendremos un conjunto de entrenamiento formado por N = 1,000 vectores de entrada y un conjunto de evaluación compuesto por 993 vectores. La estructura de la red que 237 Una Introducción al Cómputo Neuronal Artificial consideraremos se presenta en la Figura 6.16. Tenemos p = 7 neuronas de entrada, las cuales sabemos no efectúan ningún procesamiento y cuya finalidad es la de distribuir a los vectores de entrada hacia todas las neuronas en la primer capa oculta. Se tienen n1 = 8 neuronas en la primer capa oculta y n2 = 5 neuronas en la segunda capa oculta. Recordemos que la red recibirá un vector en \ 7 que contiene una subsecuencia de la señal [xn-1 xn-2 xn-3 xn-4 xn-5 xn-6 xn-7]T y proporcionará como salida un escalar que corresponde a la predicción xn’ para la muestra xn. Por ello mismo tendremos sólo una neurona en la capa de salida, q = 1. Nótese como es que todos los valores de la señal se encuentran dentro del intervalo [0, 1]. Por lo tanto la Función de Activación que utilizaremos será la Función Sigmoide (Ecuación 4.1.4), la cual, como apreciamos en el Capítulo 4, tiene su codominio en (0,1): 1 g ( z) = 1 + e− z a1,1 x1 I1 x2 I2 x3 I3 x4 I4 a1,2 a2,1 a1,3 a2,2 a1,4 a2,3 O1 a1,5 x5 I5 x6 I6 x7 I7 a2,4 a1,6 a2,5 a1,7 a1,8 Figura 6.16. Una Red de Perceptrones con dos capas ocultas. Se utilizará para modelar a la serie de tiempo presentada en la Figura 6.13. Al aplicar el Algoritmo 6.5 con L = 500 presentaciones del conjunto de entrenamiento se obtuvieron los pesos presentados en la Tabla 6.1. En la Figura 6.17 se presenta una gráfica con la evolución del Error Global de la red conforme el entrenamiento avanzaba. Nótese como es que en las primeras 50 presentaciones del conjunto de entrenamiento se tuvieron los cambios más drásticos en cuanto a los errores obtenidos. Una vez efectuada la primer presentación (t = 1) el error global fue de 0.1059. Después de la segunda presentación (t = 2) éste fue de 0.0685. Recordemos que el Coeficiente de 238 Capítulo 6. Redes de Perceptrones 1 1 y , respectivamente. En la tercer presentación 2 3 (t = 3) del conjunto de entrenamiento se tuvo un error global de 0.0547. Al presentar al conjunto por décima ocasión (t = 10) se contó con un error 0.0496. En la presentación t = 20 el error fue de 0.0488. En la presentación t = 50, con un Coeficiente de Aprendizaje 1 α = ≈ 0.0196 , el error global obtenido fue de 0.0478. El error Global Final, una vez 51 efectuadas las 500 presentaciones del conjunto de entrenamiento, fue de 0.0458. Recordemos que durante el entrenamiento, a la red le fue presentada únicamente información referente a las primeras 1,000 muestras de 2,000 que forman la señal. Aprendizaje en estos dos casos fue de Tabla 6.1. Pesos asociados a la Red de Perceptrones de la Figura 6.16 una vez que se aplicó el Algoritmo de Retropropagación con 500 presentaciones del conjunto de entrenamiento. Pesos Neuronas Primer Capa Oculta Neurona a1,1 w1,1,1 = -0.4341 w2,1,1 = -0.2744 w3,1,1 = 0.5131 w4,1,1 = -0.9535 w5,1,1 = 0.9207 w6,1,1 = 0.5544 w7,1,1 = 0.2594 Neurona a1,5 w1,5,1 = -0.5186 w2,5,1 = -0.1219 w3,5,1 = -0.9797 w4,5,1 = -0.8753 w5,5,1 = -0.7295 w6,5,1 = -0.7908 w7,5,1 = 0.42148 Neurona a1,2 w1,2,1 = 0.0079 w2,2,1 = 0.9458 w3,2,1 = -0.3605 w4,2,1 = 0.9001 w5,2,1 = -0.5173 w6,2,1 = 0.7269 w7,2,1 = 0.9532 Neurona a1,6 w1,6,1 = -0.5679 w2,6,1 = 0.7864 w3,6,1 = 0.8 w4,6,1 = -0.2862 w5,6,1 = -0.1438 w6,6,1 = 0.9134 w7,6,1 = 0.051 Neurona a1,3 w1,3,1 = 0.8405 w2,3,1 = 0.5505 w3,3,1 = 0.8631 w4,3,1 = -0.801 w5,3,1 = 0.8127 w6,3,1 = -0.2181 w7,3,1 = -0.8438 Neurona a1,7 w1,7,1 = 0.2224 w2,7,1 = 0.8087 w3,7,1 = -0.5434 w4,7,1 = -0.7691 w5,7,1 = 0.8699 w6,7,1 = 0.0232 w7,7,1 = -0.1974 Neurona a1,4 w1,4,1 = 0.9602 w2,4,1 = -0.6138 w3,4,1 = 0.943 w4,4,1 = -0.2488 w5,4,1 = 0.8756 w6,4,1 = -0.6935 w7,4,1 = 0.6746 Neurona a1,8 w1,8,1 = 0.1796 w2,8,1 = -0.771 w3,8,1 = -0.0713 w4,8,1 = -0.7065 w5,8,1 = 0.3666 w6,8,1 = -0.3936 w7,8,1 = 0.5881 Pesos Neuronas Segunda Capa Oculta Neurona a2,1 w1,1,2 = -0.7518 w2,1,2 = 0.9695 w3,1,2 = -0.7666 w4,1,2 = 0.0777 w5,1,2 = 0.2479 w6,1,2 = -0.68 w7,1,2 = 0.2831 w8,1,2 = -0.0803 Neurona a2,2 w1,2,2 = 0.4526 w2,2,2 = 0.6757 w3,2,2 = -0.7583 w4,2,2 = 0.7111 w5,2,2 = 0.1109 w6,2,2 = 0.8059 w7,2,2 = 0.7904 w8,2,2 = 0.4877 Neurona a2,3 w1,3,2 = -0.8859 w2,3,2 = 0.8004 w3,3,2 = 0.9212 w4,3,2 = 0.5105 w5,3,2 = 0.1298 w6,3,2 = -0.6075 w7,3,2 = -0.5820 w8,3,2 = 0.2346 Neurona a2,4 w1,4,2 = 0.1984 w2,4,2 = 0.9973 w3,4,2 = 0.297 w4,4,2 = 0.2689 w5,4,2 = -0.1319 w6,4,2 = -0.119 w7,4,2 = -0.9137 w8,4,2 = -0.2268 Neurona a2,5 w1,5,2 = -0.9319 w2,5,2 = -0.6094 w3,5,2 = -0.8472 w4,5,2 = -0.506 w5,5,2 = -0.8761 w6,5,2 = -0.7347 w7,5,2 = -0.7275 w8,5,2 = 0.143 Pesos Neurona Capa de Salida Neurona O1: w1,1 = 0.3026 w2,1 = 0.0804 w3,1 = -0.0936 w4,1 = 0.5123 w5,1 = -0.1862 239 Una Introducción al Cómputo Neuronal Artificial Error 0.12 0.1 0.08 0.06 0.04 0.02 0 1 50 100 150 200 250 300 350 400 450 500 t Figura 6.17. Evolución del Error Global de la Red de Perceptrones de la Figura 6.16 durante la aplicación del Algoritmo de Retropropagación. Se efectuaron 500 presentaciones del conjunto de entrenamiento. El siguiente paso consiste en evaluar el desempeño de la red considerando a todos los vectores disponibles: 1,000 de éstos forman el conjunto de entrenamiento mientras que los restantes 993 forman el conjunto de evaluación. El desempeño lo mediremos utilizando nuevamente nuestra Función de Error Global: el promedio de las Distancias Euclidianas entre los vectores proporcionados por la red y los vectores de salida esperada. Para contar con una apreciación visual es que con las salidas proporcionadas por la red formaremos una serie de tiempo que no es más que el estimado proporcionado por nuestra red de Perceptrones. En la Figura 6.18 se muestran tanto la serie de tiempo generada por la red (en color gris) sobrepuesta a la serie de tiempo original (en color negro). El Error Global que se obtuvo, considerando ya la totalidad de los 1,993 vectores de entrada, fue de 0.0895. Si bien es mayor al Error Global que se obtuvo únicamente con el conjunto de entrenamiento, después de 500 presentaciones, es claro que es menor que el Error Global obtenido al haber efectuado sólo una presentación (t = 1): 0.1059. Apreciando visualmente, en la Figura 6.18, es claro que nuestra Red de Perceptrones ha sido capaz de capturar en gran medida las propiedades y comportamiento de la señal original. En áreas como la Economía, las Ciencias de la Salud y Sismología es donde se cuenta con fuentes de señales para las cuales se busca una solución que las pueda modelar, y más importante aún, que permita efectuar predicciones de gran precisión. En la práctica, se tiene un gran nicho de aplicación e Investigación de las redes formadas por Perceptrones en este contexto. 240 Capítulo 6. Redes de Perceptrones xn 1.2 1 0.8 0.6 0.4 0.2 n 0 1 200 400 600 800 1000 1200 1400 1600 1800 2000 Figura 6.18. En color gris, serie de tiempo producida por la Red de Perceptrones de la Figura 6.16. En color negro, la serie de tiempo original. La recta punteada separa las muestras que conformaron al conjunto de entrenamiento (n = 1, …, 1000) de las muestras que dieron lugar al conjunto de evaluación (n = 1001, …, 2000). 241 Una Introducción al Cómputo Neuronal Artificial 242 Una Introducción al Cómputo Neuronal Artificial 7. Redes de Kohonen Una Introducción al Cómputo Neuronal Artificial 244 Capítulo 7. Redes de Kohonen 7.1 Redes Neuronales Auto-Organizadas Una de las principales desventajas de las Redes Neuronales Supervisadas yace en el hecho de que en algunos problemas las salidas correctas esperadas no pueden ser definidas a priori. En consecuencia, únicamente se cuenta con el Conjunto de Vectores de Entrada. Por lo tanto, en estos casos, no es posible medir numéricamente la magnitud del error de aprendizaje. Recordemos que esta magnitud es esencial para el control del aprendizaje en algoritmos como el de Retropropagación. En una Red Neuronal Auto-Organizada el Conjunto de los Vectores de Entrada constituyen lo que es llamado el Espacio o Ambiente de la Red. Con cada uno de estos vectores de entrada es que se producirá una adaptación de los parámetros internos de la red, es decir, un ajuste apropiado de los pesos de sus neuronas. Si tal adaptación es controlada correctamente entonces la red producirá su Representación Interna del Espacio o Ambiente. En este sentido, uno de los modelos más populares de Redes Neuronales Auto-Organizadas es el propuesto por el finlandés Teuvo Kohonen. De acuerdo a la Teoría planteada por Kohonen, si un espacio o ambiente será procesado entonces el factor fundamental a tomar en cuenta, durante el proceso de entrenamiento, es el relacionado a identificar la Estructura del Espacio. Por ejemplo, considérese un conjunto no vacío A. De hecho, el conjunto A es el espacio o ambiente de la red. Supongamos que A es particionado en 20 regiones disjuntas: a1, a2, …, a20. Véase la Figura 7.1. La idea es que el conjunto A puede ser “cubierto” por una Red de Kohonen de tal forma que cuando un vector de entrada inmerso, por ejemplo, en la región a1 es evaluado con la red, entonces una y sólo una de sus neuronas se activará. Si un vector de entrada sobre la región a13 es evaluado, entonces una neurona diferente se ha de activar. Debido a que en nuestro ejemplo se particionó al conjunto A en 20 regiones, es que en consecuencia nuestra Red de Kohonen debería contar con al menos 20 neuronas. Cada neurona se especializará en una y sólo una región. Entendamos este proceso como el hecho de que la Red de Kohonen actúa como una función f cuyo dominio es precisamente el conjunto A. La función en sí toma forma cuando cada elemento del conjunto de vectores de entrada es debidamente mapeado a la subregión que le corresponde. Dado que cada región está asociada a una neurona, que es la que proporciona la salida final, es que entonces tenemos un mapeo que va de un vector de entrada a una neurona correspondiente en la red. En términos concretos, la función f, o mejor dicho, la Red de Kohonen, efectúan una tarea de clasificación de los vectores de entrada. Las clases se conforman por las regiones definidas. Estas clases precisamente definen una representación de la estructura del espacio que forman los vectores de entrada. Obsérvese, en la Figura 7.1, que las clases a1 a a20 forman una malla sobre el conjunto A. Esta malla es llamada propiamente Mapa o Esquema del Espacio. El punto importante a estudiar en este Capítulo es que una Red de Kohonen es capaz de construir mapas para sus espacios o ambientes al utilizar un mecanismo de entrenamiento no supervisado. 245 Una Introducción al Cómputo Neuronal Artificial a1 a2 A a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a 14 a16 a17 a3 f a 15 a18 a19 a20 Figura 7.1. El conjunto A es particionado en 20 regiones. Una Red de Kohonen implementa a la función f de manera que los vectores en el conjunto A son asociados a su correspondiente clase. 7.2 La Corteza Cerebral Las Redes de Kohonen tienen su inspiración en bases neurofisiológicas. Es bien sabido que muchas de las estructuras neuronales en los cerebros de los mamíferos tienen topologías lineales (1D) o planares (2D). Entiéndase esto como que el hecho de que se tienen identificados conjuntos de neuronas que se conectan de manera que se forma arreglo unidimensional, o bien de manera que forma una superficie, un elemento bidimensional. Estas importantes estructuras neuronales se localizan en la Corteza Cerebral. La corteza cerebral es una capa de tejido nervioso que cubre exteriormente al cerebro. Esta formada por interneuronas, dentritas y núcleos de neuronas eferentes; y axones de neuronas aferentes. La corteza es la parte que se encarga de examinar, administrar, comparar y seleccionar la información proveniente del exterior y que es capturada en mayor parte por lo sentidos. La corteza ocupa una superficie de aproximadamente medio metro cuadrado y está completamente contenida en el cráneo gracias a que está plegada en una serie de Circunvoluciones. Además, su superficie está dividida en varias zonas las cuales se diferencian por cortes o hendiduras. Para su estudio, la corteza cerebral es dividida en cuatro regiones principales que toman su nombre de la porción del cráneo que la cubre: • Lóbulo Frontal • Dos Lóbulos Parietales • Lóbulo Occipital • Dos Lóbulos Temporales El Lóbulo Frontal se encarga de la actividad mental relacionada con la personalidad y la inteligencia. También tiene a su cargo del control de los movimientos voluntarios tales como las acciones de correr, caminar, sujetar algo, etc. En los Lóbulos Parietales se recibe toda la información relacionada con el tacto y es en esta región donde se efectúan los procesos de orientación espacial. En el Lóbulo Occipital se procesan todas las sensaciones y señales provenientes de los ojos. Finalmente, en los Lóbulos Temporales se recoge toda la información concerniente al sentido del oído. Estas regiones de ninguna manera se 246 Capítulo 7. Redes de Kohonen encuentran aisladas ya que las Áreas de Asociación son los puntos en los cuales las diferentes partes de la corteza intercambian información a fin de completar una visión global de lo que ocurre en el exterior del cuerpo. Como hicimos mención con anterioridad, muchas de las estructuras contenidas precisamente en los lóbulos presentan organizaciones lineales (1D) o planares (2D). Sin embargo, la experiencia sensorial es de hecho una experiencia multidimensional. Por ejemplo, la percepción de color se basa en la interacción entre tres diferentes tipos de receptores de luz. Pero además, es bien conocido que nuestros ojos también capturan información adicional acerca de la textura, estructura y posición de los objetos. Es decir, tenemos información que se transmite por el nervio óptico mediante una señal que contiene información referente a al menos 6 propiedades. Esta señal llega, como ya comentamos antes, a la corteza cerebral y en particular al lóbulo occipital donde se ubica la corteza visual, la cual se sabe es una estructura 2D. La señal multidimensional es entonces procesada y se generan las acciones o razonamientos correspondientes. Surgen de inmediato dos preguntas fundamentales (y para las cuales aún estamos en búsqueda de la respuesta): • ¿Qué mecanismo multidimensionales bidimensionales? utiliza sobre la corteza cerebral para proyectar tales señales sus estructuras neuronales unidimensionales o • ¿Qué mecanismo utilizan las estructuras neuronales lineales o planares en la corteza para procesar las señales multidimensionales provenientes de los sentidos y proporcionar sus salidas correspondientes? Hemos también de considerar algunas propiedades sumamente interesantes referentes a la relación entre la información multidimensional que llega a la corteza y las neuronas involucradas en su procesamiento. Por ejemplo, en la primera mitad del Siglo XX el neurólogo Gordon Morgan Holmes identificó algunas relaciones entre el campo visual, lo que vemos con los ojos, y la corteza visual, la unidad de procesamiento de la información visual: • Regiones vecinas en el campo visual son procesadas por regiones también vecinas, formadas por neuronas, en la corteza visual. • Las señales provenientes del centro del campo visual son procesadas, por la corteza visual, con mayor detalle y con mayor resolución que las señales provenientes de la periferia del campo visual. Ello implica que la agudeza visual se incrementa de la periferia hacia el centro del campo visual. Es posible encontrar en la corteza cerebral otras representaciones topológicas ordenadas para las sensaciones provenientes de órganos aparte del sistema ocular. Las áreas que son responsables de procesar señales están distribuidas de manera que la topología del cuerpo humano es debidamente preservada. Por ejemplo, la región responsable de procesar las señales provenientes de un brazo será vecina de la región responsable de procesar las 247 Una Introducción al Cómputo Neuronal Artificial señales provenientes de una mano. El punto interesante es que las relaciones espaciales entre las partes que componen al cuerpo humano se conservan tanto como es posible en la corteza cerebral. En concreto, la corteza cerebral cuenta, nada más y nada menos, con una representación interna que describe un esquema de su espacio o ambiente, donde tal espacio es precisamente el cuerpo humano. El Modelo Auto-Organizado de Kohonen se sustenta en todos los elementos antes descritos y establece tres puntos a tomar en cuenta para su implementación: • Es posible definir a la vecindad de una neurona. Tal vecindad se compone por otras neuronas. • Las neuronas dentro de una vecindad tendrán conexiones con otras neuronas que forman parte de la misma vecindad. • Las Redes de Kohonen son de hecho arreglos de neuronas con topologías unidimensionales, bidimensionales, o inclusive, multidimensionales. Por lo regular sólo se implementan las versiones 1D o 2D de las Redes de Kohonen. 7.3 El Modelo de Kohonen Consideremos el problema del mapeo de un Espacio n-Dimensional utilizando una Red Unidimensional de Kohonen. Tenemos que las neuronas que forman a la red serán enumeradas de 1 a m. Cada neurona recibirá un vector de entrada X conformado por n componentes: ª x1 º «x » X = « 2» «#» « » ¬ xn ¼ (Ecuación 7.3.1) A la j-ésima neurona, j = 1, 2, …, m, le será asociado un vector de pesos Wj en \ n . Este vector será utilizado para calcular la correspondiente salida de la neurona. Véase la Figura 7.2. El objetivo detrás del proceso de mapeo considera la especialización de cada neurona al asignarle una región específica del espacio o ambiente de la Red. Recordemos que este espacio se conforma por todos los vectores de entrada en el conjunto de entrenamiento. La región que se asigna a cada neurona es, como comentamos en la Sección 7.1, una clase o partición dentro del espacio de entrada. Se espera que al presentar un vector de entrada a la red, la correspondiente neurona, asociada a la clase a la que pertenece el vector dado, proporcione la salida con valor mínimo de entre todas las salidas proporcionadas por las neuronas restantes. A esta neurona se le denomina Neurona Ganadora. Las regiones o clases en que se particionará el espacio de la red son disjuntas, por lo tanto dado un vector de entrada únicamente se tendrá a una única Neurona Ganadora. Esta propiedad es conocida como “El ganador se lo lleva todo” (“The winner takes all”). 248 Capítulo 7. Redes de Kohonen Neurona 1 Neurona 2 w1 w2 x1 Neurona j Neurona 3 ... w3 x2 x3 Neurona m wj ... ... wm xn Figura 7.2. Una Red Unidimensional de Kohonen para la clasificación de vectores en \ n . Ahora bien, tenemos que especificar de manera precisa cómo es que un vector de entrada y una neurona son asociados. Comentamos previamente que cada neurona contará con un vector de pesos. Tanto el vector de entrada como el vector de pesos están en \ n y ambos representan posiciones en el espacio. Al vector de pesos Wj se le denomina Centro de Gravedad de la región de \ n asociada a la j-ésima neurona en la red. Eso quiere decir que todos los vectores de pesos son de hecho puntos esparcidos sobre el espacio de la red. Para definir la asociación de un vector de entrada X con su correspondiente región simplemente, y es parte de la genialidad del modelo de Kohonen, se calcula la Distancia Euclidiana entre X y cada uno de los vectores de pesos. Aquella neurona cuyo vector de pesos sea el más cercano al vector X es la Neurona Ganadora. De allí el tener que identificar a la neurona con la salida mínima. En este sentido, la Distancia Euclidiana funciona como un criterio de comparación entre el vector de entrada y el vector de pesos. Decimos entonces que X y Wj son cada más parecidos, o similares, conforme su Distancia Euclidiana se acerque a cero. Por otro lado, si el valor de la distancia aumenta entonces tenemos que se presentarán cada vez más diferencias entre los vectores. Ya tenemos conocimiento de cómo es que una Red de Kohonen nos ayudará a resolver el problema de la clasificación y mapeo de un conjunto vectores de entrada, ahora debemos abordar la situación referente al proceso de su entrenamiento. Para ello será necesario introducir algunos conceptos a fin de que se presenten, tanto como sea posible, relaciones de vecindad entre las regiones asociadas a las neuronas, y de hecho entre las neuronas mismas, tal como sucede con las regiones vecinas que conforman a la corteza cerebral. Definimos a una Vecindad de Radio r Asociada a la k-ésima Neurona, 1 ≤ k ≤ m, como el conjunto de neuronas localizadas hasta r posiciones de la neurona k tanto hacia la izquierda como hacia la derecha (recordemos que estamos en el caso de una Red Unidimensional, posteriormente definiremos la noción de vecindad para Redes de Kohonen Multidimensionales). Véase la Figura 7.3. Aquellas neuronas localizadas en los extremos de la red, y dependiendo del valor del radio r, contarán con vecindades asimétricas. Sea ϕ(j, k, r) una función con codominio en [0, 1], que denota a la Fuerza de Enlace entre la neurona j y la neurona k a lo largo del proceso de entrenamiento. Un punto importante es que ϕ(j, k, r) será diferente de cero sí y sólo si j se encuentra dentro de la 249 Una Introducción al Cómputo Neuronal Artificial vecindad de radio r de la neurona k. En caso contrario se tendrá que ϕ(j, k, r) = 0. Es posible tener “vecindades” de radio r = 0. Ello implica que ϕ(j, k, 0) = 0 para todas las neuronas en la red excepto cuando j = k. r r neurona k-r ... wk-r ... neurona k-1 neurona k neurona k+1 wk-1 wk wk+1 neurona k+r ... wk+r ... Figura 7.3. La vecindad de radio r para la k-ésima neurona en una Red de Kohonen 1D. La vecindad se extiende r posiciones hacia la izquierda y r posiciones hacia la derecha. El método de entrenamiento está dado por el siguiente procedimiento: • Se inicializan los pesos de todas las neuronas con valores aleatorios. • Se efectúa un número dado de presentaciones del conjunto de entrenamiento. o Para cada vector de entrada E en el conjunto de entrenamiento: Se identifica a la neurona k con la salida mínima. O en otras palabras, se identifica aquella neurona cuya distancia entre su vector de pesos y el vector E sea la menor de todas. Cada vector de pesos Wj, j = 1, 2, 3, …, m, es actualizado de acuerdo a la siguiente regla: Wj = Wj + α⋅ϕ(j, k, r)⋅(E – Wj) (Ecuación 7.3.2) La constante positiva α no es más que nuestro bien conocido coeficiente de aprendizaje. Por lo regular α ∈ (0, 1). Tiene el mismo rol, por ejemplo, que en el Algoritmo de Retropropagación: controlar la magnitud de la actualización de los pesos. La regla de actualización de pesos presentada en la Ecuación 7.3.2, y específicamente el término (E – Wj), tiene el objetivo de atraer a los vectores de pesos hacia el vector de entrada E. Al repetir la actualización de los pesos en varias presentaciones del conjunto de entrenamiento, se espera que los vectores de pesos se distribuyan uniformemente en el espacio o ambiente de la red. En la práctica, que se obtenga tal distribución uniforme depende del conjunto de entrenamiento y en particular de los vectores de entrada. Ahora bien, nótese que el procedimiento antes descrito aplica una actualización a todos los vectores de pesos, no sólo a la neurona ganadora. La idea es la siguiente: cuando la neurona ganadora ha sido actualizada aquellas neuronas dentro de su vecindad de radio r son también actualizadas. En particular se busca que si el vector de pesos de la neurona ganadora es atraído hacia una región en el espacio de la red entonces los vectores de pesos de sus neuronas vecinas sean también atraídos, pero con menor intensidad. Previamente mencionamos que la función ϕ(j, k, r) tiene su codominio en el intervalo [0, 1]. Por lo tanto, y de acuerdo a lo previamente establecido, ϕ(j, k, r) = 1 sí y sólo si j = k, ya que la máxima Fuerza de Enlace entre dos neuronas se dará cuando éstas sean ambas la neurona ganadora. Conforme una neurona dentro de la vecindad se aleje de la neurona ganadora k es que 250 Capítulo 7. Redes de Kohonen entonces se espera que ϕ(j, k, r) → 0. Esta propiedad viene a sustentar la aseveración de que los vectores de pesos de las neuronas vecinas a la ganadora son también atraídas hacia E salvo que con menor intensidad. Ahora bien, estrictamente hablando no todos los vectores de pesos son actualizados. Es el caso cuando nos referimos a las neuronas que están fuera de la vecindad de radio r de la neurona ganadora. En esta situación ϕ(j, k, r) = 0. Aunque el procedimiento especificado se aplica a todos los vectores de pesos, en esta instancia tenemos que realmente no se efectúa modificación alguna. Debe ser claro que entonces el ajuste de pesos en una Red Unidimensional de Kohonen no es más que un proceso en el que se trasladan sucesivamente a los vectores de pesos a regiones del espacio de la red. La magnitud de tales traslaciones depende del coeficiente de aprendizaje α y de la función ϕ(j, k, r). Mencionábamos en Capítulos anteriores que el Coeficiente de Aprendizaje α puede tomar un valor en función de la iteración que actualmente se esté aplicando. Por ejemplo, sabemos que podemos iniciar el entrenamiento con un coeficiente inicial α0 y que éste vaya disminuyendo conforme un cierto número de iteraciones se hayan efectuado. La idea es suponer que los pesos cada vez están más cerca de un estado óptimo y por tanto las actualizaciones requeridas deben ser de magnitud pequeña para asegurar la precisión y no alejarnos de tal punto de optimalidad. Esta misma idea puede aplicarse al entrenar a una Red de Kohonen. Pero además, también puede ser aplicada sobre la función ϕ de Fuerza de Enlace. Es posible hacer que el radio r de una vecindad sea gradualmente reducido conforme el proceso de entrenamiento avance. La idea es que inicialmente la neurona ganadora tenga influencia fuerte sobre su vecindad, pero que ésta gradualmente se vaya reduciendo a fin de no hacer que un peso asociado a una neurona vecina sea desplazado de su posición óptima debido a la actualización de la neurona ganadora. Algoritmo 7.1. Entrenamiento de una Red de Kohonen Unidimensional. Procedure TrainKohonenNetwork1D(Integer N, Integer n, Matrix E[1,…,N][1,…,n], Real α, Integer m, Integer r, Integer L) W = new Matrix[1,…,m][1,…,n] // Se asignan valores aleatorios a los vectores de pesos. for j = 1 until m do for i = 1 until n do W[j][i] = Random( ) end-of-for end-of-for // Se lleva a efecto la t-ésima presentación del conjunto de entrenamiento. for t = 1 until L do for k = 1 until N do // El k-ésimo vector de entrada es enviado a cada neurona. // Las variables minD y minN se utilizan para identificar // a la distancia mínima y a la neurona ganadora respectivamente. Real minD = ∞ Integer minN = -1 251 Una Introducción al Cómputo Neuronal Artificial for j = 1 until m do // Se calcula la Distancia Euclidiana entre el k-ésimo vector // de entrada y el vector de pesos de la j-ésima neurona. Real d = 0 for i = 1 until n do d = d + Pow(E[k][i] – W[j][i], 2) end-of-for d= d if (minD > d) then minD = d minN = j end-of-if end-of-for // minN contiene el índice de la Neurona Ganadora. Integer winnerNeuron = minN // Se actualizan los pesos de las neuronas. // El valor de ϕ determina qué vectores de pesos se actualizan. for j = 1 until m do for i = 1 until n do W[j][i] = W[j][i] + α * ϕ(j, winnerNeuron, r) * (E[k][i] – W[j][i]) end-of-for end-of-for end-of-for end-of-for // Se retornan como salida los pesos identificados. return W end-of-procedure El Algoritmo 7.1 corresponde a la implementación del entrenamiento para una Red de Kohonen 1D. El Algoritmo recibe las siguientes entradas: • Un entero N que denota al número de vectores de entrada. • Un entero n que corresponde a la dimensionalidad de los vectores de entrada. • Una matriz E de tamaño N × n que contiene a los vectores en el conjunto de entrenamiento. Entonces es claro que el k-ésimo vector de entrada y sus n componentes podrán localizarse precisamente en el k-ésimo renglón de la matriz E. • Una constante α ∈ (0, 1) correspondiente al Coeficiente de Aprendizaje. • Un entero m que indica el número de neuronas en la red. • Un entero L que denota el número de veces que el conjunto de entrenamiento será presentado. En un principio el algoritmo inicializa una matriz W de tamaño m × n. Es en esta matriz donde los vectores de pesos de las neuronas estarán contenidos. El j-ésimo vector de pesos 252 Capítulo 7. Redes de Kohonen estará entonces localizado en el j-ésimo renglón de W. Los valores de los pesos son inicialmente números aleatorios. Posteriormente se tiene que efectúan una a una las presentaciones del conjunto de entrenamiento. Cada vector de entrada es presentado a todas las neuronas en la red. A través de la Mínima Distancia Euclidiana es que se identifica a la Neurona Ganadora. En este punto tenemos que se invoca a la función de Fuerza de Enlace ϕ la cual se presupone está implementada. Recordemos que esta función deberá cumplir con retornar ϕ(j, winnerNeuron, r) = 1 cuando j corresponde a la Neurona Ganadora. Por otro lado, ϕ(j, winnerNeuron, r) ∈ (0, 1] para las neuronas que se encuentren dentro de la vecindad de radio r de la Neurona Ganadora. Finalmente, ϕ(j, winnerNeuron, r) = 0 para las neuronas que se encuentran fuera de la vecindad de la Neurona Ganadora. Sabemos que r debe ser un entero no negativo. En el caso cuando r = 0 entonces tendremos que ϕ(j, winnerNeuron, r) = 0 para toda neurona excepto cuando j = winnerNeuron. A final de cuentas el valor de la Función de Enlace determinará que vectores de pesos son actualizados. El Algoritmo termina su ejecución una vez que retorna como salida a la matriz W que contiene los pesos identificados para las m neuronas. Algoritmo 7.2. Determinando la neurona asociada a un vector de entrada E en una Red de Kohonen Unidimensional. Procedure QueryKohonenNetwork1D (Integer n, Integer m, Array E [1,…,n], Matrix W[1,…,m][1,…,n]) // El vector de entrada E es enviado a cada neurona. // Las variables minD y minN se utilizan para identificar // a la distancia mínima y a la neurona ganadora respectivamente. Real minD = ∞ Integer minN = -1 for j = 1 until m do // Se calcula la Distancia Euclidiana entre el vector de entrada E // y el vector de pesos de la j-ésima neurona. Real d = 0 for i = 1 until n do d = d + Pow(E[i] – W[j][i], 2) end-of-for d= d if (minD > d) then minD = d minN = j end-of-if end-of-for // minN contiene el índice de la Neurona Ganadora, este valor se retorna. return minN end-of-procedure 253 Una Introducción al Cómputo Neuronal Artificial El Algoritmo 7.2 representa la implementación del proceso de consulta a una Red de Kohonen 1D. Es decir, una vez que ya se cuenta con los pesos de las neuronas, al haber aplicado el Algoritmo 7.1, es que entonces se procede a invocar a la red para determinar, dado un vector de entrada E, cual es su región del espacio, o mejor dicho clase, correspondiente. En este sentido el Algoritmo 7.2 recibe como parámetros los valores de n y m, es decir, la dimensionalidad de los vectores y el número de neuronas en la red, respectivamente. Se recibe también un arreglo E de n elementos que es precisamente el vector de entrada. La matriz W de m × n contiene a los vectores de pesos. Nuestro Algoritmo simplemente calcula la Distancia Euclidiana del vector de entrada E con todos los vectores de pesos. Se identifica a la Neurona Ganadora, cuya distancia es la mínima, y se retorna su correspondiente índice como salida. ... ... ... ... ... ... ... ... X = [x 1 x 2 x 3 ... x n] T Figura 7.4. Una Red de Kohonen Bidimensional para la clasificación de puntos en \ n . Las neuronas son posicionadas en renglones y columnas. El vector de entrada X es enviado a todas las neuronas. Ahora consideremos la cuestión del problema de mapear un Espacio n-Dimensional utilizando una Red de Kohonen Bidimensional (Véase la Figura 7.4). La red 2D tendrá ahora las siguientes propiedades: • Cada neurona recibirá un vector de entrada X en \ n . • Cada neurona cuenta con un vector de pesos también en \ n . • La salida de cada neurona está dada por la Distancia Euclidiana entre el vector de entrada X y su vector de pesos. La Neurona Ganadora es aquella cuyo vector de pesos cuenta con la menor distancia con el vector X. • Se tiene una función ϕ(j, k, r) que describe la fuerza de enlace entre dos neuronas. Bajo estos criterios es natural preguntarse cuál es la diferencia con la Red Unidimensional. En realidad las diferencias entre el caso 1D y el 2D yacen en la función ϕ(j, k, r). Ello se debe a que en el caso 2D se deberá considerar una vecindad bidimensional. Una vecindad de radio r para la neurona k en una red 2D se forma por el conjunto de neuronas localizadas hasta r posiciones a la derecha, a la izquierda, por arriba y por debajo de la neurona k. Es 254 Capítulo 7. Redes de Kohonen decir, la vecindad de la neurona k es una porción cuadrangular de la red (Véase la Figura 7.5). Respecto al mecanismo de entrenamiento se tiene que es el mismo que hemos descrito con anterioridad. El siguiente paso lógico debe ser obvio: una Red de Kohonen m-Dimensional es una red en la cual las neuronas están posicionadas en un arreglo de m dimensiones. Cada neurona cuenta con su vector de pesos, recibe al vector de entrada y se determina a la Neurona Ganadora mediante el uso de la Mínima Distancia Euclidiana. La función de Fuerza de Enlace deberá describir vecindades que no son más que porciones hipercúbicas m-Dimensionales de la red. Es claro que en realidad para los casos multidimensionales de las Redes de Kohonen debemos tomar atención únicamente de la función ϕ. r ... ... ... ... ... ... ... ... r r ... r ... r ... k ... ... ... ... ... ... ... ... ... r r r Figura 7.5. La vecindad bidimensional de radio r para la k-ésima neurona en una Red de Kohonen 2D. La vecindad se extiende r posiciones cubriendo una región cuadrangular. Todas las neuronas dentro de esta región son vecinas de la neurona k. Abordemos ahora un par de ejemplos a fin de apreciar, desde un punto de vista visual, cómo es que la regla de actualización definida en la Ecuación 7.3.2 efectivamente permite obtener una partición, en clases, del ambiente de la red. Esta partición es apropiada para efectos de tareas de clasificación de los elementos en el conjunto de entrenamiento. Veamos primero el caso referente al uso de una Red de Kohonen 1D para el mapeo de la región en el plano [0, 1] × [0, 1]. Se cuenta con un conjunto de entrenamiento formado por 100 vectores de entrada distribuidos en la región dada (los componentes de los vectores están en [0, 1]). Comentamos en párrafos anteriores que los vectores de pesos deben ser inicializados con valores aleatorios, pero a fin de apreciar con mayor claridad el ajuste, los pesos serán inicializados todos con el valor 0.5, es decir, los centros de gravedad de las clases a obtener se ubican en el punto (0.5, 0.5). Supongamos que deseamos particionar el espacio [0, 1] × [0, 1] en 10 clases. Por lo tanto nuestra red se formada precisamente por 10 neuronas. Utilizaremos un coeficiente de aprendizaje α = 0.01 el cual se mantendrá constante durante todo el entrenamiento. Por otro lado, el radio de las vecindades a considerar será r = 0. Ello implica que la Ecuación 7.3.2 será aplicada únicamente a la Neurona Ganadora sin influir de ninguna manera en sus neuronas vecinas en la red. Efectuaremos en total 100 presentaciones del conjunto de entrenamiento. Procederemos tal 255 Una Introducción al Cómputo Neuronal Artificial como lo indica el Algoritmo 7.1. En la Figura 7.6 podemos apreciar visualmente la fase de inicialización cuando t = 0 (la 0-ésima presentación). En la misma Figura, en la presentación t = 2, se puede comenzar a apreciar como es que algunos vectores de pesos comienzan a desplazarse. Se pueden observar en este punto 4 vectores ya con coordenadas diferentes de (0.5, 0.5). En la presentaciones t = 4, 6, 8 vemos como es que este desplazamiento aleja cada vez más a los mismos cuatro vectores de pesos del centro del espacio. Es en la presentación t = 10 cuando claramente se aprecia un quinto vector de pesos que comienza a alejarse del centro de [0, 1] × [0, 1]. Ahora véase la Figura 7.7. En la presentación t = 20 seis vectores de pesos se alejan del punto (0.5, 0.5). Recordemos que las traslaciones aplicadas a estos vectores van en función de su cercanía con los vectores en el conjunto de entrenamiento. En la presentación t = 40 ya es posible observar a siete vectores de pesos en movimiento, mientras que en t = 50 tenemos a ocho vectores de pesos con componentes diferentes de 0.5. Es en la presentación t = 80 que ya es posible apreciar a los diez vectores de pesos distribuidos a lo largo del ambiente de la red. Nótese como es que en la presentación t = 90 aún se siguen efectuado desplazamientos, aunque también éstos ya son claramente dentro de regiones bien definidas. Llegamos a la presentación t = 100 con la que la ejecución del Algoritmo 7.1 finaliza. Ahora bien, comentábamos en párrafos anteriores que los vectores de pesos son los centros de gravedad de las clases en que hemos particionado, durante el entrenamiento de la red, a la región [0, 1] × [0, 1]. El punto ahora es identificar a las subregiones que forman a tales clases. Para ello haremos uso del Algoritmo 7.2 utilizando los pesos encontrados previamente. Recordemos que este Algoritmo, dado un vector de entrada, retorna como salida el índice asociado a la Neurona Ganadora. Ese índice lo utilizaremos ahora para enumerar a nuestras diez clases. Cada elemento del conjunto de entrenamiento será enviado al Algoritmo 7.2 a fin de determinar de qué clase es miembro. Una vez identificadas todas las membresías es que podremos acotar a las subregiones definidas por cada clase. La Tabla 7.1 describe un resumen de este análisis de membresía. También se presentan las coordenadas de los centros de gravedad de las clases, que no son más que los pesos identificados. Véase en la Tabla, por ejemplo, que 8 elementos del conjunto de entrenamiento fueron agrupados en la Clase 3. Esto quiere decir que tales vectores son los más similares al correspondiente vector de pesos. Pero además, al estar en la misma clase se dice que los 8 vectores comparten características comunes. Lo mismo se puede concluir, en otro caso, con los 13 vectores contenidos en la clase 8. Estos 13 vectores son los más similares al vector de pesos [0.17727, 0.26008]T y además, por formar parte de la misma clase, comparten similitudes entre sí. Es posible que una vez finalizado un entrenamiento se encuentre que existen clases con cero miembros. Ello quiere decir, por un lado, que ningún elemento del conjunto de entrenamiento se relacionó con el correspondiente vector de pesos, y por otro lado, que la correspondiente neurona puede ser omitida de la red sin afectar la partición del espacio que se obtuvo durante el entrenamiento. En la Figura 7.8 se muestra la partición del espacio de la red inducida por las 10 clases identificadas durante la aplicación del Algoritmo 7.1. Se pueden apreciar tanto los elementos del conjunto de entrenamiento, ya con sus correspondientes membresías, así como las posiciones finales de los centros de gravedad (vectores de pesos) de las clases. 256 Capítulo 7. Redes de Kohonen X2 (1,1) È È È È È È È È Ô È È È È È È È È È È È È È È È È È È È È È È È È È È È X2 È È È È È È È È È È È È È È Ô È È È È È È È È È È È È È È È Ô È È È È È È È È È È È È È È È È È È È È È È È È È È È È È Ô Ô È È È Ô È È È È È È È È È È È È (0,0) È È È È Ô È È È È È È È È È È ÈÈ È È È È È È È È È È È È È È È È È È È È È ÔÔ ÈÈ È Ô È È È Ô È È È È È È È È È È È (0,0) È È È È È X1 È È È È È È È È È È È È È È È Ô È È È È È È È È È È È È È È È È È È È È Ô È È È È È È È È È È È È È È È È È È È È È È È ÈÈ È È È È È È È È È È Ô È È È È È È È È È È X1 È È È È (1,1) È È È È È Ô È È È È È È È È È È È È È È È È È È È È ÈÈ È È X2 È È È È È (0,0) È È È t=6 È È È È È È È È Ô È È (1,1) È È È È È È X2 È È È t=4 È È È È X1 È È È È È (0,0) È È È È Ô È È È È È È ÈÈ È È Ô È È È È ÈÈ È È È È È È È È È È Ô È È È È È È È È È È È È È È È È È È È È È È È È È È È Ô È È È È È È È È È È È È È È ÈÈ È È È È È È È È È È È È È È È Ô Ô Ô È È È È È È (1,1) È È È È ÈÈ È È È È È È È È È È È È È È È È È X1 È È È È È È È È t=2 È È È È È È È (1,1) È È È È X2 È È È È È È Ô È È (0,0) È È È È È È È È (0,0) X1 t = 0 (fase de inicialización de pesos) È È È È È È Ô Ô Ô ÈÈ È È È È È È È È È È Ô È È È È È ÈÈ È È È È È È È È È È È È È È È È È È È È È È È È È ÈÈ È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È (1,1) È È È È È X2 È È È È È ÈÈ È È È È X1 t=8 t = 10 Figura 7.6. Evolución del ajuste de pesos para una Red de Kohonen 1D en la primeras 10 presentaciones del conjunto de entrenamiento. Los triángulos denotan las posiciones de los Centros de Gravedad (vectores de pesos) asociados a las neuronas que forman la red (véase el texto para detalles). 257 Una Introducción al Cómputo Neuronal Artificial X2 (1,1) È È È È È È Ô È È È È È È È È Ô È È È È È È È È È È È Ô È È È È È È È È È È È È È È È Ô È È È È È È È È È È È È È Ô È È (1,1) È È Ô È È È È È È È È È Ô È È È È È Ô ÔÔ È È Ô È È È È È È È È È È È È È È È È È Ô È È È È Ô È È È È È È È È È Ô È È È Ô Ô È È È È È È È È Ô È È È È È È Ô È È È È È È È È È È È È ÈÈ È È È È È È Ô È X1 (0,0) È È È È È È È È Ô È È È È È Ô È È È È È È È È È È Ô È È È È È È È È È Ô È È È Ô ÈÈ È È È È È È È È È È È È Ô È Ô È È È È È È È È È È È È È È È È È Ô È È È È È È È È È È È È È È È ÈÈ È È Ô È È È Ô È È (0,0) È È È È È È È È Ô È È È È È È È Ô È È È È È È È È È (1,1) È È È Ô È È È È È È È È È È È È È È È È X1 È È È È È X2 È È È È È È ÈÈ È È (0,0) È È Ô È t = 80 È È È È È È È È Ô È È (1,1) È È È È È È X2 È È È t = 50 È È È È È È X1 È È È È (0,0) È È È È È Ô È È È È È Ô Ô Ô ÈÈ È È Ô È È È È È È È ÈÈ È È È È È È È È È Ô È Ô È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È È Ô È È È È È È ÈÈ È È È Ô È È È È È È È È È È È È È È È È È Ô È È È È È È È È È È È (1,1) È È È È È È È È È È È È È X1 È È È È ÈÈ È È X2 È È È È È Ô (0,0) È È È È t = 40 X2 È È È È È t = 20 È È È È X1 È È È È È (0,0) È È È È È È È È È È È È È È È Ô È È È ÈÈ È È Ô Ô È È È È Ô È È È È ÈÈ È È È È È È È È È Ô È È È È È È È È È È È È È È È È È È È Ô È È È È È È È È ÈÈ È È È È È È ÔÔ È È È È È È È Ô È È È È È È È È È È È È È È È È È È È È È È È È È È È (1,1) È È È È È X2 È È È È È È È ÈÈ È È È È X1 t = 90 t = 100 Figura 7.7. Algunas fases de la evolución del ajuste de pesos para una Red de Kohonen 1D. Los triángulos denotan las posiciones de los Centros de Gravedad (vectores de pesos) asociados a las neuronas que forman la red (véase el texto para detalles). 258 Capítulo 7. Redes de Kohonen Tabla 7.1. Distribución de los 100 elementos del conjunto de entrenamiento en las 10 clases obtenidas mediante una Red de Kohonen 1D. Se muestran también las coordenadas finales de los centros de gravedad de cada clase una vez efectuadas 100 presentaciones del conjunto de entrenamiento (véase el texto para detalles). Centro de Gravedad (Vector de Pesos) Clase (Neurona) X1 X2 Miembros 1 0.48833 0.53633 2 2 0.42424 0.43497 3 3 0.62508 0.43863 8 4 0.56403 0.80818 10 5 0.20741 0.54386 12 6 0.60624 0.16832 12 7 0.86220 0.72777 12 8 0.17727 0.26008 13 9 0.16455 0.84476 14 10 0.91601 0.26776 14 X2 (1,1) (0,0) X1 Figura 7.8. Partición de la región [0, 1] × [0, 1] inducida por los centros de gravedad (vectores de pesos, triángulos en la figura) asociados a las 10 neuronas que conforman a una Red de Kohonen 1D. La región ha sido subdividida en 10 clases después de 100 presentaciones del conjunto de entrenamiento (véase el texto para detalles). 259 Una Introducción al Cómputo Neuronal Artificial (1,1,1) (1,1,1) X3 X3 (0,0,0) (0,0,0) X1 X1 t = 0 (fase de inicialización de pesos) t=2 (1,1,1) (1,1,1) X3 X3 (0,0,0) (0,0,0) X1 X1 t=4 t=6 (1,1,1) (1,1,1) X3 X3 (0,0,0) (0,0,0) X1 X1 t=8 t = 10 Figura 7.9. Evolución del ajuste de pesos para una Red de Kohonen 1D en la primeras 10 presentaciones de un conjunto de entrenamiento inmerso en un cubo unitario [0, 1] × [0, 1] × [0, 1]. Los círculos mayores denotan las posiciones de los Centros de Gravedad (vectores de pesos) asociados a las neuronas que forman la red (véase el texto para detalles). 260 Capítulo 7. Redes de Kohonen (1,1,1) (1,1,1) X3 X3 (0,0,0) (0,0,0) X1 X1 t = 20 t = 30 (1,1,1) (1,1,1) X3 X3 (0,0,0) (0,0,0) X1 X1 t = 50 t = 60 (1,1,1) (1,1,1) X3 X3 (0,0,0) (0,0,0) X1 X1 t = 80 t = 100 Figura 7.10. Algunas fases de la evolución del ajuste de pesos para una Red de Kohonen 1D. Se mapea un conjunto de entrenamiento inmerso en un cubo unitario [0, 1] × [0, 1] × [0, 1]. Los círculos mayores denotan las posiciones de los Centros de Gravedad (vectores de pesos) asociados a las neuronas que forman la red (véase el texto para detalles). 261 Una Introducción al Cómputo Neuronal Artificial Veamos ahora el caso referente al uso de una Red de Kohonen 1D para el mapeo de la región en el espacio [0, 1] × [0, 1] × [0, 1]. Este subespacio 3D corresponde a un cubo unitario. Tenemos ahora 100 vectores de entrada distribuidos a lo largo de nuestro cubo. Los condiciones de entrenamiento son las mismas que establecidos para el caso del mapeo 2D: 10 neuronas, 100 vectores de entrada, 100 presentaciones del conjunto de entrenamiento, Coeficiente de Aprendizaje α = 0.01, el cual es constante durante todo el proceso de ajuste de pesos, y vecindades de radio r = 0. Los vectores de pesos de las neuronas tendrán, obviamente, 3 componentes. Todos los componentes son inicializados con el valor 0.5. La Figura 7.9 muestra el ajuste de pesos desde la inicialización (t = 0) hasta la décima presentación del conjunto de entrenamiento (t = 10). Nótese como es que en esta fase se pueden apreciar al menos 5 vectores de pesos con posiciones diferentes a [0.5 0.5 0.5]T. La Figura 7.10 muestra el resto del entrenamiento. En la presentaciones t = 20 y t = 30 son al menos seis vectores de pesos los que se alejan de la posición [0.5 0.5 0.5]T. En t = 60 tenemos a 9 vectores de pesos ya alejados de la posición central del cubo. Estos desplazamientos continúan en t = 80. En la última presentación del conjunto de entrenamiento, t = 100, tenemos a los diez vectores de pesos en sus posiciones finales. De hecho, y como se puede apreciar en la Tabla 7.2, todas sus posiciones son diferentes de [0.5 0.5 0.5]T. La misma Tabla nos presenta la distribución de los 100 vectores de entrada en las 10 clases definidas. La clase 1 cuenta con sólo un miembro, mientras que la clase 8 cuenta con 18. La Tabla 7.2 así como la Figura 7.10, en particular en el estado t = 100, nos muestran, de manera visual, como es que los vectores de pesos terminaron con una buena distribución dentro del cubo [0, 1] × [0, 1] × [0, 1]. Tabla 7.2. Distribución de los 100 elementos del conjunto de entrenamiento, inmerso en un cubo unitario [0, 1] × [0, 1] × [0, 1], en las 10 clases obtenidas mediante una Red de Kohonen 1D. Se muestran también las coordenadas finales de los centros de gravedad de cada clase una vez efectuadas 100 presentaciones del conjunto de entrenamiento (véase el texto para detalles). Centro de Gravedad (Vector de Pesos) Clase (Neurona) X1 X2 X3 Miembros 1 0.45305 0.47843 0.47249 1 2 0.29893 0.45176 0.70130 11 3 0.47045 0.64149 0.43975 6 4 0.18590 0.77053 0.32384 16 5 0.44663 0.17516 0.38233 7 6 0.37887 0.91071 0.82416 8 7 0.85845 0.29124 0.66388 12 8 0.82900 0.76613 0.37098 18 9 0.18899 0.09757 0.78948 10 10 0.26443 0.29779 0.10249 11 7.4 Aplicación: Clasificación Automática de Imágenes Una de las aplicaciones más populares de las Redes de Kohonen es en la clasificación no supervisada de datos. En particular, en esta Sección haremos una breve visita a lo que es la Clasificación No Supervisada de Imágenes. Esta aplicación juega un rol importante en áreas como Visión por Computadora en donde se requiere que imágenes con 262 Capítulo 7. Redes de Kohonen características similares sean agrupadas en clases. Algunas de las tareas de procesamiento e indexación de imágenes dependen en gran medida de cómo éstas se encuentran agrupadas. Como mencionábamos previamente, en esta Sección mostraremos como es que el entrenamiento de una Red de Kohonen 1D proporciona una solución al Problema de la Clasificación Automática de Imágenes. Algunos métodos y procedimientos que se describirán a continuación fueron originalmente presentados y discutidos en las siguientes publicaciones por algunos muy distinguidos y apreciados colegas junto con el Autor: • Pérez-Aguila, Ricardo; Gómez-Gil, Pilar & Aguilera, Antonio. One-Dimensional Kohonen Networks and Their Application to Automatic Classification of Images. International Seminar on Computational Intelligence 2006, pp. 95-99. IEEE – CIS Chapter Mexico. October 9 to 11, 2006. Tijuana, México. • Pérez-Aguila, Ricardo, Gómez-Gil, Pilar & Aguilera, Antonio. Non-Supervised Classification of 2D Color Images Using Kohonen Networks and a Novel Metric. 10th Iberoamerican Congress on Pattern Recognition, CIARP 2005; Lecture Notes in Computer Science, Vol. 3773, pp. 271-284. La Havana, Cuba. • Pérez-Aguila, Ricardo. Automatic Segmentation and Classification of Computed Tomography Brain Images: An Approach Using One-Dimensional Kohonen Networks. IAENG International Journal of Computer Science, Vol. 37, Issue 1, pp. 27-35. International Association of Engineers (IAENG), February 2010. 7.4.1 Redistribución del Conjunto de Entrenamiento En Secciones anteriores mencionábamos que el mecanismo de ajuste de pesos para una Red de Kohonen asume que los elementos del conjunto de entrenamiento se encuentran uniformemente distribuidos en el espacio o ambiente de la red. Sin embargo, y en función de la naturaleza de los vectores de entrada, esto no siempre se puede garantizar. Por ejemplo, considérese un conjunto de vectores distribuidos en el subespacio 3D definido por el cubo unitario [0,1] × [0,1] × [0,1]. Además, asúmase que este conjunto de vectores está inmerso en una subregión delimitada por el cubo [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6]. Véase la Figura 7.11. Debido a que los puntos no están uniformemente distribuidos en el cubo [0,1] × [0,1] × [0,1], el espacio de la red, es que entonces podemos esperar importantes repercusiones durante el proceso de clasificación, es decir, en el entrenamiento. Ello se debe a que los vectores de pesos no tendrán “suficiente” espacio para moverse ya que el hecho de que los vectores de entrada se encuentren “anidados” en una subregión hará que no sea clara la identificación de similitudes y diferencias entre los elementos del conjunto de entrenamiento. En consecuencia, podemos esperar vectores de pesos cuyos componentes casi coinciden con los de otros vectores de pesos, o por otro lado, vectores de pesos, que si bien se han desplazado, no tendrán elementos asociados del conjunto de entrenamiento, es decir, describen clases sin miembros. Veamos una solución para el problema que acabamos de plantear. Considérese un Hipercubo unitario n-Dimensional H, es decir: H = [0,1] × [0,1] × ... × [0,1] (Ecuación 7.4.1) n 263 Una Introducción al Cómputo Neuronal Artificial X3 (1,1,1) (0.3, 0.3, 0.3) (0.6, 0.6, 0.6) (0,0,0) X2 X1 Figura 7.11. Un conjunto de vectores inmersos en el cubo [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6] ⊆ [0,1] × [0,1] × [0,1]. Supongamos ahora que tenemos un conjunto de vectores E1, E2, E3, …, EN, inmersos también en un Hipercubo n-Dimensional h, pero con la propiedad de que h está contenido en H, es decir, h ⊆ H (en el ejemplo que planteábamos anteriormente tenemos que n = 3, H = [0,1] × [0,1] × [0,1] y h = [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6]). Ahora bien, con los vectores inmersos en h formaremos dos nuevos vectores: Pmin y Pmax. Pmin es el vector cuyo i-ésimo componente, ximin , está dado por: min xi ­ ½ ª # º ° ° « » = min ® x j ,i : E j = « x j ,i » , j = 1, 2,..., N ¾ ° ° «¬ # »¼ ¯ ¿ (Ecuación 7.4.2) Es decir, de los i-ésimos componentes de cada uno de los vectores E1, E2, E3, …, EN se elije al menor. En consecuencia el vector Pmin está dado por: Pmin 264 ª x1min º « min » x =« 2 » « # » « min » ¬« xn ¼» (Ecuación 7.4.3) Capítulo 7. Redes de Kohonen Es claro entonces que el vector Pmin se conforma por los componentes mínimos tomados de los vectores E1, E2, E3, …, EN. Por otro lado, y de manera similar, tenemos que el vector Pmax está dado por: Pmax ª x1max º « max » x =« 2 » « # » « max » ¬« xn ¼» (Ecuación 7.4.4) Donde: max xi ­ ½ ª # º ° ° « » = max ® x j ,i : E j = « x j ,i » , j = 1, 2,..., N ¾ ° ° «¬ # »¼ ¯ ¿ (Ecuación 7.4.5) Resulta claro que el vector Pmax se conforma por los componentes máximos tomados de los vectores E1, E2, E3, …, EN. Los vectores Pmin y Pmax describen entonces la diagonal principal del Hipercubo h (en nuestro ejemplo anterior, con n = 3, tendríamos que Pmin = [0.3 0.3 0.3]T y Pmax = [0.6 0.6 0.6]T, véase la Figura 7.12). X3 (1,1,1) P max = (0.6, 0.6, 0.6) X2 P min = (0.3, 0.3, 0.3) (0,0,0) X1 Figura 7.12. La diagonal principal asociada al cubo [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6]. 265 Una Introducción al Cómputo Neuronal Artificial A cada uno de los vectores Ej = [xj,1 xj,2 … xj,n]T, j = 1, 2, …, N, y también a los vectores Pmin y Pmax, se les aplicará ahora una traslación. Esta traslación, definida en función de Pmin, producirá un nuevo conjunto de vectores y está dada por: ª x j ,1 º ª x1min º ª x ' j ,1 º » « « » « » E j ' = E j − Pmin = « # » − « # » = « # » « x j ,n » « xnmin » « x ' j ,n » ¬ ¼ ¬ ¼ ¼ ¬ max min ª x1 º ª x1 º ª x1max 'º « » « » « » Pmax ' = Pmax − Pmin = « # » − « # » = « # » « xnmax » « xnmin » « xnmax '» ¬ ¼ ¬ ¼ ¬ ¼ Pmin ' = Pmin − Pmin (Ecuación 7.4.6) (Ecuación 7.4.7) ª x1min º ª x1min º ª0 º « » « » = « # » − « # » = «« # »» « xnmin » « xnmin » «¬0 »¼ ¬ ¼ ¬ ¼ (Ecuación 7.4.8) La Ecuación 7.4.8 es obvia, pero nos indica claramente que la traslación aplicada hace que se cuente ahora con un Hipercubo h’, aún inmerso en el Hipercubo H, en el cual uno de sus vértices es precisamente el vector cero, o bien, el origen. La diagonal principal de h’ está escrita por Pmin ' = 0 y Pmax ' . El conjunto de vectores, trasladados, E1 ', E2 ',..., EN ' está claramente contenido en h’ (Véase la Figura 7.13 donde se aplica la traslación a nuestro caso ejemplificado con n = 3). X3 (1,1,1) P max' = (0.3, 0.3, 0.3) X2 P min' = (0, 0, 0) X1 Figura 7.13. Traslación de los vectores originalmente inmersos en el cubo [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6] de manera que Pmin ' es ahora el origen del espacio 3D. 266 Capítulo 7. Redes de Kohonen La segunda parte del procedimiento de redistribución del conjunto de entrenamiento consiste ahora en la extensión del Hipercubo h’ a fin de ocupe por completo el espacio definido por el Hipercubo H. Para ello requerimos aplicar un escalamiento a todos nuestros vectores. Es bien sabido que el escalamiento se da al multiplicar a todos los componentes de un vector por los factores S1, S2, …, Sn, donde el i-ésimo factor, Si, se relacionará únicamente con el i-ésimo componente del vector. Dado que nuestro objetivo es extender a h’, y a los vectores E1 ', E2 ',..., EN ' , de manera que ahora ocupen a todo el Hipercubo H, entonces tenemos que el escalamiento deberá mapear al vector Pmax ' en el vector [1 1 … 1]T. En consecuencia se debe dar solución al conjunto de n ecuaciones: ximax '⋅ Si = 1, i = 1, 2,..., n (Ecuación 7.4.9) Lo cual es en realidad muy sencillo y la solución nos proporciona los factores de escalamiento a aplicar: Si = 1 max i x ' , i = 1, 2,..., n (Ecuación 7.4.10) (Retomando nuestro ejemplo con n = 3 tenemos que en la Figura 7.14 se puede apreciar el resultado de aplicar el mencionado escalamiento). X3 (1,1,1) X2 (0,0,0) X1 Figura 7.14. Aplicación de factores de escalamiento de manera que el conjunto de vectores originalmente inmerso en el cubo [0.3, 0.6] × [0.3, 0.6] × [0.3, 0.6] (Figura 7.11) se redistribuya a lo largo del cubo [0, 1] × [0, 1] × [0, 1]. 267 Una Introducción al Cómputo Neuronal Artificial En la práctica nuestro método asume que efectivamente el conjunto de entrenamiento está inmerso en el Hipercubo H pero que necesita ser redistribuido. Entonces, realmente solo se requieren identificar a Pmin y Pmax (Ecuaciones 7.4.3 y 7.4.4) y aplicar de manera directa las Ecuaciones 7.4.6 y 7.4.10. Con lo que se tiene una fórmula que engloba a todos los pasos antes mencionados: ª x j ,1 º « » Ej = « # » « x j ,n » ¬ ¼ → ª ·º 1 min § « ( x j ,1 − x1 ) ¨ max min ¸ » © x1 − x1 ¹ » « ª x*j ,1 º « » # « » « » # « » « » § · 1 E j * = « x*j ,i » = « ( x j ,i − ximin ) ¨ max min ¸ » « » « © xi − xi ¹ » « # » « » # « x* » « » j n , ¬ ¼ ·» « 1 min § « ( x j ,n − xn ) ¨ x max x min ¸ » © n − n ¹¼ ¬ (Ecuación 7.4.11) Donde E1*, E2 *,...EN * son los vectores en el conjunto de entrenamiento pero redistribuidos × [0,1] × ... × [0,1] . de manera que ocupan por completo el espacio [0,1] n 7.4.2. Clasificación de Imágenes mediante una Red de Kohonen 1D Sean m1 (renglones) y m2 (columnas) las dimensiones de una imagen bidimensional. Sea n = m1 ⋅ m2. Sabemos que el j-ésimo píxel en la imagen, j = 1, 2, …, n, tendrá asociado un vector en \ 3 dado por [xj,1 xj,2 Gj]T, donde xj,1 y xj,2 son sus respectivos renglón y columna en la imagen, mientras que Gj es su valor en el conjunto {0, 1, 2, …, 255}, el cual representa su intensidad bajo escala de grises. En primer lugar tenemos que los valores de intensidad de los píxeles deberán ser normalizados de manera que éstos se encuentren en el intervalo [0, 1]. Tal normalización es en realidad simple y se implementa mediante: G normalized = j Gj 255 (Ecuación 7.4.12) Ahora bien, sabemos que una imagen por lo regular es representada mediante una matriz de píxeles. Sin embargo, nótese que hemos introducido a n y j para denotar al número total de píxeles en una imagen y para referirnos mediante un único índice a un píxel, respectivamente. Y es que básicamente lo que haremos será definir a un vector en el Espacio n-Dimensional al concatenar a los m1 renglones en la imagen. Cada renglón contiene los valores de intensidad de sus correspondientes píxeles. A fin de asegurarnos que 268 Capítulo 7. Redes de Kohonen el vector se encuentre dentro del Hipercubo H = [0,1] × [0,1] × ... × [0,1] (Ecuación 7.4.1) es n que consideraremos sus valores de intensidad normalizados (Ecuación 7.4.12). De esta manera una imagen estará ahora asociada a un vector. Consideraremos un conjunto de 340 imágenes en escala de grises. Estas imágenes corresponden a secciones cerebrales capturadas mediante Tomografía Computada. Las imágenes están asociadas a 5 pacientes, cuentan todas con una resolución de 512 × 512 píxeles y fueron capturadas utilizando el mismo equipo y bajo las mismas condiciones de contraste y configuración. Véase en la Figura 7.15 una de las imágenes bajo consideración. Figura 7.15. Una imagen correspondiente a una sección cerebral capturada mediante Tomografía Computada. Nuestras 340 imágenes son en primer representadas mediante vectores inmersos en un Espacio conformado por n = 512 × 512 = 262,144 dimensiones. Además, mediante la aplicación de la Ecuación 7.4.12 tenemos asegurado que nuestros vectores estarán inmersos en el Hipercubo unitario [0,1] × [0,1] × ... × [0,1] . Estos 340 vectores formarán 262,144 precisamente el conjunto de entrenamiento. A este conjunto también se le aplicó la Ecuación 7.4.11 a fin de asegurar que se encuentre completamente distribuido a lo largo de nuestro Hipercubo. Utilizaremos a una Red de Kohonen 1D a fin de obtener una clasificación para las 340 imágenes. Nótese que entonces efectuaremos un mapeo de un Espacio de 262,144 dimensiones hacia un arreglo de neuronas unidimensional. Consideraremos una partición en 20 clases. Por lo tanto nuestra red se conformará por 20 neuronas. El vector de pesos en cada neurona tendrá 262,144 componentes inicializados todos con valor 0.5. Tal como en los ejemplos presentados en la Sección 7.3, utilizaremos vecindades de radio r = 0. Por lo que nuestra función de Fuerza de Enlace tendrá valor 1 únicamente para la 269 Una Introducción al Cómputo Neuronal Artificial Neurona Ganadora y cero para las restantes neuronas en la red. Ello también tiene como consecuencia que la actualización de pesos será aplicada sólo a la Neurona Ganadora. Consideraremos 30 presentaciones del conjunto de entrenamiento. Finalmente, sólo nos basta establecer a nuestro Coeficiente de Aprendizaje α. En este caso utilizaremos: α (t ) = 1 t +1 (Ecuación 7.4.13) Donde t es la actual presentación del conjunto de entrenamiento. Ello quiere decir que en la 1 primer presentación (t = 1) tendremos un coeficiente α (1) = , en la segunda presentación 2 1 (t = 2) se usará α (2) = , y así sucesivamente. En la última presentación (t = 30) tendremos 3 1 ≈ 0.0322. La idea, como siempre, es la de iniciar un Coeficiente de Aprendizaje α (30) = 31 el entrenamiento con actualizaciones que nos permitan explorar inicialmente el Espacio de la Red con “pasos”, propiamente ajustes de pesos, de tamaño “grande”. Posteriormente, asumimos que mientras el entrenamiento avanza los pesos se acercarán cada vez más a sus posiciones óptimas. Ello implica que en estas fases requeriremos “pasos” de tamaño “pequeño” con el fin de asegurar la mayor precisión posible en los posicionamientos finales de los vectores de pesos. El Algoritmo 7.1, encargado del entrenamiento de la red, recibe como entrada nuestro conjunto de entrenamiento así como los parámetros apropiados. Debemos simplemente tomar en cuenta que el Algoritmo debe ajustarse apropiadamente para considerar nuestra función de Fuerza de Enlace y el Coeficiente de Aprendizaje tal y como los hemos establecido. Una vez efectuadas las 30 presentaciones de nuestro conjunto de entrenamiento aplicamos el Algoritmo 7.2 a fin de determinar la membresía de cada una de las 340 imágenes. Véase la Tabla 7.3. El primer punto interesante surge del hecho de que la neurona asociada a la clase 20 no cuenta con miembros. Ello quiere decir que en realidad, bajo los parámetros de entrenamiento que establecimos, 19 clases son suficientes. La clase 5 es la que más miembros tiene: 43. Por otro lado tenemos que la clase 9 únicamente cuenta con dos miembros. En este punto será natural preguntarse que tienen en común las imágenes dentro de cada clase. Para ello véase, en primer lugar, la Tabla 7.4. Esta Tabla muestra a los 16 miembros de la clase 17. Inicialmente tenemos que estas imágenes agrupan secciones correspondientes a dos pacientes. Lo interesante es que tales secciones corresponden a prácticamente las mismas regiones craneales. Recordemos que el entrenamiento de la Red de Kohonen utiliza a la Distancia Euclidiana para determinar la similitud entre los vectores de entrada. Es claro entonces que para esta clase los vectores asociados a las imágenes correspondientes fueron caracterizados como los más similares entre sí. Ahora véase la Tabla 7.5. En ésta tenemos a los 25 miembros que conforman a la clase 12. Las imágenes están asociadas a 3 diferentes pacientes y corresponden a secciones cerebrales donde se aprecia claramente, y únicamente, materia blanca, materia gris y la porción ósea del cráneo que protege a esa región del cerebro. 270 Capítulo 7. Redes de Kohonen Tabla 7.3. Clasificación de las 340 imágenes en el conjunto de entrenamiento de acuerdo a una Red de Kohonen 1D con 20 neuronas (véase el texto para detalles). Clase Miembros Clase Miembros 4 27 1 11 8 25 2 12 28 12 3 13 15 14 4 14 43 17 5 15 12 21 6 16 4 16 7 17 30 38 8 18 2 19 9 19 5 0 10 20 Tabla 7.4. Los 16 miembros de la clase 17 asociada a un conjunto de entrenamiento formado por 340 imágenes y clasificado mediante una Red de Kohonen 1D. 271 Una Introducción al Cómputo Neuronal Artificial Tabla 7.5. Los 25 miembros de la clase 12 asociada a un conjunto de entrenamiento formado por 340 imágenes y clasificado mediante una Red de Kohonen 1D. 272 Capítulo 7. Redes de Kohonen Contamos con una Red de Kohonen 1D que nos ha proporcionado una solución al Problema de la Clasificación Automática de Imágenes. En este punto es conveniente establecer, y como ya debe ser claro, que la clasificación es estructurada únicamente por la Red de Kohonen durante el proceso de entrenamiento el cual es un mecanismo no supervisado. Ello quiere decir, por un lado, que no existe un “maestro” u “orientador” que le indique a la red la existencia de un porcentaje de error o desacierto como sucede en, por ejemplo, el Algoritmo de Retropropagación. Es la Red misma la que forma su propia estructura de clasificación. Esta propiedad es sumamente atractiva, ya que hemos venido mencionado que existen una gran variedad de aplicaciones en las cuales únicamente contamos con el conjunto de vectores de entrada y nada más. Por lo tanto, modelos de Redes No Supervisadas como el de Kohonen pueden llegar a ser muy útiles a fin de determinar automáticamente una estructura o partición para tales conjuntos de vectores. Pero por otro lado, debemos tomar en cuenta que la clasificación que nos proporciona una Red de Kohonen puede llegar a ser puesta a prueba en términos de su utilidad. Las Tablas 7.4 y 7.5 nos proporcionan evidencia de una “buena” clasificación por parte de la Red para nuestras imágenes. Pero por lo regular, una vez que se cuenta con una clasificación, ésta es evaluada por un experto quien decide si es útil o no o bien si ha ayudado a encontrar patrones y propiedades que no eran visibles a simple vista. En el contexto de la aplicación que estamos presentando, un Médico Especialista es quien debería juzgar si la clasificación es apropiada o no. Por ejemplo, se podría requerir que la clasificación proporcione un mecanismo para agrupar casos médicos con diagnósticos y procedimientos comunes. De manera que cuando un nuevo caso se presente se recurra a la Red Neuronal a fin de determinar la clase que le corresponde y utilizar a los casos miembros de esa clase, y que en consecuencia son similares, como una guía a fin de proceder apropiadamente con el tratamiento del paciente. Si el Médico Especialista determina que la clasificación no es apropiada entonces es que se recurre a utilizar otros parámetros de entrenamiento: se modifican la inicialización de pesos, el número de clases, el número de presentaciones, el coeficiente de aprendizaje, etc. Esto con el fin de obtener una nueva clasificación y determinar si es útil o no. Ahora bien, hemos establecido la posible necesidad de recurrencia a un experto para determinar la utilidad de la clasificación. Pero también hemos mencionado que se busca que los vectores de pesos, una vez terminado el entrenamiento, se encuentren uniformemente distribuidos a lo largo del espacio de la red. Esta propiedad es también un parámetro a tomar en cuenta para determinar si la clasificación fue apropiada o no. En la Sección 7.3 vimos ejemplos de mapeos de espacios de 2 y 3 dimensiones. La ventaja era que podíamos analizar la relación entre el conjunto de entrenamiento y los vectores de pesos finales, y su distribución, mediante elementos visuales. El problema que tenemos ahora tiene que ver con el hecho de que hemos trabajado con un conjunto de entrenamiento formado por 340 vectores inmersos en un espacio de n = 262,144 dimensiones. ¿Cómo podemos determinar o inferir si efectivamente los vectores de pesos están uniformemente distribuidos? Para ello, debemos recurrir al uso de otras herramientas. Sabemos que existe 273 Una Introducción al Cómputo Neuronal Artificial una relación directa entre los vectores de entrada y los vectores de pesos: ambos tienen el mismo número de componentes y sus valores están en el intervalo [0, 1]. Existe una relación uno a uno entre una imagen 2D y su correspondiente vector de entrada. Por lo tanto, podemos pensar en que un vector de pesos es la representación de una imagen. Tal imagen se forma poco a poco conforme el proceso de entrenamiento avanza y además debería considerar las características que tienen en común las imágenes que se agrupan en su correspondiente clase. Esta última aseveración tiene sustento en el hecho de que un vector de pesos es actualizado utilizando a la imagen actualmente procesada. El punto ahora es simplemente considerar que todo vector de pesos puede ser expresado como una imagen en escala de grises. Visualizando todas las imágenes formadas, y asociadas a los vectores de pesos, es que podremos apreciar que tan diferentes, o similares, son entre sí. De esta manera podemos contar con un parámetro para inferir que tan bien distribuidos están los pesos en el Espacio de la red. La Tabla 7.6 muestra precisamente las 20 imágenes descritas por nuestros vectores de pesos. Mencionamos antes que la clase 20 no contaba con miembros. Véase en la Tabla como es que su imagen correspondiente no contiene información visual alguna. De hecho, todos sus componentes tienen valor 0.5, indicando que durante el entrenamiento la neurona asociada nunca fue caracterizada como Ganadora. Por otro lado, obsérvense las imágenes asociadas a los vectores de pesos para las clases 12 y 17. Este par de imágenes guardan una gran similitud con sus correspondientes imágenes en el conjunto de entrenamiento (Tablas 7.4 y 7.5). Como hemos podido apreciar, las Redes de Kohonen usan como parte fundamental de su proceso de entrenamiento y clasificación a la Distancia Euclidiana sobre el espacio n-Dimensional. Debido a que cada uno de los vectores de pesos asociados a las clases son precisamente vectores en \ n , entonces es que podemos determinar también la Distancia Euclidiana entre cualquier par de vectores de pesos. La idea ahora es definir un Mapa de Falso Color que representará la distribución de los vectores de pesos en el subespacio [0,1] × [0,1] × ... × [0,1] . Es claro que la Distancia Euclidiana máxima entre dos vectores será n dmax = n , mientras que la Distancia Euclidiana mínima será, obviamente, dmin = 0. Toda Distancia Euclidiana d entre dos vectores de pesos será asociada con una intensidad G en la escala de grises mediante: « d » ⋅ 255» GW = « ¬ d max ¼ (Ecuación 7.4.14) De esta manera si d = 0 entonces se tendrá asociada la intensidad correspondiente al color negro. Por otro lado, si d = dmax = n entonces se tendrá al color blanco. 274 Capítulo 7. Redes de Kohonen Tabla 7.6. Visualización de las imágenes asociadas a los vectores de pesos de una Red de Kohonen 1D formada por 20 neuronas (Véase el texto para detalles). Clase 1 Clase 2 Clase 3 Clase 4 Clase 5 Clase 6 Clase 7 Clase 8 Clase 9 Clase 10 Clase 11 Clase 12 Clase 13 Clase 14 Clase 15 Clase 16 Clase 17 Clase 18 Clase 19 Clase 20 275 Una Introducción al Cómputo Neuronal Artificial Consideremos a nuestra Red de Kohonen 1D. En la Figura 7.16 se presenta el Mapa de Falso Color asociado a las distancias entre nuestros 20 vectores de pesos. Tenemos entonces una representación visual y planar de cómo es que están distribuidos los vectores de pesos una vez finalizado el entrenamiento de la red. La diagonal principal tiene asociado el color negro debido a que la distancia de un vector de pesos consigo mismo es cero. Realmente son las regiones restantes del mapa las que nos interesan. Intuitivamente, concluiríamos que la distribución es buena si los colores asociados a las distancias tienden hacia el blanco. ¿Cómo deberíamos interpretar al mapa de manera más objetiva? Para ello tendríamos que recurrir a los valores de las distancias. Distancia Euclidiana Mínima Distancia Euclidiana Máxima Figura 7.16. Mapa de Falso Color que muestra las distancias entre los vectores de pesos asociados a una Red de Kohonen 1D formada por 20 neuronas. Consideremos únicamente las distancias que tienen los vectores de pesos asociados a las clases 12 (Tabla 7.5) y 17 (Tabla 7.4) con todos los demás vectores de pesos. Véase la Tabla 7.7. Veamos primero el caso de las distancias que tiene el vector de pesos asociado a la clase 12. Evidentemente la distancia de un vector de pesos consigo mismo es cero y por esa razón omitiremos esa instancia. La distancia mínima que tiene este vector es con el vector de pesos asociado a la clase 8 (111.6704); mientras que la máxima es con el vector correspondiente a la clase 10 (173.0801). En promedio se tiene una distancia de 132.7726. Son 15 los vectores de pesos con los que se tiene una distancia por encima del promedio. Ahora bien, analicemos de igual forma al vector de pesos asociado a la clase 17. La distancia máxima se da con el vector de pesos correspondiente a la clase 8 (159.4698); mientras que la mínima se presenta con el vector de pesos asociado a la clase 19 276 Capítulo 7. Redes de Kohonen (108.6999). El promedio de las distancias que tiene nuestro vector con los restantes es de 127.0818. Se tienen 16 vectores de pesos cuyas distancias están por encima de este valor. Utilizando estas observaciones podemos entonces establecer que aquellos vectores de pesos cuyas distancias estén por debajo del promedio sean caracterizados como los vectores más similares, mientras que aquellos que estén por encima del promedio se les ha de denotar como con los que más diferencias se tienen. Lo interesante es que para ambas clases bajo estudio, la 12 y 17, tenemos que más del 75 % de los vectores de pesos que conforman a la red presentan diferencias notables. Desde un punto de vista geométrico podemos decir entonces que los vectores de pesos asociados a las clases 12 y 17 se encuentran bien colocados en el espacio de la red. Si la mayoría de las clases para nuestra Red de Kohonen hubiesen sido caracterizadas como similares a nuestros vectores de pesos, debido a que sus distancias son menores a la distancia promedio, entonces hubiésemos podido inferir que el vector de pesos bajo estudio está demasiado cerca de otros y por tanto no se logra diferenciar adecuadamente, impactando con ello la partición obtenida para el Espacio de la red. Finalmente, este tipo de análisis tienen el objetivo de proporcionar elementos para establecer si la clasificación es apropiada. Pero como ya comentamos antes, la utilidad de la clasificación también va en función del contexto del problema que se esté tratando. Tabla 7.7. Distancias que tienen los vectores de pesos asociados a las clases 12 y 17 con todos los demás vectores de pesos que conforman a una Red de Kohonen 1D. Clase 12 Clase 17 168.3854 139.3557 Clase 1 151.5977 141.7146 Clase 2 167.1622 158.2210 Clase 3 170.0472 150.0269 Clase 4 138.8657 146.1057 Clase 5 148.1818 127.6880 Clase 6 169.6480 143.1229 Clase 7 111.6704 159.4698 Clase 8 164.2003 144.7317 Clase 9 173.0801 148.6562 Clase 10 128.3436 110.4572 Clase 11 0.0 146.3194 Clase 12 131.3029 119.8285 Clase 13 138.4280 131.3952 Clase 14 133.6582 144.6634 Clase 15 138.4936 157.2248 Clase 16 146.3194 0.0 Clase 17 116.2553 136.6072 Clase 18 147.5144 108.6999 Clase 19 145.0719 154.4305 Clase 20 277 Una Introducción al Cómputo Neuronal Artificial 278 Una Introducción al Cómputo Neuronal Artificial Referencias Libros de Texto • Inteligencia Artificial: Sistemas Inteligentes con C#. Nicolás Arrioja Landa Cosio. Gradi, 2007. • Introduction to Algorithms. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest y Clifford Stein. MIT Press, Segunda Edición, 2001. • Neural Networks. Eric Davalo y Patrick Naïm. The Macmillan Press Ltd, 1992. • Principles of Artificial Neural Networks. Daniel Graupe. Advanced Series on Circuits and Systems, Vol. 6. World Scientific, Segunda Edición, 2007. • Elementary Linear Algebra. Stanley I. Grossman. Brooks Cole, Quinta Edición, 1994. • Neural Networks: A Comprehensive Foundation. Simon Haykin. Prentice Hall; Segunda Edición, 1998. • Redes Neuronales Artificiales. José Hilera y Victor Martínez. Editorial Alfaomega, 2000. • Linear Algebra and Its Applications. David C. Lay. Addison Wesley, Tercera Edición, 2005. • Fuzzy-Neuro Approach to Agent Applications. Raymond S. T. Lee. Springer-Verlag Berlin Heidelberg, 2006. 279 Una Introducción al Cómputo Neuronal Artificial • La Mente Humana C. Rayner Ediciones Orbis, 1985. • El Cuerpo Humano (Tomos I y II) C. Rayner Ediciones Orbis, 1985. • Neural Computation and Self-Organizing Maps, An Introduction. Helge Ritter, Thomas Martinetz y Klaus Schulten. Addison-Wesley Publishing Company, 1992. • Neural Networks: A Systematic Introduction. Raul Rojas. Springer-Verlag, Berlin, New-York, 1996. • Artificial Intelligence: A Modern Approach. Stuart Russell y Peter Norvig. Prentice Hall Series in Artificial Intelligence, Segunda Edición, 2002. • Calculus On Manifolds: A Modern Approach To Classical Theorems Of Advanced Calculus. Michael Spivak. Westview Press, 1971. • Calculus. Michael Spivak. Publish or Perish, Segunda Edición, 1980. • Calculus. James Stewart. Brooks/Cole Publishing Company, Tercera Edición, 1995. Artículos • 280 Automatic Segmentation and Classification of Computed Tomography Brain Images: An Approach Using One-Dimensional Kohonen Networks. Ricardo Pérez-Aguila. IAENG International Journal of Computer Science, Vol. 37, Issue 1, pp. 27-35. ISSN: 1819-9224 (online version), 1819-656X (print version). International Association of Engineers (IAENG), February 2010. Una Introducción al Cómputo Neuronal Artificial • Brain Tissue Characterization Via Non-Supervised One-Dimensional Kohonen Networks. Ricardo Pérez-Aguila. Proceedings of the XIX International Conference on Electronics, Communications and Computers CONIELECOMP 2009, pp. 197-201. ISBN: 978-0-7685-3587-6. IEEE Computer Society, February, 2009. • One-Dimensional Kohonen Networks and Their Application to Automatic Classification of Images. Ricardo Pérez-Aguila, Pilar Gómez-Gil y Antonio Aguilera. Proceedings of International Seminar on Computational Intelligence 2006, pp. 95-99. IEEE – CIS Chapter Mexico. Tijuana Institute of Technology. October, 2006. • Non-Supervised Classification of 2D Color Images Using Kohonen Networks and a Novel Metric. Ricardo Pérez-Aguila, Pilar Gómez-Gil y Antonio Aguilera. Progress in Pattern Recognition, Image Analysis and Applications; 10th Iberoamerican Congress on Pattern Recognition, CIARP 2005; Proceedings. Lecture Notes in Computer Science, Vol. 3773, pp. 271-284. ISBN: 3-540-29850-9. Springer-Verlag Berlin Heidelberg, 2005. 281