Redes Neuronales PDF

También podría gustarte

Está en la página 1de 52

CAPITULO CUATRO

APRENDIZAJE CON REDES NEURONALES


ARTIFICIALES

Una red neuronal artificial es, básicamente, el resultado de los intentos por
reproducir mediante computadores el funcionamiento del cerebro humano. Su
principal aplicación es en torno a las tareas en que los seres humanos
fácilmente superan a los computadores tradicionales, como en procesamiento
de señales, procesamiento de imágenes, procesamiento de voz, en robótica y
otros.

Nuestro cerebro está formado por miles de millones de neuronas


interconectadas entre sí en forma variable y compleja. Cada neurona recibe
señales de las otras neuronas, o señales provenientes del exterior de la red,
las procesa, ponderando o dándole distinta importancia a cada una de ellas, y
genera una única señal de salida que se transmite a las otras neuronas.

La información que procesa una red neuronal se encuentra dispersa entre


todas sus interconexiones, lo que la hace fundamentalmente diferente a un
computador tradicional, en que la información se encuentra totalmente
localizada y no distribuida como en este caso. Esta cualidad hace que las
redes neuronales posean una gran tolerancia a fallas.

4.1. FUNDAMENTOS BIOLÓGICOS


La figura 4.1 muestra el modelo biológico de la neurona, elemento base de las
redes de neuronas.

Mg. Abraham Gamarra Moreno 165


Figura 4.1. Modelo de la Neurona Biológica

Como se aprecia en esta figura, cada neurona en el cerebro está compuesta


básicamente por un cuerpo, axones y dendritas. Las dendritas forman un
"cepillo filamentoso" muy fino que rodea el cuerpo de la neurona. El axón
puede considerarse como un tubo largo y fino que se subdivide en numerosas
ramas que terminan en pequeños bulbos, los cuales tienen contacto con las
dendritas de las otras células. La pequeña separación entre una terminación y
una dendrita es llamada sinapsis. El axón de una neurona puede formar
conexiones sinápticas con muchas otras neuronas.

Funcionalmente, las dendritas reciben señales desde otras células a través de


los puntos de conexión llamados sinapsis. La fuerza de una conexión dada es
determinada por la eficiencia de la transmisión sináptica. Desde ahí las señales
son pasadas al cuerpo de la célula. Las señales que llegan de las dendritas
pueden ser excitatorias o inhibitorias, y si la suma ponderada de éstas,
realizada dentro del cuerpo de la neurona, supera su "umbral de activación"
dentro de un tiempo suficiente, la neurona se disparará, enviando un impulso
nervioso a través de su axón.

4.2. LA NEURONA ARTIFICIAL


En la figura 4.2 se presenta el esquema típico de la neurona artificial.
X1
W 1j

X2
W 2j
Yj
.: Zj= W ij Xi F ( Zj )

:
Xn
W nj

Axones Sinapsis Dendritas Cuerpo de la Neurona Axón

Figura 4.2: Modelo de la Neurona Artificial

166 Tópicos y Aplicaciones de la Inteligencia Artificial


El cuerpo de la neurona será a menudo representada por la suma ponderada
de las entradas, Zj, seguida por una función lineal o no lineal, Yj = F( Zj). La
eficiencia sináptica es representada por los "pesos de interconexión", Wij. La
función F(Zj) es llamada "función de activación", que usa los valores de
entrada para determinar la actividad de la neurona. El modelo de la neurona es
llamado neurona de McCulloch-Pitts .

4.2.1. PESOS DE INTERCONEXIÓN

Los pesos de interconexión, representan la fuerza de interconexión entre las


neuronas, y pueden ser positivos (excitatorios) o negativos (inhibitorios);
además pueden ser fijos o adaptables. Las redes con pesos adaptables usan
leyes de aprendizaje para ajustar los valores de la fuerza de interconexión. Si
la red neuronal usa pesos fijos las tareas a ser ejecutadas deben estar bien
definidas a priori.

4.2.2. FUNCIONES DE ACTIVACIÓN

Existen distintos tipos de redes neuronales que usan diferentes funciones de


activación, F(Z), pero la estructura interna de la neurona , es decir la suma
ponderada seguida por la función F(Z), es común en la mayoría de las redes.
Entre las funciones de activación más usadas y conocidas se encuentran las
que se muestran en la figura 4.3.

Figura 4.3. Funciones de Activación

Mg. Abraham Gamarra Moreno 167


4.3. REDES DE NEURONAS
Una red de neuronas consiste en varios de estos elementos (neuronas)
trabajando juntos. Usualmente estos elementos se organizan en grupos
conocidos con el nombre de capas. Una red típica consiste en una sucesión de
capas conectadas entre ellas en forma total o aleatoria. Estas redes poseen
dos capas que tienen contacto con el exterior, que son la capa de entrada y la
de salida. Las capas que no se conectan con el exterior reciben el nombre de
capas ocultas. La figura 4.4 presenta el esquema típico de una red de
neuronas.

4.3.1. REDES MONOCAPA (1 CAPA)

En las redes monocapa, como la red de HOPFIELD y la red BRAIN-STATE-IN-


A-BOX, se establecen conexiones laterales entre las neuronas que pertenecen
a-la única capa que constituye la red. También pueden existir conexiones
autorrecurrentes (salida de una neurona conectada a su propia entrada),
aunque en algún modelo, como el de HOPFIELD, esta recurrencia no se
utiliza.

:
:
: :
:
:

Capa de entrada Capa escondida Capa de salida

Figura 4.4 Esquema típico de una red de neuronas

Una topología equivalente a la de las redes de 1 capa es la denominada


topología crossbar (barras cruzadas). Una red de este tipo (por ejemplo, la red
LEARNING MATRIX) consiste en una matriz de terminales (de entrada y
salida) o barras que se cruzan en unos puntos a los que se les asocia un peso.
Esta representación crossbar suele utilizarse como etapa de transición cuando
se pretende implementar físicamente una red monocapa, puesto que es
relativamente sencillo desarrollar como hardware una estructura como la
indicada (por ejemplo, las barras cruzadas serían cables, y los puntos de
conexión, resistencias cuyos valores representarían los pesos de la red).

168 Tópicos y Aplicaciones de la Inteligencia Artificial


Finalmente, hay que indicar que las redes monocapa se utilizan típicamente en
tareas relacionadas con lo que se conoce como autoasociación; por ejemplo,
para regenerar informaciones de entrada que se presentan a la red incompleta
o distorsionada.

En la tabla 4.1 se muestran las características topológicas de los modelos de


redes monocapa más conocidos.

Tabla 4.1. modelos de redes monocapa más conocidos.

TIPOS DE CONEXIONES MODELO DE RED


CONEXIONES BRAIN-STATE-IN-A-BOX
AUTORRE- ADDITIVE GROSSBERG (AG)
CURRENTES SHUNTING GROSSBERG (SG)
CONEXIONES
OPTIMAL LINEAR ASOCIATIVE
LATERALES
MEMORY
EXPLÍCITAS
NO AUTO- HOPFIELD
RECURRENTES BOLTZMANN MACHINE
CAUCHY MACHINE
CROSSBAR LEARNING MATRIX (LM)

La figura 4.5 muestra el modelo de red neuronal de Hopfield.

Figura 4.5 Red de Hopfield

4.3.2. REDES NEURONALES MULTICAPAS

En el caso de las redes multicapas, sus unidades se clasifican en tres tipos:

Mg. Abraham Gamarra Moreno 169


• Unidades de entrada: al igual que el caso de la red de una sola capa, estas
unidades son las que reciben el patrón de entrada directamente.

• Unidades ocultas o escondidas: estas no reciben entradas directamente y


no poseen realimentación directa. Ellas permiten tener una representación
interna del patrón en cuestión.

• Unidades de salida: estas son las que entregan el resultado de la red.

Las redes multicapa son aquellas que disponen de conjuntos de neuronas


agrupadas en varios (2, 3, etc.) niveles o capas. En estos casos, una forma
para distinguir la capa a la que pertenece una neurona, consistiría en fijarse en
el origen de las señales que recibe a la entrada y, el destino de la señal de
salida. Normalmente, todas las neuronas de una capa reciben señales de
entrada de otra capa anterior, más cercana a la entrada de la red, y envían las
señales de salida a una capa posterior, más cercana a la salida de la red. A
estas conexiones se les denomina conexiones hacia adelante o feedforward
(Fig. 4.7).

Sin embargo, en un gran número de estas redes también existe la posibilidad


de conectar las salidas de las neuronas de capa posteriores a las entradas de
las capas anteriores, a estas conexiones se les denomina conexiones hacia
atrás o feedback (Fig. 4.6).

Figura 4.6. Red feedback

Un modelo de red neuronal multicapa es el Perceptron multinivel o


multicapa (Figura 4.7), el cual es una red de tipo feedforward compuesta de
varias capas de neuronas entre la entrada y la salida de la misma.

Las capacidades del Perceptron con dos tres y cuatro niveles o capas y con
una única neurona en el nivel de salida, se muestra en la figura 4.8.

170 Tópicos y Aplicaciones de la Inteligencia Artificial


Figura 4.7 Perceptron multinivel (red feedforward multicapa)

Figura 4.8 Distintas formas de las regiones generadas por un perceptron multinivel

En la segunda columna se muestra el tipo de región de decisión que se puede


formar con cada una de las configuraciones. En la siguiente columna se indica
el tipo de región de decisión que se formaría para el problema de la XOR. En
las dos últimas columnas se muestran las regiones formadas para resolver el

Mg. Abraham Gamarra Moreno 171


problema de clases con regiones mezcladas y las formas de regiones más
generales para cada uno de los casos.

El Perceptron básico de dos capas (la de entrada con neuronas lineales y la de


salida) sólo puede establecer dos regiones separadas por una frontera lineal
en el espacio de patrones de entrada.

Un Perceptron con tres niveles de neuronas puede formar cualquier región


convexa en este espacio. La región de decisión resultante será regiones
convexas con un número de lados a lo sumo igual al número de neuronas de la
segunda capa.

Un Perceptron con cuatro capas puede formar regiones de decisión


arbitrariamente complejas. El proceso de separación en clases que se lleva a
cabo consiste en la partición de la región deseada en pequeños hipercubos
(cuadrados para dos entradas de la red).

El análisis anterior demuestra que no se requieren más de cuatro capas en una


red de tipo Perceptron, pues, como se ha visto una red con cuatro niveles,
puede generar regiones de decisión arbitrariamente complejas.

El Perceptron es de interés histórico, dado que ha abierto el camino para el


desarrollo de otras redes neuronales, entre ellos el BackPropagation, que se
analizará más adelante.

4.4. OPERACIÓN DE UNA RED NEURONAL


Las redes neuronales operan en dos fases: aprendizaje y evocación o
recuerdo.

El aprendizaje es el proceso en el cual se adaptan o modifican los pesos de las


conexiones en respuesta a un estímulo que ha sido presentado en sus
entradas y opcionalmente a su salida. El estímulo presentado a la salida
corresponde a la salida deseada para una determinada entrada; esta salida
deseada debe ser entregada por un "instructor". En tal caso se habla de un
aprendizaje supervisado o entrenamiento supervisado.

La evocación o recuerdo se refiere a cómo la red procesa los estímulos


presentados en sus entradas y genera una respuesta en su salida. A menudo
la evocación o recuerdo es una parte del aprendizaje; esto sucede cuando la
salida deseada debe ser comparada con la salida actual de la red para originar
la señal de error.

4.5. ENTRENAMIENTO DE UNA RED NEURONAL


El entrenamiento de una red es todo el proceso de aprendizaje que realiza una
red neuronal. Su objetivo es lograr que la aplicación de un conjunto de
entradas produzca el conjunto de salidas deseadas (o uno al menos
consistente).

172 Tópicos y Aplicaciones de la Inteligencia Artificial


Dicho entrenamiento se realiza aplicando secuencialmente vectores de
entrada (patrones de entrenamiento), a la vez que se ajustan los pesos de la
red de acuerdo a un procedimiento predeterminado (cada modelo define su
procedimiento), los cuales convergen gradualmente a valores tales que cada
vector de entrada produce el vector de salida deseado.

En cuanto a los tipos de aprendizaje, existen dos tipos: el aprendizaje


supervisado y el no supervisado.

4.5.1. ENTRENAMIENTO SUPERVISADO

Se selecciona un número suficientemente grande de vectores de entrada con


sus correspondientes vectores de salida. Cada vector de entrada se aplica a la
red calculándose la salida, la que posteriormente se compara con la salida
deseada, determinando el error. Dicho error es realimentado a través de la red,
modificando los pesos de acuerdo a un algoritmo que lo minimice. Los vectores
del conjunto de entrenamiento se aplican secuencialmente, calculando los
errores y modificando los pesos hasta que el error del conjunto total de
entrenamiento converja a un nivel aceptable.

A continuación se muestra como se realiza el entrenamiento de una red


neuronal multicapa:

• Lo primero que necesitamos son patrones de entrenamiento (cada fila de


la tabla) que contengan el conocimiento de algún dominio en particular.
Para nuestro ejemplo (Tabla 4.2) tenemos patrones que permiten
identificar si un animal es un mamífero (1) o un ave (0).

• Ahora necesitamos una red neuronal que permita tomar los patrones de
entrada y de salida para el entrenamiento, tal como se muestra en la figura
4.9.

Los 6 primeros patrones (patrones de entrada) debe suministrar a las neuronas


que están en la parte superior (neuronas de entrada) y la última columna se
debe suministrarse como salida deseada.

Se puede elaborar un programa que permita entrenar la red neuronal y luego


de este entrenamiento, se debe probar si el aprendizaje fue correcto o no.

Para el primer patrón de entrenamiento, la prueba consiste en ingresar el


patrón de entrada (6 primeras columnas) y esperar que se tenga la salida
deseada dada en el entrenamiento (última columna que debe ser igual o
cercano a 1), vea la figura 4.10.

Para esta ejecución se tiene que el valor devuelto por la red neuronal es muy
cercano a 1, tal como se dio en el entrenamiento (la red neuronal aprendió).

Mg. Abraham Gamarra Moreno 173


Tabla 4.2 Patrones de entrenamiento que permiten identificar si un animal es un mamífero (1) o un
ave (0)

Entrenamiento de una red neuronal


Entradas Salida
(1=
Mamifer
o
0=Ave)
¿Tiene ¿Toma ¿Vuela? ¿Pone ¿Tiene ¿Nada?
pelo? leche? huevos? plumas?

1 1 0 0 0 0 1
0 1 1 0 0 0 1
0 1 0 0 0 1 1
0 0 1 1 1 1 0
0 0 1 1 1 0 0
0 0 0 1 1 0 0

Entrenamiento de una red


neuronal:
¿Tiene ¿Toma ¿Pone ¿Tiene
¿Vuela? Huevos? ¿Nada?
Pelo? leche? Plumas?

Salida

Figura 4.9 Red neuronal que permite tomar los patrones de la tabla 4.2.

174 Tópicos y Aplicaciones de la Inteligencia Artificial


Al ejecutar un programa que use el aprendizaje de esta red neuronal, con el
último patrón de entrenamiento, se tiene que la salida también es correcta
(figura 4.11).

Figura 4.10 Resultado que muestra un programa que contiene a la red neuronal entrenada de la
figura 4.9.

Figura 4.11 Resultados que muestra otra ejecución del programa que contiene a la red neuronal
entrenada de la figura 4.9.

Para salidas binarias (0 ó 1), si la salida deseada es 1, un valor aceptable será


cuando la salida sea mayor que 0.9 (salida>0.9); de la misma manera si la
salida deseada es 0, un valor aceptable será cuando la salida sea menor que
0.1 (salida<0.1).

Lo que debemos probar ahora es la capacidad de generalización de la red


neuronal. Para realizar esta prueba, suministramos a la red neuronal, sólo la
característica toma leche y la red neuronal generaliza e identifica a este como
un mamífero (valor cercano o igual a 1). Debemos notar que estas entradas no
han sido dadas en el entrenamiento, por lo que la respuesta que se obtiene, es
por generalización, vea la figura 4.12.

Mg. Abraham Gamarra Moreno 175


Figura 4.12 Resultados que muestra la genearlización del programa que contiene a la red neuronal
entrenada de la figura 4.9.

4.5.2. ENTRENAMIENTO NO SUPERVISADO

El aprendizaje no supervisado ocurre cuando la red es provista sólo de los


valores de entrada, y la red ajusta la fuerza de interconexión basada solamente
en los valores de la entrada y la salida de la red en progresión. En otras
palabras, el proceso de entrenamiento extrae las propiedades estadísticas del
conjunto de entrenamiento y agrupa vectores familiares en clases. Puesto que
no es posible determinar el patrón de salida específico generado por una clase
de vectores en forma previa al entrenamiento, se requiere transformar la salida
generada por la red a una forma que sea comprensible. Este tipo de
entrenamiento fue desarrollado por Kohonen (1984) y otros en lo que se
conoce con el nombre de la teoría de la "autoorganización".

4.6. TIPOS DE REDES NEURONALES MÁS IMPORTANTES


La tabla 4.3 muestra el resumen de los tipos de redes más conocidos,
comentando esquemáticamente las aplicaciones más importantes de cada
una, sus ventajas e inconvenientes y quién o quiénes fueron sus creadores y
en qué año.

176 Tópicos y Aplicaciones de la Inteligencia Artificial


Tabla 4.3. Tipos de redes más conocidos.6
Nombre de la Año Aplicaciones Comentarios Limitaciones
Inventada/
red más Desarrollada
importantes por
Avalancha 1967 Reconocimi Ninguna red No es fácil Stephen
ento de habla sencilla alterar la Grossberg.
continua. puede hacer velocidad o
Control todo esto. interpolar el
brazos robot. movimiento.

Teoría 1986 Reconocimiento Sofisticada Sensible a la Gail


resonancia de patrones . translación, Carpenter,
adaptativa (radar, Poco distorsión y Stephen
(ART) utilizada. escala. Gressberg.
Sonar, etc.).
ADALINE / 1960 Filtrado Rápida, Sólo es Bernand
MADALINE de señales. fácil de posible Widrow.
Ecualizado implementar clasificar
r adaptativo. con espacios
circuitos linealmente
Modems.
analógicos separados.
o VLSI.

Back 1974- Síntesis Red más Necesita Paul Werbos,

propagation 85 de voz desde popular. mucho tiempo David

texto. Numerosas para el Parker,

Control de aprendizaje y David


aplicacione
robots. muchos ejem- Rumelhart.
s con
Predicción plos.
éxito.
.
Facilidad
Reconocimi
de
ento de
aprendizaje
patrones.
. Potente.

6
Hilera J, Martinez V. Redes Neuronales Artificiales: Fundamentos, modelos y
Aplicaciones. España: Editorial RA-MA; 1995.

Mg. Abraham Gamarra Moreno 177


Tabla 4.3. Tipos de redes más conocidos (continuación)
Nombre de la Año Aplicaciones Comentarios Limitaciones Inventada/
red más Desarrollad
importantes a por

Memoria 1985 Memoria Aprendiza.j Baja Bart Kosko.

asociativa heteroasociat e y capacidad de

bidireccional iva de acceso arquitectur almacenamient

por a simples. o. Los datos

contenido. deben ser

codificados.

Máquinas de 1985- Reconocimi Redes La máquina de Jeffrey

Boltzmann y 86 ento de simples. Boltzmann Hinton,

Cauchy patrones Capacidad necesita un Terry Se-

(imágenes, de tiempo muy jnowski,

sonar y representac largo de Harold Szu.

radar). ión óptima aprendizaje.

Optimizaci de

ón. patrones.
Brain-Estate-in-a-
Box. 1977 Extracción de Posiblement Realización y James

conocimiento e mejor potenciales Anderson

de bases de realización aplicaciones

datos que las no estudiadas

redes de totalmente.

Hopfield.

178 Tópicos y Aplicaciones de la Inteligencia Artificial


Tabla 4.3. Tipos de redes más conocidos (continuación)

Nombre de la Año Aplicaciones Comentarios Limitaciones Inventada/


red más Desarrollad
importantes a por

Cerebellatron 1969 Control del Semejante a Requiere David Marr,

movimiento de Avalancha. complicadas James Al-

los brazos de entradas de bus,

un robot. control. Andres

Pellionez.

Counter- 1986 Comprensión Combinación Numerosas Robert

propagation de imágenes. de neuronas y Hecht-

Perceptron conexiones. Nielsen

y TPM.

Hopfield 1982 Reconstrucció Puede Capacidad y John

n de patrones implementar estabilidad. Hopfield

y se en VLSI.

optimización. Fácil de

conceptuali

zar
Neocognitron 1978- Reconocimient Insensible Requiere K.
84 o de a la muchos Fukushima
caracteres Translación elementos de
manuscritos , rotación proceso,
y escala. niveles y
conexiones.
Perceptron 1957 Reconocimient La red más No puede Frank
o de antigua. reconocer Rosenblatt
caracteres Construida caracteres
impresos en HW. complejos.

Mg. Abraham Gamarra Moreno 179


Tabla 4.3. Tipos de redes más conocidos (continuación)
Nombre de la Año Aplicaciones Comentarios Limitaciones Inventada/
red más Desarrollad
importantes a por
Self- 1980- Reconocimient Realiza Requiere Teuvo
Organizing-Map 84 o de mapas de mucho Kohonen
(SOM). patrones, característ entrenamiento
Topology- codificación icas .
Preserving- de datos, comunes de
Map (TPM). optimización. los
datos
aprendidos.

4.7. APLICACIONES DE LAS REDES NEURONALES


Las redes neuronales son una tecnología computacional emergente que puede
utilizarse en un gran número y variedad de aplicaciones, tanto comerciales
como militares. Se pueden desarrollar redes neuronales en un período de
tiempo razonable y pueden realizar tareas concretas mejor que otras
tecnologías convencionales, incluyendo los sistemas expertos. Cuando se
implementan mediante hardware (redes neuronales en chips VLSI), presentan
una alta tolerancia a fallos del sistema y proporcionan un grado de paralelismo
en el proceso de datos muy grande. Eso hará posible insertar redes
neuronales de bajo coste en sistemas existentes y recientemente
desarrollados.

Hay muchos tipos diferentes de redes neuronales, cada uno de los cuales tiene
una aplicación particular más apropiada. Relacionamos ejemplos de algunas
aplicaciones comerciales separándolas en grupos según las distintas
disciplinas:

Biología

• Aprender más acerca del cerebro y otros sistemas.

• Obtención de modelos de la retina.

Empresa

• Evaluación de probabilidad de formaciones geológicas y petrolíferas.

• Identificación de candidatos para posiciones específicas.

• Explotación de bases de datos.

• Optimización de plazas y horarios en líneas de vuelo.

• Reconocimiento de caracteres escritos.

180 Tópicos y Aplicaciones de la Inteligencia Artificial


Medio ambiente

• Analizar tendencias y patrones.

• Previsión del tiempo.

Finanzas

• Previsión de la evolución de los precios.

• Valoración del riesgo de los créditos.

• Identificación de falsificaciones.

• Interpretación de firmas.

Manufacturación

• Robots automatizados Y sistemas de control (visión artificial y sensores


de presión, temperatura, gas, etc.)

• Control de producción en líneas de proceso.

• Inspecci6n de la calidad.

Medicina

• Analizadores del habla para la ayuda de audición de sordos profundos.

• Diagnóstico y tratamiento a partir de síntomas y/o de datos analíticos


(electrocardiograma, encefalograma, análisis sanguíneo, etc.).

• Monitorización en cirugía.

• Predicción de reacciones adversas a los medicamentos.

• Lectores de rayos X.

• Entendimiento de la causa de los ataques epilépticos.

Militares

• Clasificación de las señales de radar.

• Creación de armas inteligentes.

• Optimización del uso de recursos escasos.

• Reconocimiento y seguimiento en el tiro al blanco.

Mg. Abraham Gamarra Moreno 181


Podemos buscar hechos comunes en esta lista de aplicaciones; la mayoría de
ellas consisten en realizar un reconocimiento de patrones: buscar un patrón en
una serie de ejemplos, clasificar patrones, completar una señal a partir de
valores parciales o reconstruir el patrón correcto partiendo de uno
distorsionado. Muchos de los ejemplos tienen que trabajar con datos
sensoriales y de percepción (señales visuales, auditivas y otras) y, otros
realizan filtrado o mapeo de señales de entrada. En general, los ejemplos
mostrados indican que son característicos más de las personas que de los
ordenadores convencionales.

4.8. LA RED BACKPROPAGATION6


En 1986, Rumelhart, Hinton y Williams, basándose en los trabajos de otros
investigadores formalizaron un método para que una red neuronal aprendiera
la asociación que existe entre los patrones de entrada a la misma y las clases
correspondientes, utilizando más niveles de neuronas que los que utilizó
Rosenblatt para desarrollar el Perceptron. Este método, conocido en general
como backpropagation (propagación del error hacia atrás), está basado en la
generalización de la regla delta y, a pesar de sus propias limitaciones, ha
ampliado de forma considerable el rango de aplicaciones de las redes
neuronales.

El algoritmo de propagación hacia atrás. o retropropagación, es una regla de


aprendizaje que se puede aplicar en modelos de redes con más de dos capas
de células. Una característica importante de este algoritmo es la
representación interna del conocimiento que es capaz de organizar en la capa
intermedia de las células para conseguir cualquier correspondencia entre la
entrada y la salida de la red. Ya se ha mostrado en este capítulo que en
muchos casos, como la resolución del problema de la OR exclusiva, es
imposible encontrar los pesos adecuados para establecer la correspondencia
entre la entrada y la salida mediante una red sin capas intermedias. Con una
capa de neuronas ocultas, sí es posible establecer dicha correspondencia.

De forma simplificada, el funcionamiento de una red backpropagation


(backpropagation net, BPN) consiste en un aprendizaje de un conjunto
predefinido de pares de entradas-salidas dados como ejemplo, empleando un
ciclo propagación-adaptación de dos fases: primero se aplica un patrón de
entrada como estímulo para la primera capa de las neuronas de la red, se va
propagando a través de todas las capas superiores hasta generar una salida,
se compara el resultado obtenido en las neuronas de salida con la salida que
se desea obtener y se calcula un valor del error para cada neurona de salida.
A continuación, estos errores se transmiten hacia atrás, partiendo de la capa
de salida, hacia todas las neuronas de la capa intermedia que contribuyan
directamente a la salida, recibiendo el porcentaje de error aproximado a la
participación de la neurona intermedia en la salida original. Este proceso se
repite, capa por capa, hasta que todas las neuronas de la red hayan recibido
un error que describa su aportación relativa al error total. Basándose en el
valor del error recibido, se reajustan los pesos de conexión de cada neurona.
de manera que en la siguiente vez que se presente el mismo patrón, la salida
esté más cercana a la deseada; es decir, el error disminuya.

182 Tópicos y Aplicaciones de la Inteligencia Artificial


La importancia de la red backpropagation consiste en su capacidad de
autoadaptar los pesos de las neuronas de las capas intermedias para aprender
la relación que existe entre un conjunto de patrones dados como ejemplo y sus
salidas correspondientes. Para poder aplicar esa misma relación, después del
entrenamiento, a nuevos vectores de entrada con ruido o incompletas, dando
una salida activa si la nueva entrada es parecida a las presentadas durante el
aprendizaje. Esta característica importante, que se exige a los sistemas de
aprendizaje, es la capacidad de generalización, entendida como la facilidad de
dar salidas satisfactorias a entradas que el sistema no ha visto nunca en su
fase de entrenamiento. La red debe encontrar una representación interna que
le permita generar las salidas deseadas cuando se le dan las entradas de
entrenamiento, y que pueda aplicar, además, a entradas no presentadas
durante la etapa de aprendizaje para clasificarlas según las características que
compartan con los ejemplos de entrenamiento.

4.8.1. LA REGLA DELTA GENERALIZADA

La regla propuesta por Widrow en 1960 (regla delta) ha sido extendida a redes
con capas intermedias (regla delta generalizada) con conexiones hacia
adelante (feedforward) y cuyas células tienen funciones de activación
continuas (lineales o sigmoidales), dando lugar al algoritmo de
retropropagación (backpropagation). Estas funciones continuas son no
decrecientes y derivables. La función sigmoidal pertenece a este tipo de
funciones, a diferencia de la función escalón que se utiliza en el Perceptron, ya
que esta última no es derivable en el punto en el que se encuentra la
discontinuidad.

Este algoritmo utiliza también una función o superficie de error asociada a la


red, buscando el estado estable de mínima energía o de mínimo error a través
del camino descendente de la superficie del error. Por ello, realimenta el error
del sistema para realizar la modificación de los pesos en un valor proporcional
al gradiente decreciente de dicha función de error.

FUNCIONAMIENTO DEL ALGORITMO

El método que sigue la regla delta generalizada para ajustar los pesos es
exactamente el mismo que el de la regla delta utilizada en el Perceptron y,
ADALINE; es decir, los pesos se actualizan de forma proporcional a la delta, o
diferencia entre la salida deseada y la obtenida (∂ = sal. deseada - sal.
obtenida).

Dada una neurona (unidad Ui) y la salida que produce, yi (Figura 4.13), el
cambio que se produce en el peso de la conexión que une la salida de dicha
neurona con la unidad Uj (wji) para un patrón de aprendizaje p determinado es:

∆w ji (t + 1) = α ∂ pj y pi

Mg. Abraham Gamarra Moreno 183


En donde el subíndice p se refiere al patron de aprendizaje concreto, y ∝ es la
constante o tasa de aprendizaje.

Figura 4.13 Conexión entre una neurona de una capa oculta con una neurona de salida.

El punto en el que difieren la regla delta Generalizada de la regla delta es en el


valor concreto de ∂pj. Por otro lado, en las redes multinivel, a diferencia de las
redes sin neuronas ocultas, en principio no se puede conocer la salida
deseada de las neuronas de las capas ocultas para poder determinar los pesos
en función del error cometido. Sin embargo, inicialmente sí podemos conocer
la salida deseada de las neuronas de salida. Según esto, si consideramos la
unidad Uj de salida (Figura 4.13), entonces definimos

∂ pj = (d pj − y pj )⋅ f 1 (net j )
donde dpj es la salida deseada de la neurona j para el patrón p y netj es la
entrada neta que recibe la neurona j.

Esta fórmula es como la de la regla delta, excepto en lo que se refiere a la


derivada de la función de transferencia. Este término representa la
modificación que hay que realizar en la entrada que recibe la neurona j. En el
caso de que dicha neurona no sea de salida, el error que se produce estará en
función del error que se cometa en las neuronas que reciban como entrada la
salida de dicha neurona. Esto es lo que se denomina procedimiento de
propagación del error hacia atrás.

Según esto, en el caso de que Uj no sea una neurona de salida (ver Figura
4.14), el error que se produce está en función del error que se comete en las
neuronas que reciben como entrada la salida de Uj:

184 Tópicos y Aplicaciones de la Inteligencia Artificial


 
∂ pj =  ∑ ∂ pk ⋅ wkj  ⋅ f 1 (net j )
 k 
donde el rango de k cubre todas aquellas neuronas a las que está conectada la
salida de Uj. De esta forma, el error que se produce en una neurona oculta es
la suma de los errores que se producen en las neuronas a las que está
conectada la salida de ésta, multiplicando cada uno de ellos por el peso de la
conexión.

Figura 4.14 Conexiones entre neuronas de la capa oculta con la capa de salida.

ADICIÓN DE UN MOMENTO EN LA REGLA DELTA GENERALIZADA

El método de retropropagación del error, también conocido como del gradiente


descendente, requiere un importante número de cálculos para lograr el ajuste
de los pesos de la red. En la implementación del algoritmo, se toma una
amplitud de paso que viene dada por la tasa de aprendizaje ∝. A mayor tasa
de aprendizaje, mayor es la modificación de los pesos en cada iteración, con lo
que el aprendizaje será más rápido, pero, por otro lado. puede dar lugar a
oscilaciones. Rumelhart, Hinton y Williams sugirieron que para filtrar estas
oscilaciones se añada en la expresión del incremento de los pesos un término
(momento), β, de manera que dicha expresión quede:

Mg. Abraham Gamarra Moreno 185


w ji (t + 1) = w ji (t ) + α ∂ pj y pi + β (w ji (t ) − w ji (t − 1)) =

= ∆w ji (t + 1) = α ∂ pj y pi + β ∆w ji (t )

donde β es una constante (momento) que determínale efecto en t+1 del


cambio de los pesos en el instante t.

Con este momento se consigue la convergencia de la red en menor número de


iteraciones, ya que si en t el incremento de un peso era positivo y en t+l
también, entonces el descenso por la superficie de error en t+l es mayor. Sin
embargo, si en t el incremento era positivo y en t+l es negativo, el paso que se
da en t+1 es más pequeño, lo cual es adecuado, ya que eso significa que se
ha pasado por un mínimo y que los pasos deben ser menores para poder
alcanzarlo.

Resumiendo, el algoritmo backpropagation queda finalmente:

[
w ji (t + 1) = w ji (t ) + ∆w ji (t + 1)]
 
∆w ji (t + 1) = w ji (t ) + α ∂ pj y pi + β ∆w ji (t )
 

donde:

∂ pj = (d pj − y pj ) ⋅ f 1 (net j )
si Uj es una neurona de salida y

 
∂ pj =  ∑ ∂ pk ⋅ wkj  ⋅ f 1 (net j )
 k 
si Uj no es una neurona de salida.

ESTRUCTURA Y APRENDIZAJE DE LA RED BACKPROPAGATION

En una red backpropagation existe una capa de entrada con n neuronas y una
capa de salida con m neuronas y al menos una capa oculta de neuronas
internas. Cada neurona de una capa (excepto las de entrada) recibe entradas
de todas las neuronas de la capa anterior y envía su salida a todas las

186 Tópicos y Aplicaciones de la Inteligencia Artificial


neuronas de la capa posterior (excepto las de salida). No hay conexiones hacia
atrás feedback ni laterales entre neuronas de la misma capa.

La aplicación del algoritmo backpropagation tiene dos fases, una hacia


adelante y otra hacia atrás. Durante la primera fase el patrón de entrada es
presentado a la red y propagado a través de las capas hasta llegar a la capa
de salida. Obtenidos los valores de salida de la red, se inicia la segunda fase,
comparándose estos valores con la salida esperada para obtener el error. Se
ajustan los pesos de la última capa proporcionalmente al error. Se pasa a la
capa anterior con una retropropagación del error (backpropagation), ajustando
convenientemente los pesos y continuando con este proceso hasta llegar a la
primera capa. De esta manera se han modificado los pesos de las conexiones
de la red para cada ejemplo o patrón de aprendizaje del problema, del que
conocíamos su valor de entrada y la salida deseada que debería generar la red
ante dicho patrón (fig. 4.15).

A diferencia de la regla delta en el caso del Perceptron, la técnica


backpropagation o generalización de la regla delta, requiere el uso de
neuronas cuya función de activación sea continua, y por tanto, diferenciable.
Generalmente, la función utilizada será del tipo sigmoidal (Fig. 4.16).

A continuación se presentan, a modo de síntesis. los pasos y fórmulas a utilizar


para aplicar el algoritmo de entrenamiento:

Paso 1

Inicializar los pesos de la red con valores pequeños aleatorios.

Paso 2

Presentar un patrón de entrada, Xp: xp1,.xp2,...,xpn, y especificar la salida


deseada que debe generar la red: d1, d2,..., dM (si la red se utiliza como un
clasificador, todas las salidas deseadas serán cero, salvo una, que será la de
la clase a la que pertenece el patrón de entrada).

Paso 3

Calcular la salida actual de la red, para ello presentamos las entradas a la red
y vamos calculando la salida que presenta capa hasta llegar a la capa de
salida ésta será la salida de la red y1, y2,...,yM. Los pasos son los siguientes:

• Se calculan las entradas netas para las neuronas ocultas procedentes de


las neuronas de entrada.

Para una neurona j oculta:

N
net = ∑ whji
h
pj x pi + θ jh
i =1

Mg. Abraham Gamarra Moreno 187


en donde el índice h se refiere a magnitudes de la capa oculta (hidden); el
subíndice p, al p-ésimo vector de entrenamiento, y j a la j-ésima neurona
oculta. El término θ puede ser opcional, pues actúa como una entrada
más.

Figura 4.15 Modelo de arquitectura de una red backpropagation. Pueden existir neuronas ficticias
de salida y pesos umbral θ de entrada al resto de las neuronas de cada capa.

188 Tópicos y Aplicaciones de la Inteligencia Artificial


Figura 4.16 Función de activación sigmoidal: y=1/1+e-x

• Se calculan las salidas de las neuronas ocultas:

(
y pj = f jh net hpj )
• Se realizan los mismos cálculos para obtener las salidas de las neuronas
de salida (capa o: output)

L
net o
pk = ∑ wkjo ⋅ y pj + θ ko
j =1

(
y pk = f ko net opk )

Paso 4

Calcular los términos de error para todas las neuronas.

Si la neurona k es una neurona de la capa de salida, el valor de la delta es:

Mg. Abraham Gamarra Moreno 189


∂ o
pk = (d pk − y pk )⋅ f k
o1
(net )o
pk

La función f, como se citó anteriormente, debe cumplir el requisito de ser


derivable, lo que implica la imposibilidad de utilizar una función escalón. En
general, disponemos de dos formas de función de salida que nos pueden
servir: la función lineal de salida (fk(netjk) = netjk) y la función sigmoidal
representada en la figura 4.16 y definida por la expresión:

1
f k (net jk ) = − net
1 + e jk

La selección de la función de salida depende de la forma en que se decida


representar los datos de salida: si se desea que las neuronas de salida sean
binarias, se utiliza la función sigmoidal, puesto que esta función es casi
biestable y, además, derivable. En otros casos es tan aplicable una función
como otra.

Para la función lineal, tenemos: f ko = 1 mientras que la derivada de una


función f sigmoidal es:

( )
f ko = f ko 1 − f ko = y pk (1 − y pk )
1

por lo que los términos de error para las neuronas de salida quedan:

∂ opk = (d pk − y pk )
para la salida lineal, y

∂ opk = (d pk − y pk )⋅ y pk (1 − y pk )

para la salida sigmoidal.

Si la neurona j no es de salida, entonces la derivada parcial del error no puede


ser evaluada directamente. Por tanto, se obtiene el desarrollo a partir de
valores que son conocidos y otros que pueden ser evaluados.

La expresión obtenida en este caso es:

190 Tópicos y Aplicaciones de la Inteligencia Artificial


1
(
∂ hpj = f jh net hpj )∑ ∂ o
pk ⋅ wkjo
k
donde observamos que el error en las capas ocultas depende de todos los
términos de error de la capa de salida. De aquí surge el término de
propagación hacia atrás. En particular, para la función sigmoidal:

∂ hpj = y pj (1 − y pj )∑ ∂ opk ⋅ wkjo


k

donde k se refiere a todas las neuronas de la capa superior a la de la neurona


j. Así, el error que se produce en una neurona oculta es proporcional a la suma
de los errores conocidos que se producen en las neuronas a las que está
conectada la salida de ésta, multiplicado cada uno de ellos por el peso de la
conexión. Los umbrales internos de las neuronas se adaptan de forma similar,
considerando que están conectados con pesos desde entradas auxiliares de
valor constante.

Paso 5

Actualización de los pesos

Para ello, utilizamos el algoritmo recursivo, comenzando por las neuronas de


salida y trabajando hacia atrás hasta llegar a la capa de entrada, ajustando los
pesos de la forma siguiente:

Para los pesos de las neuronas de la capa de salida:

wkjo (t + 1) = wkjo (t ) + ∆wkjo (t + 1)

∆wkjo (t + 1) = α ⋅ ∂ opk ⋅ y pj
y para los pesos de las neuronas de la capa oculta:

w hji (t + 1) = w hji (t ) + ∆w hji (t + 1)

∆w hji (t + 1) = α ⋅ ∂ hpj ⋅ x pi

En ambos casos, para acelerar el proceso de aprendizaje, se puede añadir un

término momento de valor: β (wkjo (t ) − wkjo (t − 1))

Mg. Abraham Gamarra Moreno 191


en el caso de la neurona de salida, y

β (whji (t ) − whji (t − 1))


cuando se trata de una neurona oculta.

Paso 6

El proceso se repite hasta que el término de error

M
Ep = 1
2 ∑ pk
∂ 2

k =1
resulta aceptablemente pequeño para cada uno de los patrones aprendidos.

4.9. IMPLEMENTACIÓN DE APLICACIONES CON REDES


NEURONALES
Para la implementación de aplicaciones se utiliza el shell NEUROSHELL y el
Visual Basic .NET.

4.9.1. DETECCIÓN DE OBSTÁCULOS POR MEDIO DE UN ROBOT

Descripción del problema7:

Un robot es un dispositivo automático que realiza acciones específicas, que


dependen de las necesidades del proceso en que se encuentre involucrado, en
este caso se tiene un robot que cuenta con cuatro sensores de proximidad en
distintas ubicaciones que permanentemente detectan si hay objetos que se
encuentren a una distancia superior o inferior a la preestablecida, con base en
esto se decide si dar marcha adelante o atrás a cada uno de los dos motores
que posee; en las lecturas de los sensores podrían darse 16 posibles
combinaciones (16=24) y para cada combinación cada uno de los dos motores
podría dar marcha adelante o marcha atrás (figura 4.17).

El comportamiento del robot lo describe la tabla 4.4, cuando los sensores


detecten un objeto que se encuentra a una distancia inferior a la
predeterminada se dirá que el objeto se encuentra cerca y esto se representa
por medio de un 1 y cuando se detecte un objeto que se encuentra a una
distancia mayor que la predeterminada se dirá que el objeto esta lejos lo cual
se indica con un –1; dependiendo de estas lecturas los motores podrán dar

7
Universidad Tecnológica de Pereira. Colombia.

192 Tópicos y Aplicaciones de la Inteligencia Artificial


marcha adelante, lo que se representará por un 1 o dar marcha atrás con un –
1.

Figura 4.17 Robot

Tabla 4.4 Comportamiento del robot

S1 S2 S3 S4 M1 M2

1 1 1 1 -1 -1

-1 1 1 1 -1 1

1 1 -1 -1 1 -1

-1 -1 -1 -1 1 1

1 -1 1 1 1 -1

1 1 -1 1 -1 1

1 1 1 -1 1 -1

Justificación del tipo de red

Este tipo de problema generalmente es resuelto suministrándole al robot una


base de datos que contiene todas las posibles situaciones que se podrían
presentarse y sus respectivas soluciones, en este caso se necesitaría
almacenar las respuestas para ambos motores ante las 16 posibles
combinaciones en las lecturas de los sensores, cuando el número de variables
de entrada y el número de salidas es mucho mayor, la cantidad de datos
necesarios para especificar cada posible situación crece indefinidamente,
debido a esto se requerirían dispositivos con gran capacidad de

Mg. Abraham Gamarra Moreno 193


almacenamiento; en contraste una red neuronal puede entrenarse con un
número representativo de patrones y aprender el comportamiento del sistema
utilizando dispositivos de menos capacidad de almacenamiento y costo.

IMPLEMENTACION EN NEUROSHELL

El ingreso al programa al NEUROSHELL se muestra en la figura 4.18.

Figura 4.18 Ingreso al Neuroshell

Luego del ingreso elija FILE, NEW e ingrese un nombre de archivo, como en la
figura 4.19 (no escriba ninguna extensión para el archivo).

Figura 4.19.

Elija Beginner´s Neural Networks, realice click en el icono (figura 4.20).

194 Tópicos y Aplicaciones de la Inteligencia Artificial


Figura 4.20

Seleccione Data Entry (figura 4.21) e ingrese los datos de la tabla 4.4, para
entrenar la red neuronal (figura 4.22). Se sugiere para el entrenamiento
duplicar estos datos dos veces salvo el titulo de cada columna.

Figura 4.21

Mg. Abraham Gamarra Moreno 195


Figura 4.22

Luego de ingresar los datos cierre la ventana después de haber grabado estos
con File, Save File.

Ahora elija el icono en la figura 4.21, en la lista desplegable variable


type selection elija input y haga clic debajo del nombre de cada entrada, este
quedará marcado con I, luego elija Actual Output en la lista desplegable
anterior y haga clic en el nombre de cada salida para la red neuronal. Ahora
elija Settings y Compute mins/maxs. Cierre la ventana.

Las figuras 4.23 al 4.29 muestran el procedimiento a seguir hasta generar el


código fuente en C o Visual Basic.

En la figura 4.26 elija examinar datos para analizar los datos y los errores
generados a la salida.

El procedimiento de la figura 4.27 al 4.29 permite generar el código fuente en


C. Para nuestro caso elegiremos Visual Basic source code.

196 Tópicos y Aplicaciones de la Inteligencia Artificial


Figura 4.23

Figura 4.24

Mg. Abraham Gamarra Moreno 197


Figura 4.25

Figura 4.26

198 Tópicos y Aplicaciones de la Inteligencia Artificial


Figura 4.27

Figura 4.28

Mg. Abraham Gamarra Moreno 199


Figura 4.29

El codigo generado en Visual Basic se genera en un archivo que tiene la


extensión .VB y es un procedimiento en Visual Basic; que contiene el
conocimiento en una red neuronal. Para nuestro caso el archivo es ROBOT.VB
y se encuentra en la carpeta APLICACIÓN ROBOT del CD que acompaña al
libro, cuyo contenido es:

' Insert this code into your VB program to fire the


D:\ABRAHAM\FILES2~2\EPG\MAESTA~1\IA\ROBOT network
' This code is designed to be simple and fast for porting to any machine.
' Therefore all code and weights are inline without looping or data storage
' which might be harder to port between compilers.
Sub Fire_ROBOT (inarray(), outarray())

Dim netsum as double


Static feature2(3) as double

' inarray(1) is S1
' inarray(2) is S2
' inarray(3) is S3
' inarray(4) is S4
' outarray(1) is M1
' outarray(2) is M2

if (inarray(1)<-1) then inarray(1) = -1


if (inarray(1)> 1) then inarray(1) = 1
inarray(1) = (inarray(1) + 1) / 2

200 Tópicos y Aplicaciones de la Inteligencia Artificial


if (inarray(2)<-1) then inarray(2) = -1
if (inarray(2)> 1) then inarray(2) = 1
inarray(2) = (inarray(2) + 1) / 2

if (inarray(3)<-1) then inarray(3) = -1


if (inarray(3)> 1) then inarray(3) = 1
inarray(3) = (inarray(3) + 1) / 2

if (inarray(4)<-1) then inarray(4) = -1


if (inarray(4)> 1) then inarray(4) = 1
inarray(4) = (inarray(4) + 1) / 2

netsum = -.7532668
netsum = netsum + inarray(1) * 7.551737
netsum = netsum + inarray(2) * .2998328
netsum = netsum + inarray(3) * 7.341322
netsum = netsum + inarray(4) * -6.852577
feature2(1) = 1 / (1 + exp(-netsum))

netsum = -2.495483
netsum = netsum + inarray(1) * -5.648689
netsum = netsum + inarray(2) * 1.05053
netsum = netsum + inarray(3) * -5.979871
netsum = netsum + inarray(4) * 6.870361
feature2(2) = 1 / (1 + exp(-netsum))

netsum = -4.198974E-02
netsum = netsum + inarray(1) * 4.999131
netsum = netsum + inarray(2) * -3.897346
netsum = netsum + inarray(3) * 2.603323E-05
netsum = netsum + inarray(4) * -3.897321
feature2(3) = 1 / (1 + exp(-netsum))

netsum = .1287855
netsum = netsum + feature2(1) * -2.675452
netsum = netsum + feature2(2) * -2.65109
netsum = netsum + feature2(3) * 6.387748
outarray(1) = 1 / (1 + exp(-netsum))

netsum = 3.821959
netsum = netsum + feature2(1) * -6.030695
netsum = netsum + feature2(2) * 3.957484
netsum = netsum + feature2(3) * 8.61486E-03
outarray(2) = 1 / (1 + exp(-netsum))

outarray(1) = 2 * (outarray(1) - .1) / .8 + -1


if (outarray(1)<-1) then outarray(1) = -1
if (outarray(1)> 1) then outarray(1) = 1

outarray(2) = 2 * (outarray(2) - .1) / .8 + -1


if (outarray(2)<-1) then outarray(2) = -1
if (outarray(2)> 1) then outarray(2) = 1

End Sub

Mg. Abraham Gamarra Moreno 201


Ahora debemos generar una aplicación en Visual Basic 6.0, que nos permita
utilizar el código que contiene a la red neuronal.

Iniciamos creando un formulario que permita manipular las entradas y salidas


que tiene la red neuronal (figura 4.30).

Figura 4.30. Formulario en Visual Basic que manipula las entradas y salidas de la red neuronal.

Luego modificamos el código por defecto que tiene el formulario. El código


modificado debe quedar tal como se muestra en el listado siguiente:

Private Sub Command1_Click()


Dim e(4) As Double
Dim s(2) As Double
' Asignacion de entradas
e(1) = Val(Text1.Text)
e(2) = Val(Text2.Text)
e(3) = Val(Text3.Text)
e(4) = Val(Text4.Text)

' llamada a la red neuronal


Call Fire_ROBOT(e, s)

' mostrar salida

If (s(1) >= 0.9 And s(1) <= 1) Then


Text5.Text = " motor gira hacia adelante"
End If
If (s(1) >= -1 And s(1) <= -0.9) Then
Text5.Text = " motor gira hacia atrás"
End If

If (s(2) >= 0.9 And s(2) <= 1) Then


Text6.Text = " motor gira hacia adelante"
End If

202 Tópicos y Aplicaciones de la Inteligencia Artificial


If (s(2) >= -1 And s(2) <= -0.9) Then
Text6.Text = " motor gira hacia atrás"
End If
End Sub

' Insert this code into your VB program to fire the


D:\ABRAHAM\FILES2~2\EPG\MAESTA~1\IA\ROBOT network
' This code is designed to be simple and fast for porting to any machine.
' Therefore all code and weights are inline without looping or data storage
' which might be harder to port between compilers.
Sub Fire_ROBOT(inarray() As Double, outarray() As Double)

Dim netsum As Double


Static feature2(3) As Double

' inarray(1) is S1
' inarray(2) is S2
' inarray(3) is S3
' inarray(4) is S4
' outarray(1) is M1
' outarray(2) is M2

If (inarray(1) < -1) Then inarray(1) = -1


If (inarray(1) > 1) Then inarray(1) = 1
inarray(1) = (inarray(1) + 1) / 2

If (inarray(2) < -1) Then inarray(2) = -1


If (inarray(2) > 1) Then inarray(2) = 1
inarray(2) = (inarray(2) + 1) / 2

If (inarray(3) < -1) Then inarray(3) = -1


If (inarray(3) > 1) Then inarray(3) = 1
inarray(3) = (inarray(3) + 1) / 2

If (inarray(4) < -1) Then inarray(4) = -1


If (inarray(4) > 1) Then inarray(4) = 1
inarray(4) = (inarray(4) + 1) / 2

netsum = -0.7532668
netsum = netsum + inarray(1) * 7.551737
netsum = netsum + inarray(2) * 0.2998328
netsum = netsum + inarray(3) * 7.341322
netsum = netsum + inarray(4) * -6.852577
feature2(1) = 1 / (1 + Exp(-netsum))

netsum = -2.495483
netsum = netsum + inarray(1) * -5.648689
netsum = netsum + inarray(2) * 1.05053
netsum = netsum + inarray(3) * -5.979871
netsum = netsum + inarray(4) * 6.870361
feature2(2) = 1 / (1 + Exp(-netsum))

netsum = -0.04198974
netsum = netsum + inarray(1) * 4.999131
netsum = netsum + inarray(2) * -3.897346
netsum = netsum + inarray(3) * 0.00002603323
netsum = netsum + inarray(4) * -3.897321
feature2(3) = 1 / (1 + Exp(-netsum))

netsum = 0.1287855

Mg. Abraham Gamarra Moreno 203


netsum = netsum + feature2(1) * -2.675452
netsum = netsum + feature2(2) * -2.65109
netsum = netsum + feature2(3) * 6.387748
outarray(1) = 1 / (1 + Exp(-netsum))

netsum = 3.821959
netsum = netsum + feature2(1) * -6.030695
netsum = netsum + feature2(2) * 3.957484
netsum = netsum + feature2(3) * 0.00861486
outarray(2) = 1 / (1 + Exp(-netsum))

outarray(1) = 2 * (outarray(1) - 0.1) / 0.8 + -1


If (outarray(1) < -1) Then outarray(1) = -1
If (outarray(1) > 1) Then outarray(1) = 1

outarray(2) = 2 * (outarray(2) - 0.1) / 0.8 + -1


If (outarray(2) < -1) Then outarray(2) = -1
If (outarray(2) > 1) Then outarray(2) = 1

End Sub
Private Sub Command2_Click()
End
End Sub

Notese que también se ha agregado el código generado por el Neuroshell


(contenido del archivo ROBOT.VB)

Una vez modificado el código ejecutamos el programa e ingresamos las


entradas de la red neuronal y al presionar el boton “Determinar la accion de los
motores del robot con una red neuronal” se debe obtener la salida que ofrece
la red neuronal. Para nuestro caso se ha realizado la ejecución con las
entradas del último patrón de entrenamiento de la tabla 4.4, esta ejecución se
muestra en la figura 4.31.

Figura 4.31. Ejecución del programa que utiliza la red neuronal.

204 Tópicos y Aplicaciones de la Inteligencia Artificial


Cabe mencionar que las salidas de la red neuronal son cercanas o iguales a 1
ó -1 y se debe aproximar estas salidas a estos valores. Esta aproximación se
realiza a través del siguiente código:

If (s(1) >= 0.9 And s(1) <= 1) Then


Text5.Text = " motor gira hacia adelante"
End If
If (s(1) >= -1 And s(1) <= -0.9) Then
Text5.Text = " motor gira hacia atrás"
End If

If (s(2) >= 0.9 And s(2) <= 1) Then


Text6.Text = " motor gira hacia adelante"
End If
If (s(2) >= -1 And s(2) <= -0.9) Then
Text6.Text = " motor gira hacia atrás"
End If

4.9.2. APLICACIÓN PARA SÍNTOMAS Y DIAGNÓSTICOS DE


AUTOMÓVILES

Consideremos un ejemplo concreto de aplicación de síntomas y diagnósticos.


Emplearemos Como base para nuestro ejemplo una aplicación de diagnóstico
para automóviles. Concretamente, nos concentraremos en una aplicación que
diagnostique por qué no arranca un coche. Primero se definen los distintos
síntomas que hay que considerar:

• No hace nada: no pasa nada cuando se hace girar la llave del contacto.

• Hace clic: cuando se da vuelta a la llave, se oyen fuertes chasquidos.

• Molinillo: cuando se da vuelta a la llave se oye un ruido parecido al de un


molinillo.

• Arranque: el motor gira como si intentase arrancar, pero no es capaz de


funcionar por sí mismo.

• Sin chispa: al sacar el cable de una bujía y acercarlo al bloque cuando se


intenta arrancar, en el motor no saltan chispas.

• Cable caliente: después de intentar arrancar el motor, el cable que va de la


batería a la bobina del motor de arranque está caliente.

• Sin gasolina: al sacar el tubo de gasolina del carburador (o inyector) e


intentar arrancar el motor, no sale gasolina por el tubo.

A continuación, se consideran las posibles causas del problema, basándose en


los síntomas:

• Batería: la batería está descargada


Mg. Abraham Gamarra Moreno 205
• Bobina del motor de arranque: falla la bobina del motor de arranque.

• Motor de arranque: falla el motor de arranque.

• Cables: fallan los cables del encendido.

• Distribuidor: el rotor o la tapa del distribuidor están corroídos.

• Bomba de gasolina: falla la bomba de gasolina.

Aunque nuestra lista no es una representación Completa de todos los posibles


problemas, los síntomas podrían indicar alguno de estos problemas, o una
combinación de ellos. Para completar el ejemplo vamos a construir una matriz
que indica la correspondencia de los síntomas con sus causas probables. La
matriz se ha ilustrado en la Tabla 4.5.

Al inspeccionar la matriz se aprecia la variedad de problemas que puede


indicar cualquier síntoma. La matriz también ilustra el problema que
encontramos cuando se intenta programar un sistema para llevar a cabo la
función de diagnóstico. Es raro que haya una correspondencia biunívoca entre
síntomas y causas. Para tener éxito, nuestro sistema automatizado debe ser
capaz de correlacionar muchos síntomas distintos, y, en el caso de que alguno
de los síntomas no se aprecie o esté ausente, debe ser capaz de "llenar los
espacios en blanco" del problema basándose solamente en los síntomas
indicados.

Tabla 4.5. Para el problema de diagnósticos del automóvil, se hacen corresponder los síntomas con
las causas.

Causas probables
Síntomas Batería Bobina Motor de Cables Distribuidor Bomba de
arranque gasolina
No hace nada X
Clics X X X
Molinillo X X X X
Gira X X X
Sin chispa X X
Cable caliente X X
Sin gasolina X

La solución

Empleando los datos de nuestro ejemplo, será necesaria una red con siete
unidades de entrada y seis unidades de salida. Esto deja únicamente sin
determinar el número de unidades internas (ocultas). En este caso, no hay
nada que indique cuántas unidades ocultas se van a necesitar para resolver el
problema, y no hay consideraciones de interfaz externa que vayan a limitar el
número de unidades ocultas.

206 Tópicos y Aplicaciones de la Inteligencia Artificial


Una ecuación empírica según Sierra8, para calcular el número de neuronas de
una capa oculta es:

M 2*M
<n<
2* N N
donde:

M: Es el número de ejemplos con que vamos a entrenar a la red.

N: Es el número de unidades de entradas.

n: Es el número de neuronas que vamos a situar en capas intermedias

El shell Neuroshell calcula la cantidad de neuronas ocultas para la red


neuronal que se esta implementando.

A continuación, debemos definir los conjuntos de datos que serán utilizados


para entrenar a la red. Volviendo de nuevo a la matriz de nuestro ejemplo, se
pueden considerar los datos de los vectores fila de la matriz como tramas de
entrada de siete dimensiones; esto es, para cada salida de causa probable que
desearíamos que aprendiera la red, hay siete síntomas posibles que indican el
problema por su presencia o ausencia. Esta aproximación proporcionará siete
pares de vectores de entrenamiento, cada uno de los cuales consta de una
trama de síntomas de siete elementos y de una trama de indicación de
problema formada por seis elementos.

Haremos que la existencia de un síntoma quede indicada por un 1, y que la


ausencia de un síntoma sea representada mediante un 0. Para cualquier
vector de entrada dado, la causa o causas correctas se indican mediante un 1
lógico en la posición correspondiente del vector de salida. Los pares de
vectores de entrenamiento que se producen por la correspondencia de la
matriz de síntomas y problemas para este ejemplo se muestran en la tabla 4.6.
Si se comparan las tablas 4.5 y la tabla 4.6., se notarán pequeñas diferencias.

Lo único que queda ahora es entrenar a la red con estos pares de datos. Una
vez que está entrenada, la red producirá una salida que identifique a la causa
probable indicada por el mapa de síntomas de entrada. La red hará esto
cuando la entrada sea equivalente a una de las entradas de entrenamiento, tal
como se esperaba, y además producirá una salida, indicando la causa
probable del problema, cuando la entrada sea parecida a alguna de las
entradas de entrenamiento, pero distinta de todas ellas. Esta aplicación ilustra
la capacidad de la red para realizar la "mejor suposición" (generalización) y
pone de manifiesto la capacidad de la red para enfrentarse a entradas de datos
con ruido o incompletas.

8
1. Sierra Molina, Guillermo y otros (1995). “Sistemas Expertos en Contabilidad y
Administración de Empresas”. Editorial Addison Wesley. USA.

Mg. Abraham Gamarra Moreno 207


Tabla 4.6. Estos pares de vectores de entrenamiento se utilizan para el problema de diagnósticos
del automóvil.
Entrada de síntomas Salida de causas probables

Bomba de gasolina
Motor de arranque
Cable caliente
No hace nada

Sin gasolina

Distribuidor
Sin chispa
Molinillo

Batería

Bobina

Cables
Clics

Gira
1 0 0 0 0 0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 1 1 1 0 0 0
0 0 1 0 0 0 0 0 0 1 1 1 1
0 0 0 1 0 0 0 0 0 0 1 1 1
0 0 0 0 1 0 0 0 0 0 1 1 0
0 0 0 0 0 1 0 0 1 1 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 1

Se puede utilizar el Neuroshell, para entrenar a la red neuronal con los datos
de la tabla 4.6 y se debe obtener también el codigo fuente en Visual Basic. La
implementacion se encuentra en el CD que se adjunta al libro.

El formulario y la ejecución del programa en Visual Basic 6.0, teniendo en


cuenta el 4to patron de entrenamiento se muestra en la figura 4.32.

Figura 4.32. Ejecución del programa en Visual Basic 6.0, teniendo en cuenta el 4 patron de
entrenamiento de la tabla 4.6.

El codigo del formulario debe ser modificado de la siguiente manera:

208 Tópicos y Aplicaciones de la Inteligencia Artificial


Private Sub Command1_Click()
Dim e(7) As Double
Dim s(6) As Double

e(1) = Val(Text1.Text)
e(2) = Val(Text2.Text)
e(3) = Val(Text3.Text)
e(4) = Val(Text4.Text)
e(5) = Val(Text5.Text)
e(6) = Val(Text6.Text)
e(7) = Val(Text7.Text)

Call Fire_DIAGNOST(e, s)

If (s(1) > 0.9 And s(1) <= 1) Then


Text8.Text = "mal"
End If
If (s(1) >= 0 And s(1) < 0.1) Then
Text8.Text = "bien"
End If

If (s(2) > 0.9 And s(2) <= 1) Then


Text9.Text = "mal"
End If
If (s(2) >= 0 And s(2) < 0.1) Then
Text9.Text = "bien"
End If

If (s(3) > 0.9 And s(3) <= 1) Then


Text10.Text = "mal"
End If
If (s(3) >= 0 And s(3) < 0.1) Then
Text10.Text = "bien"
End If

If (s(4) > 0.9 And s(4) <= 1) Then


Text11.Text = "mal"
End If
If (s(4) >= 0 And s(4) < 0.1) Then
Text11.Text = "bien"
End If

If (s(5) > 0.9 And s(5) <= 1) Then


Text12.Text = "mal"
End If
If (s(5) >= 0 And s(5) < 0.1) Then
Text12.Text = "bien"
End If

If (s(6) > 0.9 And s(6) <= 1) Then


Text13.Text = "mal"
End If
If (s(6) >= 0 And s(6) < 0.1) Then
Text13.Text = "bien"
End If
End Sub

Mg. Abraham Gamarra Moreno 209


' Insert this code into your VB program to fire the
F:\FILES2~1\ANNOSA~1\ARCHIV~2\CAPITU~3\DIAGNO~1\DIAGNOST network
' This code is designed to be simple and fast for porting to any machine.
' Therefore all code and weights are inline without looping or data storage
' which might be harder to port between compilers.
Sub Fire_DIAGNOST(inarray() As Double, outarray() As Double)

Dim netsum As Double


Static feature2(9) As Double

' inarray(1) is No_hace_Nada


' inarray(2) is Hace_Clics
' inarray(3) is Molinillo
' inarray(4) is Gira
' inarray(5) is Sin_chispa
' inarray(6) is Cable_caliente
' inarray(7) is Sin_gasolina
' outarray(1) is Batería
' outarray(2) is Bobina
' outarray(3) is Motor_de_arranque
' outarray(4) is Cables
' outarray(5) is Distribuidor
' outarray(6) is Bomba_de_gasolina

If (inarray(1) < 0) Then inarray(1) = 0


If (inarray(1) > 1) Then inarray(1) = 1
inarray(1) = inarray(1)

If (inarray(2) < 0) Then inarray(2) = 0


If (inarray(2) > 1) Then inarray(2) = 1
inarray(2) = inarray(2)

If (inarray(3) < 0) Then inarray(3) = 0


If (inarray(3) > 1) Then inarray(3) = 1
inarray(3) = inarray(3)

If (inarray(4) < 0) Then inarray(4) = 0


If (inarray(4) > 1) Then inarray(4) = 1
inarray(4) = inarray(4)

If (inarray(5) < 0) Then inarray(5) = 0


If (inarray(5) > 1) Then inarray(5) = 1
inarray(5) = inarray(5)

If (inarray(6) < 0) Then inarray(6) = 0


If (inarray(6) > 1) Then inarray(6) = 1
inarray(6) = inarray(6)

If (inarray(7) < 0) Then inarray(7) = 0


If (inarray(7) > 1) Then inarray(7) = 1
inarray(7) = inarray(7)

netsum = -0.3115481
netsum = netsum + inarray(1) * 0.7032344
netsum = netsum + inarray(2) * 0.1466639
netsum = netsum + inarray(3) * 2.036957
netsum = netsum + inarray(4) * -0.4733835
netsum = netsum + inarray(5) * -0.4653012
netsum = netsum + inarray(6) * -1.454124
netsum = netsum + inarray(7) * -0.7716009

210 Tópicos y Aplicaciones de la Inteligencia Artificial


feature2(1) = 1 / (1 + Exp(-netsum))

netsum = -0.007483043
netsum = netsum + inarray(1) * -0.7950581
netsum = netsum + inarray(2) * -1.6701
netsum = netsum + inarray(3) * 1.082342
netsum = netsum + inarray(4) * 0.8707346
netsum = netsum + inarray(5) * -0.3615806
netsum = netsum + inarray(6) * -0.6289499
netsum = netsum + inarray(7) * 0.9206671
feature2(2) = 1 / (1 + Exp(-netsum))

netsum = 0.3411922
netsum = netsum + inarray(1) * 1.407685
netsum = netsum + inarray(2) * 1.998027
netsum = netsum + inarray(3) * -1.747856
netsum = netsum + inarray(4) * -1.269704
netsum = netsum + inarray(5) * -2.329731
netsum = netsum + inarray(6) * 1.356552
netsum = netsum + inarray(7) * 1.647663
feature2(3) = 1 / (1 + Exp(-netsum))

netsum = -0.2768248
netsum = netsum + inarray(1) * 2.065744
netsum = netsum + inarray(2) * -1.146601
netsum = netsum + inarray(3) * -0.9325874
netsum = netsum + inarray(4) * -1.517177
netsum = netsum + inarray(5) * 0.2812504
netsum = netsum + inarray(6) * -0.6556798
netsum = netsum + inarray(7) * 1.173773
feature2(4) = 1 / (1 + Exp(-netsum))

netsum = -0.1239126
netsum = netsum + inarray(1) * -1.830723
netsum = netsum + inarray(2) * 0.8275196
netsum = netsum + inarray(3) * 0.2012251
netsum = netsum + inarray(4) * -0.7351373
netsum = netsum + inarray(5) * 0.5414248
netsum = netsum + inarray(6) * 2.384689
netsum = netsum + inarray(7) * -1.566727
feature2(5) = 1 / (1 + Exp(-netsum))

netsum = 0.0145554
netsum = netsum + inarray(1) * -0.4000922
netsum = netsum + inarray(2) * -1.257582
netsum = netsum + inarray(3) * 0.8750437
netsum = netsum + inarray(4) * 1.78116
netsum = netsum + inarray(5) * 1.741183
netsum = netsum + inarray(6) * -2.168171
netsum = netsum + inarray(7) * -0.9200088
feature2(6) = 1 / (1 + Exp(-netsum))

netsum = 0.3624522
netsum = netsum + inarray(1) * -1.666589
netsum = netsum + inarray(2) * -2.92119
netsum = netsum + inarray(3) * 1.415627
netsum = netsum + inarray(4) * 0.1193302
netsum = netsum + inarray(5) * 0.3643235
netsum = netsum + inarray(6) * 1.332756
netsum = netsum + inarray(7) * 1.651392

Mg. Abraham Gamarra Moreno 211


feature2(7) = 1 / (1 + Exp(-netsum))

netsum = -0.08557819
netsum = netsum + inarray(1) * 0.3886256
netsum = netsum + inarray(2) * -2.094244
netsum = netsum + inarray(3) * -1.564476
netsum = netsum + inarray(4) * 1.770092
netsum = netsum + inarray(5) * 0.9950833
netsum = netsum + inarray(6) * -1.562377
netsum = netsum + inarray(7) * 1.671334
feature2(8) = 1 / (1 + Exp(-netsum))

netsum = -0.2997127
netsum = netsum + inarray(1) * 1.399435
netsum = netsum + inarray(2) * -0.1395936
netsum = netsum + inarray(3) * -1.913407
netsum = netsum + inarray(4) * -0.9458458
netsum = netsum + inarray(5) * 2.404087
netsum = netsum + inarray(6) * 0.6442617
netsum = netsum + inarray(7) * -1.377198
feature2(9) = 1 / (1 + Exp(-netsum))

netsum = 0.8538765
netsum = netsum + feature2(1) * 1.642975
netsum = netsum + feature2(2) * -1.08525
netsum = netsum + feature2(3) * 1.692052
netsum = netsum + feature2(4) * 0.5226364
netsum = netsum + feature2(5) * -1.016138
netsum = netsum + feature2(6) * 0.3381723
netsum = netsum + feature2(7) * -4.312466
netsum = netsum + feature2(8) * -0.8845294
netsum = netsum + feature2(9) * 0.3042739
outarray(1) = 1 / (1 + Exp(-netsum))

netsum = 0.6356097
netsum = netsum + feature2(1) * -1.699543
netsum = netsum + feature2(2) * -0.8347372
netsum = netsum + feature2(3) * 1.740408
netsum = netsum + feature2(4) * -2.244962
netsum = netsum + feature2(5) * 2.778615
netsum = netsum + feature2(6) * -1.380548
netsum = netsum + feature2(7) * -1.0302
netsum = netsum + feature2(8) * -1.023457
netsum = netsum + feature2(9) * -0.1288214
outarray(2) = 1 / (1 + Exp(-netsum))

netsum = 0.8881556
netsum = netsum + feature2(1) * 1.621511
netsum = netsum + feature2(2) * -0.03661929
netsum = netsum + feature2(3) * 0.1688382
netsum = netsum + feature2(4) * -1.013181
netsum = netsum + feature2(5) * 2.699184
netsum = netsum + feature2(6) * -1.219513
netsum = netsum + feature2(7) * 0.4337809
netsum = netsum + feature2(8) * -3.760823
netsum = netsum + feature2(9) * -1.450161
outarray(3) = 1 / (1 + Exp(-netsum))

netsum = -0.1752312
netsum = netsum + feature2(1) * 0.7248147

212 Tópicos y Aplicaciones de la Inteligencia Artificial


netsum = netsum + feature2(2) * 0.4916552
netsum = netsum + feature2(3) * -3.363693
netsum = netsum + feature2(4) * -1.489237
netsum = netsum + feature2(5) * 0.3150889
netsum = netsum + feature2(6) * 2.669589
netsum = netsum + feature2(7) * 0.2992842
netsum = netsum + feature2(8) * 0.4325282
netsum = netsum + feature2(9) * 0.1342072
outarray(4) = 1 / (1 + Exp(-netsum))

netsum = -0.2363798
netsum = netsum + feature2(1) * 0.8358494
netsum = netsum + feature2(2) * 0.6256061
netsum = netsum + feature2(3) * -3.400938
netsum = netsum + feature2(4) * -1.574203
netsum = netsum + feature2(5) * 0.3605849
netsum = netsum + feature2(6) * 2.502021
netsum = netsum + feature2(7) * 0.2546888
netsum = netsum + feature2(8) * 0.5457298
netsum = netsum + feature2(9) * 0.2242781
outarray(5) = 1 / (1 + Exp(-netsum))

netsum = -0.1454982
netsum = netsum + feature2(1) * 0.7328083
netsum = netsum + feature2(2) * 1.886714
netsum = netsum + feature2(3) * 0.05207601
netsum = netsum + feature2(4) * -1.110788
netsum = netsum + feature2(5) * -1.82287
netsum = netsum + feature2(6) * 0.5481207
netsum = netsum + feature2(7) * 1.574738
netsum = netsum + feature2(8) * 1.149344
netsum = netsum + feature2(9) * -4.210217
outarray(6) = 1 / (1 + Exp(-netsum))

outarray(1) = (outarray(1) - 0.1) / 0.8


If (outarray(1) < 0) Then outarray(1) = 0
If (outarray(1) > 1) Then outarray(1) = 1

outarray(2) = (outarray(2) - 0.1) / 0.8


If (outarray(2) < 0) Then outarray(2) = 0
If (outarray(2) > 1) Then outarray(2) = 1

outarray(3) = (outarray(3) - 0.1) / 0.8


If (outarray(3) < 0) Then outarray(3) = 0
If (outarray(3) > 1) Then outarray(3) = 1

outarray(4) = (outarray(4) - 0.1) / 0.8


If (outarray(4) < 0) Then outarray(4) = 0
If (outarray(4) > 1) Then outarray(4) = 1

outarray(5) = (outarray(5) - 0.1) / 0.8


If (outarray(5) < 0) Then outarray(5) = 0
If (outarray(5) > 1) Then outarray(5) = 1

outarray(6) = (outarray(6) - 0.1) / 0.8


If (outarray(6) < 0) Then outarray(6) = 0
If (outarray(6) > 1) Then outarray(6) = 1

End Sub

Mg. Abraham Gamarra Moreno 213


4.9.3. CONCESIÓN DE AYUDAS POR ESTUDIOS

El problema consiste en determinar cuál es el tipo de ayuda, que se puede


conceder por estudios a un trabajador en una empresa, en base a concesiones
otorgadas en otros casos.

Para la concesión se toman los siguientes atributos:

• salario del trabajador,

• tipo de estudios a realizar, y

• antigüedad en la empresa.

La empresa cuenta con la información de la tabla 4.7 referida a ayudas


concedidas en ejercicios anteriores.

Tabla 4.7. Ayudas concedidas con ejercicios anteriores

214 Tópicos y Aplicaciones de la Inteligencia Artificial


Tabla 4.7. Ayudas concedidas con ejercicios anteriores (continuación)

Tabla 4.7. Ayudas concedidas con ejercicios anteriores (continuación)

Mg. Abraham Gamarra Moreno 215


Se puede utilizar el Neuroshell, para entrenar a la red neuronal con los datos
de la tabla 4.7 y se debe obtener también el codigo fuente en Visual Basic. La
implementacion se encuentra en el CD que se adjunta al libro.

El formulario y la ejecución del programa en Visual Basic 6.0, teniendo en


cuenta el 16 avo patrón de entrenamiento se muestra en la figura 4.33.

Figura 4.33. Ejecución del programa en Visual Basic 6.0, teniendo en cuenta el 16 avo patrón de
entrenamiento de la tabla 4.7.

4.9.4. IMPLEMENTACIÓN DE OTRAS APLICACIONES CON REDES


NEURONALES ARTIFICIALES

En el CD se encuentra la implementación
del reconocimiento de los caracteres A y
B, utilizando Neuroshell y Visual Basic
.NET.

Además se implementa el ejemplo de la


identificación de animales de la tabla
4.2.

216 Tópicos y Aplicaciones de la Inteligencia Artificial

También podría gustarte