1 APUNTES REDES NEURONALES (Continuación) Por: Miguel Angel Montilla G.
RED NEURONAL PERCEPTRÓN: Este fue el pr imer modelo de RNA presentado a la comunidad científica por el psicólogo Frank Rosenblatt en 1958. Como es natural natural despertó un enorme interés en la dé cada de los a ños 60, debido a su ca pacidad pacidad pa pa ra aprender a re conocer conocer patrones sencillos con una superficie de separación lineal, razón por la cual también fue objeto de severas críticas que terminaron por dejar en el olvido la propuesta de Rosenblatt. La estructura del Perceptrón es supremamente sencilla, en su entrada posee varias neuronas lineales que se encargan de recibir el estimulo externo de la red y a la salida presenta una única capa de neuronas, con función de activación umbral , lo cual trae como consecuencia que la salida de cada neurona esté entre dos posibles valores.
ENTRENAMIENTO DEL PERCEPTRÓN: Para entre nar un P ercep erceptrón trón se presen presentan tan a la red patron patrones es de entrad entradaa y se c ompara omparann la s salidas con l os valores i deales esperados. Este tipo de entrenamiento se conoce como Aprendizaje s upervisado. ALGORITMO DE ENTRENAMIENTO: 1. 2. 3. 4.
Se inicializa la matriz de pesos(w) y el valor de la ganancia (b) de forma aleatoria. Se presenta a la red los patrones patr ones de entrenamiento en forma de pares de entrada/salida-deseada (t). Se calcula la salida real (a). a= hardlim(w*p+b) o a= hardlims(w*p+b). Se calcula el error y se recalculan los pesos y la ganancia a. e = t – a b. wi = wiant + e*pT c. b = bant + e 5. Si el error es diferente de cero para cada uno de los patrones, se vuelve al paso 2.
2 Ejemplo: Diseñar un Perceptrón que permita solucionar el problema de clasificación de patrones que se plantea en el espacio de entrada siguiente:
Del diagrama anterior, se deducen los siguientes patrones de entrenamiento:
Red que se deberá implementar:
Entrenamiento: De forma aleatoria se asignan inicialmente los siguientes valores:
Iteración 1:
3 Iteración 2:
Iteración 3:
Iteración 4:
Iteración 5:
4 Ejercicio: Diseñar un Perceptrón que se comporte como una compuerta lógica OR.
LIMITACIÓN DEL PERCEPTRÓN: Sirve para resolver únicamente problemas linealmente separables, es decir, problemas cuyas salidas estén clasificadas en dos clases diferentes y que permitan que su espacio de entrada sea dividido en estas dos regiones por medio de un hiperplano de características similares a la ecuación del perceptrón, esto es: w*p + b = 0
Ej:
Espacio de entrada Función AND
Espac
io de entrada Función XOR
5 Para más de 2 dimensiones, se plantean condiciones de desigualdad, teniendo en cuenta que:
Para el caso de la XOR, tenemos:
Si no hay contradicción en las desigualdades anteriores, el problema es linealmente separable. En nuestro caso, supongamos que en las desigualdades k= -b. De modo que: 1. b < 0 2. 3. 4.
ó
0
ó
k>0
Se concluye entonces que no se pueden cumplir todas las ecuaciones y, por tanto el problema no es linealmente separable. La solución ante este problema es un Perceptrón Multicapa : P1 0 0 1 1
P2 0 1 0 1
a1 1 1 1 0
a2 0 1 1 1
Espac
a 0 1 1 0
io de entrada – Neurona de salida
6 Y el diagrama detallado de la red es:
UTILIDAD DEL PERCEPTRÓN: Dada su naturaleza, una a plicación directa de l fu ncionamiento de l P erceptrón a nteriormente descrito e s cla sificación de patrones. Por ejemplo, s i tenemos dos grupos de c írculos negros y blancos en un plano y queremos separarlos, una alternativa es usar un Perceptrón para tal fin. Cuando se dispone un Perceptrón a resolver esta tarea, este genera una línea que separa los círculos negros de los blancos.
PASOS PARA CREAR Y ENTRENAR LA RED PERCEPTRÓN EN MATLAB: 1. Presentar en una sola matriz los vectores concurrentes de entrada.
2. Presentar en una matriz los vectores concurrentes de salida deseada. Una fila por cada salida y una columna por cada valor de salida deseado, asociado a las entradas. 3. Se crea la red de la siguiente forma:
net = newp(minmax(p), S)
7 net: minmax(p): S:
Variable - Nombre de la red. Valor mínimo y máximo de las entradas. Número de neuronas.
4. Se establecen los parámetros de entrenamiento:
net.trainParam.epochs : Número de épocas. Determina el número máximo de iteraciones que se desea realizar para obtener pesos y bias. net.trainParam.show: Especifica cada cuantas épocas se desea visualizar el progreso del entrenamiento. net.trainParam.goal: Especifica el máximo error deseado. 5. Se inicia el entrenamiento, de la siguiente forma:
net=train(net,p,t) net: Nombre de la red creada. p: Matriz de valores de entrada (vectores concurrentes) t: Matriz de valores deseados de salida. (vectores concurrentes) 6. Si todo salió bien, el diseño de la red ha terminado. Para determinar esto, se procede a simular la red ya entrenada, para determinar su desempeño: a = sim(net,p) a: Salida obtenida. 7. Finalmente, se buscan los valores de pesos y bias obtenidos, dando por concluido el diseño de la red neuronal. bias:
bias = net.b{1}
Pesos: W1= net.iw{1,1}
REDES ADALINE:
a= w11*p1+w12*p2+ …+w1R*pR
En general, para múltiples capas:
8 Para Entrenamiento: Se presentan patrones de entrada/salida a la red y se actualizan los pesos y ganancias, de la siguiente forma:
α: Constante que controla la velocidad de entrenamiento y la estabilidad del mismo. Si es muy pequeño, entrenamiento lento. Si es muy grande, el algoritmo oscila. En la práctica, 0.1< α < 1
La principal aplicación de estas redes, está en el procesamiento de señalas, especialmente filtros.
REDES MULTICAPA: CAPA DE NEURONAS: NOTACIÓN
MÚLTIPLES CAPAS:
SIMPLIFICADA
9 NOTACIÓN SIMPLIFICADA:
ALGORITMO DE ENTRENAMIENTO BACKPROPAGATION: • • • •
• •
• •
Se usa para entrenar redes multicapa. Primero se aplica un patrón de entrada y se obtiene un valor de salida. La salida se compara con la salida deseada y se obtiene una señal de error para cada salida. Las señales de error se propagan hacia atrás (desde l a cap a de salida hacia l a de entrada), entregando a cad a capa, una fracción del error total, basándose en la contribución de cada neurona a la salida original. Con lo anterior, se actualizan los pesos y bias. El proceso se repite hasta hacer que la red converja hacia un estado que permita clasificar correctamente los patrones de entrenamiento. La arquitectura más usada con el algoritmo backpropagation es la de alimentación directa (feedforward). Las funciones de transferencia más comunes con este algoritmo son si gmoidales y lineales (tansig, logsig, purelin).
Para definir la topología de la red, no existe una técnica específica para determinar el número de capas ocultas, ni el número de neuronas de c ada c apa. S i e l n úmero de neuronas e s muy pequeño, l a r ed q ueda sub-compensada y s i dicho número es excesivo, la red queda sobre-compensada. En cualquier caso, la respuesta de la red no será óptima. Para seleccionar las funciones de transferencia: •
Normalmente, la capa de entrada y las ocultas son logsig o
tansig
aprendizaje de relaciones lineales y no lineales entre entradas y salidas.
•
La capa de salida se acostumbra purelin
para permitir cualquier valor de salida.
•
Si se requiere una salida entre 0 y 1, normalmente se usa en la salida logsig.
PASOS PARA CREAR Y ENTRENAR UNA RED MULTICAPA EN MATLAB: 1. Presentar en una sola matriz los vectores concurrentes de entrada.
para
permitir
el
10 2. Presentar en una matriz los vectores concurrentes de salida deseada. Una fila por cada salida y una columna por cada valor de salida deseado, asociado a las entradas. 3. Se crea la red de la siguiente forma:
net = newff(minmax(p),[S1 S2...SNl],{TF1 TF2...TFNl},BTF) net: minmax(p): [S1 S2...SNl]: {TF1 TF2...TFNl}: BTF:
Variable - Nombre de la red. minmax es una función de Matlab que calcula el valor mínimo y máximo de las entradas. Número de neuronas en cada capa. Función de transferencia cada capa. (logsig, tansig, purelin) Función de entrenamiento. (trainlm, traingd, traingdm)
Normalmente se usa trainlm (Le venberg-Marquardt backpropagation), debi do a que es rápido y efic iente. S u desventaja es que consume bastante memoria durante el entrenamiento. Ej;
net= newff(minmax(p),[2,1],{'tansig','logsig'},'trainlm'); 4. Se establecen los parámetros de entrenamiento:
net.trainParam.epochs : Número de épocas. Determina el número máximo de iteraciones que se desea realizar para obtener pesos y bias. net.trainParam.show: Especifica cada cuantas épocas se desea visualizar el progreso del entrenamiento. net.trainParam.goal: Especifica el máximo error deseado. 5. Se inicia el entrenamiento, de la siguiente forma:
net=train(net,p,t) net: Nombre de la red creada. p: Matriz de valores de entrada (vectores concurrentes) t: Matriz de valores deseados de salida. (vectores concurrentes) 6. Si todo salió bien, el diseño de la red ha terminado. Para determinar esto, se proc ede a simular la red ya e ntrenada, para establecer su desempeño:
a = sim(net,p) a: Salida obtenida. 7. Finalmente, se buscan los valores de pesos y bias obtenidos, dando por concluido el diseño de la red neuronal. bias:
biasi = net.b{i,1} i: número de la capa Pesos de la capa de entrada:
W1= net.iw{1,1} Pesos de las demás capas:
Wi= net.lw{destino, origen}