introduccion a las redes neuronales

60
UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS. MA77- BIOINGENIERÍA 1 INTRODUCCIÓN A LAS REDES NEURONALES ARTIFICIALES El presente artículo tiene como objetivo presentar una visión general del funcionamiento de las Redes neuronales artificiales supervisadas, específicamente los modelos Perceptron y Perceptron Multicapa bajo el algoritmo Backpropagation. Para entender el modelo propuesto por estas técnicas algorítmicas es necesario presentar una explicación básica del funcionamiento de las redes neuronales biológicas, lo cual permitirá comprender posteriormente la arquitectura de cada red artificial. El presente documento mostrará aspectos teóricos del funcionamiento de una red neural biológica partiendo de la explicación del comportamiento de la neurona. Posteriormente, se presentarán los modelos de Redes neuronales artificiales supervisadas. Luego, se mostrarán ejemplos de cálculo para el entrenamiento y validación de dichas redes neuronales. Una vez entendido el modelo de cada red, se pasará a presentar la implementación algorítmica utilizando el software Matlab 7.0. Para esto se hará uso de código abierto y de funciones pertenecientes al Toolbox de Redes neuronales. Finalmente, se presentarán algunos ejemplos de aplicaciones de las redes neuronales comolo es el reconocimiento de caracteres. 1. El sistema nervioso central El sistema nervioso central trabaja en compañía del sistema endocrino (encargado de la secreción de hormonas) con el objetivo de mantener la homeostasis del organismo. Los sentidos del gusto, tacto, olfato, etc. se originan en las neuronas sensoriales que se encargan de enviar señales eléctricas al cerebro. Tanto el encéfalo como la médula espinal conforman el Sistema nervioso central (SNC). Los órganos sensoriales y motores conforman al Sistema nervioso periférico (SNP). Los órganos sensoriales utilizan dos tipos de neuronas: aquellas que sensan el ambiente externo del organismo (por ejemplo, los sensores de tacto en la piel) y aquellos que sensan el ambiente interno (por ejemplo, los sensores de los órganos internos). La información de todos los sentidos es integrada tanto en el cerebro como en la médula espinal para su procesamiento. Como respuesta a esto, se producen impulsos eléctricos transmitidos a los músculos y glándulas endocrinas a través de las neuronas motoras. Es así que el sistema nervioso controla el Autor: Mag. Ing. Sergio Salas Arriarán

Upload: make-valencia-paredes

Post on 03-Jan-2016

39 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

1

INTRODUCCIÓN A LAS REDES NEURONALES ARTIFICIALES

El presente artículo tiene como objetivo presentar una visión general del funcionamiento

de las Redes neuronales artificiales supervisadas, específicamente los modelos Perceptron y

Perceptron Multicapa bajo el algoritmo Backpropagation. Para entender el modelo propuesto por

estas técnicas algorítmicas es necesario presentar una explicación básica del funcionamiento de

las redes neuronales biológicas, lo cual permitirá comprender posteriormente la arquitectura de

cada red artificial.

El presente documento mostrará aspectos teóricos del funcionamiento de una red neural

biológica partiendo de la explicación del comportamiento de la neurona. Posteriormente, se

presentarán los modelos de Redes neuronales artificiales supervisadas. Luego, se mostrarán

ejemplos de cálculo para el entrenamiento y validación de dichas redes neuronales. Una vez

entendido el modelo de cada red, se pasará a presentar la implementación algorítmica utilizando

el software Matlab 7.0. Para esto se hará uso de código abierto y de funciones pertenecientes al

Toolbox de Redes neuronales. Finalmente, se presentarán algunos ejemplos de aplicaciones de las

redes neuronales comolo es el reconocimiento de caracteres.

1. El sistema nervioso central

El sistema nervioso central trabaja en compañía del sistema endocrino (encargado de la

secreción de hormonas) con el objetivo de mantener la homeostasis del organismo. Los sentidos

del gusto, tacto, olfato, etc. se originan en las neuronas sensoriales que se encargan de enviar

señales eléctricas al cerebro. Tanto el encéfalo como la médula espinal conforman el Sistema

nervioso central (SNC). Los órganos sensoriales y motores conforman al Sistema nervioso

periférico (SNP).

Los órganos sensoriales utilizan dos tipos de neuronas: aquellas que sensan el ambiente

externo del organismo (por ejemplo, los sensores de tacto en la piel) y aquellos que sensan el

ambiente interno (por ejemplo, los sensores de los órganos internos). La información de todos los

sentidos es integrada tanto en el cerebro como en la médula espinal para su procesamiento. Como

respuesta a esto, se producen impulsos eléctricos transmitidos a los músculos y glándulas

endocrinas a través de las neuronas motoras. Es así que el sistema nervioso controla el

Autor: Mag. Ing. Sergio Salas Arriarán

Page 2: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

2

movimiento de todos los músculos estriados, lisos y la secreción de los órganos de las glándulas

endocrinas y exocrinas (como lo son las glándulas sudoríparas, lacrimales, etc.)

2. La estructura de la neurona y su potencial de acción

La unidad básica del sistema nervioso es la neurona. La estructura básica y las partes de esta

célula se muestran en la Figura 1. La función de la neurona se basa en el transporte de información

representada como impulsos eléctricos denominadosPotenciales de acción. Las dendritas son

extensiones de la neurona que actúan como antenas receptoras de señales de entrada de otras

células (en la mayoría de los casos de otras neuronas). El soma o cuerpo celular contiene

organelas, las cuales se encargan de mantener el metabolismo de la neurona. El axón es un

conducto que permite el transporte de la señal eléctrica desde el cuerpo celular hasta los

terminales sinápticos o axónicos, los cuales generan la señal de salida. El axón cuenta a su

alrededor con las vainas de mielina, las cuales son lipoproteínas que actúan como aislantes

eléctricos, protegiendo al impulso eléctrico que es transportado. La señal de salida de los

terminales axónicos puede variar dependiendo del tipo de neurona. Por ejemplo, para una

neurona sensorial, la señal de salida podría ser la liberación de un tipo de hormona denominada el

neurotransmisor que será detectada por las dendritas de la neurona adyacente. Para el caso de

una neurona motora, la salida puede ser otra hormona (acetilcolina) que causa la contracción de

las células musculares.

Figura 1. Estructura y partes de la neurona.

Page 3: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

3

Lo interesante resulta al analizar el proceso por el cual el impulso eléctrico es generado y

viaja del soma a los terminales axónicos. Esto se debe a que la membrana celular de la neurona

posee una polaridad eléctrica causada por la permeabilidad a ciertos iones durante su estado de

reposo. El potencial de membrana en esta situación es de aproximadamente -70mV y se produce

debido a la diferencia de cargas eléctricas entre el exterior e interior de la membrana celular. El

interior de la neurona resulta ser más negativo que el exterior. Sin embargo, este potencial puede

cambiar si es que se genera el movimiento de ciertos iones del exterior al interior de la célula. Los

iones no pueden cruzar la membrana celular ya que esta actúa como una barrera infranqueable

gracias a su doble capa bilípida. La única forma que poseen los iones para poder atravesar la

membrana es a través de los poros o canales iónicos. Algunos canales iónicos siempre están

abiertos, permitiendo el escape de iones de un área de alta concentración a una zona de baja

concentración (difusión). En estado de reposo la concentración de iones de potasio es alta dentro

de la neurona. El potencial negativo de reposo se mantiene a pesar de un pequeño flujo de salida

de potasio fuera de la célula, permitiendo una carga negativa. Por otro lado, otros canales iónicos

solamente serán abiertos bajo ciertos estímulos, como el cambio en el potencial de membrana o la

detección de ciertos ligandos específicos. Es así que el potencial de acción es generado por la

apertura de los canales iónicos de sodio ubicados en puntos específicos de la neurona. La apertura

de estos canales genera un ingreso de iones de sodio al citoplasma de la célula lo que causa que el

interior se torne cada vez más positivo con respecto al exterior. Este incremento resulta en una

despolarización de una región de la membrana celular. Después de que los canales de sodio

permanecen abiertos, otros canales de potasio se abren, permitiendo la salida de estos iones y

generando el proceso de repolarización, en el cual la membrana celular retorna a su potencial

negativo de reposo. Mientras que los canales de potasio están abiertos, los canales de sodio están

cerrados e inactivos y no pueden volver a ser activados durante un corto periodo de tiempo

denominado Periodo refractario. Este periodo garantiza que la conducción del potencial de acción

sea unidireccional, transmitiéndose únicamente desde el soma hacia los terminales axonales y

nunca viceversa. Cabe recalcar que la amplitud del impulso eléctrico no se ve atenuada conforme

viaja a través del axón. En la Figura 2 se presenta un típico potencial de acción nervioso.

Page 4: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

4

Figura 2. El potencial de acción nervioso y sus fases.

Las neuronas no son las únicas células que conforman el sistema nervioso. La glía está

conformada por un conjunto de células que rodean a las neuronas y les dan el soporte, protección

y nutrientes necesarios para su sostenimiento. Las células gliales superan en número a las

neuronas en unas 10 a 50 veces más. Un tipo especializado de célula gliales la oligodendrocita que

se encarga de rodear a las neuronas del SNC y del SNP formando los segmentos de mielina en las

neuronas funcionales. Los espacios libres entre los segmentos de mielina se denominan los

Nódulos de Ranvier (obsérvese en la Figura 1 los espacios entre cada bloque de vaina de mielina).

Estas regiones de Ranvier son zonas no aisladas y permiten que el potencial de acción viaje de

nódulo a nódulo. El salto que el potencial de acción debe realizar entre nódulos se conoce como

Conducción saltatoria y esta permite el incremento de la velocidad de conducción de tal manera

que los potenciales de acción puedan atravesar largas distancias en muy cortos periodos de

tiempo. Existen ciertas enfermedades como la Esclerosis múltiple en la cual se genera la pérdida

de mielina y por lo tanto, el paciente presentas síntomas como pérdida de la movilidad motora y

deficiencias visuales.

Page 5: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

5

3. La comunicación inter neuronal

Una pregunta que una persona se puede hacer en este momento es la siguiente: ¿Cómo es

posible que el potencial de acción pase de una neurona a otra? La respuesta se encuentra en el

análisis entre la conexión que existe entre el terminal axonal de la neurona transmisora y la

dendrita de la neurona receptora. El proceso de comunicación entre estos terminales se denomina

Sinapsis y el espacio sináptico es la hendidura (alrededor de 20-40 nm. de distancia) que separa

ambos elementos. En la Figura 3 se puede observar una imagen de esta conexión.

Figura 3. Esquema de conexión sináptica entre dos neuronas.

El proceso de transmisión del potencial de acción de acción de una neurona a otra se

conoce como sinapsis. Este proceso puede ser de dos tipos: sinapsis química y sinapsis eléctrica.

La sinapsis eléctrica ocurre cuando el terminal axonal de la neurona transmisora y la

dendrita de la neurona receptora se encuentran muy cerca (alrededor de 2 a 3 nm.) y existen unas

proteínas de conexión denominadas conexinas que interconectan ambos terminales. Estas

proteínas permiten el paso directo de iones de la neurona transmisora a la receptora lo cual

estimula directamente el potencial de acción en la neurona receptora. Este tipo de sinapsis no es

muy común y normalmente solo se observa entre las señales nerviosas transmitidas a los

músculos lisos viscerales y células cardiacas musculares. Una de las características más

importantes de este tipo de sinapsis es que puede ser bidireccional.

La sinapsis química comienza cuando el potencial de acción alcanza el terminal axonal de

la neurona presináptica acciona a las mitocondrias las cuales liberarán ATP en grandes cantidades

Page 6: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

6

que estimularán la apertura de canales iónicos de calcio. La apertura de estas compuertas permite

el ingreso de iones de calcio, los cuales estimularán a las vesículas sinápticas a liberar el líquido

neurotransmisor que llevan dentro. Esta sustancia es una hormona hidrofílica capaz de recorrer el

espacio sináptico hasta entrar en contacto con la dendrita de la neurona postsináptica. Dicha

dendrita posee receptores moleculares, los cuales detectan la presencia del líquido

neurotransmisor. Una vez que culmina el paso del potencial de acción en la neurona transmisora

el líquido neurotransmisor es reabsorbido por dicha neurona.

Los receptores de las dendritas reaccionan con losligandos, los cuales son

neurotransmisores específicos. La reacción de este ligando produce la apertura o cierre de canales

iónicos de sodio o de potasio, dependiendo del tipo de ligando y de receptor. Algunos receptores

actúan como compuertas al mismo tiempo, es decir, son compuertas y detectores de

neurotransmisores a la vez. Mientras, otros receptores trabajan de forma indirecta, activando

otras proteínas que se encargaran de estimular la apertura de canales iónicos. Los primeros tienen

la característica de actuar más rápidamente, permitiendo el paso del potencial de acción de forma

inmediata. Los segundos activan a los canales iónicos a través de proteínas G. Este tipo de

receptores se encuentran en las neuronas que requieren sinapsis más lentas. Esto se observa en la

Figura 4.

Figura 4. El proceso de activación de los ligandos.

Page 7: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

7

Un neurotransmisor puede excitar o inhibir a una neurona receptora. Esto dependerá del tipo

de canales iónicos que esta sustancia estimule en dicha neurona. La apertura de canales de sodio

estimula la despolarización de la neurona y por ende el potencial de acción. En cambio, la apertura

de canales de potasio o de cloro causa hiperpolarización, lo cual inhibe al potencial de acción. Una

simple neurona puede recibir miles de señales sinápticas (se sabe que puede tener hasta 10,000

conexiones con otras neuronas transmisoras) y la suma de todas estas despolarizaciones e

hiperpolarizaciones es la que determinará cuando el potencial de acción será generado. Si el nivel

de disparo de la neurona se excede, entonces el potencial de acción aparecerá. En caso contrario

no ocurrirá nada. Esto explica porque el proceso de sinapsis química se conoce como “de todo o

nada”.

4. Las redes neuronales biológicas.

Uno de los aspectos más fascinantes de las redes neuronales biológicas fue descubierto por el

premio Nobel de medicina del año 2000, Eric Kandel cuando comenzó en la década del 50 sus

estudios sobre el caracol gigante de nombre Aplysia. Dicho animal poseía un sistema nervioso

bastante simple, basado únicamente en 20,000 neuronas. Kandel descubrió que hasta el más

simple de los invertebrados era capaz de aprender funciones básicas, como aspectos de

supervivencia ante ataques externos y también era capaz de recordar eventos relacionados a

nuevos peligros encontrados.

Los estudios de Kandel llevaron a descubrir que durante el proceso de aprendizaje y memoria

las conexiones sinápticas entre las neuronas transmisoras y receptoras cambiaban. Cuando la

Aplysia comenzaba a aprender y memorizar acciones básicas, muchas neuronas empezaban a

facilitar el proceso de sinapsis, lo cual se lograba gracias a que los ligandos de las neuronas

receptoras se hacían cada vez más susceptibles a la apertura de canales iónicos de sodio.

Esto demostró que los procesos relacionados al aprendizaje y la memoria guardan relación con

cambios a nivel sináptico. Las neuronas receptoras facilitaban la excitación sobre la inhibición y

estos cambios tenían que ver con estímulos continuos que eran generados por las neuronas

somato sensoriales. De la misma manera, la carencia de excitación podía hacer que dichas

neuronas volvieran a sus estados inhibitorios (razón por la cual, la Aplysia olvidaba situaciones de

peligro que había experimentado días antes).

Page 8: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

8

Más adelante, se demostró que el proceso de refuerzo de las conexiones sinápticas también

ocurre en los seres humanos. Esto por supuesto, no demuestra al 100% la razón por la cual los

seres humanos somos capaces de aprender o memorizar ciertos eventos, pero, es un punto de

partida muy importante en la búsqueda del entendimiento del funcionamiento del cerebro.

5. El modelo básico de la neurona artificial

Basándose en los modelos de las redes neuronales biológicas, hace más de 50 años,

Rosenblatt presentó el primer modelo de la neurona artificial utilizada en la Red neuronal artificial

del tipo Perceptron. En la Figura 5 se observa una imagen del modelo de una neurona artificial.

Figura 5. Modelo de la neurona artificial.

Según en el modelo biológico se determinan las siguientes características:

1. La salida de la neurona es todo o nada, es decir 1 o 0 (también podría ser -1 o 1).

2. La salida de la neurona depende de la suma ponderada multiplicada los pesos aplicados a

cada entrada. Esta suma debe alcanzar cierto umbral (Ω) para activar la salida.

3. Los pesos asociados con cada entrada representan la eficiencia de la sinapsis para cada

neurona transmisora. Una sinapsis más eficiente tendrá un peso mayor. El proceso de

entrenamiento consiste en el ajuste de los valores numéricos de estos pesos.

En consecuencia, de la Figura 5 se puede obtener que la suma ponderada (SP) se genera de la

siguiente manera:

Page 9: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

9

Si la sumatoria excede el nivel de disparo Ω de la neurona entonces la salida y es 1, en caso

contrario la salida permanecerá en 0. De tal manera que se cumpla:

Ω

Donde fh es la función de activación.En este caso es la funciónHardlim definida de la

siguiente manera:

fh(x) = 1, para x>=0

= 0, para x<0

Se renombraa Ω el bias u offset. ElΩ se puede introducir como una entrada permanente a

la neurona con un valor de 1. Esto permite llevar la expresión a la siguiente ecuación:

∑ )

Entonces el nuevo modelo de la neurona artificial puede quedar como en la Figura 6.

Figura 6. Modelo de la neurona artificial utilizando bias de entrada.

Page 10: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

10

Por ejemplo, se puede utilizar el modelo de la neurona de la Figura 5 para resolver el

problema de la operación lógica AND. Supongamos que X1 y X2 son neuronas cuyos valores

pueden ser 0 o 1. Estas se conectan a la neurona artificial a través de los pesos W1 y W2. Se debe

elegir los pesos de la red de tal manera que se cumpla la siguiente relación:

Tabla 1. Función lógica AND aplicada a una neurona artificial.

X1 X2 Y

0 0 0

0 1 0

1 0 0

1 1 1

Entonces, se deben seleccionar W1 y W2 de tal manera que para las cuatro entradas

posibles la salida Y genere los valores especificados por la Tabla 1. El modelo de la red neuronal

para este problema se muestra en la Figura 7.

Figura 7. Modelo propuesto para la red neuronal que implementa la función AND.

Supongamos que se selecciona W1 = 1 y W2 = 1 y que el nivel de disparo es 1.5. Para este

caso, se evalúan las cuatro posibles entradas:

Page 11: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

11

Y = fh( 0(1)+0(1) - 1.5 ) = fh(-1.5) = 0

Y = fh( 0(1) + 1(1) – 1.5) = fh(-0.5) = 0

Y = fh( 1(1) + 0(1) – 1.5) = fh(-0.5) = 0

Y = fh( 1(1) + 1(1) – 1.5) = fh(0.5) = 1

Lo que nos da el modelo de red neuronal de la Figura 8.

Figura 8. Modelo solución de la red neuronal para la función AND.

Un detalle importante a notar a modo de ir introduciéndonos a las redes neuronales

artificiales es lo siguiente. La Tabla 1 contiene información de la relación entre las entradas y

salidas. Esto se conoce como patrón de entrenamiento y corresponde al tipo supervisado, ya que

al asignarle un valor a la salida Y correspondiente a cada entrada, se le está indicando a la red

neuronal artificial cual deberá ser la salida deseada. Los pesos de la red se han elegido al azar, de

tal manera que se cumplan las cuatro salidas deseadas. Las redes neuronales no supervisadas se

diferencian de las supervisadas en que no requieren que se indique el valor de la salida deseada Y

para la selección de los pesos.

Page 12: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

12

En este ejemplo, la selección de los pesos se realizó de forma aleatoria. Sin embargo, más

adelante se verá que según el modelo de red neuronal existe una metodología para actualizar los

pesos. El proceso de búsqueda de los pesos óptimos para el cumplimiento de la salida deseada se

conoce como entrenamiento o aprendizaje de la red neuronal.

El proceso de verificación de los resultados (multiplicar las entradas por los pesos y aplicar

la función de activación) se conoce como validación y debe verificarse que la salida Y corresponda

para los cuatro elementos de entrada.

6. El Perceptron

La red neuronal Perceptron posee la arquitectura más sencilla de todas las redes. Su

estructura se muestra en la Figura 9. La red cuenta con una capa de entrada y una capa de salida.

Cada entrada se conecta con todas las neuronas de la capa de salida. El proceso de aprendizaje se

obtiene mediante el ajuste de los pesos asociados con cada una de las entradas, de tal manera que

la red pueda clasificar los patrones de entrada. Para una red de este tipo con múltiples neuronas

ya no es posible seleccionar los pesos al azar como ocurrió en el ejemplo de la Tabla 1.

Figura 9. Modelo de la red neuronal Perceptron.

Page 13: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

13

Para el caso del Perceptron, la función de activación de cada neurona corresponde a la

función hardlim (la salida puede ser 1 o 0) o en algunos casos a la función hardlims (la salida puede

ser -1 o 1). Normalmente, las entradas Xn deben ser números enteros y los pesos pueden ser

cualquier valor real. Los pesos de las conexiones bias (bn) pueden tomar cualquier valor real

también y en la mayoría de los casos pueden ser ignorados del sistema.

La red neuronal del tipo Perceptron fue creada en el año 1957 por el psicólogo Frank

Rosenblatt. Esta red simuló de forma directa el comportamiento de los sistemas nerviosos

biológicos y en un inicio se pensó que podía ser capaz de resolver cualquier problema de

aplicación en los campos de la ingeniería, la física, las finanzas y otros más. El modelo fue utilizado

para reconocer secuencias de patrones de entrada que en algunos casos se logró con éxito. Sin

embargo, el Perceptron mostró problemas cuando utilizaba patrones de entrada muy grandes, ya

que no llegaba a encontrar los pesos adecuados para cumplir con todos los patrones introducidos

a la red. Este hecho y el factor de que la red Perceptron era incapaz de poder resolver el problema

de la función lógica XOR hicieron que perdiera importancia y esto hizo que el estudio de las redes

neuronales sea ignorado por varios años.

El algoritmo del Perceptron consiste en lo siguiente:

1. Inicializar los pesos y bias con valores aleatorios (normalmente entre valores de -0.5 y 0.5).

2. Presentar un patrón de entrenamiento (que consiste de la entrada y la salida deseada).

3. Calcular la salida y de la red de la siguiente manera:

Donde f() puede ser la función hardlim o hardlims. La variable t representa la t-ésima

iteración o repetición de los patrones de entrada a la red neuronal. La variable n

representa el número total de neuronas de la capa de salida de la red. El índice i indica el

número de neurona.

4. Adaptar los pesos según el resultado.

Si la salida obtenida y es igual a la salida deseada entonces los pesos no se corrigen de tal

manera que: 1

Page 14: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

14

Si la salida obtenida y es 0 y debió ser 1, entonces los pesos se corrigen de la siguiente

manera: 1

Si la salida obtenida y es 1 y debió ser 0, entonces los pesos se corrigen de la siguiente

manera: 1

5. El error resultante para cada entrada se puede obtener de la siguiente manera:

, en donde d(t) es la salida deseada e y(t) es la salida actual. Es posible

generalizar el proceso de adaptación de los pesos en función del error de la siguiente

forma general:

1

Donde α se denomina el coeficiente de aprendizaje y normalmente toma un valor entre 0

y 1. Este coeficiente permite estabilizar el proceso de entrenamiento con el costo de

obtener una mayor cantidad de iteraciones. Si se desea ignorar su aporte se define con el

valor de 1. El proceso de actualización de los pesos se conoce como la Regla Delta. El bias

también puede actualizarse de la siguiente manera:

1

6. El proceso se debe repetir para todos los patrones de entrada. Cada iteración t deberá ser

al menos igual al número de patrones de entrada. Estos patrones deberán ingresar de

forma intercalada para permitir que los pesos se ajusten hasta que el error para todas las

entradas sea cero.

7. Algoritmo del Perceptron en Matlab

La intención de esta etapa es observar el código que permite implementar la red neuronal

Perceptron de forma tal que se pueda migrar fácilmente a otros lenguajes de programación. Para

poder portar el algoritmo del Perceptron en código fuente es necesario modelar los procesos

mostrados en algebra matricial. Supongamos que se cuenta con una red neuronal de n entradas y

m neuronas de salida. Entonces, una entrada X se puede representar como un vector columna de

n elementos de la siguiente forma:

!"

Page 15: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

15

El vector de entrada X es de orden nx1. Dado que existen n entradas y m neuronas, habrá

en total mxn coeficientes, con lo cual, la matriz de pesos será de orden nxm:

# … %! & ! … %"

El bias también se representará como un vector ya que existen m elementos para cada una

de las m neuronas. Entonces el bias se puede representar como un vector de orden 1xm:

'() * … . . %, De esta manera, se puede calcular la salida Y de la red que será también un vector de

orden mx1. Esta salida se puede hallar de la siguiente manera:

- .(/0'1 2 3 #

- .(/0'14* … , 3 … %! & ! … %" * …%,5 6

Nótese que para obtener la salida Y es necesario obtener el vector transpuesta de la

entrada X y multiplicarlo por el peso W, dado que si no se hiciera esta operación, el orden de las

matrices no permitiría la multiplicación entre estas. Observe que se toma la transpuesta del

resultado de manera que la salida Y sea un vector columna de la siguiente forma:

- !%"

Para el proceso de entrenamiento, se debe contar con un vector objetivo T de tal manera

que este tenga el mismo orden que el vector de salida Y:

T 7!7%"

Luego, se debe calcular el vector Error E,el cual debe tener el mismo orden que el vector

de salida Y y el vector objetivo T (orden mx1). El vector Error representará cuán diferente es la

salida actual del valor deseado T. El error se obtiene de la siguiente manera:

Page 16: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

16

8 7

Una vez obtenido el error se deben actualizar la matriz de pesos W y el vector de bias.

Para esto se aplica la regla Delta:

# # 3 2 3 86 '() '() 3 86

El proceso de obtención del vector Y, el cálculo del vector Error, la actualización de la

matriz de pesos W y del vector bias constituyen el proceso de entrenamiento o aprendizaje de la

red neuronal. Si al cabo del primer entrenamiento no se obtuvo un vector Error con todos sus

elementos iguales a 0, esto significará que existen diferencias entre el vector deseado T y el

vector de salida Y, con lo cual el proceso se deberá volver a repetir hasta que se logre obtener un

vector Error con todos sus elementos iguales a 0. Normalmente, el proceso de aprendizaje debe

realizarse tomando como referencia un número máximo de veces o iteraciones en las que el

proceso se repetirá. Si al cabo de esa cantidad de iteraciones no se ha logrado obtener el error

deseado entonces se determinará que el proceso de entrenamiento no ha sido completado. De

darse esta situación el programador tendría que reiniciar el proceso de aprendizaje pero tomando

en cuenta ciertos cambios recomendados:

1. Modificar el valor del coeficiente de aprendizaje α.

2. Probar con otros valores aleatorios de inicio para la matriz de pesos W.

3. Probar con otros valores aleatorios de inicio para la matriz bias.

4. Cambiar el número de neuronas de la capa de entrada.

5. Utilizar otro conjunto de patrones de entrada y salida deseada.

En el Anexo A, se muestra el código de tres funciones que implementan en Matlab el

algoritmo explicado. Se presentan tres funciones: crear_Perceptron(), entrena_Perceptron() y

simula_Percpetron(). Dichas funciones permiten poder crear una red neuronal de un tamaño

específico, entrenarla para determinar sus pesos y bias óptimos y luego validar sus salidas

respectivamente. Previamente, las funciones deben estar almacenadas en la carpeta de trabajo

por defecto del Matlab para que puedan ser invocadas. Para efectos de entender el

Page 17: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

17

funcionamiento de cada función se presenta un ejemplo aplicado. Supongamos que se cuenta con

un sistema de 5 entradas y tres salidas que debe cumplir la siguiente relación:

Tabla 2. Relación de entrada y salida deseada.

X1 X2 X3 X4 X5 Y1 Y2 Y3

0 0 0 0 0 0 0 0

0 0 0 0 1 1 0 0

0 0 0 1 0 0 1 0

0 0 1 0 0 1 0 0

0 1 0 0 0 1 0 1

1 0 0 0 0 1 1 0

1 0 0 0 1 1 1 1

En este ejemplo, se puede notar que la entrada X cuenta con 5 valores y la salida Y con

tres neuronas. El primer paso para implementar este sistema consiste en invocar en Matlab a la

función crear_Perceptron(), de la siguiente manera:

red = crear_Perceptron(5,3,1,’cero’)

La función crear_Perceptron() recibe cuatro parámetros de entrada. El primer parámetro

tiene el valor de 5 y representa el número de entradas a la red neuronal, el cual según el valor de X

corresponde a cinco entradas. El segundo parámetro representa el número de neuronas de salida

de la red. El tercer parámetro representa el valor del coeficiente de aprendizaje α y finalmente, el

último valor es una cadena de caracteres que puede tomar dos valores: ‘cero’ o ‘rand’. En el

primer caso, se especificará que los coeficientes de la matriz de pesos como el vector bias se

inicialicen con ceros. En el segundo caso, se estará especificando que la matriz de pesos y el vector

bias se inicien con valores aleatorios en el rango de -1 y 1. Como valor de retorno, la función

devolverá un objeto de nombre red, el cual tendrá tres parámetros: red.pesos, red.bias y red.alfa.

El primer parámetro tendrá la matriz de pesos iniciales cuyo orden en este caso será de 5x3. El

segundo parámetro es el vector bias cuyo orden será de 1x3. Finalmente, el último valor es el

Page 18: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

18

coeficiente de aprendizaje. Por ejemplo, al ejecutar la función se obtendrá los siguientes

resultados:

red =

pesos: [5x3 double]

bias: [0 0 0]

alfa: 1

Entonces, la matriz red.pesos es de orden 5x3 y contiene solamente cifras de valor cero.

Igual ocurre para la matriz red.bias que es de orden 1x3. Finalmente, el coeficiente red.alfa toma

el valor de 1 asignado como parámetro de entrada a la función.

Posteriormente, se deberán crear las matrices de entrada X y la matriz objetivo T.

Obsérvese que cada patrón de entrada contiene cinco neuronas y en total se tienen 7 patrones. La

matriz X de entrada a ser usada en la función de entrenamiento debe tener el formato siguiente:

cada columna deberá corresponder a un patrón de entrada. Cada fila representará los diferentes

valores que toman las neuronas de entrada, por ejemplo, la fila 1 representará los valores de X1, la

fila 2 de X2 y así sucesivamente. De esta manera, la matriz X será de orden 5x7 y tendrá el

siguiente formato:

X=

El vector objetivo en cambio tendrá un orden distinto dado que solo existen 3 neuronas de

salida y 7 patrones de salida. La matriz deseada T quedaría de orden 3x7 y tendría los siguientes

valores:

T=

Luego, se invoca a la función entrena_Perceptron() que realiza el entrenamiento de la red

neuronal. El formato de la función es de la siguiente manera:

0 0 0 0 0 1 1

0 0 0 0 1 0 0

0 0 0 1 0 0 0

0 0 1 0 0 0 0

0 1 0 0 0 0 1

0 1 0 1 1 1 1

0 0 1 0 0 1 1

0 0 0 0 1 0 1

Page 19: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

19

red_T = entrena_Perceptron(red,X,T,500)

Esta función toma cuatro parámetros de entrada. El primero es el objeto red, el cual

contiene la matriz de pesos inicial red.pesos, la matriz bias inicial red.bias y el coeficiente de

aprendizaje red.alfa. El segundo parámetro corresponde a la matriz de entrada X donde cada

columna de X representa un patrón de entrada. Luego, T es la matriz de valores deseados, donde

la i-ésima columna de T representa la salida respectiva para la i-ésima columna de X. Finalmente,

el cuarto parámetro representa el número máximo de iteraciones que puede realizar el proceso de

entrenamiento. En este ejemplo, la red intentará repetir el proceso de entrenamiento hasta 500

veces. Una vez ejecutada la función de entrenamiento, el objeto red_T devuelve los siguientes

valores:

>>red_T.pesos

ans =

1 1 2

1 0 3

1 -1 0

-1 1 0

1 0 1

>>red_T.bias

ans =

-1 -1 -3

>> red_T.epochs

ans =

8

>>red_T.error

Page 20: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

20

ans =

0

Como se puede observar la matriz de pesos entrenados red_T.pesos es de orden 5x3. Cada

uno de sus valores corresponde a cada coeficiente que interconecta una de las cinco entradas de X

con cada una de las tres neuronas de la capa de salida. Luego, red_T.bias contiene los valores del

vector bias que polariza directamente a cada neurona. Luego, red_T.epochs es una variable que

contiene el número de iteraciones totales que el entrenamiento realizó para obtener el error en

cero. Finalmente, la variable red_T.error representa el error del proceso de entrenamiento y este

debe ser siempre cero, en caso contrario, la red no habría llegado a ser entrenada.

Finalmente, lo único que queda es validar los resultados de la red. Para esto se utiliza la

función simula_Perceptron() de la siguiente manera:

A = simula_Perceptron(red_T,P)

En esta función la variable A es un vector que toma los valores de salida para la entrada P

dada. P es un vector columna con una de las combinaciones de entrada presentadas en la Tabla 2

y red_T es el objeto que contiene la matriz de pesos y bias con los valores entrenados. Suponga

que se toma el vector P con el siguiente valor de entrada en Matlab:

P = [1;0;0;0;0]

P =

1

0

0

0

0

Luego, al simular este valor, el vector A que se obtiene presenta los siguientes valores:

Page 21: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

21

A =

1 1 0

Como se puede observar el vector A contiene la combinación de salida que corresponde a la

entrada X = 1 0 0 0 0, tal y como se puede comprobar en la Tabla 2. Lo interesante es que también

se pueden probar valores de P que no se encuentran en la Tabla 2 y se podría verificar que la

salida generará valores con cierta relación a aquellas entradas que son similares.

8. Toolbox de Matlab 7.0 para configuración del Perceptron

Matlab cuenta con un conjunto de funciones que facilitan la implementación de redes

neuronales de diversos tipos. Para crear una red neuronal del tipo Perceptron lo primero que se

debe hacer es instanciar un objeto del tipo red neuronal de la siguiente manera:

net = newp(PR,S);

En este caso net es el nuevo objeto instanciado. newp() es una función que permite crear el

objeto y al mismo tiempo definir la arquitectura de la red. Esta función cuenta con dos parámetros

de entrada. PR es el primer parámetro y viene a ser una matriz de r filas y 2 columnas, en donde r

viene a ser el número de elementos de entrada. Cada fila posee dos elementos, el primero

corresponde al valor mínimo que puede tomar la entrada Xi (donde i = 1,2,3,..r) y el segundo el

valor máximo. El segundo parámetro S, es una variable escalar que representa el número de

neuronas de la capa de salida. La función de activación de la red neuronal por defecto es la

Hardlim.

Por ejemplo, suponga que se ejecuta la siguiente instrucción:

net = newp([0 2],1);

Esto implica que se está creando una nueva red neuronal de una entrada y una salida. Los

valores mínimos y máximos de nuestra única entrada son 0 y 2 respectivamente.

Una vez inicializada la red, se puede obtener información de los pesos de entrada (en este

caso, al haber una sola entrada y una única neurona de salida solo existirá un único peso). Esto se

logra de la siguiente manera:

Page 22: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

22

Inputw = net.inputweights1,1

Lo que genera como resultado:

Inputw=

delays: 0

initFcn: ‘initzero’ %indica que los pesos iniciales son cero.

learn: 1

learnFcn: ‘learnp’ %indica la función de aprendizaje.

size: [1 1] %Tamaño del vector de pesos, en este caso es un escalar.

User data: [1 x 1 struct]

weightFcn: ‘dotprod’ %indica que la salida es hardlim(entrada x peso + bias).

De la misma manera se puede obtener información del bias:

biases = net.biases1

biases=

initFcn: ‘initzero’

learn: 1

learnFcn: ‘learnp’

learnParam: [ ]

size: 1

userdata: [1 x 1 struct]

Por defecto tanto los pesos como el bias son inicializados en cero. Sin embargo, es posible

asignarle a la red Perceptron un peso y bias iniciales. En el siguiente código se muestra un ejemplo

de inicialización de estos coeficientes:

Page 23: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

23

net = newp([-2 2;-2 2],1); %se crea una red de dos entradas y una salida.

% Esto generará dos pesos y un bias de valor 0.

net.IW1,1 = [-1 1]; %se inicializan los dos pesos con -1 y 1.

net.b1 = [1]; %se inicializa el peso del bias con 1.

Suponga ahora que se desear entrenar la red para que obtenga los pesos y bias necesarios para

cumplir con un patrón de entrada y salida determinado. El siguiente código muestra un ejemplo de

entrenamiento:

net = newp([-2 2;-2 2],1);

net.trainParam.epochs = 1;

P = [ [2;2] [1;-2] [-2;2] [-1;1] ];

T = [0 1 0 1];

En este ejemplo se ha creado una red Perceptron de dos entradas y una salida. Cada

entrada posee un valor mínimo de -2 y máximo de 2. Se eligen cuatro patrones de entrada que

cumplan con la siguiente relación:

Tabla 3. Relación entra la entrada y la salida deseada.

X1 X2 T

2 2 0

1 -2 1

-2 2 0

-1 1 1

En donde T es la salida deseada. La variable net.trainParam.epochs se inicializa en 1 lo que

implica que se presentarán a la red neuronal los parámetros de entrada una sola vez, con lo cual el

cálculo de los pesos solo se hará en una sola iteración. Esto no es recomendable, ya que es muy

Page 24: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

24

probable que los pesos no se lleguen a ajustar del todo para las cuatro entradas. Sin embargo, se

hace a modo de ejemplo.

Para iniciar el entrenamiento de la red se invoca a la función train, la cual recibe como

parámetro el objeto de la red, la matriz con los valores de entrada y la matriz con los valores de

salida deseada. Una vez invocada la función, los pesos y el bias son calculados. Esto se muestra a

continuación:

net = train(net,P,T)

w = net.IW1,1

w = [-3 -1]

b = net.b1

b = 0

Como se puede observar, los pesos obtenidos no son los adecuados. Si por ejemplo, se

toma la entrada [1 -2], claramente se puede ver que la sumatoria daría hardlim( 1(-3) + -2(-1) ) =

hardlim(-3+2) = hardlim(-1) = 0. Como se puede observar en la tabla anterior, para esta entrada la

salida deseada debió ser 1, con lo cual se puede ver que el entrenamiento no fue adecuado.

Es posible simular la salida de la red neuronal a partir de un conjunto de valores de

entrada. Para esto se hace uso de la función sim(net,P), en donde net es el objeto creado para la

red neuronal Perceptron y P es una matriz con los patrones de entrada que se quieren simular. En

nuestro caso, simularemos la salida para ver qué sucede:

a = sim(net,p)

a = [0] [0] [1] [1]

Como se puede observar, para la entrada P, el segundo y el tercer elemento no cumplen

con los valores de salida deseados. Para esto se recomienda repetir el proceso de entrenamiento,

pero ahora cambiando el número de iteraciones de 1 a 4 con la siguiente instrucción:

net.trainParam.epochs = 4;

Page 25: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

25

Si se vuelve a simular la red neuronal, los pesos obtenidos darán

w = [-2 -3]

b = 1;

Con esto se obtendrá la siguiente salida después de la simulación:

a = [0] [1.00] [0] [1.00]

Lo que representa la salida deseada, indicando que le error llegó a ser cero probablemente a

la tercera iteración. Como se puede observar, mientras mayor sea el número máximo de

iteraciones permitidas mayor probabilidad habrá de que la red se pueda entrenar correctamente.

9. El Perceptron Multicapa (MLP)

La red neuronal Percpetron multicapa (Multi Layer Perceptron: MLP) es una mejora propuesta

sobre la red neuronal Perceptron simple. Se caracteriza porque las salidas de las neuronas de una

capa se conectan a las entradas de otras neuronas en una capa siguiente conformando una red de

múltiples capas como se observa en la Figura 10. La ventaja de esta propuesta se encuentra en

que posibilita la resolución de problemas en los cuales las entradas y las salidas deseadas no

presentan una relación lineal, como es el caso de la compuerta XOR de dos entradas. La red MLP

se encuentra formada por una capa de entrada (los valores de X), una o más capas intermedias y

una capa de salida.

Page 26: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

26

Figura 10. Modelo de una red neuronal multicapa de dos entradas, una capa oculta y una capa de

salida.

Otra de las ventajas de las redes multicapa es la posibilidad de utilizar funciones de

activación diferentes, las cuales permiten obtener a la salida números reales. Esto permite realizar

aplicaciones en el campo de la predicción, validación, reconocimiento y clasificación con mucha

mayor eficiencia que en el caso del Perceptron simple. Además, esto permite aplicar las redes

neuronales en nuevos campos, como en el de Procesamiento digital de señales en una gran

cantidad de diversos problemas ingenieriles (filtrado de señales, aproximación de señales,

detección de sistemas, compresión de datos, etc).

10. Feedforward Backpropagation

Esta configuración es una de las redes neuronales supervisadas más populares que fue

propuesta por varios autores como David Rumelhart, Geofrey Hinton, Ronal Williams , David

Parker y Yan Lee Cun a mediados de la década de los 80’s. Esta red fue aplicada en una diversidad

de problemas de la ingeniería, comportándose de una manera sumamente eficiente. Es por esta

razón que las redes neuronales Backpropagation son utilizadas en la actualidad.

El término Feedforward que quiere decir “paso hacia adelante” y hace referencia al

funcionamiento de las redes neuronales multicapa. Una combinación de valores de entrada

ingresa a las neuronas de la capa inicial de la red multicapa y todos los valores se multiplican por

Page 27: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

27

sus respectivos pesos de conexión, generando así una salida en cada neurona que depende de la

función de activación. Dicha salida ingresa como entrada a las neuronas de la siguiente capa y así,

se repite el proceso para las n capas de la red hasta llegar a las neuronas de salida. Es por esto que

una entrada se propaga hacia adelante (de izquierda a derecha). Por otro lado, el término

Backpropagation significa “propagación hacia atrás” y hace referencia al método que se utiliza

para actualizar los pesos y bias de cada neurona: desde adelante hacia atrás (o de derecha a

izquierda).Es decir, primero se actualizan los pesos de las neuronas de la capa de salida y al final el

peso de las neuronas de la capa de entrada.

Las redes neuronales Feedforward Backpropagation utilizan un conjunto de valores de

entrada y salidas objetivo para el proceso de entrenamiento. En dicha etapa, se calcula el error del

sistema para cada iteración. A partir de dicho error se obtiene el valor del Error cuadrático medio

o MSE (Mean Square Error) que es el parámetro objetivo que se desea minimizar en el proceso de

entrenamiento. Normalmente, este error nunca llega a ser cero, por lo cual se debe elegir un error

mínimo que al ser alcanzado determinará el final del entrenamiento. El algoritmo que permite

reducir el MSE es el conocido método LMS (Least Mean Square) utilizado en múltiples técnicas de

Procesamiento digital de señales.

Una de las grandes ventajas de las redes Backpropagation es que sus salidas pueden ser

cualquier valor real definido por la matriz objetivo, gracias a que la función de activación que

utiliza en las neuronas de salida puede ser de tipo lineal. Esto posibilita que la red tenga un campo

de aplicación más variado que las redes Perceptron.

Un concepto importante de toda red Feedforward Backpropagation es la Generalización.

Este concepto está relacionado con el comportamiento de la red ante entradas que no fueron

utilizadas en el proceso de entrenamiento. Dado que las salidas son números reales, entonces

mientras entradas similares produzcan salidas con cifras similares al número real usado como

salida ideal, la generalización será mejor. Para que una red Backpropagation generalice bien (lo

cual es el objetivo para toda aplicación basada en redes neuronales) se deben seguir los siguientes

lineamientos:

1. Utilizar la mayor cantidad de datos de entrada y salidas objetivos posibles en el proceso de

entrenamiento.

Page 28: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

28

2. Utilizar aquellos patrones de entrada y salida objetivo considerados relevantes en su

mayoría.

3. Verificar que el problema pueda ser realizado por la red neuronal.

4. Definir el tamaño de la red óptima.

Encontrar el tamaño adecuado para la red neuronal Feedforward Backpropagation no es

una tarea sencilla. Para esto se deben elegir dos aspectos importantes: el número de capas ocultas

de la red y el número de neuronas a utilizar en cada capa. Examinaremos el primer caso.

Los problemas prácticos que requieren de dos capas ocultas son muy extraños. Sin

embargo, este tipo de red puede representar funciones de cualquier tipo de forma. De esta

manera, no existe una razón teórica para plantear una red Backpropagtion de más de dos capas

ocultas. De hecho, en la mayoría de problemas prácticos la solución se encuentra en redes de una

sola capa oculta.

Por otro lado, elegir el número de neuronas de las capas ocultas es una decisión sumamente

importante para la arquitectura de la red neuronal, ya que de estas depende el valor de salida de

la red. Si se eligen muy pocas neuronas lo más probable es que la red nunca logre entrenarse. Si se

eligen demasiadas neuronas entonces podría suceder que la cantidad de patrones de entrada

usados resulten insuficientes para completar el entrenamiento. Entonces, el valor adecuado de las

neuronas de las capas ocultas debe seguir las siguientes reglas:

1. El número de neuronas de la capa oculta debe ser una valor entre el tamaño de la capa de

entrada y de salida.

2. El número de neuronas ocultas debería ser 2/3 del tamaño de la capa de entrada sumado

al tamaño de la capa de salida.

3. El número de neuronas de la capa oculta debería ser menor al doble del tamaño de la capa

de entrada.

A continuación se explica el funcionamiento del algoritmo de Feedforward Backpropagation.

Suponga que el modelo de la Figura 11 representa a la neurona j de la capa 0 que se encuentra

conectada a q entradas.

Page 29: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

29

Figura 11. Modelo de la neurona de la red Feedforward Backpropagation.

Supongamos que la sumatoria de la neurona j se denomina 9: y se puede calcular de la

siguiente manera:

9: ∑ #: :;

De tal manera que es el i-ésimo elemento de la entrada P, #: representa al i-ésimo

peso conectado con la neurona j de la capa oculta y : es el bias de la neurona j de la capa 0.

Finalmente, la salida de la neurona se determina de la siguiente manera:

(: ∑ #: :;

Donde es la función de activación. En la red neuronal Feedforward Backpropagation la

función de activación puede ser cualquiera de las siguientes formas:

1. Lineal:

Derivada: <=><> 1

2. Sigmoidea:

?@AB Derivada:

<=><> 1

3. Tangente hiperbólica:

Page 30: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

30

@BC@AB@B?@AB Derivada:

<=><> 1

Por lo general la función lineal es utilizada en las neuronas de la capa de salida a fin de que

el valor final pueda ser cualquier número real. Las funciones sigmoidea y tangente hiperbólica son

utilizadas en las capas ocultas. La primera función genera valores cercanos a 0 y 1 mientras que la

segunda valores cercanos a -1 y 1. La elección de dichas funciones depende del diseñador de la red

neuronal.

Se define la variable D: como el error o gradiente de salida de la neurona j y este se calcula

de la siguiente manera:

D: : (:

En esta ecuación : es la salida deseada par la neurona j (en el caso de ser una neurona de

salida) o también la última salida anterior (en caso de ser una neurona de la capa oculta). Luego,

se define el Error cuadrático medio de la siguiente forma:

MSE = E ∑ DFGF

En donde S es el número de neuronas de la capa oculta 0 y DF es el error de la neurona k

de la capa de salida. El objetivo del proceso de entrenamiento consiste en minimizar el MSE a

través del cálculo de los pesos óptimos. Por ejemplo en la Figura 12 se observa una gráfica del MSE

versus los pesos. Aquí se puede observar que para el valor Wo se obtiene el mínimo MSE lo cual es

lo que se requiere.

Page 31: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

31

Figura 12. Gráfica del MSE versus los pesos de las neuronas de una capa.

Como se puede observar de la gráfica el cambio de los pesos es inversamente proporcional

al gradiente de error de tal manera que se cumple la siguiente relación:

∆# 9 I# 89

Y despejando se obtiene que la derivada parcial del MSE con respecto a los pesos es:

I# 89 JKJLM

En donde, n es la n-ésima iteración. Luego, Por la regla de la cadena se despeja la derivada

parcial del MSE:

JKJLM JKMJ@M

J@MJNMJNMJLM

De esta manera, para una función de activación sigmoidea se tiene su derivada de la

siguiente manera:

JKJLM JOP<MCQMLMP

JLM #

JKJLM #

I# 89 JKJLM 9 9

Page 32: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

32

El término I# 89es el gradiente del MSE con respecto al peso Wi y la actualización de

los nuevos pesos para la iteración n+1 debe cumplir lo siguiente:

# 9 1 # 9 I# 89

Al sumar el gradiente al peso anterior se estima que el nuevo peso se aproxime al valor

óptimo Wo. Entonces, el peso y el bias de la neurona j se actualizan de la siguiente manera:

#: 9 1 #: 9 D:

:9 1 :9 D:

Aquí es el coeficiente de aprendizaje y normalmente toma un valor entre 0 y 1 y Pi son

las entradas a la neurona j.

Ahora, veamos el proceso de aprendizaje en todas las neuronas de la red, siguiendo el

esquema de la red neuronal de la Figura 13. En esta MLP se observa una capa de entrada de

entrada de p muestras, una capa oculta de q neuronas y una capa de salida de r neuronas.

Entonces, la matriz V representa los coeficientes que interconectan las entradas con las neuronas

de la capa oculta y la matriz W representa los coeficientes de la interconexión entre la capa oculta

y la capa de salida. Entonces se cumple lo siguiente:

W tiene orden de qxr elementos.

V tiene orden de pxq elementos.

X tiene orden de px1 elementos.

Y tiene orden de rx1 elementos.

Page 33: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

33

Figura 13. Modelo de MLP Feedforward Backpropagation.

De la Figura 13 se puede analizar lo siguiente:

a. Definiendo h- al punto de entrada de la capa oculta h: .C 3 R

b. Definiendo h+ al punto de salida de la capa oculta aplicando la función de activación:

.? .C

c. La salida de la red y se obtiene de la siguiente manera: .? 3 #

d. Reemplazando (b) en (c): .C 3 #

e. Remplazando (a) en (d): 3 R 3 #

f. Finalmente se halla el error cuadrático medio: S 8 <

Donde yd es la matriz con la salida deseada. Llamemos J la función de costo que es igual al MSE

que se desea optimizar. Entonces la actualización de los pesos y bias nos da:

#T 1 #T USU#

T 1 T JVJL

q1

qr

Page 34: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

34

Para comprender mejor el funcionamiento de estas ecuaciones observe el esquema de

conexión de la red neuronal de la Figura 14. Aquí la neurona A pertenece a una capa oculta y las

neuronas B y C corresponden a la capa de salida.

Figura 14. Modelo de conexión de una neurona de la capa oculta con dos neuronas de salida.

Los pasos del entrenamiento son los siguientes:

1. Aplique la entrada a la red y calcule la salida. Los pesos iniciales pueden ser cualquier valor

aleatorio (generalmente variando entre -1 y 1) o pueden ser ceros.

2. Calcular el error para la neurona B. El error es el valor deseado menos el valor real

obtenido. En otras palabras: ErrorB = SalidaB(1-SalidaB)(ObjetivoB-SalidaB)

El término “Salida(1-Salida)” es necesario en la ecuación debido a la derivada de la función

sigmoidea. En caso se utilizara la función tangente hiperbólica este término sería “(1-Salida2)”. En

caso se utilizara la función lineal, el error simplemente sería “Objetivo – Salida”.

3. Actualizar el peso. Supongamos que W+AB es el nuevo peso después del entrenamiento

que reemplazará al peso anterior WAB. Entonces:

W+AB = WAB+(ErrorB x SalidaA)

4. Calcular los errores para las neuronas de las capas ocultas. A diferencia de la capa de

salida no podemos calcular estos errores directamente ya que para ellos no tenemos una

salida objetivo. Entonces se tiene que retro propagar el error hacia atrás. Esto se logra

tomando los errores de las neuronas de salida para multiplicarlas por los pesos de

Page 35: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

35

conexión. Por ejemplo, para la neurona A de la Figura 14 se toman los errores de las

neuronas B y C para obtener su error de la siguiente manera:

ErrorA = SalidaA(1-SalidaA)(ErrorBWAB+ErrorC WAC)

5. Una vez obtenido el error de la capa oculta se repite el proceso desde el paso 3 para

cambiar el peso de la capa oculta.

Supongamos que ahora se cuenta con una red neuronal completa de dos entradas, una capa

oculta de tres neuronas y dos salidas como se observa en la Figura 15. Aquí se visualizan todos los

pesos que conforman a la red neuronal.

Entonces los cálculos a realizar para el entrenamiento de cada peso de la red son los

siguientes:

1. Calcular los errores de las neuronas de salida:

DQ SalidaX(1-SalidaX)(ObjetivoX-SalidaX)

DW SalidaY(1-SalidaY)(ObjetivoY-SalidaY)

2. Cambiar los pesos de las capas de salida:

#XQ? #XQ DQ(0'(Y

#ZQ? #ZQ DQ(0'(T

#[Q? #[Q DQ(0'(\

#XW? #XW DW(0'(Y

#ZW? #ZW DW(0'(T

#[W? #[W DW(0'(\

3. Calcular el error de las capas ocultas (retro propagación):

DX (0'(Y1 (0'(YDQ#XQ DW#XW

DZ (0'(T1 (0'(TDQ#ZQ DW#ZW

D[ (0'(\1 (0'(\DQ#[Q DW#[W

Page 36: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

36

Figura 15. Modelo de una red neuronal con todos sus pesos de conexión.

4. Cambiar el peso de las capas ocultas:

#]X? #]X DX'9]

#]Z? #]Z DZ'9]

#][? #][ D['9]

# X? # X DX'9^

# Z? # Z DZ'9^

# [? # [ D['9^

5. Ingresar el nuevo patrón de entrada, calcular la SalidaX y SalidaY con los nuevos pesos y

regresar al paso 1.

Por ejemplo, en la Figura 16 se muestra una red neuronal simple de dos entradas, una capa

oculta de dos neuronas y una sola neurona de salida. Se ingresan dos valores A y B y se presentan

los pesos iniciales. Suponga que la función de activación para cada neurona es la sigmoidea y se

ignora el bias de la red. Entonces, aplicamos los pasos del 1 al 5 para iniciar una iteración del

proceso de entrenamiento.

Page 37: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

37

Figura 16. Modelo de una red neuronal para un ejemplo de entrenamiento.

Primer paso. Hallar la salida:

SalidaM = f(0.35(0.1)+0.9(0.8) ) =

?@A_.`aa= 0.68

SalidaN = f(0.9(0.6)+0.35(0.4) ) =

?@A_.bc= 0.6637

SalidaY = f( 0.3(0.68)+0.9(0.6637) ) =

?@A_.c_Odd= 0.69

Segundo paso. Obtener el error de salida:

ErrorY = (objetivo-salidaY)(1-salidaY)salidaY

Supongamos que el objetivo es 0.5. Entonces se halla el gradiente de salida:

DW = (0.5-0.69)(1-0.69)(0.69) = -0.0406;

Tercer paso. Calcular los nuevos pesos que conectan a la neurona Y:

W1+ = W1+D 3 9/((= 0.3+(-0.0406x0.68) = 0.2724

W2+ = W2+D 3 9/(( = 0.9+(-0.0406x0.6637) = 0.873

Cuarto paso. Hallar los errores para las neuronas ocultas:

DX DW#? 3 1 (0'(Y(0'(Y 0.0406 3 0.2724 3(1-0.68)30.68=-0.0079

DZ DW#? 3 1 (0'(T(0'(T 0.0406 3 0.873 3 1 0.6637 3 0.6637=-0.0024

M

N

Y

Page 38: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

38

Quinto paso. Calcular los nuevos pesos de la capa oculta:

# X 0.1 0.0024 3 0.35 0.09916

#]X 0.8 0.0024 3 0.9 0.7978

# Z 0.4 0.0079 3 0.35 0.3972

#]Z 0.6 0.0079 3 0.9 0.5928

Sexto paso. Verificar si el error cuadrático medio se encuentra por debajo del valor deseado:

MSE = DW = 0.5x(-0.0406)2 = 0.82x10-3

Si este error se considera satisfactorio, el proceso de entrenamiento se detiene aquí. En

caso contrario se continúa el proceso nuevamente desde el primer paso.

11. Funciones que implementan el algoritmo de Feedforward Backpropagation en Matlab

A continuación se presentan las funciones creadas en código abierto en Matlab para la

implementación del entrenamiento y validación de una red neuronal Backpropagation. El objetivo

de este capítulo es el de proveer los algoritmos necesarios para el programador que desee

implementar la red neuronal en otro lenguaje de programación. Las funciones están adjuntadas en

el Aula virtual del curso para que los alumnos puedan disponer de ellas.

Dado que en la mayoría de aplicaciones útiles las redes Backpropagation presentan una

capa oculta y una capa de salida, se presentan funciones que permiten crear una arquitectura de

red basada en dos capas de tamaño variable, que pueden servir para un sinnúmero de

aplicaciones. Una de las ventajas del Backpropagation es que permite combinar las tres funciones

de activación vistas: lineal, sigmoidea y tangente hiperbólica. Sin embargo, en las funciones que se

presentan a continuación se utiliza la función sigmoidea en todas las neuronas de la red. En al Aula

virtual del curso se adjuntará un ejemplo similar al presentado con la función de activación

tangente hiperbólica.

La función red = crear_Backpropagation(n,m,k,mensaje) permite generar un objeto del tipo

red Backpropagation que contendrá cuatro parámetros: red.W1, red.W2, red.b1 y red.b2. Esta

función permite formar un modelo de red del tipo que se observa en la Figura 17.

Page 39: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

39

Figura 17. Modelo de la red neuronal Feedforward Backpropagation a crear con la función

crear_Backpropagation().

De la Figura 17 se puede observar que existen n entradas para el vector X, cuyo orden es

de nx1 y además, existen k neuronas en la capa oculta. Entonces, para cada neurona de la capa

oculta existen n+1 conexiones (tomando en cuenta el bias que siempre tiene entrada 1). Si existen

k neuronas entonces, en total habrán (n+1)xk conexiones. Por otra parte, se observa la conexión

entre la capa oculta y la capa de salida. En la capa oculta hay k salidas que representan k valores

de entrada para la capa de salida. Junto con el bias, la capa de salida tiene k+1 valores. Luego, la

capa de salida posee m neuronas, lo cual generará m valores de salida. Por tanto, el número de

conexiones entre la capa oculta y la capa de salida es de (k+1)xm.

La función red = crear_Backpropagation(n,m,k,mensaje) toma como entradas los siguientes

parámetros:

Page 40: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

40

n: número de entradas u orden del vector columna X.

m: número de neuronas de salida u orden del vector columna Y.

k: número de neuronas de la capa oculta.

mensaje: este puede ser ‘rand’ si se desea que las matrices de pesos y de bias iniciales tengan

pesos aleatorios en el rango de -1 y 1o también puede ser ‘cero’ si se quiere que estos valores

sean ceros.

El valor de retorno de la función es un objeto de nombre red que contiene cuatro matrices

de la siguiente forma:

red.W1: Es una matriz de orden nxk. Cada columna de red.W1 representa las conexiones entre las

n entradas de X y las neuronas de la capa oculta. En otras palabras el elementos Wij de red.W1

representa la conexión de la entrada Xi con la neurona j, en donde i: 1,2…..n y j: 1,2,…..k.

red.b1: Es una matriz fila de orden 1xk. Contiene los valores de los k coeficientes que conectan la

entrada bias (entrada siempre unitaria) con cada una de las neuronas de la capa oculta. El

elemento bi del vector B representa el coeficiente que conecta la entrada constante 1 con la

neurona i, para i: 1,2…..k.

red.W2: Es una matriz de orden kxm. Cada columna de la red.W2 representa las conexiones entre

las k salidas de la capa oculta (o k entradas de la capa de salida) con una única neurona de la capa

de salida. Dicho de otra forma cada elemento Wij de la matriz red.W2 representa la conexión

entre la salida de la neurona i de la capa oculta con la neurona j de la capa de salida, en donde i:

1,2,….k y j: 1,2…..m.

red.b2: Al igual que red.b1 es una matriz fila de orden 1xm. Representa las conexiones del bias con

cada una de las neuronas de la capa de salida.

Una vez creado el componente red, es necesario empezar el proceso de entrenamiento.

Para esto, se cuenta con la función red =

entrena_Backpropagation(red,X,Yd,alfa,max_Epochs,min_MSE) que devuelve otro objeto pero en

este se encuentran las matrices de pesos y bias con los valores que ya permiten validar el conjunto

Page 41: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

41

de entrada y salida usados en el entrenamiento. Además, el objeto contiene otros parámetros

adicionales que permiten conocer como se obtuvo el proceso de entrenamiento.

En total hay seis parámetros de entrada en la función red =

entrena_Backpropagation(red,X,Yd,alfa,max_Epochs,min_MSE) y son los siguientes:

red: es el objeto devuelto por la función crear_Backpropagation(). Contiene las matrices de pesos

y bias con valores iniciales.

X: es una matriz de orden n x número de patrones. Las filas representan los n valores de entrada

de X y cada columna representa un patrón de entrada. Mientras más patrones tenga esta matriz,

mejor Generalización tendrá la red neuronal.

Yd: corresponde a la matriz de salida deseada de orden m x número de patrones. Las filas

representan los valores de salida (son m valores) y las columnas representan cada patrón de

salida. Esta matriz tiene correspondencia con la entrada X. Ambas matrices deben tener el mismo

número de columnas ya que deben haber tantos patrones de entrada como de salida deseada. En

caso de que esto no ocurra, la función de entrenamiento arrojará un error.

alfa: es un valor escalar y representa el coeficiente de aprendizaje. Su valor se puede elegir entre

el rango 0 y 1. Este parámetro es un factor crítico en el desempeño del bloque del entrenamiento

ya que puede determinar la convergencia de este proceso. Normalmente, valores pequeños de

alfa, contribuyen con la convergencia, pero, afectan tremendamente la velocidad del proceso de

entrenamiento.

max_Epochs: es la máxima cantidad de iteraciones que el programador espera que la red realice

para culminar el proceso de entrenamiento. Si el proceso de entrenamiento converge

satisfactoriamente, debería hacerlo en un número de iteraciones menor a max_Epochs.

min_MSE: es el error cuadrático medio mínimo esperado. Como se sabe el algoritmo

Backpropagation utiliza la minimización de este error para actualizar los pesos de cada conexión.

Dado que este error casi nunca llega a ser cero, se elige un valor mínimo bajo el cual se detendrá

el proceso de entrenamiento.

Page 42: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

42

Una vez ejecutada la función de entrenamiento, esta devolverá un objeto red que

contendrá los siguientes parámetros:

red.W1: es la matriz de conexiones entre la entrada X y la capa oculta. Esta matriz será de orden

nxk y tendrá los coeficientes óptimos como resultado del entrenamiento.

red.b1: es la matriz del bias que conecta a las k neuronas de la capa oculta. Sus valores son

coeficientes óptimos.

red.W2: es la matriz de conexiones de la capa oculta y la capa de salida. Contiene orden de kxm y

sus coeficientes son el resultado del proceso de entrenamiento.

red.b2: al igual que red.b1 es una matriz fila de orden 1xm que contiene los coeficientes óptimos

de conexión de la entrada bias con cada una de las neuronas de salida.

red.mse: es el error cuadrático medio logrado al finalizar el proceso de entrenamiento. Si este

valor no es menor o igual al parámetro min_MSE, entonces el entrenamiento no ha cumplido con

las expectativas iniciales.

red.epochs: representa la cantidad de iteraciones realizadas para lograr el entrenamiento. Si este

valor es igual al parámetro max_Epochs, entonces el entrenamiento no ha logrado reducir el error

cuadrático medio, por lo cual debería repetirse dicho proceso con otros parámetros iniciales.

red.mse_evolucion: es un vector que contiene todos los valores calculados del error cuadrático

medio por cada iteración. Si se grafica usando la función plot permitirá ver dicha secuencia en una

gráfica.

Finalmente, una vez logrado el entrenamiento, solo queda validar la red neuronal. Este

proceso se puede realizar tanto para los parámetros de entrada usados en el entrenamiento como

para los que no han sido utilizados. Para la validación se cuenta con una tercera función cuyo

nombre es Y = valida_Backpropagation(red,IN). Dicha función solo recibe dos parámetros de

entrada y genera un vector de salida de m elementos generados por la red. El parámetro red

corresponde al objeto devuelto por la función de entrenamiento y el parámetro IN es un vector

columna conteniendo los n elementos de un patrón de entrada. Es necesario que la entrada sea

del orden nx1 ya que la función validará esta condición y generará un error en caso de que este

Page 43: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

43

orden no se cumpla. La salida de la red neuronal siempre estará representada por cifras reales en

el rango de 0 a 1 debido al uso de la función de activación sigmoidea en las neuronas de salida.

Supongamos que se desea crear una red neuronal para resolver el problema de la

compuerta XOR. En este caso se cuentan con dos neuronas de entrada y una neurona de salida

que siguen la relación dada en la Tabla 4. Este tipo de relación por ser no lineal es imposible de

modelar por una red neuronal del tipo Perceptron. Ahora, se va a verificar si la red

Backpropagation es capaz de poder dar solución a este problema.

Tabla 4. Relación entre las entradas y salida en la lógica XOR

X1 X2 Y

0 0 0

0 1 1

1 0 1

1 1 0

Entonces en el problema propuesto se tienen dos parámetros de entrada y uno de salida,

con lo cual n = 2 y m = 1. El número de patrones de entrada es 4. Entonces se define la matriz de

entrada X de la siguiente manera:

X = [0 0 1 1

0 1 0 1];

Y el vector de salida deseado Yd de la siguiente forma:

Yd = [0 1 1 0];

Luego, para este problema, se elige una red neuronal de 3 capas ocultas. A continuación se

crea la arquitectura de la red con valores aleatorios tanto en las matrices de pesos como de bias.

red = crear_Backpropagation(2,1,3,’rand’);

Lo cual devuelve como resultado lo siguiente:

Page 44: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

44

red =

W1: [2x3 double]

W2: [3x1 double]

b1: [-0.0871 -0.9630 0.6428]

b2: 0.8436

Como se puede observar la matriz red.W1 es de orden 2x3 (se conecta a dos entradas y

tres neuronas en la capa oculta) y la matriz red.W2 es de orden 3x1 (conecta tres neuronas en la

capa oculta y 1 neurona de salida). La matriz red.b1 es de orden 1x3 debido a que hay tres

neuronas en la capa oculta y la matriz red.b2 contiene un solo valor ya que solo se cuenta con una

neurona en la capa de salida.

Luego, una vez creado nuestro objeto red, procedemos a realizar el proceso de

entrenamiento en el cual se elige al azar un valor del coeficiente de aprendizaje α de 0.5, un

número máximo de iteraciones de 3000 y un error cuadrático medio mínimo de 0.001. De esta

manera, se invoca a la función de entrenamiento de la siguiente forma:

red_T = entrena_Backpropagation(red,X,Yd,0.5,3000,0.001)

Mientras la función se ejecuta, se deberá esperar desde unos segundos hasta unos

minutos para obtener los resultados. Durante esta espera, aparecerá una ventana con una gráfica

que muestra la evolución del error cuadrático medio durante cada iteración como se observa en la

Figura 18. La idea de esta gráfica es que el usuario pueda observar que la evolución del error

cuadrático medio tienda a disminuir conforme aumenta el número de iteraciones. Si esto no

ocurriera, el programador tendría que detener la ejecución del programa (presionando en el

teclado la combinación CTRL + C) y volver a ejecutar la función del entrenamiento con otros

parámetros iniciales. Normalmente, el programador debe esperar al menos unas 1000 iteraciones

para evaluar si la tendencia del entrenamiento se encuentra o no reduciendo el error.

Page 45: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

45

Figura 18. Evolución del error cuadrático medio por cada iteración o Epoch.

Una vez terminado el proceso de entrenamiento, la función retorna los siguientes resultados:

red_T =

W1: [2x3 double]

W2: [3x1 double]

b1: [2.1739 -1.0994 -0.7499]

b2: -0.3152

mse: 9.9993e-004

epochs: 2214

alfa: 0.5000

0 500 1000 1500 2000 25000

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

0.2

Evolución del MSE

iteraciones

mse

Page 46: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

46

mse_evolucion: [1x2214 double]

Como se puede observar, el proceso de entrenamiento tomó 2214 iteraciones para hallar

los pesos óptimos que permiten obtener la red neuronal que simula la operación lógica XOR. Una

vez logrado el entrenamiento solo queda validar que las cuatro entradas cumplan con la secuencia

presentada en la Tabla 4. Entonces, a continuación se validan las cuatro entradas:

Para X= [0;0]:

Y = valida_Backpropagation(red_T,[0;0])

Y =

0.0251

Para X = [0;1]:

Y = valida_Backpropagation(red_T,[0;1])

Y =

0.9582

Para X = [1;0]:

Y = valida_Backpropagation(red_T,[1;0])

Y =

0.9553

Para X = [1;1]:

Y = valida_Backpropagation(red_T,[1;1])

Y =

0.0545

Page 47: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

47

Como se puede observar, a diferencia de la red Perceptron, Backpropagation no da el

resultado exacto. Esto es obvio, dado que nosotros hemos asumido un error cuadrático medio

diferente de cero, por lo cual nuestras respuestas nunca serán iguales a los valores deseados,

pero, se aproximarán con un error máximo igual al que nosotros hemos definido en el

entrenamiento. Es claro al observar los resultados que los cuatro parámetros de entrada cumplen

con la Tabla 4 con un pequeño margen de error.

12. Uso del ToolBox de Matlab para implementar las redes neuronales Feedforward

Backpropagation

El algoritmo de Backpropagation tiene una serie enorme de variantes que se pueden aplicar

en una diversidad de casos. Las funciones presentadas en el inciso 11, son solo un modelo simple

de una red Feedforward Backpropagation la cual carece de una serie de elementos que le

permitirían ser más eficiente. El software Matlab cuenta con un ToolBox de redes neuronales con

funciones especialmente diseñadas para implementar redes del tipo Feedforward

Backpropagation. Estas funciones son altamente eficientes y mucho más veloces en el proceso de

entrenamiento que la función mostrada en el capítulo anterior. Lamentablemente, estas funciones

no son de código abierto, con lo cual, si bien es cierto, podemos utilizarlas en el ámbito de Matlab,

no podemos portar el código en otro lenguaje de programación.

Para mostrar el funcionamiento del ToolBox basta un simple ejemplo. Utilice el software

Paint y dibuje en este una letra con la herramienta lápiz. Por ejemplo, se puede dibujar una letra A

como se muestra en la Figura 19. Una vez creada la imagen de la letra, grábela en un archivo de

extensión .bmp con el nombre “LetraA”, pero, antes elija el formato mapa de bits monocromático

de tal forma que la imagen sea binaria o de blanco y negro. El archivo debe ser almacenado en la

ruta del proyecto de Matlab donde se ejecutará el programa de redes neuronales. Luego, repita el

proceso, y grabe algunas imágenes con la forma de la letra B y la letra C y otras más con la letra A.

Todas estas figuras las debe almacenar en la misma carpeta de proyecto.

Una vez almacenadas las imágenes, se procede a abrirlas para visualizarlas en Matlab. Este

software posee un ToolBox muy interesante de procesamiento de imágenes, el cual permite abrir,

procesar y crear imágenes digitales de forma muy sencilla. Para abrir una imagen en Matlab se

hace uso de la función imread() de la siguiente manera:

Page 48: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

48

Figura 19. Creación de una letra y grabación del archivo en el software Paint de Widows.

A = imread('letraA','bmp');

La variable A es ahora una matriz de k filas x m columnas. El número de filas y columnas de

A dependerá de la resolución de la imagen. Para obtener la resolución de la imagen se hallan las

dimensiones de la matriz de la siguiente manera:

[fil,col]=size(A)

De esta manera se obtiene la resolución de la imagen:

fil =

100

col =

Page 49: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

49

60

Así, se puede ver que la resolución de la imágenes de 100 filas por 60 columnas.

Para entrenar la red neuronal se requiere que la entrada esté en forma de vector, por lo

cual se debe convertir la matriz en un vector. Para esto se hace uso de la función matriz2vector()

que se presenta en el Anexo B. A continuación se presenta un código que carga cuatro letras

almacenadas en forma de archivo:

A = im2double(imread('letraA_big','bmp'));

A2 = im2double(imread('letraA2_big','bmp'));

B = im2double(imread('letraB_big','bmp'));

C = im2double(imread('letraC_big','bmp'));

La función im2double() es parte de la librería de Matlab y permite convertir los valores

numéricos de la matriz obtenida por la función imread()al un formato de tipo double, el cual es

requerido por la entrada de la función de entrenamiento. Una vez cargadas las cuatro matrices se

deben convertir a vector de la siguiente manera:

A = matriz2vector(A)';

A2 = matriz2vector(A2)';

B = matriz2vector(B)';

C = matriz2vector(C)';

Observe que se desea obtener la matriz en forma de vector columna, por lo cual se

obtiene la transpuesta del vector, ya que la función matriz2vector() entrega un vector fila. Una vez

obtenidos los cuatro patrones de entrada (los dos primeros representan la letra A, el tercero la

letra B y el último la letra C) estos se deben concatenar en una sola matriz que contenga los cuatro

patrones. Cada vector contiene 100x60 o 6000 valores. Entonces la matriz Sample tendrá un orden

de 6000x4. La concatenación se realiza de la siguiente manera:

Sample = [A A2 B C];

Page 50: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

50

Posteriormente, es necesario crear la matriz objetivo. Por experiencia ya podemos notar

que la red neuronal que vamos a crear contendrá 6000 entradas y 3 salidas. Las tres salidas

correspondientes son YA, YB e YC. Si la primera salida es 1 entonces se habrá reconocido el patrón

de entrada como letra A, en caso sea 0 la letra no es A. Lo mismo ocurre con la segundo y tercera

salida para la letra B y letra C respectivamente. Entonces la matriz objetivo será de esta manera:

Target = [1 1 0 0

0 0 1 0

0 0 0 1];

Como se puede observar, la matriz Target tiene cuatro patrones de salida de tres

neuronas. El primero y segundo patrón son 1 0 0, lo cual indica que se ha reconocido la letra A. El

segundo patrón es 0 1 0 que indica que se ha reconocido la letra B y el último patrón 0 0 1

reconoce a la letra C (observe que este orden se relaciona con el orden de las matrices de entrada

de la matriz Sample).

Luego, se crea la red neuronal Feedforward Backpropagation de dos capas: una capa

oculta de 20 neuronas y una capa de salida de 3 neuronas. La red tiene 6000 entradas. Hacemos

uso de la función newff() tal como se muestra a continuación:

S1 = 20;

[S2,Q1] = size(Target);

net = newff(minmax(Sample),[S1 S2],'logsig' 'purelin','traingda');

La función newff retorna un objeto net que contiene la matriz de pesos y bias necesaria

para empezar el proceso de entrenamiento (de hecho esta función inspiró el modelo de las

funciones presentadas en el capítulo 12). Los parámetros de la función se explican a continuación:

minmax(Sample): la función newff requiere que se le indique los valores mínimos y

máximos de cada elemento de entrada a la red neuronal. En este caso la red va a tener 6000

entradas, por tanto se ingresa una matriz de 6000 filas por 2 columnas, donde el valor de la

Page 51: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

51

primera columna es el mínimo valor que puede tomar el píxel (en nuestro caso 0) y la segunda

columna representa el máximo valor (en nuestro caso 1):

[S1 S2]: representan las capas de la red neuronal. En este caso S1 es 20 lo que indica que la

primera capa tiene 20 neuronas y S2 es 3 lo que indica que la segunda capa tienen 3 neuronas.

Dado que el último valor del arreglo es S2, la función asume que la capa de salida corresponde a

S2 neuronas.

'logsig' 'purelin': representan las funciones de activación para la primera y segunda capa oculta

respectivamente. En este caso el parámetro ‘logsig’ indica que la función de activación de la capa

oculta es sigmoidea y ‘purelin’ indica que la capa de salida es lineal. Si se deseara usar una función

tangente hiperbólica el parámetro a ingresar es ‘tansig’. Cabe resaltar que deben indicarse tantas

funciones de activación como tantas capas existan en la red neuronal.

traingda: Representa el tipo de entranemiento que la red neuronal realizará para actualizar el

valor de los pesos. En este caso se le está indicando que utilice el método del gradiente

descendente (el método explicado en el capítulo 11) con un coeficiente α fijo. Existen otros

métodos que se pueden aplicar para mejorar el desempeño del proceso de entrenamiento. Para

conocerlos digite en la ventana de comandos de Matlab la siguiente instrucción:

help newff

Una vez generado el objeto net se puede comenzar con el proceso de entrenamiento

invocando a la función train. Pero, previamente, se debe configurar algunos parámetros del objeto

net para poder iniciar el entrenamiento. Estos parámetros son los siguientes:

1. Indicarle a la red neuronal que la función a optimizar es la suma del error cuadrático

medio:

net.performFcn = 'sse';

2. Configurar el mínimo error deseado en 0.1:

net.trainParam.goal = 0.1;

3. Mostrar el resultado de las iteraciones en la ventana de comandos cada 20 iteraciones:

Page 52: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

52

net.trainParam.show = 20;

4. Indicarle a la red neuronal que el número máximo de iteraciones será de 5000. Pasado

este valor el entrenamiento será etiquetado como fracaso:

net.trainParam.epochs = 5000;

5. Configurar el coeficiente de aprendizaje:

net.trainParam.lr = 0.5;

Una vez realiza la configuración se inicia el entrenamiento de la siguiente manera:

[net,tr] = train(net,Sample,Target);

La función train devuelve dos parámetros: net y tr. El primero contiene la información de

la red neuronal después del entrenamiento y el segundo información sobre la performance del

proceso. En nuestro caso es el primer parámetro el que necesitamos para la validación. La función

trainrecibe como parámetros el objeto net creado por la función newff, la matriz de entrada y la

matriz objetivo. Adicionalmente, la función de entrenamiento presentará una ventana con una

gráfica del error cuadrático medio versus el número de iteraciones, lo cual permitirá observar la

convergencia del proceso.Finalmente, una vez entrenada la red, solo queda simular la validación.

Para esto se utiliza la función sim() que permite verificar los resultados de la red neuronal:

y = sim(net,C)

y = 0.2096

0.0091

0.8480

Como se observa para la matriz C el resultado más cercano a 1 es el tercer valor o YC el cual

nos indica que la letra ingresada es una C. Realice el mismo proceso con las otras matrices y

verifique los resultados.

Page 53: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

53

13. Referencias bibliográficas

[1] Saltzman, W. Mark. Biomedical Engineering: Bridging Medicine and Technology (Cambridge Texts in Biomedical Engineering). Cambridge University Press.2009

[2] Heaton, Jeff. Introduction to neural networks for C#. Heaton Research. 2008.

[3] Begg, Rezaul. Lai, Daniel. Palaniswami, Marimuthu. Computacional Intelligence in Biomedical Engineering.CRC Press. 2008.

[4] Arthur, Guyton. Textbook of Medical Physiology.Elsevier 2008.

[5]Veelenturf, L.P.J. Analysis and Applications of Artificial Neural Networks.Prentice Hall. 1995.

[6] The Matlab Neural Network ToolBox 6.0 Version 4. The Mathmorks 2004.

Page 54: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

54

ANEXO A

FUNCIONES PARA EL MANEJO DE LA RED NEURONAL PERCEPTRON

%Funcion crear_Perceptron(num_entradas,num_salidas,alfa,mensaje)

%Los parámetros de entrada de la función son:

%num_entradas: El número de entradas n de la red neuronal.

%num_salidas: El número de salidas o neuronas de salida m de la red

%neuronal.

%alfa: El coeficiente de aprendizaje.

%mensaje: Si su valor es 'zero' indica que los peso ybias iniciales serán

%cero. Si su valor es 'random', los pesos y bias iniciales serán numeros

%aleatorios entre -1 y 1. Si se coloca cualquier otro mensaje la función

%retornará error.

%Esta función retorna un objeto red del tipo perceptron cuyos parámetros

%principales serán:

%red.pesos: Matriz de nxm que contiene los pesos de la red.

%red.bias: Matriz de 1xm que contiene los pesos de cada bias.

%red.alfa: Valor numérico que equivale al coeficiente de aprendizaje.

%AUTOR: MAG. SERGIO SALAS ARRIARÁN

function red = crear_Perceptron(num_entradas,num_salidas,alfa,mensaje)

n = num_entradas;

Page 55: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

55

m = num_salidas;

if (mensaje == 'cero')

WI = zeros(n,m);

biasI = zeros(1,m);

elseif (mensaje == 'rand')

%randn produce números aleatorios entre 0 y 1. Nosotros queremos un

%número aleatorio entre -1 y 1.

WI = 2*rand(n,m)-1;

biasI = 2*rand(1,m)-1;

else

error('Debe indicar si los pesos iniciales y bias serán cero o aleatorios');

end

red.pesos = WI;

red.bias = biasI;

red.alfa = alfa;

%--------------------------------------------------------------------------------------------------------------------------------

%Función red_train = entrena_Perceptron(red,X,T,n_iteraciones)

%Esta función realiza el entrenamiento de una red Perceptron y recibe como

%parámetros lo siguiente:

%red: es el objeto de la red Perceptron creado por la función

%crear_Perceptron.

Page 56: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

56

%X: es la matriz de dimensiones axb que contiene los patrones de entrada. a

%es el número de elementos de entrada a la red y b el número de patrones.

%T: es la matriz con las salidas objetivo de la red. Tiene dimensiones de

%1xm donde m es el número de neuronas de salida.

%n_iteraciones: La red se iterará por n_iteraciones como máximo. De

%encontrarse un error 0 antes de que se alcance el valor de n_iteraciones

%el entrenamiento será detenido.

%La función retoronará un objeto red_train con los siguientes parámetros:

%red_train.pesos: son los pesos de la red entrenada.

%red_train.bias: son los bias de la red entrenada.

%red_train.error: es la sumatoria del vector error. Debe ser 0 si la red

%llegó a entrenarse satisfactoriamente.

%red_train.epochs: es el número de iteraciones que desarrolló la red para

%lograr el entrenamiento.

%AUTOR: MAG. SERGIO SALAS ARRIARÁN

functionred_train = entrena_Perceptron(red,X,T,n_iteraciones)

W = red.pesos;

bias = red.bias;

alfa = red.alfa;

[n,num_patrones] = size(X);

[m,num_patronesT] = size(T);

Page 57: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

57

max_epochs = n_iteraciones;

epochs = 1;

err = zeros(1,m);

[nn,mm] = size(W);

if( (nn~=n) || (mm~=m))

error('Las dimensiones de la matriz de pesos deben coincidir con las dimensiones de entrada y

salida');

end

if(num_patrones ~= num_patronesT)

error('El numero de patrones de entrada debe ser igual al de salida');

end

if(length(bias)~=m)

error('Las dimensiones de la matriz de bias deben coincidir con las dimensiones del vector

objetivo');

end

for i = 1:max_epochs

error_total = 0;

for j = 1:num_patrones

P = X(:,j)';%Se toma la transpuesta el patrón de entrada j para evaluar la salida de la red.

sum = P*W+bias;

y = hardlim(sum);

err = T(:,j)-y';

Page 58: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

58

for k = 1:length(err)

error_total = abs(err(k,1))+error_total;

end

W = W+alfa*P'*err';

bias = bias +alfa*err';

end

err = zeros(1,m);

if(error_total==0)

break;

end

end

red_train.pesos = W;

red_train.bias = bias;

red_train.epochs = i;

red_train.error = error_total;

%--------------------------------------------------------------------------------------------------------------------------------

%Función y = simula_Perceptron(red_train,entrada)

%Esta función recibe como parámetros un vector de entrada de orden 1xn o nx1 y genera la salida

%respectiva según los pesos y bias especificados en el objeto red_train.

%AUTOR: MAG. SERGIO SALAS ARRIARÁN

function y = simula_Perceptron(red_train,entrada)

Page 59: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

59

[n,m] = size(entrada);

if(n~=1 && m~=1)

error('La entrada debe ser un vector columna, no una matriz');

end

if(n~=1 && m==1)

entrada = entrada';

end

W = red_train.pesos;

bias = red_train.bias;

suma = entrada*W+bias;

y = hardlim(suma);

%--------------------------------------------------------------------------------------------------------------------------------

Page 60: Introduccion a Las Redes Neuronales

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS.

MA77- BIOINGENIERÍA

60

ANEXO B

FUNCIÓN PARA LA CONVERSIÓN DE UNA MATRIZ A VECTOR

function out = matriz2vector(A)

[fil,col]=size(A);

a=1;

for i = 1:fil

for j = 1:col

out(a) = A(i,j);

a = a + 1;

end

end

return