4 El Perceptrón Simple ______________________________________________________________________ 4.1 Introducción Una de las características más significativas de las redes neuronales es su capacidad para aprender a partir de alguna fuente de información interactuando con su entorno. En 1958 el psicólogo Frank Ronsenblant desarrolló un modelo simple de neurona basado en el modelo de McCulloch y Pitts y en una regla de aprendizaje basada en la corrección del error. A este modelo le llamó Perceptrón. Una de las características que más interés despertó de este modelo fue su capacidad de aprender a reconocer patrones. El Perceptrón está constituido por un conjunto de sensores de entrada que reciben los patrones de entrada a reconocer o clasificar y una neurona de salida que se ocupa de clasificar a los patrones de entrada en dos clases, según que la salida de la misma sea 1 (activada) o 0 (desactivada). Sin embargo, dicho modelo tenía muchas limitaciones, como por ejemplo, no es capaz de aprender la función lógica XOR. Tuvieron que pasar unos años hasta que se propusiera la regla de aprendizaje de retropropagación del error para demostrarse que el Perceptrón multicapa es un aproximador universal. 4.2 El Perceptrón simple Supongamos que tenemos una función f de Rn en {-1,1}, que aplica un patrón de entrada x = (x1,x2,…,xn)T ∈ Rn en la salida deseada z ∈ {-1,1}, es decir, f(x) = z. La información de que disponemos sobre dicha función viene dada por p pares de patrones de entrenamiento {x1,z1}, {x2,z2},…,{ xp,zp} donde xi∈Rn y f (xi) = zi∈{-1,1}, i=1,2,…,p. Dicha función realiza una partición en el espacio Rn de patrones de entrada; por una parte estarían los patrones con salida +1 y por otra parte los patrones con salida −1. Por lo tanto, diremos que la función f clasifica a los patrones de entrada en dos clases. Ejemplos de funciones f de este tipo son la función lógica OR o la función par. Ahora vamos a construir un dispositivo sencillo que aprenda dicha función a partir de un conjunto conocido de patrones (relaciones) de entrenamiento. Para ello vamos a utilizar una unidad de proceso bipolar que como vimos es una función matemática con dominio el conjunto n-dimensional {-1,1}n y rango el conjunto {-1,1}, definida por la siguiente expresión: si w1 x 1 + w2 x2 + ... + wn xn ≥ θ ⎧⎪ 1 f ( x1 , x2 ,..., xn ) = ⎨ (1) si w1 x 1 + w2 x2 + ... + wn xn < θ ⎪⎩− 1 donde los parámetros w1,w2,…,wn, se llaman pesos sinápticos y son los pesos con los que se ponderan los valores de entrada x1,x2,…,xn, o argumentos de la función; la suma ponderada u = w1 x1 + w2 x 2 + ... + wn x n se llama potencial sináptico y el parámetro θ se llama umbral o sesgo. También se puede expresar la función f mediante la función signo, es decir, f ( x1 , x 2 ,..., x n ) = sgn(u − θ ) siendo la función signo, x≥0 ⎧ 1 sgn(x) = ⎨ x<0 ⎩− 1 y diremos que en este caso la función de transferencia es la función signo. Análogamente, se define una unidad de proceso binaria como una función matemática con dominio el conjunto n-dimensional {0,1}n y rango el conjunto {0,1}, definida por la siguiente expresión: si w1 x1 + w2 x2 + ... + wn xn ≥ θ ⎧⎪1 y = f ( x1 , x2 ,..., xn ) = ⎨ (2) si w1 x 1 + w2 x2 + ... + wn xn < θ ⎪⎩0 x1 x2 y x3 Figura 1. Unidad de proceso bipolar. Cuando la salida de la unidad de proceso es igual a 1 se dice que dicha unidad de proceso está activada o encendida y presenta el estado 1, mientras que si su salida es igual a cero se dice que está desactivada o apagada, presentando el estado 0. Función signo f(x) 1 x -1 Función paso o De Heaviside f(x) 1 0 x Figura 2. Funciones de transferencia. 72 Para la determinación de los pesos sinápticos y del umbral vamos a seguir un proceso adaptativo que consiste en comenzar con unos valores iniciales aleatorios e ir modificándolos iterativamente cuando la salida de la unidad no coincide con la salida deseada. La regla que vamos a seguir para modificar los pesos sinápticos se conoce con el nombre de regla de aprendizaje del Perceptrón simple y viene dada por la expresión: w j (k +1) = w j (k ) + ∆w j (k ) , k = 1,2,… siendo ∆w j (k ) = η (k )[z (k ) − y (k )]x j (k ) (3) esto nos indica que la variación del peso wj es proporcional al producto del error z (k ) − y (k ) por la componente j-ésima del patrón de entrada que hemos introducido en la iteración k, es decir, x j (k ) . La constante de proporcionalidad η(k) es un parámetro positivo que se llama tasa de aprendizaje puesto que cuanto mayor es más se modifica el peso sináptico y viceversa. Es decir, es el parámetro que controla el proceso de aprendizaje. Cuando es muy pequeño la red aprende poco a poco. Cuando se toma constante en todas las iteraciones, η (k ) = η > 0 tendremos la regla de adaptación con incremento fijo. Cuando la función de transferencia usada es la función signo (valores bipolares) la regla de aprendizaje se puede escribir de la forma: ⎧w j (k ) + 2ηx j (k ) ⎪ w j (k + 1) = ⎨w j (k ) ⎪ ⎩w j (k ) − 2ηx j (k ) si y (k ) = −1 y z (k ) = 1, si y (k ) = z (k ) (4) si y (k ) = 1 y z (k ) = −1 Por lo tanto, esta regla de aprendizaje es un método de detección del error y corrección. Solo aprende, es decir, modifica los pesos, cuando se equivoca. Cuando tenemos un patrón que pertenece a la primera clase (z(k)=1) y no es asignado a la misma, entonces corrige el valor del peso sináptico añadiéndole una cantidad proporcional al valor de entrada, es decir lo refuerza, mientras que si el patrón de entrada no pertenece a esta clase y el Perceptrón lo asigna a ella, lo que hace es debilitar el peso restándole una cantidad proporcional al patrón de entrada . No modificaremos los pesos cuando el valor deseado coincida con la salida de la red. ¿Cómo se modifica el sesgo? De la misma manera, teniendo en cuenta que el sesgo se puede considerar como el peso sináptico correspondiente a un nuevo sensor de entrada que tiene siempre una entrada igual a xn+1=−1, y como peso sináptico el valor del umbral, pues w1 x1 + w2 x2 + ... + wn xn ≥ θ ⇔ w1 x1 + w2 x2 + ... + wn xn + wn +1 xn +1 ≥ 0 cuando wn+1=θ y xn+1= −1. Así, la red equivalente tendría n+1 sensores, su umbral sería siempre cero, los patrones de entrada ( x1 , x 2 ,..., x n ) serán ahora ( x1 , x 2 ,..., x n ,−1 ), los pesos asociados ( w1 , w2 ,..., wn ) serán ( w1 , w2 ,..., wn , wn +1 ) con wn +1 = θ y la regla de aprendizaje: 73 ∆θ (k ) = −η (k )[z (k ) − y (k )] , k=1,2,… (5) A partir de ahora vamos a considerar el umbral como un peso sináptico más. A continuación resumimos el algoritmo en el que actualizamos el vector de pesos sinápticos para cada patrón de entrada (entrenamiento individualizado) Algoritmo de aprendizaje del Perceptrón con entrenamiento individualizado Paso 0: Inicialización Inicializar los pesos sinápticos con números aleatorios del intervalo [-1,1]. Ir al paso 1 con k=1 Paso 1: (k-ésima iteración) Calcular ⎛ n +1 ⎞ y ( k ) = sgn ⎜⎜ ∑ w j x j (k ) ⎟⎟ ⎝ j =1 ⎠ Paso 2: Corrección de los pesos sinápticos Si z(k)≠y(k) modificar los pesos sinápticos según la expresión: w j (k + 1) = w j (k ) + η [z (k ) − y (k )]x j (k ) , j = 1,2,..., n + 1 Paso 3: Parada Si no se han modificado los pesos en las últimas p iteraciones, es decir, w j (r ) = w j (k ), j = 1,2,..., n + 1, r = k + 1,..., k + p , parar. La red se ha estabilizado. En otro caso, ir al Paso 1 con k=k+1. Ahora surge la cuestión: ¿Dado un conjunto de patrones de entrenamiento, puede el Perceptrón aprender a clasificarlos correctamente? Solamente si los patrones son linealmente separables. Ello reduce considerablemente el campo de aplicaciones del Perceptrón simple puesto que ni siquiera es capaz de implementar la función lógica XOR dada por la siguiente relación: Entradas Salidas (1, 1) −1 (1, −1) 1 (−1, 1) 1 (−1,−1) −1 como se puede comprobar en la figura 3(a). En cambio, se pueden clasificar correctamente los patrones cuando se utiliza una función no lineal (figura 3(b)). 74 (a) (b) Figura 3.(a) Patrones separables linealmente. (b) Patrones no separables linealmente. Decimos que dos conjuntos de puntos A y B son linealmente separables en un espacio n-dimensional si existen n+1 números reales w1 , w2 ,..., wn , θ , de manera que cada punto (x1 , x2 ,..., xn ) ∈ A satisface ∑ w x ≥ θ y cada punto (x1 , x2 ,..., xn ) ∈ B satisface ∑ w x < θ . A continuación vamos a estudiar la convergencia del Perceptrón simple, n i =1 i i n i =1 i i es decir, bajo que condiciones un Perceptrón es capaz de encontrar una solución en un número finito de iteraciones. w1x1+w2x2≥θ w1x1+w2x2<θ w1x1+w2x2=θ Figura 4. Semiespacios que define el Perceptrón. Teorema 1 (de convergencia del Perceptrón) Si el conjunto de patrones de entrenamiento, {x1,z1}, {x2,z2},…,{ xp,zp}, es linealmente separable entonces el Perceptrón simple encuentra una solución en un número finito de iteraciones, es decir, consigue que la salida de la red coincida con la salida deseada para cada uno de los patrones de entrenamiento. Demostración: 75 En efecto, como los patrones son linealmente separables existirán unos valores w1* , w2* ,..., wn*+1 tales que n ∑w x j =1 j > wn∗+1 para los patrones de la clase 1 y j < wn∗+1 para los patrones de la clase 2. * j n ∑w x j =1 * j Obsérvese que wn+1 es el umbral θ. Supongamos que en la iteración k la red tiene que modificar los pesos sinápticos según la regla de aprendizaje, puesto que la salida de la red y(k) no coincide con la salida deseada z(k). Tendremos que: ∑ (w (k + 1) − w ) = ∑ (w (k ) + η [z (k ) − y(k )]x (k ) − w ) n +1 j =1 * 2 j j n +1 j j =1 * 2 j j Desarrollando, n +1 ( = ∑ w j (k ) − w*j ) 2 + η 2 [z (k ) − y (k )] 2 j =1 n +1 ∑ x (k ) j =1 n +1 2 j ( + ) + 2η [z (k ) − y (k )]∑ w j (k ) − w*j x j (k ) (6) j =1 n +1 ( = ∑ w j (k ) − w*j ) 2 + η 2 [z (k ) − y (k )] 2 j =1 n +1 ∑ x (k ) j =1 2 j + n +1 n +1 j =1 j =1 + 2η [z (k ) − y (k )](∑ w j (k ) x j (k )) −2η [z (k ) − y (k )]∑ w*j x j (k ) n +1 Obsérvese que [z (k ) − y (k )]∑ w j (k ) x j (k ) < 0, puesto que si j =1 n +1 ∑w j =1 j (k ) x j (k ) > 0 entonces n +1 y(k)=1 y como la salida es incorrecta tiene que ser z(k)=−1; y si ∑ w (k ) x (k ) < 0 j =1 j j entonces y(k)=−1, y como la salida es incorrecta, z(k)=1. Dicho término se puede escribir de la forma: n +1 − 2 ∑ w j (k )x j (k ) j =1 Asimismo, el término n +1 [z (k ) − y(k )]∑ w*j x j (k ) > 0 j =1 n +1 es positivo puesto que si ∑ w x (k ) > 0 entonces la salida deseada es z(k)=1 y la salida j =1 * j j n +1 incorrecta de la red tiene que ser y(k)=−1, y si ∑ w x (k ) < 0 j =1 * j j entonces z(k)=−1 y la salida incorrecta de la red tiene que ser y(k)=1. Así, también se puede escribir de la forma: 76 n +1 2 ∑ w*j x j (k ) j =1 Por lo tanto tenemos que ∑ (w (k + 1) − w ) ≤ ∑ (w (k ) − w ) n +1 * 2 j j j =1 n +1 j =1 * 2 j j n +1 n +1 + 4η 2 ∑ x j (k ) − 4η ∑ w*j x j (k ) 2 j =1 (7) j =1 puesto que hemos prescindido de un término negativo en la derecha de la expresión. n +1 ( D(k + 1) = ∑ w j (k + 1) − w*j Sea ) 2 j =1 n +1 ( D(k ) = ∑ w j (k ) − w*j ) 2 j =1 ⎪⎧ n +1 ⎪⎫ T = min ⎨ ∑ w*j x j ( k ) ⎬ 1≤ k ≤ p ⎪⎩ j =1 ⎭⎪ n +1 Como ∑ x ( k ) =n + 1, j =1 2 j de la expresión (7) se deduce la siguiente desigualdad: D ( k + 1) ≤ D ( k ) + 4η 2 (n + 1) − 4ηT D ( k + 1) ≤ D ( k ) + 4η [η (n + 1) − T ] Si tomamos η (n + 1) − T < 0 , es decir, η< T n +1 T n +1 hace que D(k) disminuya al menos en la cantidad constante 4η[η (n + 1) − T ] en cada iteración (con corrección). Si el número de iteraciones con corrección fuese infinito entonces llegaríamos al absurdo de alcanzar en un momento determinado un valor negativo para el término D(k) que evidentemente no puede ser negativo. La siguiente cuestión que vamos a abordar es estudiar cuál sería el mejor valor que debemos elegir del parámetro de aprendizaje η de forma que se consiga más rápidamente la convergencia de la red. Se trata de elegir η de manera que D(k+1) sea lo menor posible y así conseguir un mayor acercamiento de los pesos de la red a la solución. Como D(k+1) es una función cuadrática del parámetro η solo tenemos que derivar e igualar a cero para encontrar el valor de dicho parámetro que corresponde al mínimo de la expresión D(k+1). entonces D(k+1)<D(k). Esto significa que eligiendo un valor de η tal que 0< η < n +1 n +1 n +1 j =1 j =1 E (η ) = D(k + 1) = D(k ) + 4η 2 ∑ x j (k ) − 4η ∑ w j (k )x j (k ) − 4η ∑ w*j x j (k ) j =1 2 77 n +1 n +1 n +1 ∂E (η ) 2 = 8η ∑ x j (k ) − 4 ∑ w j (k )x j (k ) − 4 ∑ w*j x j (k ) = 0 ∂η j =1 j =1 j =1 El valor de η que verifica dicha ecuación es n +1 ηopt = ∑ wj ( k ) x j ( k ) + j =1 n +1 ∑ w x (k ) * j j =1 j 2(n + 1) Sin embargo el segundo término del numerador no lo conocemos puesto que no conocemos los valores w *j . Si aproximamos dicho término por el anterior tenemos que un valor aproximado de la tasa de aprendizaje óptima es el siguiente: n +1 ηopt = ∑ w (k ) x (k ) j j =1 j n +1 Como hemos visto anteriormente, n +1 n +1 j =1 j =1 − 2 ∑ w j (k ) x j (k ) = [z (k ) − y (k )]∑ w j (k ) x j (k ) y así n +1 ηopt = − [ z (k ) − y (k ) ] ∑ w j ( k ) x j ( k ) j =1 2(n + 1) Sustituyendo este valor del parámetro η en la regla de aprendizaje (cuando y(k)≠z(k)) obtenemos, n +1 w j (k + 1) = w j ( k ) − ⎡⎣ z ( k ) − y ( k ) ⎤⎦ ∑ w j ( k ) x j ( k ) j =1 2(n + 1) ⎡⎣ z ( k ) − y ( k ) ⎤⎦ x j ( k ) es decir, n +1 w j (k + 1) = w j ( k ) − 2 ∑ w (k ) x (k ) j =1 j j n +1 xj (k ) (7) puesto que [z(k)−y(k)]2 = 4 cuando y(k)≠z(k). Dicha regla se conoce con el nombre de regla del Perceptrón normalizada, pues si partimos de un vector de pesos normalizado, es decir, w (k ) = 1, entonces todos los 78 pesos que se van obteniendo según la regla de aprendizaje se mantienen normalizados. En efecto, n +1 w (k + 1) = ∑ w j (k + 1) 2 2 j =1 2 n +1 ⎛ n +1 ⎞ ( ) ( ) w k x k w j (k ) x j (k ) n +1 ⎜ ⎟ ∑ ∑ j j n +1 n +1 j =1 j =1 2 2⎜ ⎟ − 4 n +1 w j (k ) x j (k ) = ∑ w j (k ) + ∑ x j ( k ) 2 n +1 ∑ ⎜ ⎟ 2 2 j =1 i =1 j =1 x k x k ( ) ( ) ⎜ ⎟ ∑ ∑ j j j =1 j =1 ⎝ ⎠ n +1 = ∑ w j (k ) 2 = 1 j =1 4.3 Deducción de la regla de aprendizaje del Perceptrón a partir de un criterio Supongamos que disponemos del conjunto de entrenamiento constituido por p1 patrones de la clase 1 (que representaremos por C1) y por p2 de la clase 2 (que representaremos por C2) y que ambas clases son separables linealmente. Hemos visto que con el Perceptrón simple se pretende encontrar un vector de pesos sinápticos w = (w1, w2,…,wn+1)T que verifique: n +1 wT x = ∑ w j x j ≥ 0 , ∀x ∈ C1 j =1 n +1 wT x = ∑ w j x j < 0 , ∀x ∈ C2 j =1 Con ello se consigue que la salida de la red, y, coincida con la salida deseada, z, es decir, y = sgn(w T x) = z , ∀x ∈ C1 ∪ C 2 Para entender bien la regla del Perceptrón debemos de conocer el criterio elegido para su deducción. Si el vector de pesos sinápticos está normalizado entonces la distancia de un vector x0 al hiperplano de separación (llamado frontera de decisión), w T x = 0 , viene dada por la expresión w T x 0 , puesto que el producto escalar de los vectores w y x0−x nos da la longitud de la proyección del vector x0−x sobre el vector w (normalizado), con signo positivo o negativo dependiendo si el punto x0 está por encima o por debajo del hiperplano (ver la figura 5). Es decir, dicha distancia viene dada por la expresión w T ( x 0 − x) = w T x 0 puesto que w T x = 0 . Si no estuviera normalizado el vector w entonces dicha distancia sería w w T ( x 0 − x) = w w T x0 = 1 w T x 0 , es decir, w proporcionar a w T x 0 . 79 x0 wTx=0 w x Figura 5. Distancia de un punto al hiperplano frontera. El criterio para deducir la regla de aprendizaje del Perceptrón consiste en minimizar la distancia total al hiperplano de separación de los puntos clasificados incorrectamente por el Perceptrón, es decir, minimizar la función D (w (k )) = −∑ z (k ) ⎡⎣ w (k )T x(k ) ⎤⎦ k∈I donde I es el conjunto de patrones de entrenamiento clasificados incorrectamente, I = {k ∈ {1, 2,..., p} : z (k ) = 1 y w (k )T x( k ) < 0 ó z ( k ) = −1 y w ( k )T x( k ) ≥ 0} . Para ello podemos utilizar el método del descenso del gradiente donde la dirección de búsqueda viene dada por la dirección del gradiente pero en sentido opuesto: ∆w(k ) = −η ∂D(w(k )) ∂w(k ) ⎧−η z (k )x(k ) =⎨ ⎩0 si k ∈ I si k ∉ I Se puede observar que dicha regla es la regla del Perceptrón definida en (3) puesto que y(k)= −z(k) para k∈I. En caso de modificar los pesos sinápticos solamente después de haber introducido todos los patrones del conjunto de entrenamiento y evaluar sus salidas se tiene que ∆w = −η ∂D(w) ∂w ⎪⎧−η ∑ z (k )x(k ) si k ∈ I = ⎨ k∈I ⎪⎩0 si k ∉ I ya que en este caso w no depende de k. La regla obtenida es la regla de aprendizaje por lotes del Perceptrón simple. 4.4 Interpretación de la regla de aprendizaje del Perceptrón Supongamos que en la regla de aprendizaje (4) utilizamos una tasa de aprendizaje es η = 0.5. Dicha regla se puede escribir también de la manera siguiente: 80 ⎧w (k ) + a(k ) si (a(k ))T w (k ) ≤ 0 w (k + 1) = ⎨ en otro caso ⎩w ( k ) (8) ⎧ x(k ) si z (k ) = 1 donde a(k) = ⎨ ⎩− x(k ) si z (k ) = −1 Nos indica que se realizan las correcciones siempre y cuando se producen clasificaciones incorrectas, es decir, si (9) (a( k ))T w ( k ) ≤ 0 Una interpretación geométrica de la regla de aprendizaje (8) se muestra en la figura 6. Vemos como el vector de pesos sinápticos w(k) se mueve directamente hacia el hiperplano (incluso lo cruza), (a(k))T w(k) = 0, cuando se le suma el vector a(k). Así, se mueve el vector de pesos sinápticos w(k) en una dirección que busca el incremento de la cantidad (a(k))T w(k) tratando de conseguir que sea positiva y así la clasificación es correcta. a(k) w(k+1) a(k) w(k) + − Figura 6. Variación del vector de pesos sinápticos en la regla de aprendizaje del Perceptrón Por lo tanto, la regla de aprendizaje del Perceptrón intenta encontrar una solución w* para el siguiente sistema de desigualdades: a( k ) T w > 0 , k = 1, 2,…, p1+ p2 (una desigualdad por cada patrón). Este planteamiento nos lleva a establecer un criterio para deducir la regla de aprendizaje del Perceptrón. Se trata de obtener un procedimiento para minimizar la siguiente función criterio: J ( w ) = − ∑ a( k ) T w (10) k∈I ( w ) donde I(w) es el conjunto de patrones clasificados incorrectamente utilizando el vector de pesos sinápticos w (es decir, (a(k))T w ≤ 0). Así, J nunca es negativo y si dicho conjunto es vacío entonces J alcanza su valor mínimo, J = 0. Desde el punto de vista geométrico, J(w) es proporcional a la suma de las distancias de las muestras clasificadas incorrectamente a la frontera de decisión (hiperplano). Cuanto menor sea J(w) mejor será el vector de pesos sinápticos w. 81 Un procedimiento para minimizar dicha función criterio viene dado por el método del descenso del gradiente, es decir, como la componente j del gradiente de J es ∂J / ∂w j , entonces de la expresión (10) se tiene que el gradiente de J(w) es: ∇J = ∑ (−a(k )) k∈I ( w ) Así, la regla de actualización basada en el descenso del gradiente, que consiste en desplazarse en la dirección opuesta al gradiente con una longitud del paso regulada por el parámetro η(k), viene dada por la siguiente expresión: w (k + 1) = w (k ) − η (k )∇J = w ( k ) + η ( k ) ∑ a( k ) k∈I ( w ) Aquí actualizamos el vector de pesos sinápticos después de evaluar las salidas de la red para todos los patrones de entrenamiento. Por ello, se llama algoritmo del Perceptrón con entrenamiento por lotes, que resumimos a continuación: Algoritmo de aprendizaje del Perceptrón con entrenamiento por lotes Paso 0: Inicialización Inicializar los pesos sinápticos con números aleatorios del intervalo [-1,1]. Fijar un valor de parada s. Ir al paso 1 con k=1 Paso 1: (k-ésima iteración) Corrección de los pesos sinápticos w (k + 1) = w (k ) + η (k ) ∑ a( k ) k∈I ( w ) Paso 2: Parada Si η (k ) ∑ a(k ) < s parar. k∈I ( w ) En otro caso, ir al Paso 1 con k=k+1. En este algoritmo se puede modificar la tasa de aprendizaje η(·) en cada iteración. Cuando η(·) se mantiene constante en todas las iteraciones se dice que la regla es de incremento fijo. Si actualizamos el vector de pesos sinápticos en cada iteración (entrenamiento individualizado) entonces tendríamos que w (k + 1) = w (k ) + η (k )a(k ) cuando el patrón introducido en la iteración k resulta clasificado incorrectamente, y w (k + 1) = w (k ) en caso contrario. Resulta así la regla de aprendizaje del Perceptrón con entrenamiento individualizado estudiada al comienzo del tema. 82 4.5 Modificaciones: El algoritmo del Perceptrón con bolsillo Consiste en tener en cuenta el número de iteraciones consecutivas del algoritmo de Perceptrón en las cuales no se ha modificado el vector de pesos sinápticos (para cada uno de los vectores que va generando), es decir, tener en cuenta el número de patrones que se han clasificado correctamente con dicho vector hasta que se ha encontrado el primer patrón que clasifica incorrectamente. Se tiene “guardado en el bolsillo” la mejor solución explorada, es decir, el vector de pesos sinápticos generado que ha conseguido, hasta el momento, el mayor número de iteraciones sin ser modificado. Cuando se encuentra un nuevo vector de pesos sinápticos que consigue un mayor número de clasificaciones correctas consecutivas que el que hay en el bolsillo entonces el vector del bolsillo se reemplaza por este. La solución final viene dada por el vector de pesos sinápticos guardado en el bolsillo. Así, el objetivo de esta modificación es encontrar un vector de pesos sinápticos que maximice el número de clasificaciones correctas. Como los patrones de entrenamiento se presentan a la red de manera aleatoria y el conjunto de patrones es finito, entonces la red puede encontrar un vector de pesos sinápticos óptimo con alta probabilidad. Aunque este algoritmo no garantiza una solución óptima pero la evidencia empírica nos muestra que conduce a buenos resultados. Para evitar que la mala suerte nos pueda llevar a un vector de pesos sinápticos que sea una mala solución se puede hacer otra nueva modificación. Consiste en reemplazar el vector de pesos sinápticos que hay en el bolsillo por aquel que tenga una racha mayor de clasificaciones correctas y que además clasifica correctamente a un mayor número de patrones del conjunto completo de los p patrones de entrenamiento. Esta modificación es mas costosa computacionalmente por lo que se suele usar sólo en la fase final del entrenamiento. 4.6 Implementación de la función lógica OR mediante un Perceptrón Supongamos que deseamos saber si una paloma es capaz de aprender la manera de conseguir la comida. Para ello, se colocan dos pulsadores, uno al lado del otro y cada pulsador puede estar encendido o apagado. Para conseguir la comida tiene que picar en cualquiera de los pulsadores, salvo cuando los dos están apagados que debe picar solamente en el pulsador derecho (figura 7). ¿Aprenderá la paloma a picar siempre en el pulsador adecuado para conseguir la comida? El Perceptrón simple puede hacerlo. Para ello vamos a representar el problema mediante un vector bipolar (x1,x2,x3), donde x1 toma el valor 1 ó –1 según que el pulsador de la izquierda esté encendido o no, respectivamente; x2 toma el valor 1 ó –1 según que el pulsador de la derecha esté encendido o no, y x3 toma el valor 1 ó –1 según que la paloma pique en el pulsador de la izquierda o en el de la derecha, respectivamente. Por lo tanto, el problema se reduce a un problema de clasificación, donde las entradas (1 1 –1), (1 –1 –1), (–1 1 –1), (1 1 1), (1 –1 1), (–1 1 1), (–1 –1 –1) conducen a un éxito (y = 1), y la entrada (–1 –1 1) a un fracaso (y = –1). El Perceptrón aprenderá esta regla mediante entrenamiento, es decir, introduciendo varias veces en la red el conjunto de patrones de entrada y modificando los pesos sinápticos según la regla de aprendizaje. Así, el Perceptrón de la figura 8 conduce siempre a una salida correcta, es decir, ha aprendido dicha regla. 83 Figura 7. Experimento para el aprendizaje. w1 = 0.8 θ = -2.1 w2 = 0.9 w3 = -0.9 Figura 8. Pesos sinápticos y umbral del Perceptrón. Ahora modificamos el experimento de manera que para conseguir la comida tiene que picar en el pulsador de la derecha, salvo cuando los dos están apagados, en cuyo caso tiene que picar en el pulsador de la izquierda. ¿Podrá una paloma aprender esta regla? El Perceptrón simple no. El problema se reduce a un problema de clasificación, donde las entradas (1 1 –1), (1 –1 –1), (–1 1 –1), (–1 –1 1) conducen a un éxito (y=1), y las entradas (1 1 1), (1 –1 1), (–1 1 1), (–1 –1 –1) a un fracaso (y=–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) Figura 9. Los vértices del cubo como patrones de entrenamiento. 84 En la figura 9 se puede observar como los patrones de entrenamiento son los vértices de un cubo; los vértices que representamos por los círculos rellenos de negro se corresponden con acierto mientras que los restantes con fracaso. Como estos vértices no se pueden separar linealmente de los restantes, el Perceptrón simple no puede aprender dicha regla o función lógica. Sin embargo, como veremos en el siguiente capítulo, si utilizamos dos capas de neuronas artificiales podemos implementar cualquier función Booleana, y, por lo tanto, dicha función. 4.7 La ADALINA Otro modelo clásico de redes neuronales es la ADALINA (también llamada ADALINE), pues corresponde al acrónimo de ADAptive Linear NEuron) o neurona con adaptación lineal que fue introducida por Widrow en 1959. Esta neurona es similar al Perceptrón simple pero utiliza como función de transferencia la función identidad en lugar de la función signo. La salida de la ADALINA es simplemente una función lineal de las entradas (ponderadas con los pesos sinápticos): n y = ∑ wj x j −θ j =1 Obsérvese que ahora la salida de la red es continua en lugar de binaria. Si consideramos una entrada adicional con valor xn+1= −1 cuyo peso sináptico wn+1=θ, entonces podemos escribir simplemente n +1 y = ∑ wj x j j =1 Así, de forma general podemos tratar el valor umbral θ como un peso sináptico adicional con entrada igual a −1. Con la ADALINA se pretende implementar la correspondencia entre las entradas y las salidas de un sistema utilizando un conjunto finito de relaciones entre entradas y salidas. Supongamos que disponemos de p patrones de entrada x 1 , x 2 ,..., x p y sus correspondientes salidas deseadas z 1 , z 2 ,..., z p . Se trata de determinar los pesos sinápticos que consiguen que las salidas de la red sean lo más parecidas a las salidas deseadas para el conjunto dado de patrones de entrenamiento. Es decir, se trata de determinar los pesos sinápticos de manera que se minimice la función de error cuadrático siguiente: { { } n +1 2 ⎞ 1 p 1 p ⎛ E = ∑ ( z k − y ( k ) ) = ∑ ⎜ z k − ∑ w j (k ) x kj ⎟ 2 k =1 2 k =1 ⎝ j =1 ⎠ } 2 Para ello vamos a seguir el método de descenso del gradiente, es decir, en la misma dirección y en sentido opuesto al gradiente. Si en la iteración k hemos introducido el patrón de entrenamiento xk, cuya salida deseada es zk, y los pesos sinápticos son wj(k), j=1,2,…,n, entonces la modificación de los mismos motivada por dicho patrón es: wr (k + 1) = wr (k ) + ∆wr (k ) , donde ∆wr (k ) = −η ∂E ∂wr (k ) 85 [ ] = η z k − y (k ) x rk , j = r, 2,…, n+1 (11) El parámetro η controla la longitud del paso que vamos a dar en la dirección opuesta del gradiente. Conforme mayor sea η mayor será la cantidad por la que se modificarán los pesos sinápticos. Dicho parámetro debe ser un valor pequeño para evitar dar pasos demasiado largos, es decir, que nos lleven a soluciones peores que la que teníamos, puesto que el método del gradiente solamente garantiza el decrecimiento de la función de error si nos desplazamos en la direcciones opuesta del gradiente pero en un entorno suficientemente pequeño. A η lo llamaremos parámetro de aprendizaje o tasa de aprendizaje. En el proceso de entrenamiento hemos introducido un patrón en cada iteración, por ello diremos que hemos realizado un aprendizaje en línea. También podemos introducir los p patrones directamente y comparar las salidas de la red con las salidas deseadas, pasando entonces a actualizar los pesos sinápticos, en cuyo caso diremos que el aprendizaje es por lotes. La modificación de los pesos sinápticos se hace tomando como función de error el error medio (se divide por p el error total), es decir, 2 1 p k 1 p ⎛ k n +1 k ⎞ E= z y k − = ( ) ( ) ⎜ z − ∑ wj x j ⎟ ∑ ∑ 2 p k =1 2 p k =1 ⎝ j =1 ⎠ y así la regla de aprendizaje es ∆w j = −η =η 2 ∂E ∂w j [ ] 1 p k z − y (k ) x kj ∑ p k =1 (12) Obsérvese que aquí el peso sináptico no depende del patrón introducido, es el mismo para los p patrones puesto que se actualiza conjuntamente según el error medio para los p patrones. 4.8 Neuronas con salida continua: Regla de aprendizaje de WidrowHoff Vamos a considerar unidades de proceso con salidas continuas. Una unidad de proceso continua es aquella cuya salida viene dada por la siguiente expresión: ⎛ n +1 ⎞ y = g ⎜ ∑ wj x j ⎟ ⎝ j =1 ⎠ donde x = ( x1 , x2 ,..., xn ) ∈ ℜn en la entrada de la unidad, w = ( w1 , w2 ,..., wn ) ∈ ℜn es ' ' el vector de pesos sinápticos y g es la función de transferencia. La función de transferencia va a ser una función diferenciable y no decreciente, y vamos a elegir, como función de transferencia, a una de las siguientes funciones: a) La función logística 86 g (x ) ≡ 1 1 + exp(− 2 βx ) cuya representación gráfica se muestra en la figura 10. Es una función de aplastamiento puesto que pasa los valores del potencial sináptico, que son del intervalo (−∞, ∞), al intervalo [0, 1]. Figura 10. Funciones logísticas. El parámetro de ganancia β controla la pendiente de la curva, es decir, cuanto mayor es β la curva tiene más pendiente y se aproxima más a la función escalón. Se utiliza dicha función como función de transferencia puesto que su derivada, que después vamos a utilizar en la regla de aprendizaje, es muy simple, g ' ( x ) = 2 βg ( x )[1 − g ( x )] , es decir, es una función de la propia función. b) La función tangente hiperbólica, g ( x ) = tanh (βx ) = e β x − e−β x e β x + e −β x cuya representación gráfica se muestra en la figura 11. Es una función de aplastamiento puesto que pasa los valores del potencial sináptico al intervalo [-1, 1]. Figura 11. Funciones tangentes hiperbólicas. También se utiliza dicha función como función de transferencia puesto que su derivada 2 es muy simple, g ' ( x ) = β 1 − g ( x ) , es decir, es también una función de la propia función. Asimismo, cuanto mayor es el parámetro de ganancia β mayor es la pendiente de la curva y más se asemeja a la función signo. [ ] c) La función identidad, g(x)=x. n +1 A la cantidad h = ∑ wj x j se le llama potencial sináptico. En la figura 12 j =1 representamos gráficamente una unidad de proceso continua. 87 w1 x1 w2 x2 x3 y w3 Figura 12. Neurona analógica. Con esta unidad de proceso continua se pretende implementar la correspondencia entre las entradas y las salidas de un sistema, utilizando un conjunto finito de relaciones entre entradas y salidas. Supongamos que disponemos de p patrones de entrada x 1 , x 2 ,..., x p y sus correspondientes salidas deseadas z 1 , z 2 ,..., z p . Se trata de determinar los pesos sinápticos que consiguen que las salidas de la red sean lo más parecidas a las salidas deseadas para el conjunto dado de los patrones de entrenamiento. Es decir, se trata de determinar los pesos sinápticos de manera que se minimice la función de error cuadrático siguiente: { { } } 2 n +1 ⎞ 2 1 p 1 p ⎛ E = ∑ ( z k − y ( k ) ) = ∑ ⎜ z k − g (∑ w j (k ) x kj ) ⎟ 2 k =1 2 k =1 ⎝ j =1 ⎠ El método de descenso del gradiente (desplazar los pesos en sentido opuesto a la dirección del gradiente) nos conduce a la siguiente regla de aprendizaje, conocida con el nombre de regla de Widrow-Hoff, regla de mínimos cuadrados medios o regla LMS (Least Mean Squares): ∂E ∆w j (k ) = −η ∂w j (k ) [ ] = η z k − y (k ) g ' (h )x kj , j=1,2,…,n+1 donde h es el potencial sináptico. En el caso de aprendizaje por lotes, tomaremos como función de error cuadrático medio n +1 ⎞ 2 1 p k 1 p ⎛ k E= z y k z g w j x kj ) ⎟ − = − ( ( ) ( ) ⎜ ∑ ∑ ∑ 2 p k =1 2 p k =1 ⎝ j =1 ⎠ y así, ∆w j = −η =η 2 ∂E ∂w j [ ] 1 p k z − y (k ) g ' (h) x kj ∑ p k =1 (13) 88