Вы находитесь на странице: 1из 32

Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Figura 1.1. Modelo Simplificado de una Neurona


1. Fundamentos Básicos de Redes Biológica
Neuronales Artificiales
1
1.1 Surgimiento de las Redes Neuronales bk
E x1 w1
Las Redes Neuronales Artificiales (RNA) surgen como N
una necesidad de contar con máquinas capaces de T x2 w2
aprender y recordar, tal como la inteligencia humana. R v yk E s ta d o d e
Dicho de otra manera, imitar el funcionamiento del A
D Σ ϕ A c ti v a c i ó n
(salida)
cerebro humano, ya que este posee un procesamiento A wn
altamente paralelo y con capacidad de resolver S
problemas complejos [3].
xn
Cuerpo de la
Neurona “k”
1.2 Definición. Neurona Biológica y Artificial
Figura 1.2 Modelo de una Neurona Artificial
Existen muchas definiciones acerca de las RNA. Por
ejemplo, algoritmos computacionales inspirados en la
naturaleza: Neuronas Biológicas. O como también, Cabe mencionar que el cuerpo de la neurona biológica es
sistemas altamente paralelos no lineales y densamente aquel en donde se encuentra el núcleo y por lo tanto es
interconectados y basados en procesadores simples: donde se realiza el procesamiento de la información
modelo simplificado de la neurona biológica [3]. recibida (impulsos eléctricos), inhibiendo o activando la
neurona. En cuanto que las synapses vienen hacer los
A continuación, en las figuras 1.1 y 1.2 se muestran los puntos de unión entre una neurona pre-sináptica y otra
modelos de una neurona biológica y una neurona post-sináptica.
artificial.
Donde w1, w2, .., wn, bk, x1, x2, …, xn, e yk, se representan
Cuerpo como contenido de los vectores:

Axon

Dendritas

Synapses

Mg. Pedro Freddy Huamaní Navarrete 1 2 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

W1 x n = w1 w2 ... w n Cuando se cuenta con redes neuronales de múltiples


capas, y múltiples neuronas por capas, los pesos
sinápticos y los bias son representados a través de
matrices. Ver sección 1.4.
x1
b1 y1
x 1.3 Funciones de Transferencia
X n x1 = 2 B kx1 = ... Ykx1 = ...
... Existen diversos tipos de funciones de transferencia. Por
bk yk
xn ejemplo: Función de Transferencia Escalón, Lineal, No
Lineal (tangencial o sigmoidal), entre otros.

Definiéndose como: Función de Transferencia Escalón

n Se caracteriza porque el vector de entrada a la función de


vk = ∑ w i * x i + bk transferencia es real, en cuanto que la salida está
i =1 limitada a un vector con sólo dos valores.
v k = w 1 * x1 + w 2 * x 2 + . . . + w n * x n + b k
Si se desea que la salida tome los valores 0 o 1,
entonces se hace uso de la función o comando
yk = ϕ (vk ) “hardlim”. Y, si se desea que la salida tome los valores -
1 o 1, se utiliza la función “hardlims”. Por ejemplo, en las
figuras 1.3a y 1.3b, se muestran los casos de ambas
Y, en notación matricial, como: funciones de transferencia. Se utiliza en la red
Perceptron.
Vk = Wk * X + Bk >> V = -8:0.2:8;
>> Y = hardlim( V );
>> subplot(121), plot( V , Y )
Yk = ϕ (Vk ) >> Y = hardlims( V );
>> subplot(122), plot( V , Y )

Donde:

ϕ (.) : representa a la Función de Transferencia o de


Activación, sobre la variable “V”.
k hace referencia a la k-ésima neurona de la red
neuronal.

Mg. Pedro Freddy Huamaní Navarrete 3 4 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Se caracteriza porque la entrada a la función es real, en


cuanto que la salida también lo es pero limitado a un
rango. Puede ser del tipo “sigmoid logarítmico” o
“”sigmoid tangente hiperbólico”. Ver figura 1.5.

Figura 1.3. a) Función “hardlim”. b) Función “hardlims”

Función de Transferencia Lineal

Se caracteriza porque la entrada y la salida de la función, Figura 1.5. Funciones de transferencia “logsig” y “tansig”
son del tipo real. El comando o función que realiza dicha
operación se denomina “purelin”. Es utilizada por las Esta función es utilizada por la red Multicapa con
redes lineales y en ocasiones en la última capa de una regla de aprendizaje Backpropagation.
red Multicapa. En la figura 1.4 se muestra dicha función.
>> V = -8:0.2:8;
>> V = -8:0.2:8; >> Y = logsig( V );
>> Y = purelin( V );
>> subplot(121), plot( V , Y )
>> plot( V , Y )
>> Y = tansig( V );
>> subplot(122), plot( V , Y )

Función de Transferencia Competitiva

Se caracteriza porque la entrada a la función de


transferencia es real, y la salida será igual a 1 sólo para
el caso máximo, y será 0 para los demás casos. A
continuación se muestra un vector con valores aleatorios,
donde el valor máximo está ubicado en la posición 6, por
Figura 1.4. Función de transferencia “purelin” lo tanto, la salida será un vector con valor 1 en la posición
6, y valor 0 en las demás posiciones. Vea el ejemplo y la
figura 1.6. Es utilizado por las redes competitivas.
Función de Transferencia No Lineal
>> V = randn( 8 , 1 );

Mg. Pedro Freddy Huamaní Navarrete 5 6 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

>> Y = compet( V );
>> subplot(121), stem( V );
>> subplot(122), stem( Y );

Figura 1.7. Funciones de transferencia a) “satlin”. b)


“satlins”

Figura 1.6. Función de transferencia “compet” Función de Transferencia Radial Basis

Se caracteriza porque la entrada a la función de


Función de Transferencia de Saturación transferencia es real, y la salida está limitada a un
intervalo de 0 a 1 formando una curva gaussiana. Ver la
Se caracteriza porque la entrada a la función de figura 1.8. Es utilizada por la red Function Radial Basis.
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 >> V = -8:0.2:8;
satura cualquier valor por encima o debajo de los límites. >> Y = radbas( V );
Es utilizada por la red Hopfield. Ver figura 1.7a y 1.7b.. >> plot( V , Y )
>> V = -8:0.2:8; 1.4 Características Principales
>> Y = satlin( V );
>> subplot(121), plot( V , Y ) Entre las principales características de toda red neuronal
>> Y = satlins( V ); artificial, se tiene:
>> subplot(122), plot( V , Y )
a) Aprendizaje: porque aprende de la experiencia.
b) Asociación: debido a que asocia padrones diferentes.
c) Generalización: generaliza de ejemplos anteriores.
d) Robustez: la pérdida de algunas neuronas, no
deteriora el buen funcionamiento de la red neuronal.
e) Búsqueda Paralela: basado en la búsqueda por
contenido y no en forma paralela.

Mg. Pedro Freddy Huamaní Navarrete 7 8 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Figura 1.9. Red neuronal con una Capa Feed-Forward

De esta manera, en forma matricial se interpretaría como:

Y3x1 = ϕ(W3 x 2 * X 2 x1 + B 3x1 )


Figura 1.8. Función de transferencia “radbas”
w 11 w 12
x
1.5 Arquitecturas más Comunes X 2 x1 = 1 W3 x 2 = w 21 w 22
x2
Seguidamente se muestran tres tipos principales de
w 31 w 32
arquitecturas, de las cuales se derivan otras más. La b1 y1
elección del tipo de arquitectura a utilizar, se basa en el
tipo de aplicación que se desea realizar. B 3 x1 = b2 Y3x1 = y2
b3 y3
a) Una Capa Feed-Forward
Es una arquitectura conformada por una sola capa de b) Multi-Capa Feed-Forward
neuronas, donde el flujo de datos viaja por la red de
izquierda a derecha. Esto significa que se dirige desde el Es una arquitectura conformada por múltiples capas de
vector de entrada hacia la salida de toda la red. A neuronas, donde el flujo de datos viaja de capa en capa
continuación, en la figura 1.9, se muestra el caso desde la primera capa hacia la última capa de la red
particular de una red neuronal de una capa, con 3 neuronal. A continuación, en la figura 1.10, se muestra el
neuronas y dos elementos por cada vector de entrada. caso particular de una red neuronal con dos capas, de 3
b1 y 2 neuronas, y dos elementos por cada vector de
entrada.
y1

b2 b1
x1 b1
y2

b3 x1 b2 y1
x2
b2
y3
b3
x2 y2

Mg. Pedro Freddy Huamaní Navarrete 9 10 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Es una arquitectura conformada por una o varias capas


de neuronas, donde existe una realimentación de la
salida total hacia la entrada principal de la red neuronal.
A continuación, en la figura 1.11, se muestra el caso
Figura 1.10. Red neuronal Multi-Capa Feed-Forward particular de una red recurrente de una capa, tres
neuronas y tres elementos por cada vector de entrada.
En este caso, como existen dos capas de neuronas, se
acostumbra a utilizar una notación matricial particular
para referenciar a la matriz de pesos y de bias de la x1
x*1 y1
primera y segunda capa.
x2
Y1C = ϕ( W1C * X + B1C ) x*2 y2
x3

Y 2 C = ϕ( W 2C * Y1C + B2C ) x*3


y3
Donde:
Figura 1.11. Red neuronal recurrente.

w 11 w 12 b1
x1 En forma matricial se tendría:
X 2 x1 = W31xC2 = w 21 w 22 B13Cx1 = b 2
x2 Y = ϕ( W * X + B)
w 31 w 32 b3

y1 X* = Y
w w 12 w 13
Y 1C
3 x1 = y2 W 2C
2x3 = 11
w 21 w 22 w 23 Donde “X* = Y”, indica que los nuevos cálculos se
y3 obtienen con el nuevo vector de entrada.

b1 y1 1.6 Aprendizaje en Redes Neuronales


B 22 Cx1 = Y22xC1 =
b2 y2
El aprendizaje de una red neuronal se refiere al proceso
de como los pesos y bias cambian o se actualizan debido
c) Red Recurrente a la experiencia. Se distinguen tres tipos de configuración
de aprendizaje en la mayoría de redes neuronales
artificiales. Así tenemos:

Mg. Pedro Freddy Huamaní Navarrete 11 12 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

a. Sin Entrenamiento
Entrada Salida
R.N.A
Es un caso donde los pesos de la red neuronal no se X Y
entrenan sino se calculan. Un ejemplo de ello lo podemos
encontrar en la red neuronal recurrente Hopfield.

b. Entrenamiento Supervisado W

Es cuando se hace necesaria la presencia de un tutor Figura 1.13. Diagrama de bloques del Entrenamiento No
para la supervisión. Es decir, existe una comparación Supervisado.
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. 1.7 Algunas Aplicaciones

Entrada Salida
Actualmente, las RNAs vienen siendo utilizadas en
R.N.A Y diversos sectores. Así tenemos el sector industrial,
X
médico, ambiental, de energía, entre otros. A
continuación se cita algunas aplicaciones principales de
Error - las RNAs.
W Salida
+ Deseada • Procesamiento de imágenes y de voz
+ Y
• Reconocimiento de patrones
• Identificación de Sistemas
Figura 1.12. Diagrama de bloques del Entrenamiento • Planeamiento y predicción
Supervisado • Interfaces adaptivas para sistemas Hombre/Máquina
• Control y optimización
c. Entrenamiento No Supervisado • Filtrado de señales.
• Sistemas de visión para robots
Es cuando no se hace necesaria la presencia de un tutor
para la supervisión. Un ejemplo de ello lo encontramos • Entre otras.
en las redes neuronales Competitivas. Ver la figura 1.13.
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,

Mg. Pedro Freddy Huamaní Navarrete 13 14 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

diseñar, entrenar y simular distintas redes neuronales performParam: (none)


trainParam: .epochs, .goal, .show, .time
artificiales. La ayuda puede ser invocada de la siguiente
manera: weight and bias values:
IW: {1x1 cell} containing 1 input weight matrix
>> help nnet LW: {1x1 cell} containing no layer weight matrices
b: {1x1 cell} containing 1 bias vector

Por ejemplo, de toda esa lista mostrada, podemos ver las other:
funciones utilizadas para la creación, entrenamiento y userdata: (user stuff)
simulación de la red neuronal Perceptron, que es objeto
de estudio en el capítulo 2. De esta manera, los pesos y los bias se visualizan:
>> help newp % crea >> net.iw %pesos de la primera capa: Cell Array
>> help train % entrena >> net.lw %pesos de las demás capas: Cell Array
>> help sim % simula >> net.b %bias de todas las capas: Cell Array
>> net.iw{1} %para observar el contenido en la
Asimismo, es necesario añadir que las funciones de %primera ubicación del Cell Array.
creación de las distintas redes neuronales, establecen
una variable denominada “net” que es del tipo “network También, es posible ver y configurar distintos parámetros
object”. Esto quiere decir que es una variable objeto, como por ejemplo para la adaptación, para el
pues a su vez contiene más variables. entrenamiento, las funciones para el entrenamiento, las
estructuras sub-objetos y las características de la
Por ejemplo: arquitectura de la red neuronal.
>> net = newp( [ -1 2 ; -1 2 ] ,1) >> net.adaptParam.passes = 2; % número de pasos
net =
Neural Network object:
>> net.trainParam % por defecto
architecture: >> net.trainParam.epochs = 50; % número de iteraciones
numInputs: 1 >> net.trainParam.goal = 0.001; % desempeño global
numLayers: 1
biasConnect: [1] >> net.trainParam.show = 5; % mostrar cada 5 iterac.
inputConnect: [1] >> net.trainParam.time = 1; % tiempo máximo para
layerConnect: [0] % entrenamiento (seg.)
outputConnect: [1]
targetConnect: [1]
>> net.adaptFcn % por defecto
.
>> net.initFcn % por defecto
. >> net.performFcn % por defecto
. >> net.trainFcn % por defecto
parameters: >> help trains % función de entren. secuencial
adaptParam: .passes >> help initlay % función de inicializ. por capa
initParam: (none) >> help mae % función error absoluto

Mg. Pedro Freddy Huamaní Navarrete 15 16 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

>> help trainc % función de entren. cíclico


2. Red Neuronal Perceptron
>> net.inputs{1} % de entradas
>> net.inputs{1}.range % retorna lo ingresado 2.1 Definición y Características
>> net.layers{1} % de las capas
>> net.layers{1}.transferFcn = “hardlims” ; Representa una de las formas más simple de RNA. Su
>> net.outputs{1} % de las salidas uso es básicamente para la clasificación de padrones
linealmente separables [6]. En la figura 2.1 se muestra la
>> net.numInputs estructura de una red Perceptron.
>> net.numLayers
>> net.numOutputs Entre sus principales características encontramos:
>> net.numTargets
• Función de transferencia escalón.
• Regla de aprendizaje supervisado.
De esta forma, se configura o se muestran todos los
parámetros relacionados a la creación de una RNA. • Valores de entrada reales y salidas binarias {0,1} o
Muchas veces, no es necesario realizar una bipolares {-1,1}.
configuración detallada, ya que por defecto se
encuentran configuradas cuando se elige el tipo de red a Entrada Capa Perceptron
utilizar. Sólo cuando se utiliza la función “network”, es
necesaria una configuración exhaustiva, ya que este
representa una función para la creación de una red X Rx1
neuronal personalizada. W SxR Y Sx1
V Sx1
>> help network +
1 B Sx1
Asimismo, también es posible trabajar con una interfase
gráfica del usuario (GUI) exclusivamente para redes
Y = hardlim( W * X + B )
neuronales. Sólo basta con digitar el comando “nntool”:
Figura 2.1. Estructura de una Red Perceptron [2].
>> nntool

2.2 Regla de Aprendizaje

Es muy sencilla, y está basada en la actualización de los


pesos sinápticos a partir del error obtenido al comparar la
salida deseada con la salida total de la red neuronal [6].

Mg. Pedro Freddy Huamaní Navarrete 17 18 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

1. Inicializar los pesos sinápticos y los bias con valores clases diferentes. A continuación se muestra, en la figura
aleatorios y pequeños. 2.2, la tabla de la función AND de 2 entradas y la red
2. Aplicar un padrón de entrada y obtener el vector de neuronal utilizada. Las dos primeras columnas de la tabla
salida total. mostrada, indican todas las combinaciones posibles para
los cuatro vectores de entrada, con dos elementos cada
⎧ a , si v j ≥ θ j uno. En cuanto que la tercera columna, representa la
yj = ⎨ salida deseada (un elemento) por cada vector de
⎩− a , si v j < θ j entrada.

Donde: b1
x1 x2 Yd
x1
θj : representa a un umbral seleccionado. 1 1 1
y1
a, -a: representa el valor de salida que podrá ser 1 0 0
{1,0} o {1,-1}. 0 1 0
x2
3. Obtener el error a partir de la expresión: E = Yd – Y. 0 0 0
Donde Yd representa el vector de salida deseada.
4. Actualizar los pesos y bias (Si el Error ≠ 0).
Figura 2.2. Tabla de la Función AND y RNA utilizada
W = W + E * XT para su representación.
B = B+E
Los vectores de entrada y de salida deseada serán:
5. Retornar al paso número 2.
>> X = [ 1 1 0 0 ; 1 0 1 0 ] ;
La función “newp” del Toolbox Neural Network del
>> Yd = [ 1 0 0 0 ];
Matlab, crea una red Perceptron. Asimismo, la función
“train” realiza el entrenamiento de los pesos y bias de Luego, se procede a crear la red neuronal Perceptron
esta red neuronal. con la función “newp”. En esta función se debe incluir la
cantidad de neuronas, una matriz con los valores
2.3 Ejemplo Práctico con la Red Perceptron máximos y mínimos por cada elemento del vector de
entrada, y el tipo de función de transferencia utilizada. La
Con ayuda de una red Perceptron, es posible representar regla de aprendizaje utilizada es la perteneciente a
las funciones lógicas AND y OR, de 2, 3 o más entradas. Perceptron: “learnp”.
>> help newp
Representación de la Función AND de 2 entradas >> net = newp( [ 0 1 ; 0 1 ] , 1 , 'hardlim' , 'learnp' );
>> net.iw %tamaño de la matriz de pesos
La función AND de 2 entradas, se puede representar con >> net.iw{1} %pesos iniciales
una sola neurona, la cual realizará la clasificación en dos ans =

Mg. Pedro Freddy Huamaní Navarrete 19 20 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

0 0 Figura 2.3. Curva de desempeño por cada iteración


>> net.b{1} %bias inicial alcanzada. Error = 0.
ans =
0
De la figura anterior se observa que se necesitaron sólo 8
La función “newp” crea pesos y bias iniciales iguales a iteraciones para lograr la clasificación. Además, el gráfico
cero. Pero también es posible crearlos a partir de valores también puede se obtenido de:
pequeños y aleatorios ( net.iw{1} = randn(1,2) ; )
>> t = tr.epoch;
>> e = tr.perf;
Antes de proceder con el entrenamiento, se observa que
>> plot( t , e )
la salida total con los pesos y bias iniciales es:
Luego, se realiza la simulación y se obtiene.
>> Y = sim( net , X )
Y= >> Y = sim( net , X ) % simulando
1 0 1 1 Y=
1 0 0 0
Lo cual indica que es totalmente diferente a la Salida
Deseada. Por ello, se necesita entrenar los pesos y bias. Esta simulación equivale a realizar lo siguiente:
Seguidamente, se procede al entrenamiento de la única
>> for i = 1:4
neurona con un total de 40 iteraciones; de tal manera que
V = net.iw{1}* X( : , i ) + net.b{1};
el error sea igual a cero, o en otras palabras que la salida
if V>=0, Y(i) = 1;
total “Y” sea idéntica a la salida deseada “Yd”.
else, Y(i) = 0;
>> net.trainParam.epochs = 40; end
>> [ net , tr ] = train( net , X , Yd ); %ver figura 2.3 end
TRAINC, Epoch 0/40
Por lo tanto, realizado el entrenamiento se puede verificar
TRAINC, Epoch 8/40
que el producto de la matriz de pesos con cualquier
TRAINC, Performance goal met.
vector de entrada y sumado al bias entrenado, y
aplicando la función de transferencia correspondiente, la
salida total será igual a la salida deseada.

Gráficamente, 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 según la clase a la que
corresponden (salida deseada). Ver figura 2.4.
>> plotpv( X , Yd );
>> plotpc( net.iw{1} , net.b{1} )

Mg. Pedro Freddy Huamaní Navarrete 21 22 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Es decir, existe una clasificación en dos clases La red Perceptron cuenta con limitaciones al no
diferentes, una clase a un lado de la recta observada en poder clasificar padrones linealmente no
el gráfico, y la otra clase al otro lado de la misma recta separables [3].
inclusive esta.
Problemas con la Función XOR
Para graficar la recta de separación se procede a la
siguiente ecuación de la recta. La función XOR no puede ser representada por una
neurona Perceptron, debido a la distribución de sus
w (1) * x1 + w (2) * x 2 + b = 0 padrones o vectores de entrada. Ver figura 2.5.

>> w = net.iw{1}; % w(1) y w(2) son los elementos >> X = [ 1 1 0 0


>> b = net.b{1}; % del vector “w”. 1 0 1 0 ];
>> x1 = 0:0.1:1.5; >> Yd = [ 0 1 1 0 ];
>> x2 = ( -b - w(1)*x1 ) / ( w(2) ); >> net = newp( [ 0 1 ; 0 1 ] , 1 , 'hardlim' , 'learnp' );
>> plot( x1 , x2 ) >> net.trainParam.epochs = 300;
>> axis( [ 0 1.5 -0.5 1.5 ] ) >> 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.4. Clasificación de padrones. La recta es


obtenida de los pesos y bias entrenados.

La clasificación 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 más
de tres elementos por cada vector de entrada.
Figura 2.5. a) Curva de desempeño en 300 iteraciones.
2.4 Limitación de la Red Perceptron b) Distribución de padrones de entrada: XOR.

Mg. Pedro Freddy Huamaní Navarrete 23 24 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Del gráfico 2.5b se ve que es imposible trazar una recta >> EE = [ 1; 1; 1; 1; 1; 1; 0; 1; 0; 1; 1; 0; 0; 0; 1 ] ;


en el plano de tal forma que ubique a cada lado de la >> II = [ 0; 0; 0; 0; 0; 1; 1; 1; 1; 1; 0; 0; 0; 0; 0 ] ;
misma, cada clase de padrones de entrada existente. >> 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 ] b;
2.5 Aplicación: Clasificación de Vocales 1

X yd1 yd 2 yd 3 x1
A continuación, se realiza la clasificación de cinco y1
padrones de entrada en dos clases diferentes, donde A 1 1 1 x2
cada padrón cuenta con 15 elementos. Los padrones de b2
E 1 1 1
entrada pertenecen a las cinco vocales, las cuales x3 y2
deberán de ser clasificadas en vocales fuertes y vocales I 0 0 0
b3
débiles. Ver las figuras 2.6a, 2.6b y 2.7. O 1 1 1 ...
U 0 0 0 y3
x15

Figura 2.7. Salida deseada para cada padrón de entrada


y Red neuronal utilizada en la clasificación.

>> X = [ AA EE II OO UU ] ;
>> Yd = [ 1 1 0 1 0 ; 1 1 0 1 0 ; 1 1 0 1 0 ] ;
1 1 1 1 1 1 0 1 0 0 1 0 1 0 1 >> net = newp( [-ones(15,1) ones(15,1) ] , 3 );
1 0 1 1 0 0 0 1 0 1 0 1 1 0 1 >> net = train( net , X , Yd ); % ver figura 2.8
A=1 0 1 E=1 1 0 I= 0 1 0 O= 1 0 1 U=1 0 1 TRAINC, Epoch 0/100
TRAINC, Epoch 6/100
1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 TRAINC, Performance goal met.
1 0 1 1 1 1 0 1 0 0 1 0 1 1 1

Figura 2.6. a) Cinco vocales como padrones de entrada


(1: color blanco y 0: color negro) b) Padrones de entrada
simbolizados por 1’s y 0’s.

Para representar cada padrón, 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 ] ; Figura 2.8. Curva de desempeño en 6 iteraciones (E=0).

Mg. Pedro Freddy Huamaní Navarrete 25 26 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

>> Y = sim( net, X(:,1) ) % simulando con1ra vocal fuerte


3. Red Neuronal Lineal
El vector obtenido es igual al indicado en la tabla de la
figura 2.7. Lo mismo debe cumplirse con cada vocal. 3.1 Definición y Características

Es similar a la red Perceptron excepto en su función 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 también conocida como regla
Least Mean Square (LMS).

Asimismo, también es posible que la red pueda


responder a cambios en su ambiente como en su
operación, por ello el nombre de sistemas adaptativos.
Su uso es muy común en procesamiento de señales,
control y sistemas de predicción [2]. La figura 3.1 muestra
la estructura de una red lineal simbolizando su función de
transferencia con una función lineal.

Entrada Capa Lineal

X Rx1
W SxR Y Sx1
V Sx1
+
1 B Sx1

Y = purelin( W * X + B )

Figura 3.1. Estructura de una Red Lineal [2]

Mg. Pedro Freddy Huamaní Navarrete 27 28 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

3.2 Regla de Aprendizaje 3.3 Ejemplo Práctico con la Red Lineal

La regla de aprendizaje es similar al de la red Perceptron, Seguidamente se muestra un ejemplo del uso de la red
a excepción que ahora se utiliza una tasa de aprendizaje lineal para aproximar el promedio de dos números. Para
“lr” para la actualización de los pesos y los bias, tal como ello se utiliza la función “newlin”.
lo muestran las siguientes expresiones:
>> help newlin

(
W = W + (lr ) * E * X T ) >> X = [ 1 3 5 7 9 ; 11 13 15 17 19 ];
>> Yd = mean( X ); % promedio de entrada
B = B + (lr ) * (E ) >> lr = maxlinlr( X,'bias'); % tasa de aprendizaje
>> net = newlin( [ 0 20 ; 0 20 ] , 1 , 0 , lr );
Tales expresiones son obtenidas cuando se busca Luego, se configuran los parámetros de entrenamiento,
minimizar la suma del error cuadrático (sse) [3]. para finalmente entrenar y simular la red lineal.
>> net.trainParam.epochs = 2000;
n n
sse = ∑ e(k ) = ∑ (y d (k ) − y(k ) )
2 2 >> net.trainParam.show = 500;
>> net.trainParam.goal = 0.001;
k =1 k =1
>> net.iw{1} = randn( 1, 2 ); % pesos iniciales
>> net.b{1} = randn( 1 ); % bias inicial
Donde: >> net = train( net , X , Yd ); % ver Figura 3.2
n: número de elementos del vector TRAINB, Epoch 0/2000, MSE 1447.36/0.001.
yd: vector de salida deseada TRAINB, Epoch 193/2000, MSE 0.000999512/0.001.
y: vector de salida total TRAINB, Performance goal met.

La elección de la tasa de aprendizaje no puede ser muy


grande porque, a pesar que el entrenamiento es
sumamente rápido, puede volver a la red inestable
(pesos y bias con valores extremadamente grandes). Por
otro lado, si la tasa de aprendizaje es pequeña, el
entrenamiento se hace largo evitando la inestabilidad.
Una manera adecuada de elegir la tasa de aprendizaje,
se hace utilizando la función “maxlinlr”.
>> help maxlinlr Figura 3.2. Curva de desempeño del error
>> X = [ 0 0 1 1 ; 0 1 0 1 ]; % vectores de entrada
>> lr = maxlinlr( X , ‘bias’ ); % cuando se usa el bias
>> Y = sim( net , X );
lr =
>> E = mse( Yd - Y ); % error medio cuadrático
0.1569

Mg. Pedro Freddy Huamaní Navarrete 29 30 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

>> X1 = [ 11 ; 21 ]; % simulación 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.4. Vector de Entrada “- -” y Vector de Salida
Deseada “ * ”
Yd salida deseada
>> W = randn(1);
>> B = randn(1);
Red Y salida total + >> lr = 0.01;
Lineal + >> nntwarn off
X entrada
Adaptativa - >> [ 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;
Figura 3.3. Diagrama de Bloques de la Red Lineal >> mse( Yd( 1251 ) – Y1 )
Adaptativa [2] ans =
2.1360e-004
La función “adaptwh” nos permite diseñar una red
adaptativa, sin embargo esta función pertenece a una
versión anterior del toolbox de redes neuronales, por ello
es necesario ocultar la advertencia de función obsoleta
con la función “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 Figura 3.5. a) Gráfico de Salida Total “-” y Salida
>> title( ' Entrada: - - , Salida Deseada: * ' ) Deseada “ o ”. b) Gráfico del error.

Mg. Pedro Freddy Huamaní Navarrete 31 32 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

3.5 Aplicación: Modelamiento de RTDs

Los RTD son instrumentos utilizados para medir


temperatura. Tienen una representación lineal y
responden al siguiente modelo matemático.

Rt = Ro * (1 + α * T)

Donde:
Figura 3.6. Gráfico de desempeño del error
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

Mg. Pedro Freddy Huamaní Navarrete 33 34 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

4.2 Regla de Aprendizaje


4. Red Perceptron Multicapa
La regla de aprendizaje Backpropagation de las redes
4.1 Definición y Características multicapa presentan dos fases. La primera es
denominada Feed-Forward donde las entradas se
Debido a las limitaciones que presentan las redes propagan por toda la red desde la capa de entrada hacia
lineales al tratar de representar relaciones no lineales la de salida. La segunda recibe el nombre de Feed-
entre entradas y salidas deseadas, surgen las redes Backward, donde los errores se propagan en la dirección
Multicapa pero con funciones de transferencia no lineal. contraria al flujo de entrada [6].
Por ello, se utiliza el error para actualizar los pesos,
desde la última capa hacia la primera [2]. Este algoritmo La regla de aprendizaje, al igual que en las redes
recibe el nombre de Backpropagation. En la figura 4.1 se lineales, está basada en la actualización del error por el
muestra la estructura de una red Perceptron Multicapa. método del Gradiente Descendiente, por lo tanto, en su
forma más básica sería:
Entrada 1ra Capa 2da Capa 1. Inicializar pesos sinápticos y bias.
2. Aplicar un padrón de entrada con su respectiva salida
deseada.
Y1CS1x1
3. Calcular la salida total recorriendo todas las capas
X Rx1 W
1C V1CS1x1 W
2C V2CS2x1 ocultas (fase feed-forward).
S1xR S2xS1
Y2CS2x1
+ + Y 1C = ϕ( W 1C * X + B1C )
1C 2C
B B
S1x1 S2x1
Y 2 C = ϕ( W 2 C * Y 1C + B 2 C )
1 1 ...
1C 1C 1C 2C 2C 1C 2C
Y nC = ϕ( W nC * Y ( n −1) C + B nC )
Y =tansig(W *X+B ) Y =purelin(W *Y +B )

Donde:
Figura 4.1. Estructura de una Red Perceptron Multicapa [2]
n: representa el número de capa ( ≥2 )
ϕ: representa la función de transferencia
Entre sus principales características encontramos:
• Función de transferencia no lineal (muchas veces 4. Calcular el error para cada neurona de la capa de
sólo la última capa tiene una función lineal). salida. Si el error es menor a la tolerancia regresar al
• Regla de aprendizaje supervisado. paso 2, en caso contrario continuar.
• Valores de entrada y salidas reales y/o binarias. 5. Actualizar los pesos de cada neurona, iniciando por
la capa de salida.

Mg. Pedro Freddy Huamaní Navarrete 35 36 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Λw ij = (lr ) * (e i ) * (x j ) Luego, se crea la red neuronal Multicapa con la función


“newff”. En esta función se incluye una matriz con los
valores máximos y mínimos por cada elemento de los
Donde: vectores de entrada, la cantidad de neuronas por capa y
la función de transferencia utilizada por capa. El
E = ϕ ' ( v) * (Yd − Y) Error en la entrenamiento básico utiliza la función “traingd”. Es así,
neurona de la que se opta por una RNA con tres capas. Ocho neuronas
capa de salida. en la primera, tres en la segunda y una en la tercera.
>> net = newff( [ 0 10 ] , [ 8 3 1 ] , { 'tansig' 'tansig'
E = ϕ ' ( v) * ∑ ( E * W ) , Error en las 'purelin' } , 'traingd' );
k =1 >> Y = sim( net , X ); % simulación
neuronas de las >> plot( X , Yd , '+' , X , Y , '--' ) % figura 4.2-a
capas ocultas.
Luego, se procede a entrenar la red configurando
1
ϕ ( v) = previamente el número de iteraciones a 10000, la tasa de
1 + e −v 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 aproximación de la
ϕ ' ( v) = (Y )(1 − Y ) función planteada inicialmente.
>> net.trainParam.epochs = 100000;
lr: Tasa de Aprendizaje >> net.trainParam.show = 20000;
>> net.trainParam.lr = 0.01;
6. Regresar al paso 2. >> net.trainParam.mse = 0.0002;
>> net = train( net , X , Yd );
4.3 Ejemplo Práctico con Backpropagation en >> Y = sim( net , X );
>> plot( X , Yd , '+' , X , Y , '--' ) %figura 4.2-b
Aproximación de Funciones
>> %PESOS Y BIAS POR CADA CAPA
>> W1c = net.iw{1,1} ; % iw: Capa de entrada
En esta sección se muestra un ejemplo de aproximación
>> W2c = net.lw{2,1} ; % lw: Segunda Capa
de funciones. Para ello se define un vector lineal de
>> W3c = net.lw{3,2} ; % lw: Tercera Capa
entrada, y un vector de salida deseada conformado por la
>> B1c = net.b{1,1} ; %bias 1ra capa
suma de dos funciones senos.
>> B2c = net.b{2,1} ; %bias 2da capa
>> X = -2 : 0.2 : 2; >> B3c = net.b{3,1} ; %bias 3ra capa
>> Yd = 2*sin( 2*pi*0.4*X ) - cos( 2*pi*0.2*X );
>> plot( X , Yd , '--' ) 4.4 Variantes del Aprendizaje Backpropagation

Mg. Pedro Freddy Huamaní Navarrete 37 38 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

El aprendizaje Backpropagation puede ser mejorado de El lector es libre de elegir cualquiera de estas otras
dos formas diferentes: por heurística, y utilizando formas de aprendizaje para la red Backpropagation, que
potentes métodos de optimización [2]. en la mayoría de veces trae consigo el uso de un menor
número de iteraciones.

4.5 Aplicación: Modelamiento de un Termistor

Los Termistores también son instrumentos utilizados para


medir temperatura. Tienen una representación no lineal y,
algunos de ellos, responden al siguiente modelo
matemático.

1 1
− )
Rt = (Ro )e
β (
Figura 4.2. a) Sin entrenamiento. b) Resultado de 10000 Tt To
iteraciones. ( “+”: función por aproximar. “--”: función
aproximada )
Donde:

Entre las principales variantes tenemos: Rt: es la resistencia de salida


Ro: resistencia a la temperatura de referencia To
* Aprendizaje con Momento: reemplazar en la función β: constante del material
“newff” el string “traingd” por “traingdm”. To: temperatura de referencia
>> Tt = 10:2:120;
* Aprendizaje con Tasa de Aprendizaje Adaptativo: >> beta = 21;
reemplazar en la función “newff” el string “traingd” por >> Ro = 90;
“traingda”. >> To = 25;
>> Rt = Ro*exp(beta*(1./Tt - 1/To)); % termistor
* Aprendizaje con Momento y Tasa de Aprendizaje >> Yd = [ Rt / 100 ];
Adaptativo: reemplazar en la función “newff” el string >> %Normalizando la Temperatura (entre el valor max.)
“traingd” por “traingdx”. >> Tmaxima = 120;
>> X = [ Tt ; beta*ones(size(Tt)) ] / Tmaxima;
* Aprendizaje con Backpropagation Resileint: reemplazar >> lr = maxlinlr( X , 'bias' );
en la función “newff” el string “traingd” por “trainrp”. >> net = newff( [ -ones(2,1) ones(2,1) ] , [ 4 2 1 ] , {
'tansig' 'tansig' 'purelin' } , 'trainlm' );
* Aprendizaje con Aproximación Levenberg-Marquardt >> net.trainparam.epochs = 4000;
(método de Newton): reemplazar en la función “newff” el >> net.trainparam.show = 800;
string “traingd” por “trainlm”. >> net.trainparam.goal = 10e-6;
>> net = train( net , X , Yd); % Ver figura 4.3

Mg. Pedro Freddy Huamaní Navarrete 39 40 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

TRAINLM, Epoch 0/4000, MSE 0.288138/1e-005,


Gradient 23.3935/1e-010 5. Redes Neuronales Auto Organizativas
TRAINLM, Epoch 800/4000, MSE 3.21572e-005/1e-005,
Gradient 0.034127/1e-010 5.1 Definición y Características
TRAINLM, Epoch 840/4000, MSE 9.88634e-006/1e-005,
Gradient 0.174969/1e-010 Son redes capaces de aprender a detectar regularidades
TRAINLM, Performance goal met. 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
información de entrada, sólo una de las neuronas de
salida de la red, o una por cierto grupo de neuronas, se
active (alcance su valor de respuesta máximo). Por tanto
las neuronas compiten para activarse quedando
Figura 4.3. Gráfico del desempeño del error. finalmente una, o una por grupo, como neurona
vencedora y así el resto quedan anuladas siendo
forzadas a sus valores de respuesta mínimos [2].
Finalmente, se verifica el desempeño de la red realizando
la respectiva simulación. Entre las redes auto-organizativas más utilizadas
>> Y = sim( net , X ); % simulando encontramos la Red Competitiva, los Mapas de Auto-
>> mse( Yd - Y) organización (SOM) y la Red Learning Vector
ans = Quantization (LVQ) [2].
9.8863e-006
5.2 Red Competitiva y Regla de Aprendizaje
>> T1 = 25.5; % Temp. Ambiente
>> Y = 100*sim( net, [ T1 ; beta ] / Tmaxima); 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 sinápticos y bias.


2. Aplicar un padrón de entrada y determinar la neurona
vencedora, cuyos pesos sinápticos asociados

Mg. Pedro Freddy Huamaní Navarrete 41 42 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

resultarán ser los más parecidos al vector de entrada. Donde:


La comparación se realiza con la distancia euclídea α: Coeficiente de aprendizaje que decrece de 1 a
definida por [3], seguida de la función de 0 conforme aumenta el número de iteraciones.
transferencia “compet”. yi : representa la salida de la neurona
vencedora.

d i = ∑ (x j − w i , j )
k : constante para bias (default = 0.999).
2
4. Retornar al paso 2.
j=1

5.3 Ejemplo Práctico con la Red Competitiva


Donde:
xj: es el componente j-ésimo del vector de A continuación se muestran cinco vectores con dos
entrada X. elementos cada uno. Asimismo, existen dos pares de
i: representa la i-esima neurona de la red. vectores muy parecidos entre sí.
>> X = [ 3 4 -8 4 -7
Entrada Capa Competitiva 2 -1 7 3 8 ];
Entonces, se realiza la clasificación o agrupación de esos
cinco vectores, en tres clases distintas. Para ello se
X Rx1 utiliza una tasa de aprendizaje de 0.001 para que el
W SxR Y Sx1 entrenamiento sea lento y seguro.
V Sx1
+ C >> net = newc( [-10 10 ;-10 10] , 3, 0.001);
>> net.trainParam.epochs = 1000; %cant. de iterac.
1 B Sx1 >> net.trainParam.show = 250; %mostrar c/250
>> net = train( net , X );
TRAINR, Epoch 0/1000
Y = compet( -dist( W, X ) + B ) TRAINR, Epoch 250/1000
TRAINR, Epoch 500/1000
TRAINR, Epoch 750/1000
Figura 5.1. Estructura de una Red Competitiva [2]
TRAINR, Epoch 1000/1000
TRAINR, Maximum epoch reached.
3. Localizada la neurona vencedora, se actualizan los
>> Y = sim(net , X); % simulación de la red
pesos correspondientes a dicha neurona (de
>> full( Y ) % transforma matriz “sparse”
preferencia utilizar el aprendizaje tipo Instar [2]).
ans =
1 0 0 1 0
w i , j = w i , j + α * yi * ( x j − w i , j ) 0 0 1 0 1
0 1 0 0 0
bi = k * bi + (1 − k ) * yi

Mg. Pedro Freddy Huamaní Navarrete 43 44 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

>> Yc = vec2ind(Y) >> a = -dist( W , X( :,1 ) );


Yc = >> y = full( compet( a , B ) )
1 3 2 1 2 y=
1
Por lo tanto, las columnas 1 y 4 (vectores de entrada) de
0
la matriz X, corresponden a una primera clase. Luego, la
0
única columna 2 corresponde a la clase 3. Finalmente,
las columnas 3 y 5 corresponden a la segunda clase. Este ejemplo puede ser extendido para un número mayor
de vectores de entrada, mayor número de elementos por
Esto se observa en la figura 5.2, donde cada vector peso vector de entrada, así como una mayor cantidad de
(filas de la matriz W) es muy próximo a algunos vectores neuronas para aumentar el número de clases diferentes.
de entrada. Este gráfico sólo puede ser representado
cuando los vectores de entrada sólo presentan dos o tres 5.4 Red LVQ y Regla de Aprendizaje
elementos.
>> W = net.iw{1}; Esta red cuenta con dos capas y es del tipo híbrida,
>> B = net.b{1}; porque cuenta con un entrenamiento supervisado y uno
>> hold on no supervisado (ver figura 5.3). Tiene como principal
>> plot( X(1,:) , X(2,:), '+r'); objetivo la clasificación de padrones, y donde cada
>> plot( W(:,1) , W(:,2),'ob'); neurona de la primera capa es asignada a una sub-clase
>> axis( [-10 6 -3 11] ) %personalizando la presentación que corresponde a su vez a una neurona de la segunda
>> hold off capa (clase) [2].

Entrada Capa Competitiva Capa Lineal

2C
V1CS1x1 Y1CS1x1 V S2x1
Y2CS2x1
X Rx1 W
1C
S1xR W
2C
S2xS1

Figura 5.2. Representación en el plano de vectores de entrada Y1C=compet( -dist(W1C, X) ) Y2C=purelin(W2C * Y1C)
“+” y vectores de pesos “o”.
Figura 5.3. Estructura de una Red Neuronal LVQ [2]
Verificando el primer vector de entrada con toda la matriz
de pesos y bias entrenado: A continuación, la regla de aprendizaje de la red LVQ

Mg. Pedro Freddy Huamaní Navarrete 45 46 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

1. Por cada iteración, se aplica un vector de entrada X a Se presenta ocho vectores de entrada con dos elementos
la red, para calcular la distancia a cada vector cada uno. Donde se pre-define dos grupos de vectores
prototipo. diferentes. El primer grupo conformado por cinco
2. Las neuronas ocultas compiten entre sí, de tal forma vectores, y el segundo por tres. Por lo tanto, se hace uso
que una neurona “i” gana la competencia haciendo de la red LVQ para realizar la clasificación respectiva.
que el i-ésimo elemento de la salida de la primera
capa se fije en 1. >> X = [ 1 2 -3 4 -2 2.5 3.2 -1.8
3. La salida de la primera capa es multiplicada por los 2.1 1 4 3 3 3.2 2.4 3 ];
pesos de la segunda capa W2C, para obtener la
salida final Y2C, la cual tiene solamente un elemento Se utiliza un vector de salida deseada para la segunda
diferente de cero. capa (indicando las dos clases existentes), la cual
determinará la salida deseada.
En esta red neuronal muchas neuronas de la primera
capa representarán sub-clases, que a su vez formarán >> Yd = [ 1 1 2 1 2 1 1 2 ];
parte de otra clase (neurona de la segunda capa). La >> Y = ind2vec( Yd ); %array o matriz sparse
primera capa cuenta con una función de transferencia
competitiva, mientras que la segunda es del tipo lineal. La Se señalan dos sub-clases para cada una de las 2 clases
figura 5.4, muestra un ejemplo de una red LVQ. existentes, lo cual da un total de 4 sub-clases. Es decir,
existirán 4 neuronas en la primera capa, y 2 en la
Sub-Clases
segunda. De esta manera, en la función “newlvq”, se
indica los valores máximos y mínimos por vector de
Clases entrada con ayuda de la función “minmax”; y también, se
x1 utiliza la variable “PORC” para indicar el grado de
porcentaje de aceptación para cada neurona de la
segunda capa. La suma no debe exceder el valor de 100.
>> PORC = [ 50 50 ] / 100;
x2 >> net = newlvq( minmax( X ) , 4 , PORC );
Luego, se verifica la matriz de pesos de la segunda capa,
la cual no sufrirá modificación alguna durante la etapa de
entrenamiento.
>> net.lw % pesos de la segunda capa
Figura 5.4. Red Neuronal LVQ >> net.lw{2}
>> net = train( net , X , Y );
TRAINR, Epoch 0/100
5.5 Ejemplo Práctico con la Red LVQ TRAINR, Epoch 2/100
TRAINR, Performance goal met.

Mg. Pedro Freddy Huamaní Navarrete 47 48 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

>> Y = sim( net , X ); % simulación de la red >> II = I( 1:64 , 1:64 ); %Imagen de 64 x 64 pixels
>> Yc = vec2ind( Y );
Tomamos bloques de 2x2 pixeles en la imagen “II”, y lo
>> net.iw{1} % comprobación
transformamos em vectores de 4x1.
ans =
0.7182 2.4802 >> X = im2col( II , [2 2] , 'distinc' );
0.5350 2.4850 >> size( X ) %1024 padrones de entrada
0.3956 2.5295 >> NN = 64; %número de neuronas
0.5000 2.5000 >> net = newc( [ zeros(4,1) 255*ones(4,1) ] , NN , 0.001);
>> net.lw{2} %comprobación >> net.trainParam.epochs = 3000; %cant. de iterac.
ans = >> net.trainParam.show = 500; %mostrar c/200
1 1 0 0 >> net = train( net , X );
0 0 1 1 TRAINR, Epoch 0/3000
>> net.b TRAINR, Epoch 500/3000
ans = TRAINR, Epoch 1000/3000
[] TRAINR, Epoch 1500/3000
[] TRAINR, Epoch 2000/3000
TRAINR, Epoch 2500/3000
En los pesos de la segunda capa, las columnas
TRAINR, Epoch 3000/3000
representan las sub-clases y las filas representan las
TRAINR, Maximum epoch reached.
clases, Por ello, estos pesos sólo tienen un “1” en cada
>> Y = sim( net , X ); % simulación
columna, en cuanto que los demás elementos son cero.
>> P = [ X( : , 1 ) X( : , 3 ) ] % vectores parecidos
La fila en la cual se presenta el 1 índica la clase a la cual
P=
la subclase pertenece. Por lo general, se conecta un
4 4
número igual de neuronas ocultas a cada neurona de
6 2
salida, para que de esta manera cada clase pueda ser
3 4
conformada por el mismo número de regiones convexas
3 3
[2].
>> Y = sim( net , P ) %activan la misma neurona 58
Y=
5.6 Aplicación: Compresión de Imágenes (58,1) 1
(58,2) 1
Se toma sub-bloques de una imagen en tonos de gris y
se convierte a vectores columnas, que servirán como Luego, pasamos a reconstruir la imagen, a partir de los
padrones de entrada a la red competitiva. Esta red vectores pesos que representan a todo el conjunto de
realizará el trabajo de agrupar los vectores similares, vectores de entrada. Finalmente, retornamos al tamaño
para codificarlos por un número determinado de bits. original de 64 x 64 pixels con ayuda de la función
“col2im”.
>> load imdemos %cargamos imágenes del Matlab
>> I = double( tire ); %seleccionamos una de ellas >> W = net.iw{1}; % matriz de pesos 64 x 4
>> for i =1:1024

Mg. Pedro Freddy Huamaní Navarrete 49 50 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Y = sim( net , X( : , i ) ); % Para conocer la neurona


Y = full( Y ); %.activada, por medio del valor 6. Red Neuronal Recurrente
[ m , n ] = max( Y ); % máximo en la salida “Y”
Xr( i , 1:4 ) = W( n , : ) ; % representación de la imagen 6.1 Red de Hopfield. Definición y Configuración
end % a partir de los vectores pesos
>> Xr = Xr' ; % traspuesta La red de Hopfield es del tipo recurrente, pues la salida
>> IIr = col2im( Xr , [2 2] , [64 64] , 'distinc' ); de dicha red es dinámica lo que indica que después de
>> colormap( gray ( 256 ) ); % configuración a gris aplicar una nueva entrada, la salida es calculada y
>> subplot(121), image( II ), title('Imagen Original') realimentada para modificar tal entrada Esta recurrencia
>> subplot(122), image( IIr ), title('Imagen Reconstruida') asegura la estabilidad haciendo que sucesivas
iteraciones, produzcan cambios de salida cada vez más
La figura 5.5 muestra la imagen original y la imagen pequeñas hasta lograr que las salidas sean constantes.
reconstruida después de la compresión con la red También es conocida como red con memoria auto
competitiva. asociativa [1]. Ver figura 6.1.

Cond. Iniciales Capa Lineal Saturada

X Rx1
W SxR Y Sx1
V Sx1
Figura 5.5. Comparación entre imagen original y reconstruida +
1 B Sx1
64 x 64 x8
La imagen original tiene un total de = 4KBytes ,
8x1024
Y = satlins( W * X + B )
mientras que la codificada o reconstruida tiene
1024 x 6
= 0.75KBytes .
8x1024 Figura 6.1. Estructura de una red Hopfield [2].

Esto explica que en la imagen reconstruida se ha


6.2 Regla de Aprendizaje
utilizado 6 bits ( log2(64 neuronas) ) por cada vector de
entrada
La red de Hopfield no tiene una regla de
aprendizaje, por lo tanto no existe entrenamiento.

Mg. Pedro Freddy Huamaní Navarrete 51 52 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Sin embargo, es posible obtener la matriz de >> W = net.LW{ 1 } ; %matriz de pesos (ver figura 6.2)
pesos a partir de un procedimiento apoyado en la >> B = net.b{ 1 } ; %vector de bias
función de alta ganancia de Lyapunov [3].

1
V( y) = − y T Wy − b T y
2

( )
n
W = ∑ Xi * Xi
T
, B=0
i =1

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 Figura 6.2. Estructura de la red Hopfield del ejemplo
n: número de padrones de entrada práctico.
V(y): función Lyapunov

Se dice que la red es estable si se cumple lo siguiente. Al Seguidamente,, se verifica el reconocimiento de los dos
presentar un padrón de entrada incorrecto, la red últimos vectores X3 y X4.
estabilizará en el valor más próximo (o valor correcto) al >> nVect = 1; % cantidad de vectores a verificar
padrón presentado. >> Xr3 = sim( net , nVect , [ ] , X3 ) ;
>> [ X3 Xr3 ] % vectores idênticos
6.3 Ejemplo Práctico con la Red Hopfield >> Xr4 = sim( net , nVect , [ ] , X4 ) ;
>> [ X4 Xr4 ] % vectores idênticos
En esta sección se muestra un ejemplo práctico del uso
de la red de Hopfield para el reconocimiento de cuatro Luego, para corregir un vector ruidoso haciendo uso de la
vectores con seis elementos cada uno. red de Hopfield, procedemos de la siguiente manera.

>> X1 = [ 1 ; 1 ; 1 ; 1 ; 1 ; 1]; >> nVeces = 100; % simula 100 veces


>> X2 = [ 1 ; -1 ; -1 ; -1 ; 1 ; -1 ] ; >> XR2 = { [ 1 ; -1 ; -1 ; -1 ; 1 ; 1 ] } ; %cell array
>> X3 = [ -1 ; 1 ; 1 ; 1 ; -1 ; 1]; >> Y = sim( net , { nVect nVeces } , { } , XR2 ) ;
>> X4 = [ -1 ; 1 ; 1 ; -1 ; 1 ; -1 ] ; >> Y{ 100 } % muestra la última simulación
>> X = [ X1 X2 X3 X4 ] ; >> [ X2 Y{ 100 } ] % idénticos
>> net = newhop( X );

Mg. Pedro Freddy Huamaní Navarrete 53 54 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Una característica importante en las redes de Hopfield ans =


radica en la definición de los vectores de entrada. Cuanto 0
más diferentes son entre sí, mayores son las
oportunidades de corrección ante la presencia de errores. Finalmente, se altera el cuarto dígito simulando la
presencia de un ruido, tal como lo muestra la figura 6.4.
6.4 Aplicación: Reconocimiento de Dígitos Dicho arreglo, también de 10x7, es transformado a un
Impares con Hopfield vector de 70x1 y es representado por la variable D4ruido.
>> nVeces = 100; % simula 100 veces
A continuación, se definen los primeros cinco dígitos >> D4ruido = { D4ruido };
impares en un arreglo de 10x7, tal como lo muestra la >> Y = sim( net , { nVect nVeces } , { } , D4ruido ) ;
figura 6.3. Además, se transforma cada arreglo de 10x7 a >> Y{ 100 } % muestra la última simulación
un vector de 70x1, concatenando las filas y >> any( D4 – Y ) % vectores iguales
representando las casillas de color negro por -1 y las de ans =
color blanco por 1. Estos vectores son denominados D1, 0
D2, D3, D4 y D5, respectivamente.

Figura 6.3. Cinco dígitos impares en un arreglo de 10x7


Figura 6.4. Cuarto dígito impar con ruido
>> 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 dígito
>> D2r = sim( net , nVect , [] , D2 ) ;
>> any( D2 – D2r ) % vectores iguales

Mg. Pedro Freddy Huamaní Navarrete 55 56 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

linealmente no separables. Por lo tanto, con el uso de la


7. Red Neuronal Radial Basis Function red Radial Basis Function, se logrará representar dicha
función. Se introducen los vectores de entrada y de salida
7.1 Definición y Características deseada.

Es un tipo de red conformada por dos capas. La primera >> X = [ 1 1 0 0 ; 1 0 1 0 ] ;


con una función de transferencia Radial Basis >> Yd = [ 0 1 1 0 ] ;
(gaussiana), y la segunda con función de transferencia >> net = newrb( X , Yd ); % entrenamiento
lineal. Esta red, a diferencia de la Perceptron Multicapa, NEWRB, neurons = 0, SSE = 0.947368
necesita un número mayor de neuronas en su primera >> X1 = X( :, 1 );
capa, sin embargo sólo necesita de una fracción pequeña >> Y = sim( net , X1 ) % simulación
de tiempo para el entrenamiento de sus pesos [4]. Su >> X2 = X( :, 2 );
principal aplicación es la aproximación de funciones y la >> Y = sim( net , X2 )
clasificación de padrones [2]. La figura 7.1 muestra la >> X3 = X( :, 3 );
estructura de una red RBF. >> Y = sim( net , X3 )
>> X4 = X( :, 4 );
Entrada Capa Radial Basis Capa Lineal >> Y = sim( net , X4 ) %prácticamente igual a 0
Finalmente, los tamaños y contenidos de las matrices de
Y1CS1x1 pesos y bias de esta red neuronal resultan ser:
X Rx1 W
1C V1CS1x1 W
2C
2C
V S2x1 >> net.iw{1} % pesos de la primera capa
S1xR S2xS1
Y2CS2x1 >> net.lw{2} % pesos de la segunda capa
+ + >> net.b{1} % bias de la primera capa
1C 2C >> net.b{2} % bias de la segunda capa
B S1x1 B S2x1

De esta manera, esta red RBF cuenta con dos capas. En


1 1 la primera capa cuatro neuronas, y en la segunda una
neurona. Ver figura 7.2.
Y1C=radbasis( dist(W1C, X),B1C ) Y2C=purelin(W2C * Y1C, B2C )
7.3 Aplicación: Predicción de Señales Temporales
Figura 7.1. Estructura de una Red Neuronal RBF Seguidamente, se utiliza la red RBF para predecir
muestras hacia delante, en una señal temporal
7.2 Solución al Problema de la Función XOR compuesta por la suma de dos ondas cosenos de
frecuencias diferentes.
Tal como se vio en la sección 2.4, la red Perceptron de >> Fs = 100; % se define la frecuencia de muestreo.
una capa es insuficiente para representar la función >> n = 0:Fs-1; % se define el tiempo discreto
XOR. Ello se debe a la presencia de padrones >> x = -cos( 2*pi*5*n/Fs + pi/4 ) + cos( 2*pi*2*n/Fs );

Mg. Pedro Freddy Huamaní Navarrete 57 58 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

>> plot( n , x , ‘ * ’ ), gris % Ver figura 7.3 deseada. Este criterio se continúa hasta cubrir las
primeras 99 muestras. A continuación se muestra un
ejemplo del uso de la función “delaysig” para la
operación de desfasado en un vector de 10 muestras.
x1 >> A = 1:10; % vector con 10 muestras
>> nntwarn off % para ocultar advertencias
>> B = delaysig( A , 5 ); % crea 6 retardos en el vector A
B=
x2 2da Capa 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
1ra Capa 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
Figura 7.2. Red Neuronal RBF >> 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 predicción.
>> 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
Figura 7.3. Gráfico de 100 muestras de la señal temporal
Para verificar el desempeño de la red, se procede a
ingresar de la muestra 13ava a la 18ava, para predecir la
Luego, se establecen 6 muestras de entrada para la 19ava.
primera capa y una muestra de salida para la segunda
capa. Y, se procede a reacomodar (desfasar) las >> X1 = fliplr( x( 13:18 ) ) ; % giramos la entrada
muestras de entrada a la red, de tal forma que las >> Y = sim( net , X1’ );
primeras seis muestras ingresen a la red, y la séptima >> [ Y x(19) ]
que corresponda a la salida deseada. De igual manera, ans =
de la segunda a la séptima muestra ingresen a la red, -1.6251 -1.6251
con la octava muestra correspondiente a la salida

Mg. Pedro Freddy Huamaní Navarrete 59 60 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

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 señal inicial “x”
Figura 7.5. Gráfico de 100 muestras de la señal temporal más 3
>> X3 = fliplr( x( 95:100 ) ) ; %giro muestras predichas
>> 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. Gráfico de desempeño 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

Mg. Pedro Freddy Huamaní Navarrete 61 62 Mg. Pedro Freddy Huamaní Navarrete
Simulación de Redes Neuronales con Matlab Simulación de Redes Neuronales con Matlab

Bibliografía

[1] BONIFACIO, Martín del Brio. “Redes Neuronales y


Sistemas Borrosos”. 2da Edición. Alfa y Omega. 2007
[2] DEMUTH, Howard, HAGAN Martin and BEALE, Mark.
“Neural Network TOOLBOX User’s Guide”. The MathWorks
Inc. 2005.
[3] HAYKIN, Simon. “Neural Networks. A Comprehensive
Foundation”. 2da Edición. Prentice Hall 1999.
[4] HAYKIN, Simon. “Adaptive Filter Theory”. Cuarta Edición.
Prentice Hall 2001.
[5] VELLASCO, Marley. “Ementa de Redes Neurais”. Material
del Curso de Redes Neuronales Artificiales en el Programa
de Maestría. PUC- RIO. 1995. Brasil.
[6] WASSERMAN, Philip D. “Neural Computing: Theory and
Practice”. Van Nostrand Preinhold. 1989.
[7] Introducción 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.htm
l

Mg. Pedro Freddy Huamaní Navarrete 63 64 Mg. Pedro Freddy Huamaní Navarrete

Вам также может понравиться