Capítulo IV Redes Neuronales Artificiales _______________________________________________________________________
“Mientras los filósofos discuten si es posible la inteligencia artificial, los investigadores la construyen”. C. Fabretti.
Redes Neuronales Artificiales
IV.1 Clases no separables por una línea recta. Debido a que el Perceptrón simple divide el espacio de características en dos regiones, puede distinguir clases que son separables por una línea recta. Sin embargo, en un enorme número de aplicaciones no es suficiente con dividir el espacio característico en dos regiones. Un ejemplo en el cual se puede observar esta limitante del Perceptrón simple, es intentar resolver el problema de la operación lógica XOR (OR- exclusiva).
Entradas
Salidas
x1
x2
Y
0
0
0
0
1
1
1
0
1
1
1
0
Figura 23. Operación lógica XOR Izquierda: tabla de entradas y salidas de la función lógica XOR. Derecha: mapa de características representando la salida que debe de proveer cada par x1, x2.
En la tabla de la figura anterior podemos ver como el par de entradas 00 y 11 producen como salida un cero lógico, mientras que el resto produce un uno lógico. En el mapa de características se muestra que una línea recta no es suficiente para separar las clases y poder identificarlas. Para resolver este problema, se utiliza el recurso que se tiene del Perceptrón, el cual genera una línea recta separando en dos regiones el espacio característico, y un
53
Redes Neuronales Artificiales
segundo Perceptrón genera otra línea recta, de tal forma que entre ambas dividan el espacio característico en tres regiones. La salida de estos Perceptrones se utiliza como entrada para un tercer Perceptrón ubicado en la capa de salida. Este último integra las salidas de los anteriores y provee como respuesta un uno lógico si el vector de entrada se encuentra dentro de la región formada por las dos líneas rectas y provee un cero lógico si el vector de entrada se encuentra fuera.
Figura 24. Perceptrón para la operación lógica XOR.
La configuración de la figura anterior es un sistema neuronal que puede resolver el problema de la XOR. Las neuronas 1 y 2 definen las dos líneas rectas que separan el espacio característico en tres regiones. Y la neurona 3 toma la respuesta de las dos anteriores y ofrece como respuesta una de dos clases, la que se encuentra dentro del espacio de las dos líneas y la que se encuentra fuera.
54
Redes Neuronales Artificiales
IV.2 Perceptrones multicapa. La solución a los problemas de reconocimiento de clases en un espacio característico, las cuales no son separables por una línea recta, y aún más, problemas de identificación multiclases son los sistemas Multineuronas o Redes Neuronales Artificiales. Aunque existen diferentes tipos de RNA’s en base a su estructura, como las RNA’s de Hopfield, de Hamming, los clasificadores Carpenter-Grossberg, o las RNA de Kohonen [21], este estudio se centra en el modelo Perceptrón, debido a su simplicidad y eficiencia en lo que a problemas de clasificación se refiere. Una RNA consta de una arquitectura genérica en la que las neuronas están dispuestas en forma de capas. La primera capa se denomina de entrada, posteriormente se encuentra la capa oculta y al final una capa de salida [22].
Figura 25. Modelo genérico del Perceptrón Multicapa. En un Perceptrón multicapa las entradas son conectadas solo a las neuronas de la capa oculta, donde en estas últimas las funciones que definen el nivel de activación y la salida están dadas por: n
NAi = ∑ xi wi i =1
n yi = f ( NAi ) = f ∑ xi wi i =1
55
Redes Neuronales Artificiales
Las neuronas de la última capa son de salida y proporcionan la respuesta de la red. El nivel de activación y la salida de estas neuronas son definidas mediante:
n
NA j = ∑ xij wij j =1
n y j = f (NAj ) = f ∑ xij wij j =1
En el apartado 2.3, se especificó que el potencial eléctrico de una neurona varía con respecto al tiempo. Por lo que la salida generada, que es una función del nivel de activación, puede ser definida no sólo mediante una función escalón. Entre las funciones de activación más utilizadas podemos encontrar las siguientes:
Figura 26. Funciones de activación.
56
Redes Neuronales Artificiales
Como vimos anteriormente, el aprendizaje consiste en ajustar los pesos para que las salidas producidas por la red sean iguales o lo más parecidas posible a los valores deseados. Esto implica que lo que se desea es minimizar el error producido por la red. Para ello, es posible utilizar un procedimiento conocido como algoritmo de retropropagación [23].
IV.3 Algoritmo de entrenamiento de retropropagación. Al hablar de redes de retropropagación o redes de propagación hacia atrás hacemos referencia a un algoritmo de aprendizaje más que a una arquitectura determinada. Durante mucho tiempo no se dispuso de algoritmos para entrenar redes multicapa, y como las redes de una capa estaban muy limitadas en cuanto a lo que eran capaces de representar, el campo de las Redes Neuronales Artificiales estaba estancado. La invención y perfeccionamiento del algoritmo de retropropagación dio un gran impulso al desarrollo de este campo, ya que tiene un buen fundamento matemático que ha expandido enormemente el rango de problemas donde se aplican las RNA’s, sobre todo aquellos en los que la relación entre entradas y salidas es no lineal y los datos de entrenamiento son abundantes. La retropropagación consiste en propagar el error hacia atrás, es decir, de la capa de salida hacia la capa de entrada, pasando por las capas ocultas intermedias y ajustando los pesos de las conexiones con el fin de reducir dicho error. En la figura 27, se observa que el error es una función de los pesos de la red, los cuales deben ser ajustados. El proceso de ajuste de los pesos en la dirección que se muestra en dicha figura es llamado descendencia de gradiente.
57
Redes Neuronales Artificiales
Figura 27. Descendencia de gradiente.
El error total que la red produce lo podemos medir en las neuronas de salida [20], y está definido por:
(d E=
− yj )
2
j
2
Para reducir el error debemos modificar los pesos que se conectan a las neuronas de salida de la red. Pero, al modificar estos pesos, estamos obligando a que las salidas de las neuronas de la capa oculta produzcan una respuesta distinta de la que produjeron. Además, tomemos en cuenta que las salidas de estas neuronas ocultas dependen del valor de los pesos que conectan las entradas de la red con estas. Por lo que, estos pesos deben ser también modificados. Entonces, al reducir el error en las neuronas de la capa de salida de la red debemos también reducir el error en la capa de las neuronas de entrada. Este error que cada neurona de la capa oculta produce, lo obtendremos al calcular la modificación de los pesos para reducir el error de la capa de salida. Por lo tanto, el error es propagado de manera distribuida desde la capa de salida hasta la capa de entrada. Debido a esta propagación hacia atrás del error es que este algoritmo es llamado algoritmo de retropropagación del error o simplemente retropropagación.
58
Redes Neuronales Artificiales
A continuación se describen los pasos que integran el algoritmo de retropropagación: Paso 1: Inicializar los pesos. Ajustar todos los pesos a un valor aleatorio pequeño. Paso 2: Presentar las entradas y las salidas deseadas. Presentar el vector de entrada x1, x2, ...xn y especificar las salidas deseadas d1, d2,...dn. Paso 3: Calcular la salida que genera la red. yj (t)= f [Σwij(t)yi(t)], donde la salida es una función continua y monótonamente creciente. Paso 4: Ajuste de los pesos. a) Si se trata de un peso de una sinapsis que se conecta con una neurona de la capa de salida; actualizar el peso utilizando la siguiente expresión: wij(t+1)= wij(t)+α(dj-yj)f ’ (NAj)yi Donde: wij(t+1) es el nuevo valor del peso. wij(t) es el valor del peso actual. dj es el valor deseado para la salida de la neurona j. yi es el valor de la salida en la neurona j antes de actualizar el peso. α es la tasa de aprendizaje. f ’ (NAj ) es la derivada de la función de salida de la neurona j.
59
Redes Neuronales Artificiales
yi es el valor de salida de la neurona i de la capa anterior, de cuya conexión se está ajustando el peso. b) Si se trata de un peso de alguna sinapsis que se conecta a una neurona de la capa oculta; actualizar el peso utilizando la siguiente expresión: wij(t+1)= wi (t)+α f ’ ( NAj )xi•Σ[ (dj - yj ) • f ’ (NAj )wj ] Donde: wij(t+1) es el nuevo valor del peso wi . wi (t) es el valor actual del peso wi . α es la tasa de aprendizaje. f ’ (NAi ) es la derivada de la función de salida de la neurona i. xi es la entrada a la sinapsis de la neurona i. dj es el valor deseado para la salida de cada una de las neuronas j. yj es el valor obtenido en las neuronas j. f ’ (NAj ) es la función de salida de las neuronas j. wi es el valor del peso de las neuronas j. Paso 5: volver al paso 2. Este algoritmo ha sido probado con un gran cantidad de problemas tales como el de la XOR [17], reconocimiento de voz [24, 25, 26] y reconocimiento de imágenes [17]. Una demostración del poder de este algoritmo fue realizada por Sejnowski [24], en la cual entrenó un Perceptrón con 120 neuronas en la capa oculta y más de 20,000 pesos para transformar un mapa de palabras inglesas en texto por medio de los fonemas correspondientes.
60
Redes Neuronales Artificiales
IV.4 Diseño de una red neuronal para el problema de la XOR lógica. En la figura 23 se puede observar que es sencillo definir los valores necesarios para que la función discriminante de la RNA divida el espacio característico en tres regiones. Sin embargo, el número de iteraciones a realizar con el algoritmo de retropropagación puede significar un cálculo muy extenso. Es por ello que el diseño de la RNA se realizó por medio de software en una computadora convencional. En la actualidad, existen diversos programas destinados al diseño de RNA’s. Un ejemplo de ello es el Stutgartt Neural Networks Simulator (SNNS), con el cual es posible diseñar una RNA en forma rápida y sencilla. El primer paso en el diseño de la red consistió en crear el archivo con los datos de entrenamiento. Este archivo puede realizarse en cualquier editor de texto con la extensión PAT y su estructura se muestra en la siguiente figura:
Figura 28. Archivo de entrenamiento xor.pat.
61
Redes Neuronales Artificiales
En la figura 28, se muestra que el archivo de entrenamiento consta de tres partes fundamentales: el encabezado, las características de la red y los datos de entrada – salida del conjunto de entrenamiento. El encabezado contiene, como se muestra en dicha figura, el nombre del programa, la fecha y la hora en que fue realizado el archivo. Las características indican el número de patrones que contiene el archivo, el número de unidades de entrada y el número de unidades de salida. Por último, los datos del conjunto de entrenamiento indican el valor de la entrada y su salida correspondiente. La estructura de la RNA consta de un número de entradas que son indicadas mediante vectores. De esta forma la red cuenta con las siguientes características: Entradas: 1 en X y 2 en Y. Capa oculta: 1 en X y dos en Y. Salida: 1 en X y 1 en Y. La estructura de la red que se realizó en el programa se muestra en la siguiente figura:
Figura 29. Visualización completa de la RNA.
Una vez establecido el número y el orden de neuronas que constituyen la RNA se cargó el archivo con el conjunto de entrenamiento para dar paso al aprendizaje de la red.
62
Redes Neuronales Artificiales
Como ya hemos visto anteriormente el algoritmo para entrenar la red es retropropagación. Para llevar a cabo el entrenamiento fue necesario definir algunos parámetros como la tasa de aprendizaje, el número de épocas y la forma en que se debía presentar la información a la red, ya sea en un determinado orden o de forma aleatoria. Estos parámetros fueron elegidos de la siguiente forma: Tasa de entrenamiento (Learn): 0.02 Épocas (cycles): 10000 Orden: Shuffle (aleatorio). Una de las opciones que nos ofrece el SNNS es que podemos observar durante el entrenamiento de la red el progreso del aprendizaje. En la figura 30, se muestra que en menos de 2500 épocas la red disminuyó el error casi a cero.
Figura 30. Gráfica del comportamiento del error para el problema de la XOR. Al finalizar el entrenamiento, la suma del error cuadrático se redujo a 0.00341. Esto se pudo ver numéricamente en la ventana del administrador de sesión del SNNS.
63
Redes Neuronales Artificiales
Figura 31. Suma del Error cuadrático de la RNA en la ventana del administrador de sesión. Para comprobar que la RNA podía resolver el problema de la XOR, se cargo un archivo de prueba de extensión PAT, en el que los datos de entrada fueron los mismos que en el archivo de entrenamiento, pero a diferencia de este las salidas fueron definidas en cero. Con la misma configuración de la red y el valor final de los pesos se comprobó que las salidas de la RNA fuesen correctas en base a las entradas.
Figura 32. Prueba de la RNA para la XOR. Una vez realizado el entrenamiento de la red y haber comprobado que efectivamente aprendió el comportamiento deseado, el siguiente paso consistió en conocer cuales son los valores de los pesos para cada uno de los nodos o neuronas artificiales y sus respectivos umbrales. Estos valores de la fuerza de unión entre las
64
Redes Neuronales Artificiales
dendritas y el soma artificial fueron proporcionados por el SNNS en forma de coordenadas.
Figura 33. Visualización de los pesos de la RNA. Los resultados de los pesos se muestran a continuación: w13 = 6.103170
w24 = 4.148270
w14 = 6.111240
w35 = 8.401280
w23 = 6.111240
w45 = -9.068840
Tabla 3. Pesos de la RNA para el problema de la XOR. Los resultados para cada uno de los umbrales de las neuronas de la red fueron los siguientes: θ3 = -2.63774 θ4 = -6.36146 θ5 = -3.83855
65
Redes Neuronales Artificiales
Matemáticamente se comprobaron los resultados de la red como se describió en el apartado 3.4, calculando el nivel de activación según las entradas y los pesos y finalmente el valor de la salida en base a la función del nivel de activación. Nodo No. 3: Entradas: x0(t)=1, x1(t)=0, x2(t)=0 Pesos: w0(t)= -2.63774, w13(t)= 6.103170, w14(t)= 6.111240 Nivel de Activación NA: (1)( -2.63774) +(0)( 6.103170) + (0)( 6.111240) =-2.63774 Salida del Perceptrón y(t)=0, ya que NA ≤ 0 Salida deseada d(t) = 0 Error (d(t)- y(t)) = 0 Nodo No.4: Entradas: x0(t)=1, x1(t)=0, x2(t)=0 Pesos: w0(t)= -6.36146, w23(t)= 6.111240, w24(t)= 4.148270 Nivel de Activación NA: (1)( -6.36146) +(0)( 6.111240) + (0)( 4.148270) =-6.36146 Salida del Perceptrón y(t)=0, ya que NA ≤ 0 Salida deseada d(t) = 0 Error (d(t)- y(t)) = 0 Nodo No. 5: Entradas: x0(t)=1, x35(t)=0, x45(t)=0 Pesos: w0(t)= -3.83855, w35(t)= 8.401280, w45(t)= -9.068840 Nivel de Activación NA: (1)( -3.83855) +(0)( 8.401280) + (0)( -9.068840) = -3.83855 Salida del Perceptrón y(t)=0, ya que NA ≤ 0 Salida deseada d(t) = 0
66
Redes Neuronales Artificiales
Error (d(t)- y(t)) = 0
Haciendo el cálculo respectivo para cada una de las entradas mostradas en la tabla de la figura 23,
puede comprobarse que el perceptrón multicapa distingue
perfectamente entre las dos clases. Si sustituimos cada uno de los valores de la red en las ecuaciones que representan el nivel de activación para cada uno de los Perceptrones es posible obtener la gráfica de sus funciones discriminantes y al dibujarlas en un espacio característico.
Figura 34. Funciones discriminantes para el problema de la XOR.
IV.5 Diseño de una red neuronal para el problema de la XOR lógica mediante dispositivos electrónicos. El análisis para construir una RNA partió de la premisa siguiente: “Una red neuronal es un arreglo de nodos o unidades procesadoras simples, las cuales representan el cuerpo de las neuronas. Las unidades se encuentran conectadas entre si y actúan como los axones y las dendritas. Las conexiones entrenan a las unidades
67
Redes Neuronales Artificiales
procesadoras multiplicadas por un factor, el cual es un valor analógico que representa la fuerza de conexión o sinapsis” [27]. Esto nos lleva a pensar que al igual que en el modelo matemático, si conectamos tres Perceptrones simples para resolver el problema de la XOR, podemos reproducir tres neuronas artificiales construidos con amplificadores operacionales. Tal como el que se muestra en las figuras 20 y 22 para crear una RNA. Un aspecto muy importante en la construcción de la RNA, consistió en el ajuste de los valores que corresponden a cada una de la sinapsis de la red. Para realizar dicho ajuste se utilizaron resistencias variables de 10 kΩ como valor máximo, reduciendo así el valor de las sinapsis a un 10 % de su valor original. Esta pequeña modificación no alteró en forma alguna el comportamiento de la red y presentó la ventaja de poder utilizar una mayor escala en los voltajes de entrada. Por lo tanto los valores de las resistencias fueron: Resistencia
Valor
Resistencia
Valor
Resistencia Valor
R1
10kΩ
R11
10kΩ
R21
10kΩ
R2
10kΩ
R12
4.148kΩ
R22
10kΩ
R3
6.103kΩ
R13
10kΩ
R23
10kΩ
R4
6.111kΩ
R14
10kΩ
R24
10kΩ
R5
10kΩ
R15
10kΩ
R25
10kΩ
R6
10kΩ
R16
10kΩ
R26
10kΩ
R7
10kΩ
R17
10kΩ
R8
10kΩ
R18
8.401kΩ
R9
10kΩ
R19
10kΩ
R10
6.111kΩ
R20
9.068kΩ
Tabla 4. Valores de resistencias para el perceptrón multicapa electrónico.
El diagrama simbólico y de conexión de la RNA construida mediante amplificadores operacionales se muestra a continuación:
68
Redes Neuronales Artificiales
69
Redes Neuronales Artificiales
70
Redes Neuronales Artificiales
Los valores de los umbrales que corresponden a las figuras 35 y 36 se ajustaron de la siguiente forma: Umbral No. 3 = 2.63774 Umbral No. 4 = 6.36146 Umbral No. 5 = 3.83855
IV.6 Pruebas funcionales a la RNA para el problema de la XOR lógica. De manera similar a la etapa de pruebas de la sección 3.6, se comprobó la funcionalidad de la RNA, introduciendo voltajes de entrada para compararlos con la tabla de la figura 23. A continuación se muestran los resultados obtenidos: Entradas Salida Vi1 Vi 2 Vout 0 0 Vsat0 V
Vsat-
V 0
Vsat-
V V
Vsat+
Tabla 5. Resultados obtenidos en el Perceptrón que resuelve el problema de la XOR lógica.
Donde: Vi1
representa el voltaje de entrada 1.
Vi2
representa el voltaje de entrada 2.
V
representa el voltaje lógico = 5 volts.
71
Redes Neuronales Artificiales
Vout Vsat
+
representa el voltaje de salida. representa el voltaje de saturación positivo del amplificador operacional.
Vsat-
representa el voltaje de saturación negativo del amplificador operacional.
72