Sistemas Expertos e Inteligencia Artificial. Guía No. 10 1 Facultad: Ingeniería Escuela: Computación Asignatura: Sistemas Expertos e Inteligencia Artificial Tema: Red Neuronal Hopfield. Reconocimiento de Patrones. Objetivos Específicos Comprender la importancia de la red neuronal Hopfield, usada para mejorar los pesos de entrada de la red. Implementar la red neuronal Hopfield en Microsoft Visual C#. Materiales y Equipo Guía Número 10. Computadora con programa Microsoft Visual C#. Introducción Teórica Una red de Hopfield es una forma de red neuronal artificial recurrente inventada por John Hopfield. La red de Hopfield es una de las redes unicapas de neuronas más importantes cuyas salidas son números binarios; y ha influido en el desarrollo de multitud de redes posteriores. Cada neurona de la red se encuentra conectada con todas las demás, pero no consigo mismo. Es una red autoasociativa no lineal que fue desarrollada por Hopfield en 1982, basándose en los modelos de redes de McCulloch y Pitts y los símiles de los campos magnéticos con spin de Amit, Gutfreund, & Sompolinsky. La Red de Hopfield es una red recurrente, es decir, existe realimentación entre las neuronas. De esta forma, al introducir un patrón de entrada, la información se propaga hacia adelante y hacia atrás, produciéndose una dinámica. En algún momento, la evolución se detendrá en algún estado estable. En otros casos, es posible que la red no se detenga nunca. Las redes recurrentes deben cumplir tres objetivos: 2 Sistemas Expertos e Inteligencia Artificial. Guía No. 10 a. Dado cualquier estado inicial, deben converger siempre a un estado estable. b. El dominio de atracción de cada estado estable debe estar perfectamente delimitado y cumplir algún criterio de métrica (por ejemplo, que el estado final sea el más cercano al inicial). c. Debe poder tener cualquier número de estados estables. Las redes de Hopfield se usan como sistemas de memoria asociativa con unidades binarias. Están diseñadas para converger a un mínimo local, pero la convergencia a uno de los patrones almacenados no está garantizada. La red de Hopfield es una red monocapa, esto es, de una sola capa. Aunque también se puede mostrar como una red bicapa de dos capas, la primera capa sería una capa de sensores y la segunda capa será la capa donde se realiza el procesamiento. En la versión bicapa la manera de interconexionar ambas capas es unir la primera capa a la segunda linealmente, esto es cada neurona con su respectiva, y después unir todas las neuronas con todas en la misma capa. Las Redes de Hopfield se construyen de neuronas artificiales que fueron realizadas en los años 1980 por John Hopfield, quien estudió modelos auto-asociativos que presentaban algunas similitudes con los perceptrones, pero incluía también grandes diferencias. Estas neuronas artificiales tienen N entradas. Cada entrada posee un peso asociado W 𝑖. También tienen una salida. El estado de la salida se mantiene, hasta que la neurona se actualiza. Una actualización de la neurona implica las siguientes operaciones: El valor de cada entrada, Xi es determinada y la suma ponderada de todas las entradas, se calcula ∑ Wi Xi. El estado de la salida de la neurona se establece en +1 si la suma ponderada de entrada es mayor o igual a 0. Se establece en -1 si la suma ponderada de entrada es menor que 0. Una neurona conserva su estado de salida hasta que se actualiza de nuevo. Escribiendo las operaciones como una fórmula: Sistemas Expertos e Inteligencia Artificial. Guía No. 10 3 El peso de la conexión de una neurona i a otra neurona j está dada por un número W ij. La colección de todos estos números está representado por la matriz de ponderación W, cuyos componentes son W ij. Ahora bien, dada la matriz de peso y la regla de actualización para las neuronas de la dinámica de la red se define si le decimos en qué orden actualizamos las neuronas. Hay dos formas de realizar esta actualización: Asíncrono: uno recoge una neurona, calcula la suma ponderada de entrada y actualizaciones de forma inmediata. Esto puede hacerse en un orden fijo, o las neuronas pueden ser elegidas al azar, esto se denomina actualización al azar asíncrono. Síncrono: las sumas de entrada ponderados de todas las neuronas se calculan sin actualizar las neuronas. Luego, todas las neuronas se establecen en su nuevo valor, de acuerdo con el valor de su suma ponderada de entrada. Las unidades procesadoras de la red Hopfield están completamente interconectadas, cada unidad está conectada con todas las demás unidades. Esta topología convierte a la red Hopfield en una red recursiva ya que la salida de cada unidad está realimentada con las entradas de las demás unidades. En la figura siguiente se muestra un diagrama de las unidades procesadoras de una red Hopfield. 4 Sistemas Expertos e Inteligencia Artificial. Guía No. 10 Una característica de las redes Hopfield es la doble conexión por cada pareja de unidades procesadoras, como se aprecia en la figura anterior. Además los pesos asignados a ambas conexiones tienen el mismo valor. La figura siguiente muestra un método alternativo de representación de la estructura y conexiones de la red Hopfield, específicamente una red recursiva de una capa. Las características de este tipo de redes son las siguientes: Es una estructura en donde la matriz de pesos es cuadrada y simétrica. Es decir los pesos de un patrón de entrada (PE) (nodo) a otro tiene el mismo valor en ambas direcciones. Cada nodo está conectado con todos los demás, incluso con si mismo pero el valor de dicha conexión es 0, significando que el nodo no se realimenta a sí mismo. La función de transferencia de cada nodo, que normalmente se suele utilizar, es un limitador de fuerza y los nodos calculan la suma de los pesos por las entradas menos un cierto umbral, pasando a través de la función de transferencia, produciendo así su estado de salida. Las entradas son 2 estados: binarias (0,1) o bipolar (-1,1). Por lo tanto, la función de activación de cada neurona de la red es de tipo escalón: Funcionamiento. Se trata de una red autoasociativa. Por tanto, informaciones diferentes (patrones) pueden ser almacenadas en la red, como si de una memoria se tratase, durante la etapa de aprendizaje. Posteriormente, cuando se presenta una entrada a la red, esta evoluciona hasta generar una Sistemas Expertos e Inteligencia Artificial. Guía No. 10 5 salida que coincidirá con la que corresponde a esa entrada, o bien la más parecida si la entrada está distorsionada o incompleta. La información que recibe la red debe haber sido previamente codificada y representada en forma de vector (como una configuración binaria o como un conjunto de valores reales dependiendo de si la red es discreta o continua) con tantas componentes como neuronas (N) tenga la red. Cada neurona recibe un elemento del vector. La utilización de una red de Hopfield implica los siguientes pasos: Un patrón se introduce en la red mediante el establecimiento de todos los nodos a un valor específico, o estableciendo sólo una parte de los nodos. La red se somete a un número de iteraciones utilizando actualización asíncrona o síncrona. Esto se detiene después de un tiempo. Las neuronas de la red, se leen para ver qué patrón se encuentra en la red. La idea detrás de la red de Hopfield es que los patrones se almacenan en la matriz de peso. La entrada debe contener parte de estos patrones. Luego, la dinámica de la red recupera los patrones almacenados en la matriz de peso. Esto se denomina memoria de contenido direccionable (CAM). Los patrones que se almacenan en la red se dividen en dos partes: señal y asociación. Al entrar la señal en la red, todo el patrón, que se almacena en la matriz de peso, se recupera. De esta manera la red restaura la asociación que pertenece a una señal dada. La operación de la red es totalmente diferente al sistema del Perceptrón. En el modelo de Hopfield, la primera salida es tomada como entrada en el ciclo siguiente, produciendo una nueva salida. Por tanto el aprendizaje es también diferente; en este sistema no se trata de ajustar pesos ya que éstos se mantienen constantes desde el principio, se trata de encontrar dichos pesos, en función del problema. El mecanismo de aprendizaje utilizado es de tipo off line, por lo que existe una etapa de aprendizaje y otra de funcionamiento de la red. También utiliza un aprendizaje no supervisado de tipo hebbiano, de tal forma que el peso de una conexión entre una neurona i y otra j se obtiene mediante el producto de los componentes i-ésimo y j-ésimo del vector que representa la información o patrón que debe almacenar. 6 Sistemas Expertos e Inteligencia Artificial. Guía No. 10 Utilizando una notación matricial, para representar los pesos de la red se puede utilizar una matriz de dimensión NxN (recordemos que N es el número de neuronas de la red y por tanto de componentes del vector de entrada). Esta matriz es simétrica (W ij = W ji) y con la diagonal con valores nulos (Wii = 0) al no haber conexiones autorecurrentes. También tenemos M entradas que la red debe aprender, expresadas igualmente en forma matricial, E1, E2,…, EN. Utilizando esta notación, el aprendizaje consistiría en la creación de la matriz de pesos W a partir de los M vectores de entrada que se enseñan a la red. De tal manera que el conjunto total del sistema puede venir representado por una función denominada Función de Energía de la siguiente manera: El entrenamiento de una red de Hopfield consiste en reducir la energía de los estados que la red debe “recordar”. Esto convierte a la red en un sistema de memoria direccionable, es decir, la red “recordará” un estado si se le da solo parte de dicho estado. Esto la hace útil para recuperar una entrada distorsionada usando un estado de la red obtenido durante el entrenamiento y que es más similar al estado obtenido con la entrada actual. Esto se llama memoria asociativa, ya que recupera la memoria sobre la base de la similitud. Ejecutar un patrón en la red de Hopfield consiste en enviar un patrón en la red y actualizar las neuronas repetidamente hasta que se estabilicen los estados de las neuronas a un patrón memorizado. Con pasos sería así. 1. Se establece el patrón de entrada en la capa de entrada. 2. Se actualizan las neuronas de la capa de procesamiento. 3. Si han cambiado el estado de la red o hemos realizado ya el número máximo de iteraciones, paramos. 4. Si no volvemos al paso 2. Sistemas Expertos e Inteligencia Artificial. Guía No. 10 7 Por ejemplo, si entrenamos una red Hopfield con cinco unidades para que el estado (1, 0, 1, 0, 1) sea un mínimo de energía, y le damos a la red el estado (1, 0, 0, 0, 1) esta convergerá a (1, 0, 1, 0, 1). Así, la red estará adecuadamente capacitada cuando la energía de los estados que la red debe recordar son mínimos locales. Algoritmo de Entrenamiento. Calcule los valores de los pesos que conectan a los nodos, utilizando la siguiente fórmula: Donde: tij es el peso que va de la neurona 𝑖 a la neurona 𝑗, y es el valor del i-ésimo elemento de la sésima clase 𝑚 es el número de clases que se desean aprender. En notación matricial: Esta fórmula se conoce como el producto externo de un vector renglón consigo mismo. Algoritmo de evaluación de la red Hopfield. 1. Inicialice la red con un patrón de entrada: 𝑈𝑖 (0) = 𝑋𝑖 0 ≤ 𝑖 ≤ 𝑛−1 Donde 𝑛 es el número de nodos en la red 2. Itere hasta converger siguiendo la siguiente fórmula: Donde F es una función escalón definida como: 8 Sistemas Expertos e Inteligencia Artificial. Guía No. 10 Cuando la red converge, su salida representa al patrón que más se parece al patrón de entrada dado. Ventajas de las Redes de Hopfield. Prácticamente no existe tiempo de entrenamiento, ya que este no es un proceso adaptativo, sino simplemente el cálculo de una matriz (T). Las redes de Hopfield son bastante tolerantes al ruido, cuando funcionan como memorias asociativas. Desventajas de las Redes de Hopfield. Número limitado de entradas en la etapa de aprendizaje: Si se almacena demasiada información, durante su funcionamiento la red puede converger a valores de salida diferentes de los aprendidos, con lo que la tarea de asociación entra la información presentada y alguna de las almacenadas se realiza incorrectamente. El número de patrones a almacenar (o aprender) es bastante limitado comparado con el número de nodos en la red. Según Hopfield, el número de clases a aprender no puede ser mayor del 15% del número de nodos en la red. La red se vuelve inestable si los patrones se parecen entre sí. Aplicaciones. En cuanto a las aplicaciones más conocidas de este modelo destacan las relacionadas con el reconocimiento de patrones (de imágenes y de voz), el control de motores y sobre todo la resolución de problemas de optimización. Para problemas de optimización se ha aplicado para la resolución de manipulación de grafos, por ejemplo el problema del viajante vendedor; resolución de ecuaciones, procesado de señales (conversores analógico-digitales) y de imágenes, etc. Sistemas Expertos e Inteligencia Artificial. Guía No. 10 9 Procedimiento Ejemplo 1. Se desea entrenar una Red de Hopfield bastante sencilla, que sea capaz de reconocer información (patrones) de imágenes formadas por cuatro pixeles, en una matriz de 2x2. En la figura siguiente se muestran ejemplos de patrones que podrían utilizarse como entradas a la red: 1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4 Patrón 1 Patrón 2 Patrón 3 Patrón 4 Los pixeles negros podrían representarse mediante el valor binario 1, y los blancos con el valor binario -1. En este caso, las informaciones serían dos vectores de cuatro elementos (N = 4) que contienen los valores de los pixeles. La red, por tanto, tendría 4 neuronas para que cada una reciba el valor de un pixel. Aplicaremos el algoritmo detallado anteriormente para los patrones de entrada 1 y 2. Los valores de los vectores de entrada que representan cada patrón son: E1= [1, 1,-1,-1] y E2 = [-1,-1, 1, 1] Etapa de Aprendizaje: El aprendizaje de estas dos informaciones consiste en la obtención de los pesos de la red (matriz W). Utilizaremos la fórmula Para la entrada E1, la salida W 1 es: TE1 . E1 – I = 10 Sistemas Expertos e Inteligencia Artificial. Guía No. 10 Para la entrada E2, la salida W 2 es: TE2 . E2 – I = Sumando W 1 y W 2 se obtiene la matriz de pesos definitiva, W: Una vez finalizada la fase de aprendizaje (entrenamiento), la red podría ser utilizada como memoria asociativa de acceso por contenido, de tal forma, que al presentarle una información más parecida a la almacenada durante el aprendizaje. Fase de Evaluación: Por ejemplo, ser podría comprobar lo que ocurre con el patrón de entrada siguiente: 1 2 3 4 El vector es E = [1, -1, -1, ,1] Utilizaremos las fórmulas indicadas en el paso 2 del algoritmo de evaluación de la red Hopfield (mostrado en la página 7 de esta guía). Inicialmente, la salida corresponde a la propia información de entrada. Entonces se produce la primera iteración, obteniéndose las siguientes nuevas entradas en cada neurona: Si suponemos una función de activación de cada neurona de tipo escalón centrada en el origen (desplazamiento i = 0), la salida de la red después de esta primera iteración será: S = [1, 1, -1, -1] Sistemas Expertos e Inteligencia Artificial. Guía No. 10 11 Repitiendo el proceso, tomando como entrada la salida anterior, S, tenemos: Aplicando igualmente la función de activación a este nuevo resultado (segunda iteración de EW), la salida obtenida es: S = [1, 1, -1, -1] Observemos que se repite la salida de la primera iteración, entonces se ha llegado a una situación de estabilidad, en la que la red ha generado como salida el patrón más parecido al presentado como entrada: 1 2 1 2 3 4 3 4 Entrada Salida generada En este ejemplo, para la descripción del aprendizaje se ha utilizado el modelo discreto, la forma de calcular los pesos para el modelo continuo es similar, si se utiliza la red como memoria asociativa. Si la red se utiliza para resolver problemas de optimización, el cálculo de los pesos dependerá del problema concreto. Además, en el modelo continuo se suele considerar la existencia de conexiones autoconcurrentes, con lo que no siempre W ii = 0. Análisis de resultados Tomando como referencia la información presentada en el ejemplo No.1 y los algoritmos para la red de Hopfield, implementar un simulador (en entorno de Windows Forms) para una red de Hopfield, que sea capaz de reconocer patrones como los mostrados en el ejemplo, es decir, utilizar una matriz de 2x2 para la representación de los patrones. 12 Sistemas Expertos e Inteligencia Artificial. Guía No. 10 Considerar la siguiente funcionalidad para el simulador: Permitir que el usuario proporcione los patrones de entrada, necesarios para el entrenamiento de la red. El usuario debe también proporcionar el patrón de entrada que se utilizará para evaluar la red. Diseñar la interfaz, considerando que debe mostrarse todos los pasos del entrenamiento realizado para la red. Es decir, que debe indicarse el entrenamiento de cada patrón utilizado. En la opción de evaluación de la red, debe mostrarse todos los pasos realizados para encontrar la salida generada por la red. Sería ideal que las entradas y salidas se proporcionen a través de una matriz gráfica. Se muestra una imagen de referencia de cómo podría diseñarse la interfaz: Investigación Complementaria Para la siguiente semana: Aplicar las modificaciones necesarias para agregar mayor funcionalidad al programa simulador de la Red de Hopfield. Deben implementarse las siguientes opciones: a. Permitir que el usuario indique las dimensiones del patrón a identificar, es decir, dimensiones de la matriz de representación (cantidad de pixeles). b. Permitir que el usuario proporcione los patrones de entrada, necesarios para el entrenamiento de la red. Sistemas Expertos e Inteligencia Artificial. Guía No. 10 13 c. El usuario debe también proporcionar el patrón de entrada que se utilizará para evaluar la red. d. Diseñar la interfaz, considerando que debe mostrarse todos los pasos del entrenamiento realizado para la red. Es decir, que debe indicarse el entrenamiento de cada patrón utilizado. e. En la opción de evaluación de la red, debe mostrarse todos los pasos realizados para encontrar la salida generada por la red. Para probar la opción “a”, se podría considerar como ejercicio, poder entrenar la red neuronal con patrones que representen letras del alfabeto, por ejemplo, con los siguientes cuatro patrones de entrada: Y para la fase de evaluación de la red, poder probar patrones parecidos o con variantes con relación a estas entradas. 14 Sistemas Expertos e Inteligencia Artificial. Guía No. 10 Guía 9: Red Neuronal Reconocimiento de Patrones. Hopfield. Alumno: Hoja de cotejo: 10 Máquina No: GL: Docente: Fecha: EVALUACIÓN % CONOCIMIENTO Del 20 al 30% APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% TOTAL 100% 1-4 5-7 8-10 Conocimiento deficiente de los fundamentos teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. Nota