Upload
albertirty
View
91
Download
8
Embed Size (px)
Citation preview
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 1
1. Fundamentos Bsicos de Redes Neuronales Artificiales
1.1 Surgimiento de las Redes Neuronales
Las Redes Neuronales Artificiales (RNA) surgen como una necesidad de contar con mquinas capaces de aprender y recordar, tal como la inteligencia humana. Dicho de otra manera, imitar el funcionamiento del cerebro humano, ya que este posee un procesamiento altamente paralelo y con capacidad de resolver problemas complejos [3].
1.2 Definicin. Neurona Biolgica y Artificial
Existen muchas definiciones acerca de las RNA. Por ejemplo, algoritmos computacionales inspirados en la naturaleza: Neuronas Biolgicas. O como tambin, sistemas altamente paralelos no lineales y densamente interconectados y basados en procesadores simples: modelo simplificado de la neurona biolgica [3].
A continuacin, en las figuras 1.1 y 1.2 se muestran los modelos de una neurona biolgica y una neurona artificial.
Cuerpo
Dendritas
Synapses
Axon
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 2
Figura 1.1. Modelo Simplificado de una Neurona Biolgica
Figura 1.2 Modelo de una Neurona Artificial
Cabe mencionar que el cuerpo de la neurona biolgica es aquel en donde se encuentra el ncleo y por lo tanto es donde se realiza el procesamiento de la informacin recibida (impulsos elctricos), inhibiendo o activando la neurona. En cuanto que las synapses vienen hacer los puntos de unin entre una neurona pre-sinptica y otra post-sinptica.
Donde w1, w2, .., wn, bk, x1, x2, , xn, e yk, se representan como contenido de los vectores:
y k
CCuueerrppoo ddee llaa NNeeuurroonnaa kk
b k 1
EEssttaaddoo ddee AAccttiivvaacciinn
((ssaalliiddaa))
v
w 1
w 2
w n
E N T R A D A S
x 1
x 2
x n
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 3
y...y
Y b...b
B
x...xx
X
w...wwW
k
1
1kx
k
1
1kx
n
2
1
1 x n
n21n x 1
===
=
Definindose como:
)v( y
bx*w. . .x*wx*wv
bx*wv
kk
knn2211k
n
1ikiik
=
++++=+=
=
Y, en notacin matricial, como:
)V( Y
BX*WV
kk
kkk
=
+=
Donde:
(.) : representa a la Funcin de Transferencia o de Activacin, sobre la variable V.
k hace referencia a la k-sima neurona de la red neuronal.
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 4
Cuando se cuenta con redes neuronales de mltiples capas, y mltiples neuronas por capas, los pesos sinpticos y los bias son representados a travs de matrices. Ver seccin 1.4.
1.3 Funciones de Transferencia
Existen diversos tipos de funciones de transferencia. Por ejemplo: Funcin de Transferencia Escaln, Lineal, No Lineal (tangencial o sigmoidal), entre otros.
Funcin de Transferencia Escaln
Se caracteriza porque el vector de entrada a la funcin de transferencia es real, en cuanto que la salida est limitada a un vector con slo dos valores.
Si se desea que la salida tome los valores 0 o 1, entonces se hace uso de la funcin o comando hardlim. Y, si se desea que la salida tome los valores -1 o 1, se utiliza la funcin hardlims. Por ejemplo, en las figuras 1.3a y 1.3b, se muestran los casos de ambas funciones de transferencia. Se utiliza en la red Perceptron.
>> V = -8:0.2:8; >> Y = hardlim( V ); >> subplot(121), plot( V , Y ) >> Y = hardlims( V ); >> subplot(122), plot( V , Y )
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 5
Figura 1.3. a) Funcin hardlim. b) Funcin hardlims
Funcin de Transferencia Lineal
Se caracteriza porque la entrada y la salida de la funcin, son del tipo real. El comando o funcin que realiza dicha operacin se denomina purelin. Es utilizada por las redes lineales y en ocasiones en la ltima capa de una red Multicapa. En la figura 1.4 se muestra dicha funcin.
>> V = -8:0.2:8; >> Y = purelin( V ); >> plot( V , Y )
Figura 1.4. Funcin de transferencia purelin
Funcin de Transferencia No Lineal
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 6
Se caracteriza porque la entrada a la funcin es real, en cuanto que la salida tambin lo es pero limitado a un rango. Puede ser del tipo sigmoid logartmico o sigmoid tangente hiperblico. Ver figura 1.5.
Figura 1.5. Funciones de transferencia logsig y tansig
Esta funcin es utilizada por la red Multicapa con regla de aprendizaje Backpropagation.
>> V = -8:0.2:8; >> Y = logsig( V ); >> subplot(121), plot( V , Y ) >> Y = tansig( V ); >> subplot(122), plot( V , Y )
Funcin de Transferencia Competitiva
Se caracteriza porque la entrada a la funcin de transferencia es real, y la salida ser igual a 1 slo para el caso mximo, y ser 0 para los dems casos. A continuacin se muestra un vector con valores aleatorios, donde el valor mximo est ubicado en la posicin 6, por lo tanto, la salida ser un vector con valor 1 en la posicin 6, y valor 0 en las dems posiciones. Vea el ejemplo y la figura 1.6. Es utilizado por las redes competitivas.
>> V = randn( 8 , 1 );
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 7
>> Y = compet( V ); >> subplot(121), stem( V ); >> subplot(122), stem( Y );
Figura 1.6. Funcin de transferencia compet
Funcin de Transferencia de Saturacin
Se caracteriza porque la entrada a la funcin de transferencia es del tipo real, y la salida es real y lineal pero limitada al intervalo de 0 a 1 o de -1 a 1. Es decir, se satura cualquier valor por encima o debajo de los lmites. Es utilizada por la red Hopfield. Ver figura 1.7a y 1.7b..
>> V = -8:0.2:8; >> Y = satlin( V ); >> subplot(121), plot( V , Y ) >> Y = satlins( V ); >> subplot(122), plot( V , Y )
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 8
Figura 1.7. Funciones de transferencia a) satlin. b)
satlins
Funcin de Transferencia Radial Basis
Se caracteriza porque la entrada a la funcin de transferencia es real, y la salida est limitada a un intervalo de 0 a 1 formando una curva gaussiana. Ver la figura 1.8. Es utilizada por la red Function Radial Basis.
>> V = -8:0.2:8; >> Y = radbas( V ); >> plot( V , Y )
1.4 Caractersticas Principales
Entre las principales caractersticas de toda red neuronal artificial, se tiene:
a) Aprendizaje: porque aprende de la experiencia. b) Asociacin: debido a que asocia padrones diferentes. c) Generalizacin: generaliza de ejemplos anteriores. d) Robustez: la prdida de algunas neuronas, no
deteriora el buen funcionamiento de la red neuronal. e) Bsqueda Paralela: basado en la bsqueda por
contenido y no en forma paralela.
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 9
Figura 1.8. Funcin de transferencia radbas
1.5 Arquitecturas ms Comunes
Seguidamente se muestran tres tipos principales de arquitecturas, de las cuales se derivan otras ms. La eleccin del tipo de arquitectura a utilizar, se basa en el tipo de aplicacin que se desea realizar.
a) Una Capa Feed-Forward
Es una arquitectura conformada por una sola capa de neuronas, donde el flujo de datos viaja por la red de izquierda a derecha. Esto significa que se dirige desde el vector de entrada hacia la salida de toda la red. A continuacin, en la figura 1.9, se muestra el caso particular de una red neuronal de una capa, con 3 neuronas y dos elementos por cada vector de entrada.
b 1
y 1
y 2
y 3
x1
x2
b 2
b 3
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 10
Figura 1.9. Red neuronal con una Capa Feed-Forward
De esta manera, en forma matricial se interpretara como:
( )1x31x22x31x3 BX*WY +=
3
2
1
1x3
3
2
1
1x3
3231
2221
1211
2x32
11x2
yyy
Y bbb
B
wwwwww
W xx
X
==
==
b) Multi-Capa Feed-Forward
Es una arquitectura conformada por mltiples capas de neuronas, donde el flujo de datos viaja de capa en capa desde la primera capa hacia la ltima capa de la red neuronal. A continuacin, en la figura 1.10, se muestra el caso particular de una red neuronal con dos capas, de 3 y 2 neuronas, y dos elementos por cada vector de entrada.
b 1
y 1
y 2
x1
x2
b 2
b 3
b 1
b 2
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 11
Figura 1.10. Red neuronal Multi-Capa Feed-Forward
En este caso, como existen dos capas de neuronas, se acostumbra a utilizar una notacin matricial particular para referenciar a la matriz de pesos y de bias de la primera y segunda capa.
)BY*W(Y
)BX*W(Y
C2C1C2C2
C1C1C1
+=
+=
Donde:
3
2
1C1
1x3
3231
2221
1211C1
2x32
11x2
bbb
B wwwwww
W xx
X ===
2
1C21x2
2
1C21x2
232221
131211C23x2
3
2
1C11x3
yy
Y bb
B
wwwwww
W yyy
Y
==
==
c) Red Recurrente
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 12
Es una arquitectura conformada por una o varias capas de neuronas, donde existe una realimentacin de la salida total hacia la entrada principal de la red neuronal. A continuacin, en la figura 1.11, se muestra el caso particular de una red recurrente de una capa, tres neuronas y tres elementos por cada vector de entrada.
Figura 1.11. Red neuronal recurrente.
En forma matricial se tendra:
Y*X
)BX*W(Y
=
+=
Donde X* = Y, indica que los nuevos clculos se obtienen con el nuevo vector de entrada.
1.6 Aprendizaje en Redes Neuronales
El aprendizaje de una red neuronal se refiere al proceso de como los pesos y bias cambian o se actualizan debido a la experiencia. Se distinguen tres tipos de configuracin de aprendizaje en la mayora de redes neuronales artificiales. As tenemos:
y1
y2
y3
x1
x2
x3 x*3
x*2
x*1
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 13
a. Sin Entrenamiento
Es un caso donde los pesos de la red neuronal no se entrenan sino se calculan. Un ejemplo de ello lo podemos encontrar en la red neuronal recurrente Hopfield.
b. Entrenamiento Supervisado
Es cuando se hace necesaria la presencia de un tutor para la supervisin. Es decir, existe una comparacin entre el vector de salida total y un vector de salida deseada. Un ejemplo de ello lo podemos encontrar en la red neuronal Perceptron. Ver la figura 1.12.
Figura 1.12. Diagrama de bloques del Entrenamiento Supervisado
c. Entrenamiento No Supervisado
Es cuando no se hace necesaria la presencia de un tutor para la supervisin. Un ejemplo de ello lo encontramos en las redes neuronales Competitivas. Ver la figura 1.13.
R.N.A
W +
Entrada X
Salida Y
Salida Deseada
Y
Error -
+
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 14
Figura 1.13. Diagrama de bloques del Entrenamiento No Supervisado.
1.7 Algunas Aplicaciones
Actualmente, las RNAs vienen siendo utilizadas en diversos sectores. As tenemos el sector industrial, mdico, ambiental, de energa, entre otros. A continuacin se cita algunas aplicaciones principales de las RNAs.
Procesamiento de imgenes y de voz Reconocimiento de patrones Identificacin de Sistemas Planeamiento y prediccin Interfaces adaptivas para sistemas Hombre/Mquina Control y optimizacin Filtrado de seales. Sistemas de visin para robots Entre otras.
1.8 Toolbox de Redes Neuronales
El toolbox con el cuenta el software Matlab y que es utilizado en todo este material preparado, es el denominado Neural Network; el cual cuenta con un conjunto de comandos o funciones propias para crear,
R.N.A
W
Entrada X
Salida Y
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 15
disear, entrenar y simular distintas redes neuronales artificiales. La ayuda puede ser invocada de la siguiente manera:
>> help nnet
Por ejemplo, de toda esa lista mostrada, podemos ver las funciones utilizadas para la creacin, entrenamiento y simulacin de la red neuronal Perceptron, que es objeto de estudio en el captulo 2.
>> help newp % crea >> help train % entrena >> help sim % simula
Asimismo, es necesario aadir que las funciones de creacin de las distintas redes neuronales, establecen una variable denominada net que es del tipo network object. Esto quiere decir que es una variable objeto, pues a su vez contiene ms variables.
Por ejemplo:
>> net = newp( [ -1 2 ; -1 2 ] ,1) net = Neural Network object: architecture: numInputs: 1 numLayers: 1 biasConnect: [1] inputConnect: [1] layerConnect: [0] outputConnect: [1] targetConnect: [1]
.
.
. parameters: adaptParam: .passes initParam: (none)
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 16
performParam: (none) trainParam: .epochs, .goal, .show, .time weight and bias values: IW: {1x1 cell} containing 1 input weight matrix LW: {1x1 cell} containing no layer weight matrices b: {1x1 cell} containing 1 bias vector other: userdata: (user stuff)
De esta manera, los pesos y los bias se visualizan:
>> net.iw %pesos de la primera capa: Cell Array >> net.lw %pesos de las dems capas: Cell Array >> net.b %bias de todas las capas: Cell Array >> net.iw{1} %para observar el contenido en la
%primera ubicacin del Cell Array.
Tambin, es posible ver y configurar distintos parmetros como por ejemplo para la adaptacin, para el entrenamiento, las funciones para el entrenamiento, las estructuras sub-objetos y las caractersticas de la arquitectura de la red neuronal.
>> net.adaptParam.passes = 2; % nmero de pasos >> net.trainParam % por defecto
>> net.trainParam.epochs = 50; % nmero de iteraciones >> net.trainParam.goal = 0.001; % desempeo global >> net.trainParam.show = 5; % mostrar cada 5 iterac.
>> net.trainParam.time = 1; % tiempo mximo para % entrenamiento (seg.)
>> net.adaptFcn % por defecto >> net.initFcn % por defecto >> net.performFcn % por defecto >> net.trainFcn % por defecto >> help trains % funcin de entren. secuencial >> help initlay % funcin de inicializ. por capa >> help mae % funcin error absoluto
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 17
>> help trainc % funcin de entren. cclico
>> net.inputs{1} % de entradas >> net.inputs{1}.range % retorna lo ingresado >> net.layers{1} % de las capas >> net.layers{1}.transferFcn = hardlims ; >> net.outputs{1} % de las salidas >> net.numInputs >> net.numLayers >> net.numOutputs >> net.numTargets
De esta forma, se configura o se muestran todos los parmetros relacionados a la creacin de una RNA. Muchas veces, no es necesario realizar una configuracin detallada, ya que por defecto se encuentran configuradas cuando se elige el tipo de red a utilizar. Slo cuando se utiliza la funcin network, es necesaria una configuracin exhaustiva, ya que este representa una funcin para la creacin de una red neuronal personalizada.
>> help network
Asimismo, tambin es posible trabajar con una interfase grfica del usuario (GUI) exclusivamente para redes neuronales. Slo basta con digitar el comando nntool:
>> nntool
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 18
2. Red Neuronal Perceptron
2.1 Definicin y Caractersticas
Representa una de las formas ms simple de RNA. Su uso es bsicamente para la clasificacin de padrones linealmente separables [6]. En la figura 2.1 se muestra la estructura de una red Perceptron.
Entre sus principales caractersticas encontramos:
Funcin de transferencia escaln. Regla de aprendizaje supervisado. Valores de entrada reales y salidas binarias {0,1} o
bipolares {-1,1}.
Figura 2.1. Estructura de una Red Perceptron [2].
2.2 Regla de Aprendizaje
Es muy sencilla, y est basada en la actualizacin de los pesos sinpticos a partir del error obtenido al comparar la salida deseada con la salida total de la red neuronal [6].
B Sx1
W SxR
1
Entrada Capa Perceptron
Y = hardlim( W * X + B )
X Rx1
+ Y Sx1 V Sx1
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 19
1. Inicializar los pesos sinpticos y los bias con valores aleatorios y pequeos.
2. Aplicar un padrn de entrada y obtener el vector de salida total.
> X = [ 1 1 0 0 ; 1 0 1 0 ] ; >> Yd = [ 1 0 0 0 ];
Luego, se procede a crear la red neuronal Perceptron con la funcin newp. En esta funcin se debe incluir la cantidad de neuronas, una matriz con los valores mximos y mnimos por cada elemento del vector de entrada, y el tipo de funcin de transferencia utilizada. La regla de aprendizaje utilizada es la perteneciente a Perceptron: learnp.
>> help newp >> net = newp( [ 0 1 ; 0 1 ] , 1 , 'hardlim' , 'learnp' );
>> net.iw %tamao de la matriz de pesos >> net.iw{1} %pesos iniciales ans =
000010001111
Yxx d21x1
x2
b1
y1
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 21
0 0 >> net.b{1} %bias inicial ans = 0
La funcin newp crea pesos y bias iniciales iguales a cero. Pero tambin es posible crearlos a partir de valores pequeos y aleatorios ( net.iw{1} = randn(1,2) ; )
Antes de proceder con el entrenamiento, se observa que la salida total con los pesos y bias iniciales es:
>> Y = sim( net , X ) Y = 1 0 1 1
Lo cual indica que es totalmente diferente a la Salida Deseada. Por ello, se necesita entrenar los pesos y bias. Seguidamente, se procede al entrenamiento de la nica neurona con un total de 40 iteraciones; de tal manera que el error sea igual a cero, o en otras palabras que la salida total Y sea idntica a la salida deseada Yd.
>> net.trainParam.epochs = 40; >> [ net , tr ] = train( net , X , Yd ); %ver figura 2.3 TRAINC, Epoch 0/40 TRAINC, Epoch 8/40 TRAINC, Performance goal met.
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 22
Figura 2.3. Curva de desempeo por cada iteracin alcanzada. Error = 0.
De la figura anterior se observa que se necesitaron slo 8 iteraciones para lograr la clasificacin. Adems, el grfico tambin puede se obtenido de:
>> t = tr.epoch; >> e = tr.perf; >> plot( t , e )
Luego, se realiza la simulacin y se obtiene.
>> Y = sim( net , X ) % simulando Y = 1 0 0 0
Esta simulacin equivale a realizar lo siguiente:
>> for i = 1:4 V = net.iw{1}* X( : , i ) + net.b{1}; if V>=0, Y(i) = 1; else, Y(i) = 0; end end
Por lo tanto, realizado el entrenamiento se puede verificar que el producto de la matriz de pesos con cualquier vector de entrada y sumado al bias entrenado, y aplicando la funcin de transferencia correspondiente, la salida total ser igual a la salida deseada.
Grficamente, esto se puede demostrar cuando se representa en el plano (por existir dos elementos en el vector de entrada x1 y x2), cada vector de entrada simbolizado de manera diferente segn la clase a la que corresponden (salida deseada). Ver figura 2.4.
>> plotpv( X , Yd ); >> plotpc( net.iw{1} , net.b{1} )
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 23
Es decir, existe una clasificacin en dos clases diferentes, una clase a un lado de la recta observada en el grfico, y la otra clase al otro lado de la misma recta inclusive esta.
Para graficar la recta de separacin se procede a la siguiente ecuacin de la recta.
0bx*)2(wx*)1(w 21 =++ >> w = net.iw{1}; % w(1) y w(2) son los elementos >> b = net.b{1}; % del vector w. >> x1 = 0:0.1:1.5; >> x2 = ( -b - w(1)*x1 ) / ( w(2) ); >> plot( x1 , x2 ) >> axis( [ 0 1.5 -0.5 1.5 ] )
Figura 2.4. Clasificacin de padrones. La recta es obtenida de los pesos y bias entrenados.
La clasificacin en clases diferentes se da utilizando rectas (cuando existen dos elementos por vector de entrada), planos (cuando existen tres elementos por vector de entrada), o un hiper-plano, para el caso de ms de tres elementos por cada vector de entrada.
2.4 Limitacin de la Red Perceptron
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 24
La red Perceptron cuenta con limitaciones al no poder clasificar padrones linealmente no separables [3].
Problemas con la Funcin XOR
La funcin XOR no puede ser representada por una neurona Perceptron, debido a la distribucin de sus padrones o vectores de entrada. Ver figura 2.5.
>> X = [ 1 1 0 0 1 0 1 0 ] ; >> Yd = [ 0 1 1 0 ]; >> net = newp( [ 0 1 ; 0 1 ] , 1 , 'hardlim' , 'learnp' ); >> net.trainParam.epochs = 300; >> net.trainParam.show = 100; >> net = train( net , X , Yd ); TRAINC, Epoch 0/300 TRAINC, Epoch 100/300 TRAINC, Epoch 200/300 TRAINC, Epoch 300/300 TRAINC, Maximum epoch reached. >> axis( [ 0 200 0 1.5 ] ) >> plotpv( X , Yd ); >> plotpc( net.iw{1} , net.b{1} )
Figura 2.5. a) Curva de desempeo en 300 iteraciones.
b) Distribucin de padrones de entrada: XOR.
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 25
Del grfico 2.5b se ve que es imposible trazar una recta en el plano de tal forma que ubique a cada lado de la misma, cada clase de padrones de entrada existente.
2.5 Aplicacin: Clasificacin de Vocales
A continuacin, se realiza la clasificacin de cinco padrones de entrada en dos clases diferentes, donde cada padrn cuenta con 15 elementos. Los padrones de entrada pertenecen a las cinco vocales, las cuales debern de ser clasificadas en vocales fuertes y vocales dbiles. Ver las figuras 2.6a, 2.6b y 2.7.
111101101101101
U
010101101101010
O
010010010010010
I
111001011001111
E
101111101101111
A =====
Figura 2.6. a) Cinco vocales como padrones de entrada (1: color blanco y 0: color negro) b) Padrones de entrada
simbolizados por 1s y 0s.
Para representar cada padrn, se procede a formar un vector uniendo columna tras otra; resultando as 5 vectores de entrada con 15 elementos cada uno.
>> AA = [ 1; 1; 1; 1; 1; 1; 0; 0; 1; 0; 1; 1; 1; 1; 1 ] ;
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 26
>> EE = [ 1; 1; 1; 1; 1; 1; 0; 1; 0; 1; 1; 0; 0; 0; 1 ] ; >> II = [ 0; 0; 0; 0; 0; 1; 1; 1; 1; 1; 0; 0; 0; 0; 0 ] ; >> OO= [ 0; 1; 1; 1; 0; 1; 0; 0; 0; 1; 0; 1; 1; 1; 0 ] ; >> UU = [1; 1; 1; 1; 1; 0; 0; 0; 0; 1; 1; 1; 1; 1; 1 ] ;
Figura 2.7. Salida deseada para cada padrn de entrada
y Red neuronal utilizada en la clasificacin.
>> X = [ AA EE II OO UU ] ; >> Yd = [ 1 1 0 1 0 ; 1 1 0 1 0 ; 1 1 0 1 0 ] ; >> net = newp( [-ones(15,1) ones(15,1) ] , 3 ); >> net = train( net , X , Yd ); % ver figura 2.8 TRAINC, Epoch 0/100 TRAINC, Epoch 6/100 TRAINC, Performance goal met.
Figura 2.8. Curva de desempeo en 6 iteraciones (E=0).
000U111O000I111E111A
ydydydX 321
x1 x2 x3 . . . x15
b1
y1 y2 y3
b2
b3
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 27
>> Y = sim( net, X(:,1) ) % simulando con1ra vocal fuerte
El vector obtenido es igual al indicado en la tabla de la figura 2.7. Lo mismo debe cumplirse con cada vocal.
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 28
3. Red Neuronal Lineal
3.1 Definicin y Caractersticas
Es similar a la red Perceptron excepto en su funcin de transferencia, que es del tipo lineal. Por ello, el nombre de Red Neuronal Lineal. Esta red tiene un aprendizaje supervisado, y su principal objetivo es minimizar la suma de los cuadrados de los errores al comparar la salida deseada con la salida total de la red [2]. Est basada en la regla de Widrow-Hoff o tambin conocida como regla Least Mean Square (LMS).
Asimismo, tambin es posible que la red pueda responder a cambios en su ambiente como en su operacin, por ello el nombre de sistemas adaptativos. Su uso es muy comn en procesamiento de seales, control y sistemas de prediccin [2]. La figura 3.1 muestra la estructura de una red lineal simbolizando su funcin de transferencia con una funcin lineal.
Figura 3.1. Estructura de una Red Lineal [2]
B Sx1
W SxR
1
Entrada Capa Lineal
Y = purelin( W * X + B )
X Rx1
+ Y Sx1
V Sx1
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 29
3.2 Regla de Aprendizaje
La regla de aprendizaje es similar al de la red Perceptron, a excepcin que ahora se utiliza una tasa de aprendizaje lr para la actualizacin de los pesos y los bias, tal como lo muestran las siguientes expresiones:
( ) ( )( ) ( )E*lrBB
X*E*lrWW T
+=+=
Tales expresiones son obtenidas cuando se busca minimizar la suma del error cuadrtico (sse) [3].
( )==
==n
1k
2d
n
1k
2 )k(y)k(y)k(esse
Donde:
n: nmero de elementos del vector yd: vector de salida deseada y: vector de salida total
La eleccin de la tasa de aprendizaje no puede ser muy grande porque, a pesar que el entrenamiento es sumamente rpido, puede volver a la red inestable (pesos y bias con valores extremadamente grandes). Por otro lado, si la tasa de aprendizaje es pequea, el entrenamiento se hace largo evitando la inestabilidad. Una manera adecuada de elegir la tasa de aprendizaje, se hace utilizando la funcin maxlinlr.
>> help maxlinlr >> X = [ 0 0 1 1 ; 0 1 0 1 ]; % vectores de entrada >> lr = maxlinlr( X , bias ); % cuando se usa el bias lr = 0.1569
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 30
3.3 Ejemplo Prctico con la Red Lineal
Seguidamente se muestra un ejemplo del uso de la red lineal para aproximar el promedio de dos nmeros. Para ello se utiliza la funcin newlin.
>> help newlin >> X = [ 1 3 5 7 9 ; 11 13 15 17 19 ]; >> Yd = mean( X ); % promedio de entrada >> lr = maxlinlr( X,'bias'); % tasa de aprendizaje >> net = newlin( [ 0 20 ; 0 20 ] , 1 , 0 , lr );
Luego, se configuran los parmetros de entrenamiento, para finalmente entrenar y simular la red lineal.
>> net.trainParam.epochs = 2000; >> net.trainParam.show = 500; >> net.trainParam.goal = 0.001; >> net.iw{1} = randn( 1, 2 ); % pesos iniciales >> net.b{1} = randn( 1 ); % bias inicial >> net = train( net , X , Yd ); % ver Figura 3.2 TRAINB, Epoch 0/2000, MSE 1447.36/0.001. TRAINB, Epoch 193/2000, MSE 0.000999512/0.001. TRAINB, Performance goal met.
Figura 3.2. Curva de desempeo del error
>> Y = sim( net , X ); >> E = mse( Yd - Y ); % error medio cuadrtico
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 31
>> X1 = [ 11 ; 21 ]; % simulacin con >> Y1 = sim( net, X1 ) % nuevo vector Y1 = 15.9416
3.4 Redes Adaptativas
La figura 3.3 muestra el diagrama de bloques de una red neuronal lineal adaptativa, donde se observa el vector de salida deseada Yd que se compara con la salida total Y, para obtener el error que luego ser minimizado.
Figura 3.3. Diagrama de Bloques de la Red Lineal Adaptativa [2]
La funcin adaptwh nos permite disear una red adaptativa, sin embargo esta funcin pertenece a una versin anterior del toolbox de redes neuronales, por ello es necesario ocultar la advertencia de funcin obsoleta con la funcin nntwarn Seguidamente, se muestra un ejemplo del uso de este comando.
>> t = 1 : 0.002 : 3.5; >> X = cos( sin(2*t) .* t *3 ); >> Yd = 2 * X + 3; >> plot ( t , X , '--' , t , Yd , '*' ) % ver figura 3.4 >> title( ' Entrada: - - , Salida Deseada: * ' )
+Red
Lineal Adaptativa
X entrada
Yd salida deseada
-
+Y salida total
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 32
Figura 3.4. Vector de Entrada - - y Vector de Salida
Deseada *
>> W = randn(1); >> B = randn(1); >> lr = 0.01; >> nntwarn off >> [ Y , E , W , B ] = adaptwh( W , B , X , Yd , lr ); >> plot( t , Y ,'r' , t , Yd ,'ob') % ver figura 3.5.a >> title( ' Salida Total: "-" , Salida Deseada: "o" ' ) >> plot( t , E ), grid % Error (figura 3.5.b) >> Y1 = W * X(1251) + B; >> mse( Yd( 1251 ) Y1 ) ans =
2.1360e-004
Figura 3.5. a) Grfico de Salida Total - y Salida
Deseada o . b) Grfico del error.
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 33
3.5 Aplicacin: Modelamiento de RTDs
Los RTD son instrumentos utilizados para medir temperatura. Tienen una representacin lineal y responden al siguiente modelo matemtico.
)T*1(*RoRt += Donde:
Rt: es la resistencia de salida Ro: resistencia a 0 C : Coeficiente de Temperatura ( 0.0038 ) T: Temperatura medida
>> T = 20:10:800; >> a = 0.0038; >> Ro1 = 100; Rt1 = Ro1*(1 + a*T); % PT100 >> Ro2 = 200; Rt2 = Ro2*(1 + a*T); % PT200 >> Ro3 = 500; Rt3 = Ro3*(1 + a*T); % PT500 >> Yd = [ Rt1 / 100; Rt2 / 100; Rt3 / 100 ]; >> %Normalizando la Temperatura (entre el valor max.) >> Tmaxima = 800; >> X = [ T / Tmaxima ; a*ones(size(T)) ]; >> lr = maxlinlr( X , 'bias' ); >> net = newlin( [ -ones(2,1) ones(2,1) ] , 3 , 0 , lr ); >> net.trainparam.epochs = 400; >> net.trainparam.show = 80; >> net.trainparam.goal = 10e-6; >> net = train( net , X , Yd); % Ver figura 3.6 TRAINB, Epoch 0/400, MSE 72.9424/1e-005. TRAINB, Epoch 80/400, MSE 0.000892697/1e-005. TRAINB, Epoch 125/400, MSE 9.21106e-006/1e-005. TRAINB, Performance goal met. >> T1 = 25 / Tmaxima; % Temp Amb. >> Y = 100*sim( net, [ T1 ; a ] ); % simulando
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 34
Figura 3.6. Grfico de desempeo del error
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 35
4. Red Perceptron Multicapa
4.1 Definicin y Caractersticas
Debido a las limitaciones que presentan las redes lineales al tratar de representar relaciones no lineales entre entradas y salidas deseadas, surgen las redes Multicapa pero con funciones de transferencia no lineal. Por ello, se utiliza el error para actualizar los pesos, desde la ltima capa hacia la primera [2]. Este algoritmo recibe el nombre de Backpropagation. En la figura 4.1 se muestra la estructura de una red Perceptron Multicapa.
Figura 4.1. Estructura de una Red Perceptron Multicapa [2]
Entre sus principales caractersticas encontramos:
Funcin de transferencia no lineal (muchas veces slo la ltima capa tiene una funcin lineal).
Regla de aprendizaje supervisado. Valores de entrada y salidas reales y/o binarias.
Entrada 1ra Capa 2da Capa
Y1C=tansig(W1C * X + B1C ) Y2C=purelin(W2C * Y1C + B2C )
X Rx1 Y2CS2x1 V2CS2x1 V
1CS1x1
Y1CS1x1
W1C S1xR
B1C S1x1
W2C S2xS1
B2C S2x1
+ +
1 1
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 36
4.2 Regla de Aprendizaje
La regla de aprendizaje Backpropagation de las redes multicapa presentan dos fases. La primera es denominada Feed-Forward donde las entradas se propagan por toda la red desde la capa de entrada hacia la de salida. La segunda recibe el nombre de Feed-Backward, donde los errores se propagan en la direccin contraria al flujo de entrada [6].
La regla de aprendizaje, al igual que en las redes lineales, est basada en la actualizacin del error por el mtodo del Gradiente Descendiente, por lo tanto, en su forma ms bsica sera:
1. Inicializar pesos sinpticos y bias. 2. Aplicar un padrn de entrada con su respectiva salida
deseada. 3. Calcular la salida total recorriendo todas las capas
ocultas (fase feed-forward).
)BY*W(Y. . .
)BY*W(Y)BX*W(Y
nCC)1n(nCnC
C2C1C2C2
C1C1C1
+=
+=+=
Donde:
n: representa el nmero de capa ( 2 ) : representa la funcin de transferencia
4. Calcular el error para cada neurona de la capa de
salida. Si el error es menor a la tolerancia regresar al paso 2, en caso contrario continuar.
5. Actualizar los pesos de cada neurona, iniciando por la capa de salida.
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 37
( ) ( ) ( )jiij x*e* lrw = Donde:
)YY(*)v( E d' = Error en la
neurona de la capa de salida.
=
=1k
' )W*E(*)v( E , Error en las
neuronas de las capas ocultas.
( )( )Y1Y)v( e11)v(
'
v
=
+=
lr: Tasa de Aprendizaje
6. Regresar al paso 2.
4.3 Ejemplo Prctico con Backpropagation en Aproximacin de Funciones
En esta seccin se muestra un ejemplo de aproximacin de funciones. Para ello se define un vector lineal de entrada, y un vector de salida deseada conformado por la suma de dos funciones senos.
>> X = -2 : 0.2 : 2; >> Yd = 2*sin( 2*pi*0.4*X ) - cos( 2*pi*0.2*X ); >> plot( X , Yd , '--' )
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 38
Luego, se crea la red neuronal Multicapa con la funcin newff. En esta funcin se incluye una matriz con los valores mximos y mnimos por cada elemento de los vectores de entrada, la cantidad de neuronas por capa y la funcin de transferencia utilizada por capa. El entrenamiento bsico utiliza la funcin traingd. Es as, que se opta por una RNA con tres capas. Ocho neuronas en la primera, tres en la segunda y una en la tercera.
>> net = newff( [ 0 10 ] , [ 8 3 1 ] , { 'tansig' 'tansig' 'purelin' } , 'traingd' ); >> Y = sim( net , X ); % simulacin >> plot( X , Yd , '+' , X , Y , '--' ) % figura 4.2-a
Luego, se procede a entrenar la red configurando previamente el nmero de iteraciones a 10000, la tasa de aprendizaje a 0.01 y el MSE a 0.0002. Se observa que el entrenamiento es lento sin llegar a alcanzar el mse deseado, pero si logrando una buena aproximacin de la funcin planteada inicialmente.
>> net.trainParam.epochs = 100000; >> net.trainParam.show = 20000; >> net.trainParam.lr = 0.01; >> net.trainParam.mse = 0.0002; >> net = train( net , X , Yd ); >> Y = sim( net , X ); >> plot( X , Yd , '+' , X , Y , '--' ) %figura 4.2-b >> %PESOS Y BIAS POR CADA CAPA >> W1c = net.iw{1,1} ; % iw: Capa de entrada >> W2c = net.lw{2,1} ; % lw: Segunda Capa >> W3c = net.lw{3,2} ; % lw: Tercera Capa >> B1c = net.b{1,1} ; %bias 1ra capa >> B2c = net.b{2,1} ; %bias 2da capa >> B3c = net.b{3,1} ; %bias 3ra capa
4.4 Variantes del Aprendizaje Backpropagation
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 39
El aprendizaje Backpropagation puede ser mejorado de dos formas diferentes: por heurstica, y utilizando potentes mtodos de optimizacin [2].
Figura 4.2. a) Sin entrenamiento. b) Resultado de 10000
iteraciones. ( +: funcin por aproximar. --: funcin aproximada )
Entre las principales variantes tenemos:
* Aprendizaje con Momento: reemplazar en la funcin newff el string traingd por traingdm.
* Aprendizaje con Tasa de Aprendizaje Adaptativo: reemplazar en la funcin newff el string traingd por traingda.
* Aprendizaje con Momento y Tasa de Aprendizaje Adaptativo: reemplazar en la funcin newff el string traingd por traingdx.
* Aprendizaje con Backpropagation Resileint: reemplazar en la funcin newff el string traingd por trainrp.
* Aprendizaje con Aproximacin Levenberg-Marquardt (mtodo de Newton): reemplazar en la funcin newff el string traingd por trainlm.
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 40
El lector es libre de elegir cualquiera de estas otras formas de aprendizaje para la red Backpropagation, que en la mayora de veces trae consigo el uso de un menor nmero de iteraciones.
4.5 Aplicacin: Modelamiento de un Termistor
Los Termistores tambin son instrumentos utilizados para medir temperatura. Tienen una representacin no lineal y, algunos de ellos, responden al siguiente modelo matemtico.
( ) )To1Tt1( eRoRt = Donde:
Rt: es la resistencia de salida Ro: resistencia a la temperatura de referencia To : constante del material To: temperatura de referencia
>> Tt = 10:2:120; >> beta = 21; >> Ro = 90; >> To = 25; >> Rt = Ro*exp(beta*(1./Tt - 1/To)); % termistor >> Yd = [ Rt / 100 ]; >> %Normalizando la Temperatura (entre el valor max.) >> Tmaxima = 120; >> X = [ Tt ; beta*ones(size(Tt)) ] / Tmaxima; >> lr = maxlinlr( X , 'bias' ); >> net = newff( [ -ones(2,1) ones(2,1) ] , [ 4 2 1 ] , { 'tansig' 'tansig' 'purelin' } , 'trainlm' ); >> net.trainparam.epochs = 4000; >> net.trainparam.show = 800; >> net.trainparam.goal = 10e-6; >> net = train( net , X , Yd); % Ver figura 4.3
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 41
TRAINLM, Epoch 0/4000, MSE 0.288138/1e-005, Gradient 23.3935/1e-010 TRAINLM, Epoch 800/4000, MSE 3.21572e-005/1e-005, Gradient 0.034127/1e-010 TRAINLM, Epoch 840/4000, MSE 9.88634e-006/1e-005, Gradient 0.174969/1e-010 TRAINLM, Performance goal met.
Figura 4.3. Grfico del desempeo del error.
Finalmente, se verifica el desempeo de la red realizando la respectiva simulacin.
>> Y = sim( net , X ); % simulando >> mse( Yd - Y) ans =
9.8863e-006
>> T1 = 25.5; % Temp. Ambiente >> Y = 100*sim( net, [ T1 ; beta ] / Tmaxima);
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 42
5. Redes Neuronales Auto Organizativas
5.1 Definicin y Caractersticas
Son redes capaces de aprender a detectar regularidades y correlaciones en sus entradas, y por consiguiente adaptar sus respuestas futuras a esas entradas [2]. Asimismo, se caracterizan por presentar un tipo de aprendizaje competitivo y/o cooperativo. Es decir, las neuronas compiten y/o cooperan unas con otras con el fin de llevar a cabo una determinada tarea. Con esto se espera que cuando se presente a la red cierta informacin de entrada, slo una de las neuronas de salida de la red, o una por cierto grupo de neuronas, se active (alcance su valor de respuesta mximo). Por tanto las neuronas compiten para activarse quedando finalmente una, o una por grupo, como neurona vencedora y as el resto quedan anuladas siendo forzadas a sus valores de respuesta mnimos [2].
Entre las redes auto-organizativas ms utilizadas encontramos la Red Competitiva, los Mapas de Auto-organizacin (SOM) y la Red Learning Vector Quantization (LVQ) [2].
5.2 Red Competitiva y Regla de Aprendizaje
La red competitiva se identifica por contar con una capa de neuronas con un entrenamiento no supervisado. Es decir, la salida es obtenida a partir de una competencia entre sus neuronas, dando como ganadora aquella que obtuvo el mayor valor de salida (figura 5.1). El algoritmo:
1. Inicializar los pesos sinpticos y bias.
2. Aplicar un padrn de entrada y determinar la neurona vencedora, cuyos pesos sinpticos asociados
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 43
resultarn ser los ms parecidos al vector de entrada. La comparacin se realiza con la distancia eucldea definida por [3], seguida de la funcin de transferencia compet.
( )=
=1j
2j,iji wxd
Donde:
xj: es el componente j-simo del vector de entrada X. i: representa la i-esima neurona de la red.
Figura 5.1. Estructura de una Red Competitiva [2]
3. Localizada la neurona vencedora, se actualizan los pesos correspondientes a dicha neurona (de preferencia utilizar el aprendizaje tipo Instar [2]).
iii
j,ijij,ij,i
y*)k1(b*kb)wx(*y*ww
+=+=
B Sx1
W SxR
1
Entrada Capa Competitiva
Y = compet( -dist( W, X ) + B )
X Rx1
+ C Y Sx1
V Sx1
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 44
Donde: : Coeficiente de aprendizaje que decrece de 1 a
0 conforme aumenta el nmero de iteraciones. yi : representa la salida de la neurona vencedora. k : constante para bias (default = 0.999).
4. Retornar al paso 2.
5.3 Ejemplo Prctico con la Red Competitiva
A continuacin se muestran cinco vectores con dos elementos cada uno. Asimismo, existen dos pares de vectores muy parecidos entre s.
>> X = [ 3 4 -8 4 -7 2 -1 7 3 8 ];
Entonces, se realiza la clasificacin o agrupacin de esos cinco vectores, en tres clases distintas. Para ello se utiliza una tasa de aprendizaje de 0.001 para que el entrenamiento sea lento y seguro.
>> net = newc( [-10 10 ;-10 10] , 3, 0.001); >> net.trainParam.epochs = 1000; %cant. de iterac. >> net.trainParam.show = 250; %mostrar c/250 >> net = train( net , X ); TRAINR, Epoch 0/1000 TRAINR, Epoch 250/1000 TRAINR, Epoch 500/1000 TRAINR, Epoch 750/1000 TRAINR, Epoch 1000/1000 TRAINR, Maximum epoch reached. >> Y = sim(net , X); % simulacin de la red >> full( Y ) % transforma matriz sparse ans = 1 0 0 1 0 0 0 1 0 1 0 1 0 0 0
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 45
>> Yc = vec2ind(Y) Yc = 1 3 2 1 2
Por lo tanto, las columnas 1 y 4 (vectores de entrada) de la matriz X, corresponden a una primera clase. Luego, la nica columna 2 corresponde a la clase 3. Finalmente, las columnas 3 y 5 corresponden a la segunda clase.
Esto se observa en la figura 5.2, donde cada vector peso (filas de la matriz W) es muy prximo a algunos vectores de entrada. Este grfico slo puede ser representado cuando los vectores de entrada slo presentan dos o tres elementos.
>> W = net.iw{1}; >> B = net.b{1}; >> hold on >> plot( X(1,:) , X(2,:), '+r'); >> plot( W(:,1) , W(:,2),'ob'); >> axis( [-10 6 -3 11] ) %personalizando la presentacin >> hold off
Figura 5.2. Representacin en el plano de vectores de entrada
+ y vectores de pesos o.
Verificando el primer vector de entrada con toda la matriz de pesos y bias entrenado:
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 46
>> a = -dist( W , X( :,1 ) ); >> y = full( compet( a , B ) ) y = 1 0 0
Este ejemplo puede ser extendido para un nmero mayor de vectores de entrada, mayor nmero de elementos por vector de entrada, as como una mayor cantidad de neuronas para aumentar el nmero de clases diferentes.
5.4 Red LVQ y Regla de Aprendizaje
Esta red cuenta con dos capas y es del tipo hbrida, porque cuenta con un entrenamiento supervisado y uno no supervisado (ver figura 5.3). Tiene como principal objetivo la clasificacin de padrones, y donde cada neurona de la primera capa es asignada a una sub-clase que corresponde a su vez a una neurona de la segunda capa (clase) [2].
Figura 5.3. Estructura de una Red Neuronal LVQ [2]
A continuacin, la regla de aprendizaje de la red LVQ
W1C S1xR
Entrada Capa Competitiva Capa Lineal
Y1C=compet( -dist(W1C, X) ) Y2C=purelin(W2C * Y1C)
X Rx1
C
Y2CS2x1 V2CS2x1
W2C S2xS1
V1CS1x1 Y1C
S1x1
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 47
1. Por cada iteracin, se aplica un vector de entrada X a la red, para calcular la distancia a cada vector prototipo.
2. Las neuronas ocultas compiten entre s, de tal forma que una neurona i gana la competencia haciendo que el i-simo elemento de la salida de la primera capa se fije en 1.
3. La salida de la primera capa es multiplicada por los pesos de la segunda capa W2C, para obtener la salida final Y2C, la cual tiene solamente un elemento diferente de cero.
En esta red neuronal muchas neuronas de la primera capa representarn sub-clases, que a su vez formarn parte de otra clase (neurona de la segunda capa). La primera capa cuenta con una funcin de transferencia competitiva, mientras que la segunda es del tipo lineal. La figura 5.4, muestra un ejemplo de una red LVQ.
Figura 5.4. Red Neuronal LVQ
5.5 Ejemplo Prctico con la Red LVQ
x1 x2
Sub-Clases
Clases
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 48
Se presenta ocho vectores de entrada con dos elementos cada uno. Donde se pre-define dos grupos de vectores diferentes. El primer grupo conformado por cinco vectores, y el segundo por tres. Por lo tanto, se hace uso de la red LVQ para realizar la clasificacin respectiva.
>> X = [ 1 2 -3 4 -2 2.5 3.2 -1.8 2.1 1 4 3 3 3.2 2.4 3 ];
Se utiliza un vector de salida deseada para la segunda capa (indicando las dos clases existentes), la cual determinar la salida deseada.
>> Yd = [ 1 1 2 1 2 1 1 2 ]; >> Y = ind2vec( Yd ); %array o matriz sparse
Se sealan dos sub-clases para cada una de las 2 clases existentes, lo cual da un total de 4 sub-clases. Es decir, existirn 4 neuronas en la primera capa, y 2 en la segunda. De esta manera, en la funcin newlvq, se indica los valores mximos y mnimos por vector de entrada con ayuda de la funcin minmax; y tambin, se utiliza la variable PORC para indicar el grado de porcentaje de aceptacin para cada neurona de la segunda capa. La suma no debe exceder el valor de 100.
>> PORC = [ 50 50 ] / 100; >> net = newlvq( minmax( X ) , 4 , PORC );
Luego, se verifica la matriz de pesos de la segunda capa, la cual no sufrir modificacin alguna durante la etapa de entrenamiento.
>> net.lw % pesos de la segunda capa >> net.lw{2} >> net = train( net , X , Y ); TRAINR, Epoch 0/100 TRAINR, Epoch 2/100 TRAINR, Performance goal met.
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 49
>> Y = sim( net , X ); % simulacin de la red >> Yc = vec2ind( Y ); >> net.iw{1} % comprobacin ans = 0.7182 2.4802 0.5350 2.4850 0.3956 2.5295 0.5000 2.5000 >> net.lw{2} %comprobacin ans = 1 1 0 0 0 0 1 1 >> net.b ans = [] []
En los pesos de la segunda capa, las columnas representan las sub-clases y las filas representan las clases, Por ello, estos pesos slo tienen un 1 en cada columna, en cuanto que los dems elementos son cero. La fila en la cual se presenta el 1 ndica la clase a la cual la subclase pertenece. Por lo general, se conecta un nmero igual de neuronas ocultas a cada neurona de salida, para que de esta manera cada clase pueda ser conformada por el mismo nmero de regiones convexas [2].
5.6 Aplicacin: Compresin de Imgenes
Se toma sub-bloques de una imagen en tonos de gris y se convierte a vectores columnas, que servirn como padrones de entrada a la red competitiva. Esta red realizar el trabajo de agrupar los vectores similares, para codificarlos por un nmero determinado de bits.
>> load imdemos %cargamos imgenes del Matlab >> I = double( tire ); %seleccionamos una de ellas
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 50
>> II = I( 1:64 , 1:64 ); %Imagen de 64 x 64 pixels
Tomamos bloques de 2x2 pixeles en la imagen II, y lo transformamos em vectores de 4x1.
>> X = im2col( II , [2 2] , 'distinc' ); >> size( X ) %1024 padrones de entrada >> NN = 64; %nmero de neuronas >> net = newc( [ zeros(4,1) 255*ones(4,1) ] , NN , 0.001); >> net.trainParam.epochs = 3000; %cant. de iterac. >> net.trainParam.show = 500; %mostrar c/200 >> net = train( net , X ); TRAINR, Epoch 0/3000 TRAINR, Epoch 500/3000 TRAINR, Epoch 1000/3000 TRAINR, Epoch 1500/3000 TRAINR, Epoch 2000/3000 TRAINR, Epoch 2500/3000 TRAINR, Epoch 3000/3000 TRAINR, Maximum epoch reached. >> Y = sim( net , X ); % simulacin >> P = [ X( : , 1 ) X( : , 3 ) ] % vectores parecidos P = 4 4 6 2 3 4 3 3 >> Y = sim( net , P ) %activan la misma neurona 58 Y = (58,1) 1 (58,2) 1
Luego, pasamos a reconstruir la imagen, a partir de los vectores pesos que representan a todo el conjunto de vectores de entrada. Finalmente, retornamos al tamao original de 64 x 64 pixels con ayuda de la funcin col2im.
>> W = net.iw{1}; % matriz de pesos 64 x 4 >> for i =1:1024
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 51
Y = sim( net , X( : , i ) ); % Para conocer la neurona Y = full( Y ); %.activada, por medio del valor [ m , n ] = max( Y ); % mximo en la salida Y Xr( i , 1:4 ) = W( n , : ) ; % representacin de la imagen end % a partir de los vectores pesos >> Xr = Xr' ; % traspuesta >> IIr = col2im( Xr , [2 2] , [64 64] , 'distinc' ); >> colormap( gray ( 256 ) ); % configuracin a gris >> subplot(121), image( II ), title('Imagen Original') >> subplot(122), image( IIr ), title('Imagen Reconstruida')
La figura 5.5 muestra la imagen original y la imagen reconstruida despus de la compresin con la red competitiva.
Figura 5.5. Comparacin entre imagen original y reconstruida
La imagen original tiene un total de KBytes41024x8
8x64x64 = , mientras que la codificada o reconstruida tiene
KBytes75.01024x8
6x1024 = .
Esto explica que en la imagen reconstruida se ha utilizado 6 bits ( log2(64 neuronas) ) por cada vector de entrada
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 52
6. Red Neuronal Recurrente
6.1 Red de Hopfield. Definicin y Configuracin
La red de Hopfield es del tipo recurrente, pues la salida de dicha red es dinmica lo que indica que despus de aplicar una nueva entrada, la salida es calculada y realimentada para modificar tal entrada Esta recurrencia asegura la estabilidad haciendo que sucesivas iteraciones, produzcan cambios de salida cada vez ms pequeas hasta lograr que las salidas sean constantes. Tambin es conocida como red con memoria auto asociativa [1]. Ver figura 6.1.
Figura 6.1. Estructura de una red Hopfield [2].
6.2 Regla de Aprendizaje
La red de Hopfield no tiene una regla de aprendizaje, por lo tanto no existe entrenamiento.
B Sx1
W SxR
1
Cond. Iniciales Capa Lineal Saturada
Y = satlins( W * X + B )
X Rx1
+Y Sx1
V Sx1
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 53
Sin embargo, es posible obtener la matriz de pesos a partir de un procedimiento apoyado en la funcin de alta ganancia de Lyapunov [3].
ybWyy21)y(V TT =
( ) 0B , X*XW n1i
Tii ==
=
Donde:
W, B: matriz de pesos y vector de bias X: vector de entrada y: vector de salida de la red b: vector de ganancias n: nmero de padrones de entrada V(y): funcin Lyapunov
Se dice que la red es estable si se cumple lo siguiente. Al presentar un padrn de entrada incorrecto, la red estabilizar en el valor ms prximo (o valor correcto) al padrn presentado.
6.3 Ejemplo Prctico con la Red Hopfield
En esta seccin se muestra un ejemplo prctico del uso de la red de Hopfield para el reconocimiento de cuatro vectores con seis elementos cada uno.
>> X1 = [ 1 ; 1 ; 1 ; 1 ; 1 ; 1 ] ; >> X2 = [ 1 ; -1 ; -1 ; -1 ; 1 ; -1 ] ; >> X3 = [ -1 ; 1 ; 1 ; 1 ; -1 ; 1 ] ; >> X4 = [ -1 ; 1 ; 1 ; -1 ; 1 ; -1 ] ; >> X = [ X1 X2 X3 X4 ] ; >> net = newhop( X );
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 54
>> W = net.LW{ 1 } ; %matriz de pesos (ver figura 6.2) >> B = net.b{ 1 } ; %vector de bias
Figura 6.2. Estructura de la red Hopfield del ejemplo prctico.
Seguidamente,, se verifica el reconocimiento de los dos ltimos vectores X3 y X4.
>> nVect = 1; % cantidad de vectores a verificar >> Xr3 = sim( net , nVect , [ ] , X3 ) ; >> [ X3 Xr3 ] % vectores idnticos >> Xr4 = sim( net , nVect , [ ] , X4 ) ; >> [ X4 Xr4 ] % vectores idnticos
Luego, para corregir un vector ruidoso haciendo uso de la red de Hopfield, procedemos de la siguiente manera.
>> nVeces = 100; % simula 100 veces >> XR2 = { [ 1 ; -1 ; -1 ; -1 ; 1 ; 1 ] } ; %cell array >> Y = sim( net , { nVect nVeces } , { } , XR2 ) ; >> Y{ 100 } % muestra la ltima simulacin >> [ X2 Y{ 100 } ] % idnticos
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 55
Una caracterstica importante en las redes de Hopfield radica en la definicin de los vectores de entrada. Cuanto ms diferentes son entre s, mayores son las oportunidades de correccin ante la presencia de errores.
6.4 Aplicacin: Reconocimiento de Dgitos Impares con Hopfield
A continuacin, se definen los primeros cinco dgitos impares en un arreglo de 10x7, tal como lo muestra la figura 6.3. Adems, se transforma cada arreglo de 10x7 a un vector de 70x1, concatenando las filas y representando las casillas de color negro por -1 y las de color blanco por 1. Estos vectores son denominados D1, D2, D3, D4 y D5, respectivamente.
Figura 6.3. Cinco dgitos impares en un arreglo de 10x7
>> whos D1 D2 D3 D4 D5 Name Size Bytes Class D1 70x1 560 double array D2 70x1 560 double array D3 70x1 560 double array D4 70x1 560 double array D5 70x1 560 double array >> D = [ D1 D2 D3 D4 D5 ]; >> net = newhop( D ); >> net.lw >> nVect = 1; % verificando el segundo dgito >> D2r = sim( net , nVect , [] , D2 ) ; >> any( D2 D2r ) % vectores iguales
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 56
ans = 0
Finalmente, se altera el cuarto dgito simulando la presencia de un ruido, tal como lo muestra la figura 6.4. Dicho arreglo, tambin de 10x7, es transformado a un vector de 70x1 y es representado por la variable D4ruido.
>> nVeces = 100; % simula 100 veces >> D4ruido = { D4ruido }; >> Y = sim( net , { nVect nVeces } , { } , D4ruido ) ; >> Y{ 100 } % muestra la ltima simulacin >> any( D4 Y ) % vectores iguales ans = 0
Figura 6.4. Cuarto dgito impar con ruido
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 57
7. Red Neuronal Radial Basis Function
7.1 Definicin y Caractersticas
Es un tipo de red conformada por dos capas. La primera con una funcin de transferencia Radial Basis (gaussiana), y la segunda con funcin de transferencia lineal. Esta red, a diferencia de la Perceptron Multicapa, necesita un nmero mayor de neuronas en su primera capa, sin embargo slo necesita de una fraccin pequea de tiempo para el entrenamiento de sus pesos [4]. Su principal aplicacin es la aproximacin de funciones y la clasificacin de padrones [2]. La figura 7.1 muestra la estructura de una red RBF.
Figura 7.1. Estructura de una Red Neuronal RBF
7.2 Solucin al Problema de la Funcin XOR
Tal como se vio en la seccin 2.4, la red Perceptron de una capa es insuficiente para representar la funcin XOR. Ello se debe a la presencia de padrones
Entrada Capa Radial Basis Capa Lineal
Y1C=radbasis( dist(W1C, X),B1C ) Y2C=purelin(W2C * Y1C, B2C )
X Rx1 Y2CS2x1 V2CS2x1 V
1CS1x1
Y1CS1x1
W1C S1xR
B1C S1x1
W2C S2xS1
B2C S2x1
+ +
1 1
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 58
linealmente no separables. Por lo tanto, con el uso de la red Radial Basis Function, se lograr representar dicha funcin. Se introducen los vectores de entrada y de salida deseada.
>> X = [ 1 1 0 0 ; 1 0 1 0 ] ; >> Yd = [ 0 1 1 0 ] ; >> net = newrb( X , Yd ); % entrenamiento NEWRB, neurons = 0, SSE = 0.947368 >> X1 = X( :, 1 ); >> Y = sim( net , X1 ) % simulacin >> X2 = X( :, 2 ); >> Y = sim( net , X2 ) >> X3 = X( :, 3 ); >> Y = sim( net , X3 ) >> X4 = X( :, 4 ); >> Y = sim( net , X4 ) %prcticamente igual a 0
Finalmente, los tamaos y contenidos de las matrices de pesos y bias de esta red neuronal resultan ser:
>> net.iw{1} % pesos de la primera capa >> net.lw{2} % pesos de la segunda capa
>> net.b{1} % bias de la primera capa >> net.b{2} % bias de la segunda capa
De esta manera, esta red RBF cuenta con dos capas. En la primera capa cuatro neuronas, y en la segunda una neurona. Ver figura 7.2.
7.3 Aplicacin: Prediccin de Seales Temporales
Seguidamente, se utiliza la red RBF para predecir muestras hacia delante, en una seal temporal compuesta por la suma de dos ondas cosenos de frecuencias diferentes.
>> Fs = 100; % se define la frecuencia de muestreo. >> n = 0:Fs-1; % se define el tiempo discreto >> x = -cos( 2*pi*5*n/Fs + pi/4 ) + cos( 2*pi*2*n/Fs );
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 59
>> plot( n , x , * ), gris % Ver figura 7.3
Figura 7.2. Red Neuronal RBF
Figura 7.3. Grfico de 100 muestras de la seal temporal
Luego, se establecen 6 muestras de entrada para la primera capa y una muestra de salida para la segunda capa. Y, se procede a reacomodar (desfasar) las muestras de entrada a la red, de tal forma que las primeras seis muestras ingresen a la red, y la sptima que corresponda a la salida deseada. De igual manera, de la segunda a la sptima muestra ingresen a la red, con la octava muestra correspondiente a la salida
x1 x2
1ra Capa
2da Capa
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 60
deseada. Este criterio se contina hasta cubrir las primeras 99 muestras. A continuacin se muestra un ejemplo del uso de la funcin delaysig para la operacin de desfasado en un vector de 10 muestras.
>> A = 1:10; % vector con 10 muestras >> nntwarn off % para ocultar advertencias >> B = delaysig( A , 5 ); % crea 6 retardos en el vector A B = 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 0 0 1 2 3 4 5 6 7 8 0 0 0 1 2 3 4 5 6 7 0 0 0 0 1 2 3 4 5 6 0 0 0 0 0 1 2 3 4 5 >> nntwarn off % evita mensajes de advertencia >> X = delaysig( x , 5 ); % lo mismo al vector de datos X
Se debe asignar al vector de salida deseada Yd, una muestra que corresponde a la prediccin.
>> for i = 1:99, Yd(i) = X( 1 , i + 1 ); end >> net = newrb( X( : , 1:99 ) , Yd ); % ver figura 7.4 NEWRB, neurons = 0, SSE = 63.3114 NEWRB, neurons = 25, SSE = 0.462873 NEWRB, neurons = 50, SSE = 0.0224332 NEWRB, neurons = 75, SSE = 0.000253273 >> size( net.iw{1} ) %99 neuronas para la 1ra capa >> size( net.lw{2} ) % 1 neurona para la 2da capa
Para verificar el desempeo de la red, se procede a ingresar de la muestra 13ava a la 18ava, para predecir la 19ava.
>> X1 = fliplr( x( 13:18 ) ) ; % giramos la entrada >> Y = sim( net , X1 ); >> [ Y x(19) ] ans = -1.6251 -1.6251
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 61
Lo mismo, con las muestras 94ava a 99ava para predecir la 100ava
>> X2 = fliplr( x( 94:99 ) ) ; % giramos la entrada >> Y = sim( net , X2 ); >> [ Y x(100) ] ans = 0.1011 0.1011
Finalmente, predecimos las muestras 101ava, 102ava y 103ava y lo graficamos junto a la seal inicial x
>> X3 = fliplr( x( 95:100 ) ) ; %giro >> Y_101 = sim( net , X3 ); >> X4 = fliplr( [ x( 96:100 ) Y_101 ] ) ; %giro >> Y_102 = sim( net , X4 ); >> X5 = fliplr( [ x( 97:100 ) Y_101 Y_102 ] ) ; %giro
Figura 7.4. Grfico de desempeo de la red
>> Y_103 = sim( net , X5 ); >> eje1 = 0:99; >> eje2 = 100:102; >> plot(eje1, x, xb, eje2, [Y_101 Y_102 Y_103 ], or) >> % ver figura 7.5: muestras pasadas y predichas
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 62
Figura 7.5. Grfico de 100 muestras de la seal temporal ms 3
muestras predichas
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 63
Bibliografa
[1] BONIFACIO, Martn del Brio. Redes Neuronales y Sistemas Borrosos. 2da Edicin. Alfa y Omega. 2007
[2] DEMUTH, Howard, HAGAN Martin and BEALE, Mark. Neural Network TOOLBOX Users Guide. The MathWorks Inc. 2005.
[3] HAYKIN, Simon. Neural Networks. A Comprehensive Foundation. 2da Edicin. Prentice Hall 1999.
[4] HAYKIN, Simon. Adaptive Filter Theory. Cuarta Edicin. Prentice Hall 2001.
[5] VELLASCO, Marley. Ementa de Redes Neurais. Material del Curso de Redes Neuronales Artificiales en el Programa de Maestra. PUC- RIO. 1995. Brasil.
[6] WASSERMAN, Philip D. Neural Computing: Theory and Practice. Van Nostrand Preinhold. 1989.
[7] Introduccin a las Redes Neuronales Artificiales. Desarrollado por Alfredo Catalina Gallego http://www.gui.uva.es/login/13/redesn.html
[8] Tutorial Redes Neuronales contiene Teoria General http://www.gc.ssr.upm.es/inves/neural/ann2/anntutorial.html
Simulacin de Redes Neuronales con Matlab
Mg. Pedro Freddy Huaman Navarrete 64