You are on page 1of 55

..

Proyecto de Ingeniera electrnica


Redes neuronales de entrada binaria
Juan Carlos Garcia Vzquez
Gustavo Alejandro Luna Alciintar

Asesora: Profra. Mariko Alakano


kJ

.) '1

Iztapalapa, Mxico D.F.; Diciembre 7, 1995

Redes neuronales de entrada binaria

INTRODUCCI~N
.....................................................................................................................................
CLASIFICADORES TRADICIONALES Y DE REDES NEURONALES

.............................................

3
5

ELCLASIFICADOR
TRADICIONAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
.................................................................................

DEFINICIN DE RED NEURONAL ......................................................................................................

CLASIFICADORES ADAPTATIVOS DE REDES NEURON


ES..

ELELEMENTO
DE PROCESAMIESTO

GENERAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

LA RED DE HOPFIELD ........................................................................................................................

14

INTRODUCCI~N
..........................................................................................................................................
DESCRIPCI~N
DE LARED DEHOPFIELD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ALGORITMO
DE LA RED DEHOPFIELD
..........................................................................................................
LIMITACIONES DE LARED DEHOPFIELD
.......................................................................................................

14

LA RED DE HAMMING .......................................................................................................................

20

15
18
19

INTRODUCCI~N
.......................................................................................................................................... 20
DESCRIPCI~N
DE LA RED DEH ~ ~ I I . .N
. . . .G
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
ALGORITMO
DE LA RED DEHAMMING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
LIMITACIONES
Y VENTAJAS DE LARED DEHAhlMING.................................................................................... 24
EL CLASIFICADOR DE CARPENTER-GROSSBERG ......................................................................

25

INTRODUCCI~N
.........................................................................................................................................
2~
DESCRIPCI~N
DE LA RED DE ChRPEN'rEK-GKOSSBI~R
................................................................................... 26
ALGORITMO
DE LA RED DE CARPENTEK-GROSSUEIlG.................................................................................... 28
LIMITACIONES
Y VENTAJAS DE LARED DE CARPENTER-GROSBERG ............................................................... 30

IMPLEMENTACION .............................................................................................................................

31

PR0GRAMAPARALASIMULACIi)N DE LARED DE HOPFIELD


...........................................................................
PROGRAMAPARASIMULAR LA RED DECARPENTER-GROSSBERG
...................................................................

31
38

BIBLIOGRAFIA ..................................................................................................................................... 53

Redes neuronales de entrada binaria

Introduccin
El desarrollo de las redes neuronales artificiales comenz
aproximadamente hace 50 aos, motivado por por un deseo de tratar
de comprender ambos, el cerebro y para simular algunas de sus
capacidades.
Las redes neuronales son bsicamente modelos matemticos
de procesamiento de informacin. La.s redes proporcionan un mtodo
de representar relaciones que son bastante diferentes de las
maquinas de programa almacenado. Como con otros mtodos
numricos, la disponibilidad de recursos de computadora, sea
hardware o software, mejora en mucho la utilidad del enfoque,
especialmente para problemas grandes.
Hay muchas tareas que son adecuadas para resolverse en las
computadoras convencionales, corno por ejemplo : solucin de
problemas cientficos y matemticos, creacin, manipulacin y
mantenimiento de bases de datos, comunicacin electrnica y
procesamiento de palabras entre otras.
En contraste hay muchas aplicaciones que desearan
automatizarse debido a la complejidad asociada con programar una
computadora para realizar tareas. Hay una amplia variedad de
problemas que pueden resolverse, pero su solucin es difcil
empleando sistemas secuenciales; esta distincin es importante. Si
la nica herramienta de que se dispone es una computadora
secuencial, entonces trataremos de atacar cada problema en
trminos de algoritmos secuenciales.
En muchas aplicaciones se desea que las computadoras
resuelvan problemas complejos de reconocimiento de patrones.
Unaventaja significativa del enfoque de redes neuronales
para resolver problemas es que no SE?requiere tener un proceso bien
definido para convertir a travs de un algoritmo, una entrada a una
salida. Mas que nada se requiere, para la mayora de las redes una
coleccin de ejemplos representativos de interpretacin deseada.
Una red neuronal se adapta a si rnlisma para producir las salidas
deseadas cuando se le proporciona una entrada.
Por otra parte una red neuronal es una estructura robusta en
el sentido que responder con una salida aun cuando se presenten
entradas desconocidas, tales como patrones conteniendo ruido,
Recientemente el campo de las redes neuronales artificiales
ha cobrado mayor importancia, provocada principalmente por la
creacin de nuevas topologas y algoritmos, as como tambin por el
desarrollo de tcnicas analgicas \/LSI y la creencia de que el

Redes neuronales de entrada binaria

procesamiento
en
paralelo es esencial para el reconocimiento
eficiente de voz e imagen.
Los clasificadores ptimos de error mnimo son una clase de
modelos de redes neuronales que se emplean en el reconocimiento
de patrones binarios alterados.
En vez de ejecutar un programa de instrucciones
secuencialmente como enel caso de unacomputadorade
Von
Neumann, los modelos de redes neuronales exploran muchas
hiptesis compitiendo simultneamente, usando redes masivas en
paralelo compuestas de muchos'
elementos
computacionales
conectados por ligas con pesos variables.

Los modelos de redes neuronales se especifican por la


topologa de la red, las caractersticas de los nodos y las reglas de
aprendizaje. La adaptacin o aprendizaje es la parte central en la
investigacin sobre redes neuronales La capacidad para adaptacin
y aprendizaje continuo es esencial en reas tales como el
reconocimiento devoz donde los datos prcticos son limitados y
donde se encuentran continuamente nuevos hablantes, nuevas
palabras, dialectos, frases y ambientes.
Los beneficios potenciales de las redes neuronales se
extienden mas all de las altas tasas de computacin proporcionadas
por el paralelismo masivo. Las redes neuronales tpicamente proveen
un mayor grado de robustez que las computadoras secuenciales de
Von Neumann porque hay muchos mas nodosde procesamiento,
cada uno de ellos con conexiones locales principales. El dao a unos
cuantos nodos o ligas no deteriora significativamente el
los algoritmos de redes
funcionamiento total. La
mayora
de
neuronales tambin adaptan pesos de conexin en el tiempo para
mejorar el rendimiento basado en los resultados del momento.
El trabajo en redes neuronalles artificiales tiene una larga
historia. El desarrollo de modelos matemticos detallados comenz
hace mas de 40 aos conel trabajo deMcCulloch y Pitts, Hebb,
Rosemblatt y otros. Trabajos mas recientes como los de Hopfield y
Grossberg hanhecho que este campo recobre importancia.

Redes neuronales de entrada binaria

Clasificadores tradicionales y de redes neuronales


En la siguiente figura se muestran diagramas
clasificadores tradicionales y de redes neuronales.

a bloques para

Almacenar valores y seleccionar


el mximo

Calculo de "matching score"


_____*

Smbolos de
entrada

Clasificador Tradicional
Smbolo de salida para
la clase mas parecida

entrada,
analgicos
valores

x0

x1

scores intermedios
b

x0

X.

deCalculo

"matching

Seleccin y
mximo mejoramiento

score"
Xm:

b
A

Adaptar'pesos, dados ambos


salidas y clase correcta

__c_
Clasificador de Red Neuronal

Ambos tipos de clasificadores determinan cual de las M clases


es la mas representativa de un patrn de entrada esttico
desconocido el cual contiene N elementos de entrada.

Redes neuronales de entrada binaria

En un reconocedor de voz las entradas pueden ser los valores


de la envolvente de salida del muestre0 de un analizador espectral a
un instante del tiempo y las clases pu,eden serdiferentes vocales. En
un clasificador de imagen las entradas pueden ser el nivel en la
escala del gris de cada pixel para una fotografa y las clases pueden
representar objetos diferentes.

El clasificador tradicional
El clasificador tradicional tiene dosetapas.Laprimeretapa
calcula los matching scores para cada clase y la segunda selecciona
la clase con el mximo score. Lasentradas a la primeretapa son
smbolos que representan valoresde los N elementos de entrada.
Estos smbolos entran secuencialmente y son decodificados de una
formasimblicaexterna
en una representacin interna til para
realizar operaciones aritmticas y simlblicas. Un algoritmo calcula un
matching score para cada una de las M clases el cual indica que tan
cercanamente la entrada apareja el patrn muestra para cada clase.
Este patrn muestra es aquel patrn el cual es el mas representativo
de cada clase. En muchas situaciones se emplea un modelo
probabilistico para modelar la generacin de patrones de entrada a
partir de muestras y los matching scores representan la probabilidad
de que el patrn de entrada haya sidlo generado de cada una de las
M posibles muestras. En esos casos se hacen suposiciones fuertes
concernientes a las distribuciones subordinadas de los elementos de
entrada.Entoncesse pueden estimar parmetros de distribuciones
usando un datos de entrenamiento como se muestra en la figura. A
menudo se emplean distribuciones Gaussianas multivariadas para
algoritmos relativamente simples para calcular matching scores. Los
matching scores se codifican en representaciones simblicas y pasan
secuencialmente a la segunda etapa del clasificador. En esta
segunda etapa son decodificadas y La clase con el mximo score es
seleccionada. Un smbolo representando esa clase se enva al
exterior para completar la tarea de clasificacin.
~

Redes neuronales d e entrada binaria

Clasificadores adaptativos de redes neuronales


En este tipo de clasificadores' los valores de entrada van en
paralelo a la primer etapa a travs de N conexiones de entrada.
Cada conexin lleva un valor analtjgico el cual puede tomar dos
niveles para entradas binarias o puede variar en un amplio rango
para entradas con valores continuos. La primer etapa calcula los
matching scores y saca estos scores en paralelo a la siguiente etapa
sobre M lneas de salida analgicas. Aqu el mximo de estos valores
es seleccionado y mejorado. La segunda etapa tiene una salida para
cada una de las M clases. Des'pus que la clasificacin es
completada, solo aquella salida correspondiente a la clase mas
parecida estar en alto; las otras salidas estarin en bajo.
Notar que en este diseo, existen salidas para todas las
clases y que esta multiplicidad de salidas debe preservarse en
etapas de procesamiento posteriores tanto tiempo como las clases
sean consideradas diferentes. En el sistema de clasificacin mas
simple estas lneas de salida pueden ir directamente a indicadores
con etiquetas que especifiquen identidades de clase. En casos mas
complicados pueden ir a etapas posteriores de procesamiento donde
se tienenen
cuenta entradas a partir de otras modalidades o
dependencias temporales. Si es proporcionada la clase correcta,
entonces esta informacin y las slalidas del clasificador pueden
retroalimentarse a la primer etapa del clasificador para adaptar pesos
empleando un algoritmo de aprendizaje. La adaptacin creara una
respuesta correcta mas parecida para patrones de entrada
subsecuentes que son similares al patrn en cuestin.
Los clasificadores pueden realizar tres tipos de tareas
diferentes.

1. Pueden identificar que clase representa mejor un patrn de


entrada, donde se supone que las entradas se han alterado por ruido
o algn otro proceso. Este es un problema clsico de teora de
decisiones.
2. Los clasificadores pueden emplearse como memoria asociativa,
donde la clase muestra es deseada y el patrn de entrada se usa
para determinar la muestra a producir. Una memoria direccionable de
contenido es til cuando solo parte de un patrn de entrada esta
disponible y se requiere del patrn completo, como en el caso de la

Redes neuronales de entrada binaria

consulta bibliogrfica de referencia de revistas a partir de


informacin parcial. Estonormalmente requiere la adicin de una
tercera etapa para generar la muestra para la clase mas parecida.
Una etapa adicional es imecesaria
para
algunas redes
neuronales tales como la
red
de Hopfield la cual se disea
especficamente como memoria direccionable de contenido.
3.Otra tarea que estos clasificadores pueden realizar es agrupar las
N entradas en M grupos. Cuantificadores vectoriales se emplean en
sistemas de transmisin de voz e imagen para reducir el nmero de
bits necesarios para transmitir datos analgicos. En aplicaciones de
y vozseemplean
para comprimir la
reconocimiento deimagen
cantidad de datos quedebenproc.esarse
sin perder informacin
importante. En cualquier aplicacin e l nmero de grupos puede ser
pre-especificado o se puede permitir crecer a un limite determinado
por el nmero de nodos disponible en, la primer etapa.

Redes neuronales de entrada binaria

Definicin de red neuronal


Unared neuronal es una estructura deprocesamiento de
informacin distribuida en paralelo, en la forma de un grafo dirigido,
con las restricciones y subdefiniciones siguientes:
1.
2.

3.
4.

5.
6.

7.

Losnodos del grafo


son llamados elementos
de procesamiento.
Las ligas del grafo sonllamadas conexiones. Cada conexin funciona
como una trayectoria de
conduccin
de seal instantnea
unidireccionai.
Cada elemento de procesamiento puede recibir cualquier nmero de
conexiones de entrada.
Cada elemento de procesamiento pulede tener cualquier nmero de
conexiones de salida, pero las seales en cada unadebe serla
misma. De hecho, cada elemento de procesamiento tiene una sola
conexinde salida quepuede ramificarse en copias para formar
conexiones de salida mltiples (tambin llamadas colaterales), cada
unade las cuales lleva la mismaseal (la seal de salida del
elemento de procesamiento).
Los elementos de procesamiento pueden tener memoria local.
Cada elemento
de
procesamiento
posee
una
funcin de
transferencia, la cual puede usar (y alterar) memoria local, puede
tambin usar seales de entrada y producir as la seal de salida del
elemento de procesamiento.
Las seales de entrada a una red neuronal, del exterior de la red
llegan a travs de conexiones que se originan en el mundo exterior.
Las conexiones que abandonan la red son salidas al exterior.
Una red puede
pensarse
como una funcin y(x). Este
enfoque permite apreciar que las redes neuronales pueden encajar
en los sistemas de computacin programados (tradicionales).
La palabra arquitectura se emplea en la descripcin
matemtica formal deunared
neuronal; cabe destacar quela
arquitectura de una red neuronal no tiene relacin con
la
implementacin de tal o cual arquitectura.
Las redes neuronales tienen slus elementos de procesamiento
divididos en subconjuntos disjuntos, llamados niveles, en los cuales
esencialmente la
todos los elementos deprocesamientoposeen
misma funcin de transferencia.
Muchas redes neuronales incluyen un tipo de nivel llamado
nivel de entrada, en el cual cada elemento de procesamiento recibe
9

Redes neuronales de entrada binaria

exactamente una entrada, la cual llega del exterior. Los elementos de


procesamiento del nivel de entrada tpicamente no tienen otra
funcin mas que distribuir las seales incidentes en ellos a otros
elementos
de
procesamiento de la red. Tales elementos de
procesamiento son llamados unidades; de entrada.
La seal portada por una conexin puede ser cualquiera de
una variedad ilimitada de tipos de datos matemticos. Por ejemplo el
tipo de datos matemtico de la seal en una conexin puede ser un
entero, un numero real o un numero complejo.
Para implementar redes neuronales enhardware analgico
pueden usarse nmeros reales restringidos (por ejemplo una seal
tal puede implementarsecomo un voltaje o una corriente). En un
ambiente de implernentacion digital, una variedad de tipos
matemticos tales como enteros y reales de punto flotante pueden
estar presentes en una seal de conexin.
Muchas redes neuronales tienen elementos de procesamiento
con seales desalida en los rangos [-l,I o[OJ]o en los conjuntos
discretos {-l,l)
o [0,1].
Dado un conjunto de n elementos de procesamientode alguno
de estos tipos (indexados de 1 a M), se puede ver el conjunto
completo de sus n seales como un vector nico X = ( ~ 1 ~ x...,
2x, M ] ,
donde x i es la seal de salida del elemento de procesamiento con
ndice i .
A los dominios de tales vectores se les llama cubos y son :

[OJ]

= ( x = ( X l , X 2 , ..., xn)

&I

o < xi I 1 v 1si I n )

Los dos ltimos cubos se llaman cuba binario discreto y cubo bipolar
discreto respectivamente.
Los vectores en

son llamados vectores binarios y los vectores en

{-l,l]'
son llamados vectores bipolares.
10
!

Reldes neuronales de entrada binaria

N elernento de procesamiento general


Los elementos de computacin individuales que conforman
la
mayora de los modelos de sistemas neuronales artificiales se llaman
elementos de procesamiento.
No siempre
es
apropiado
pensar
en los elementos
de
procesamiento en una red neuronal como en una relacin uno a uno
con lasneuronas biolgicas. A1guna.s vecesesmejorimaginarun
elemento
nico
de
procesamiento
como
representativo
de
la
actividad colectiva de un grupo de neuronas.
En la figura siguiente se ilustra el modelodeprocesamiento
general. Cada elemento de procesamiiento se numera, el de la figura
es el i-esimo elemento.

Como una red neuronal un elemento de procesamiento tiene


muchas
entradas,
pero
tiene
una salida
nica,
la cual
puede
conectarse a muchos otros elementos de procesamiento enla red. La
entrada en i desde el nodo j se indica como xj(este es la salida
del nodo j , talcomo la salidadel nlodo i esetiquetadacomo
Cada conexin
al
i - esimo elemlento
de
procesamiento
esta
asociadocon una cantidadllamada un pesodeconexin.Elpeso
sobre la conexin del nodo j al nodo i se denota como w g .

Xi).

Todas estas cantidades tienen analoga en el modelo neuronal


estndar : la salida del EP correspondle a la frecuencia de encendido
de la neurona, y el peso corresponde a la intensidad de la conexin
sinaptica entre neuronas.

11

Redes neuronales de entrada binaria

Comosemuestra
en la figulra, las entradas al EP estn
separadas en varios tipos. Una entrada de conexin puede ser
excitadora o inhibitoria.
Cada EP determina un valor de entrada total basado en todas
sus conexiones de entrada. En ausencia de conexiones especiales,
tpicamente se calcula la entrada total sumando los valores de
entrada, multiplicados por sus correspondientes pesos.
La entrada total a la i-esima unidad es :
net = S xjwij
Donde el ndice j corre sobre todas las conexiones al elemento
de procesamiento. Las excitacio,nes e ihnibiciones pueden
determinarse por el signo de los pesols. Dado que hay por lo general
un numero muy grande de interconexiones en una red , la rapidez a
la cual pueda realizarse este calculo determina generalmente la
ejecucin de la simulacin de cualquier red dada.
Una vez que la entrada es calculada, esta se convierte a un
valor de activacin, para el EP. Este valor de activacin se puede
escribir como sigue:
ai(t) = Fi (ai(t-l),neti(t))

Para denotar que el valor (le activacin es una funcin


explcita de la entrada total net. Notar que la activacin actual puede
depender del valor de la activacin previa a(t-I). En la mayora de los
casos, la activacin y la entrada total son las mismas.
Una vez que la activacin del EP es calculada, podemos
determinar el valor de salida aplicando una funcin de salida:
xi = fi (ai) o bien xi = fi(neti)
El termino funcin de activacin algunas veces se utiliza para
referirse a la funcin fi, que convierte el valor de entrada a la red, al
valor de salida del nodo xi.
Cuando se describen las bases; matemticas, para modelos de
redes, estil pensar en la red conno un sistema dinmico. Para
describir una red de este tipo , se emplean ecuaciones diferenciales
que describen la razn de cambio re.specto al tiempo de las salidas
de varios elementos de procesamiento. Por ejemplo xi=gi(xi,neti)
representa una ecuacin diferencial general para la salida del iesimo elemento de procesamiento. Dado que net depende de las
12

Redes neuronales de entrada bharia

salidas de muchas otras unidades, Io que en realidad se tiene es un


sistema de ecuaciones diferenciales.
Es til tambin observar la coleccin de valores pesados como
un sistema dinmico.Teneren
cuenta que el aprendizajees el
resultado de las modificaciones de la intensidad de las uniones
sinapticas entre neuronas.
En una red neuronal artificial, el aprendizaje se lleva a cabo a
travs de modificaciones en los valorres pesados. Se puede escribir
un sistema de ecuaciones diferenciales para los valores pesados, wij
= Gi(wij,xi,xj,...), donde Gi representa la ley de aprendizaje.

Redes neuronales de entrada binaria

La red de Hopfield
Introduccin
Lamemoria
asociativa pareceser
una de las funciones
principales del cerebro. Nosotros fcilmente asociamos el rostro de
un amigo consu
nombre, o bien un nombre conun
numero
telefnico.
Muchos dispositivos exhiben caractersticas de
memoria
asociativa. Por ejemplo, el banco de memoria en una computadora es
un tipo de memoria asociativa: este asocia direcciones con datos.
La
memoria
de
Hopfield, en particular juega
un
papel
importante en el resurgimiento actual de inters en el rea de
sistemas neuronales artificiales.
La red de Hopfield esuna red de entrada binaria del tipo
supervisada; estas redes son mas apropiadas cuando es posible una
representacin binaria exacta como er;l el caso de patrones.
En el presente trabajo se realiza la implementacion de la red
de Hopfield tratndola como
una
memoria
direccionable de
contenido, aplicndola al reconocimiento de patrones.
Hopfield escribi dos documentos altamente confiables sobre
redes neuronales en 1982 y 1984 y esto persuadi a cientos de
cientficos altamente calificados, matemticos y tcnologos a unirse
al campo naciente de las redes neuronlales. El trabajo de Hopfield fue
la mas importante contribucin al revitalizado campo.

14

Redes neuronales de entrada binaria

Descripcin de /a red de Hopfield


Tpicamente las redes asociativas recurrentes comienzanen
algn estado inicial y entonces convergen a uno de un nmero finito
de estados estables.
de
redes asociativas
Hay tres metas bsicas en el diseo
recurrentes.
1.
2.
3.

Dado cualquier estado inicial, la red siempredeberconverger


a
algn estado estable
El estado estable al cual converge la red deber ser lo mas prximo
al estado inicial
Seria posible tener tantos estados estables como se desee
La funcin de transferencia del elemento de procesamiento de
la red de Hopfield esta dada por

para i = 42,. . . y
Los elementos de procesamiento de la red se actualizan uno a
la vez. La nica restriccin en lo que se refiere a estas
actualizaciones es que todos los elementos de procesamiento deben
actualizarse a la misma razn promedio.
La red de Hopfield no tiene una1 ley de aprendizaje asociada a
su funcin de transferencia. La matriz de pesos (n x n )

W =( WIJ)(la

cual por lo tanto es fija) se supone que se ha especificado en todo lo


que sigue. No hay restricciones en 110svalores denmeros reales
WIJ,
excepto que la matriz debe ser simtrica y tener una diagonal
cero. En otras palabras,

w . . = w . .para todo i, j

{1,2!7...7n},
y

w.
.= O para todo i E {1,2,..., n ]
I1
15

Redes neuronales de entrada binaria

La red de Hopfield normalmenteseempleacon


entradas
binarias. Estas redes sonmas
apropiadas cuandoson
posibles
representaciones binarias exactas como lo es con imgenes blanco y
negro donde los elementos de entrada son valores de pixeles, o con
texto ASCII donde valores de entrada podran representar bits en la
representacin ASCII de 8 bits de cada carcter.
Hopfield recobro el inters en redes neuronales por
su
extensivo trabajo en diferentes versiones de la red de Hopfield. Esta
red puede usarse como una memoria asociativa o para resolver
problemas de optimizacin. Aqu se trata una versin original de la
redla cual puedeemplearsecomo
una memoria direccionable de
contenido.

Red neuronal de Hopfield que puede emplearse como una rnernoria direccionable de contenido

Esta red tiene n nodos conteniendo no linealidades limitantes


duras y entradas binarias, y salidas tomando los valores +1 y - 1. La
salida decadanodo es retroalimentada a todos los otros nodosa
travs de pesos denotados t y.
Primero, los pesos se establecen usando el conjunto dado de
patrones muestra para todas las clases.Entoncesseimpone
un
patrn desconocido a la red a tiempo cero, forzando la salida de la
16

Redes neuronales de entrada binaria

red para aparejar el patrn desconocido. Siguiendo esta


inicializacin, la red itera en pasos de tiempo discretos, empleando la
formula dada. Se considera que la red converge en el momento en
que las salidas no cambian en iteraciones sucesivas. El patrn
especificado por las salidas de los nodos despus de la
convergencia es la salida de la red.

Redes neuronales de entrada binaria

Algoritmo de /a red de Hopfield

Paso Uno

Asignarpesos de conexidn

En estaformula

t . . es el peso de conexin del nodo i al

!I
la
cual
puede ser a+ o - esel
nodoj y
muestra para la clase S .
Paso Dos

elemento i de la

Inicializar conun patrcbn de entradadesconocido

p,(o)=x,, Ori < N - - 1


En esta formula p , ( t ) es la salida del nodo i a tiempo t y
cual puede ser + o - es el elemento i del patrn de entrada.
PasoTres

X,

la

Iterarhastaconvergencia

La funcin f, es la no linealidad limitante difcil, mostrada en


una figura anterior. El proceso se repite hasta que las salidas de los
nodospermanecen sin cambio con iteraciones subsecuentes.Las
salidas de los nodos representan entonces el patrn muestra que
mas se asemeja a la entrada desconocida.
Paso Cuatro Repetir, yendo al paso dos.

18

Redes neuronales de entrada binaria

Hopfield y otros probaron que esta red converge cuando los


pesosson
simtricos ( t u = t,,) y las salidas de los nodos son
actualizadas asincronamente usando las ecuaciones del algoritmo.
Hopfield tambin
demostr
que l a red converge cuando no
linealidades graduadas similares a la no linealidad sigmoid son
usadas.
Cuando la red de Hopfield es empleada como clasificador, la
salida despus de convergencia debe ser comparada a las M
muestras para determinar
esta
sise
apareja
a un patrn
exactamente. S lo es, la salida es aquella clase cuya muestra
apareja el patrn de salida. S no Io es entonces ocurre un no
aparejamiento.

Limitaciones de la red de Hopfield


La red de Hopfield tiene dos limitaciones principales cuando
se emplea como memoria direccionable de contenido.
En primera, elnmero de patrones quepuede almacenar y
llamar exactamente esta severamente limitado. Si
son almacenados
muchos patrones, la red puede converger a un patrn espurio nuevo
diferente de todos los patrones muestra. Tal patrn espurio producir
una salida sin aparejamiento cuando la red se usa como un
clasificador.
Hopfield mostr que esto ocurre con poca frecuencia cuando
los patrones muestra son generados 'aleatoriamente y el nmero de
clases M es menor que 0.15 veces elnmerode
elementosde
entrada o nodos en la red N . El nmero de clases es as tpicamente
conservado bien abajo de 0.15N. Por ejemplo, una red de Hopfield
para solo 10 clases puede requerir mas de 70 nodos y mas de 5000
pesos de conexin.
Una segunda limitacin de la red de Hopfield es que un patrn
muestra ser inestable s este comparte muchos bits en comn con
algn otro patrn muestra. Aqu se considera una muestra inestable,
si es aplicada a tiempo cero y la red convergea alguna otra muestra.

19

Redes neuronales de entrada binaria

La red de Hamming
lntroduccin

La memoria
es
crtica para cualquier sistema
de
procesamiento de informacin que recuerde o deduzca la misma. La
memoria de una red neuronal reside en los pesos, los cuales
pueden ser prealmacenados o entrenados adaptivamente por un
mecanismo de aprendizaje.
En trminos de cmo los pe:;os son obtenidos, las redes
neuronales pueden ser clasificadas en tres categoras, a saber:
pesos fijos, supervisadas y no supervisadas.
Vamos a estudiar un tipo de redde
memoria asociativa
conocida como Red de Hamming. Dicha red pertenece a la
categora de pesos fijos, es decir, stos son almacenados
previamente. Este tipo de redes estn diseadas para recuperar el
patrn original (libre de errores) de una seal que se considera ha
sufrido distorsin.

20

Redes neuronales de entrada binaria

Descripcin de la red de Hamming


La red calcula primero (ep su parte baja) los pesos y offsets para que
las salidas generadas sean igual :I N menos las distancias de
Hamming a los patrones de entrada. Estas salidas variarn de O al
nmero de elementos (N) en la entrada de la red, y son mayores para
aquellos nodos cuyos patrones de entrada se asemejen ms a los
patrones almacenados. Los pesos y offsets se fijan en la subred
MAXNET. Todos los offsets se ponen (a O y los pesos de cada nodo a
I mismo son 1. Los pesos entre los nodos son inhibidos dndoles
un valor de -5 donde 5 -i 1 / M .
Despus de que los pesos y offsets han sido calculados, un patrn
de entrada con N elementos es presentado en la parte baja de la red
de Hamming. Este patrn debe presentarse en la entrada el tiempo
suficiente para permitir a la red inicializar y calcular tanto pesos como
offsets y las salidas quese presentarn a la subred MAXNET. El
patrn es entonces retirado de la entrada y la MAXNET itera hasta
que la salida de solamente un nodo sea positiva. As se completa la
clasificacin y la clase seleccionada es aquella que corresponde al
nodo con una salida positiva.
La siguiente figura ilustra la estructura de la redde Hamming:
ym-2

Y1

YO

ym-I

..................

MAXNET, selecciona
el mximo

....................

Clculo de matching scores

x0

XI

xn-2

xn-I

La distancia de Hamming es el nmero de bits en los que difiere el patron de entrada con los patrones
almacenados en la red.

Redes neuronales de entrada binaria

Algoritmo de lared de Hamming


A continuacin se muestra el algoritmo de la red de Hamming.
En este podemos ver que primero se asignan los pesos y offsets, se
inicializa la red con un patrn desconocido como entrada y se itera
hasta que se encuentra el patrn que ms se apegue al de entrada.

Pasol. Asignacin de Pesosy Offsets


En la subred inferior:
w = -x: 8
V
2 ' J

N
2

1"-

OrZ<N-l,O~jI"l
En la subred superior:
k=l

En estas ecuaciones wli son los pesos de conexin


de la entradai al nodoj en la subred inferior y 8 e:;
el offset en ese nodo. El peso de la conexin del nodo
k al nodo 1en la subred superior es t , y todos los o:ffsets
en esta subred son cero.
Paso II. Inicializar con un patron de entrada desconocido.

En esta ecuacin

(1) es la

salida del nodoj en la

subred superior al tiempo I , x, es el i - simo elemnto


del patron de entrada yS, es el valor de la funcin no
lineal.

22

Redes neuronales de entrada binaria

Se asume que la m xim entrada a esta funcin


nunca causa que la salida sea indefinida.
Paso III. Iterarhasta Converger

Este proceso se repite hasta convergencia, despu S


de que solamente la salida de un nodo permanece
positiva.
Paso

I V .

Repetir yendo al paso II

23

Redes neuronales de entrada binaria

Limitaciones y ventajas de la red de Hamming


Las simulaciones con diferentes probabilidades de invertir bits
en patrones de entrada y con diferentes nmerosde clases y
elementosen
los patrones de entrada han demostrado que la
MAXNET converge tpicamente en menos de 10 iteraciones en este
tipo de aplicaciones. Adems puede probarse que la MAXNET
siempre converger y hallara el nodo con el valormximo cuando
5 +1IM.
La red de Hamming tiene una cantidad de ventajas obvias sobre la
red de Hopfield. Sta implementa el clasificador de error mnimo
cuando los errores en los bits son aleatorios e independientes, y as
el rendimiento de la red de Hopfield puede ser peor o equivalente a
la red de Hamming en tales circunstancias. Las comparaciones entre
las dos redes en problemas
tales
como
reconocimiento de
caracteres, reconocimiento de patrones aleatorios y consulta
bibliogrfica han demostrado esta diferencia en rendimiento. La red
de Hamming tambin requiere mucho menos conexiones que la red
de Hopfield. Por ejemplo, con 100 entradas y 10 clases la red de
Hamming requiere nicamente 1100 conexiones, mientras que la red
de Hopfield requiere casi 10000. Mas aun, la diferencia en el nmero
deconexiones
requeridas seincrementa
cuandoel
nmero de
entradas se incrementa, dado que el niimero de conexiones en la red
de Hopfield crece como elcuadrado
del nmero de entradas,
mientras que el nmero de conexionesl en la red de Hamming crece
linealmente. La red de Hamming tambien puede modificarse para ser
un clasificador de error mnimo cuarndo los errores se generan
invirtiendo los elementos de entrada de +Ia -1 y de -1 a +I
asimtricamente con diferentes probabilidades y cuando los valores
de elementosde entrada especificos son desconocidos.
Finalmente, la red de Hamming no .sufre de patrones de salida
espurios los cuales pueden producir un resultado no-match.

24

Redes neuronales de entrada binaria

El clasificador de Carpenter-Grossberg
/nffoduccin
Carpenter y Grossberg en el desarrollo de su teora de
resonancia adaptativa han diseado una red la cual forma grupos y
es entrenada sin supervisin. Esta red implementa un algoritmo de
agrupamiento gua
que
selecciona
la primera entrada como la
muestra para el primer grupo. La siguiente entrada es comparada a
la primera muestra agrupada. Esta sigue al gua y es agrupada con
la primera, si la distancia a la primeral es menor que un umbral. De
otra forma esta es la muestra para un nuevo grupo. El numero de
grupos entonces crece con el tiempo y depende de ambos, el umbral
y la distancia mtrica empleada para comparar entradas a muestras
agrupadas.

25

Redes neuronales de entrada binaria

Descripci6n de la red de Carpenfer-Grossberg


La estructuradeesta
red essimilara
la red deHamming.
Matching scores son
computados
empleando
conexiones
feedforware y el mximo valor es realzado usando inhibicin lateral entre
los nodos de salida. Esta red difiere de la red de Hamming en que las
conexiones de retroalimentacin se proveen de losnodos de salida a
los nodos de entrada. Tambin se proveen mecanismos para apagar
ese nodo de salida con un valor mximo, y para comparar muestras a
la entrada para la prueba de umbral requerida porel algoritmo gua.
Esta red se describe
completamente
usando ecuaciones
y a
diferencialesnolineales,incluyeretroalimentacinextensiva
demostrado ser estable.
Red de Carpenter-Grossberg con tres nodos de entrada y dos nodosde salida

Salida

Entrada

El algoritmo supone que se emplea aprendizaje rpido, as


que los de ambas entradas y muestras almacenadas, solo toman los
valores O y 1. La redes inicializada estableciendoefectivamente
todaslasmuestrasrepresentadaspor
pesos deconexinacero.
Adems, un umbral de aparejamiento 11,amado vigilancia el cual va de
0.0 a 1.O debe establecerse. Este umbral determina que tan cerca un
nuevo patrn de entrada debe estarpara almacenar una muestra que
deba considerarsesimilar.Unvalorcercadeunorequiere
un
y valores
mas
pequeos aceptan un
aparejamiento
cerrado
aparejamientomaspobre.
Se presentansecuencialmente nuevas
entradas en la partebajade la red,como en la red deHamming.
Despus de la presentacin, la entradaescomparadaatodaslas
muestras almacenadas en paralelo corrto en la red de Hamming para
producir matching scores. La muestra con el mas alto matching score
es
seleccionada
usando
inhibicin
lateral . entonces
esta
es
comparada a la entrada calculando la razn del producto cruz de la

26

Redes neuronales de entrada binaria

entrada y la muestra de mejor matching (numero de bits uno en


comn) dividida por el nmero de bits 1 en la entrada. Si esta razn
es mayor que el umbral de vigilancia, entonces se considera que la
entrada es similar a la muestra de mejor matching y esa muestra es
actualizada realizando una operacin AND lgica entre sus bits y
aquellos de la entrada.Si la razn esmenor que el umbral de
vigilancia, entonces la entrada se considera diferente de todaslas
muestras y es adicionada como una nueva muestra. Cada muestra
nueva adicional requiere un nodo y 2N conexiones para calcular
matching scores.

27

Redes neuronales de entrada binaria

Algoritmo de la red de Carpenter-Grossberg

Paso Uno

Inicializacin

O<i<N-l

O<j<M-1
setp, 0 1 p < l

En estas ecuaciones bu(I) es el inferior y es el superior,


pesgs de conexin entre el nodo de entrada i y el nodo de
salidaj a tiempo t . Estos pesos definen la muestra
especificada por el nodo de salida j . La fraccin p es el
umbral de vigilancia el cual indica que tan cercana debe estar
una entrada
a una muestra almacenada para aparejarse.
Paso Dos

Aplicarunaentradanueva

Paso Tres

Computar las cuentas de aparejamiento

En esta ecuacin p, es la salida del nodo de salida j y xi es el


elemento i de la entrada el cual puede ser a0 o 1.
Paso Cuatro Seleccionar la muestra 'de mejor aparejamiento

Esto se realiza usando inhibicin lateral extensiva.

28

Redes neuronales d e entrada binaria


Paso Cinco

Prueba de vigilancia

IIT* XI1 > p


s llxll

entonces ir a1 paso 7,

Otro ir al paso 6
Paso Seis

Deshabilitar la muestra de mejor apareamiento

La salida del nodo de mejor apa#reamientoseleccionada en el


paso 4 se pone temporalmente a cero y no toma mas parte
en la maximixacin del paso 4. Entonces ir al paso 3.

Paso Siete

Adaptar la muestra de mejor apareamiento


?

ij

Paso Ocho

* ( t + l ) = ? *(?)x.
ij
1

Repetir,yendoal paso dos

Primero habilitar cualquier nodo deshabilitado en el paso seis.

29

Redes neuronales de entrada binaria

Limitaciones y ventajas de la red de Carpenter-Grosberg


El AlgoritmodeCarpenter-Grolssberg
puede tener un buen
rendimiento con patronesdeentradaperfectospero
que aun una
pequea cantidad de ruido puede provocar problemas. Sin
ruido el
umbral de vigilancia puede establecerse tal que los dos patrones los
cuales sean mas similares sean consilderados diferentes. Con ruido,
y el nmerodemuestras
sinembargo este nivel puede ser tan alto
almacenadas puede crecer rpidamente hasta que todos los nodos
disponibles
sean
empleados.
Se requieren
modificaciones
para
mejorar el rendimiento de este algoritmo en presencia de ruido. Esto
puede incluir adaptar pesos mas lentamente y cambiar el umbral de
vigilancia durante el entrenamiento y prueba.

30

Redes neuronales de entrada binaria

Implementacin
Los programas para la simulacin del comportamiento de las
redes aqutratadas fueron escritos en lenguaje C, empleando la
versin 2.0 del compilador Turbo C de Borland.

Programa para lasimulacin de la redde Hopfield


El nmerode clases M es 6
El nmero de elementos por clase N es 120
En el programa las representaciones de las muestras se leen de
archivos de texto. La trayectoria para estos archivos de texto es:
c:\proyecto\salida y los nombres de los archivos para las muestras
ejemplo son EJEMPLOx.TXT y para las muestras quepueden ser
proporcionadas por el usuario MUESTFIAx.TXT.
El programa guarda dos archivos como salida; el primero es un
archivo con lamuestra
alterada por el porcentaje de alteracin
proporcionado y se almacena en c:\proyecto\salida\MUALTER.TXT y
el
segundo
es
la
muestra
final cuando la red a convergido
(c:\proyecto\salida\MUFlNAL.TXT).
El usuario puede hacer pruebascon sus propios patrones
modificando las archivos MUESTRAx.TXT. Como se podr apreciar
sise
editan estos archivos, estos son solo una lnea de texto
conteniendo Os y ?S,con la nica condicin que el nmero de Os o
1Sdebe ser N.
El numero de muestras y deelementos por muestra puede
variar y para alguien interesado en hacer pruebas puede modificarse
fcilmente el cdigo fuente del programa.
Para correr el programa se requieren 3 parmetros en la lnea
de comandos, como se muestra.
<NombreDelPrograma Opcin PorcentajeDeAlteracin>Donde:
NombreDelPrograrna: Es el nombre del programa ejecutable
Opcin: Puede ser el valorO(muestrasejemplo)
o 1(muestras del
usuario)
PorcentajeDeAlteracin: es el porcentaje de alteracin a laque ser
sometida la muestra en cuestin
Ejemplo : HOPFIELD O 15
Esto significa que se esta corriendo el programa ejecutable
llamado HOPFIELD, empleando las muestras proporcionadas como
ejemplo y con un porcentaje de alteraci6n (o ruido) de 15%.

31

Redes neuronales de entrada binaria


#include <stdio.h>
#include cctype.h>
#include <conio.h>
#include <stdlib.h>
#define NumClases6
#defineNumElem 120
#define TarnHor
#define TamVeFt
#defineCIERTO
#defineFALSO
#define
M
6
#define
120
N

1O /* Tamao horizontal */
12 /* Tamao vertical */
1

#define NUMREN 6
#define NUMCOL 120
#define NUMARCH6

void LeeMuestra(int Ren,charNomArch[r,int Matriz[][]);


void LeePatrones(charIndicador[],int Matriz[][]);
void SeleccionaPat(int Sel,int MatrizP[[,int PatronSel[]);
void BuscaValor(int Lista[],int Valor,int Ind,int *Esta);
void AlteraPatron(int PatronSel[],int PatronAlt[],int PorcAlteracion);
void GuardaPatron(intArreglo[,char NomArchU);
void CalculaMatrizT(int MatrizPUnjntMatrizTUU);
void InicializaSalida(int PatronEnt0,int PatronSaln);
void ActualizaSalida(int MatrizTnOjnt PatronAnt0,int PatronAct0,int
PatronlnicialU,int Cont);
void RealizaComparacion(int PatronSal0,intPatronSalActU,in,t *Continua);
void AlgoritrnoDeHopfield(int MatrizP[][],int PatronAltU,int PatronSalU,int *Cont);

/* Funcin principal para la simulacin de la red de Hopfield *I

void main(int argc,char *argv[)


{

int MatrizP[NumClases][NumElem];
int Sel,PorcAlteracion,Cont;
int PatronSel[l20],PatronAlt[l20],PatronSal[l20];

LeePatrones(argv[l],MatrizP);
Sel=atoi(argv[2]);
SeleccionaPat(Sel,MatrizP,PatronSel);
PorcAlteracion=atoi(argv[3]);
AlteraPatron(PatronSel,PatronAlt,PorcAlteracion);
GuardaPatron(PatronAIt,"c:\\proyecto\\s\O");
AlgoritmoDeHopfield(MatrizP,PatronAlt,PatronSal,&Cont);
GuardaPatron(PatronSal,"c:\\proyecto\\s\O");
}I' main *I

32

Reides neuronales de entrada binaria

I* Esta funcin lee una muestra de un archivo*/

void LeeMuestra(int Ren,char NomArch[],int Matriz[NUMREN][NUMCOL])


{

FILE *Arch;
int Col;
charCaracter;
if ( (Arch=fopen(NomArch,"rl"))==NULL) {
printf("Error : ");

else {
Col=O;
do {
Caracter=getc(Arch);
if ( Caracter-='O ) {
Matriz[Ren][Col++]=l ;/*atoi(Caracter);*/

if ( Caracter=='l' ) {
Matriz[Ren][Col++J=-1 ;/*atoi(Caracter);*/

} while (!feof(Arch));

fclose(Arch);

}/* LeeMuestra *I

/* Esta funcin lee todo el conjunto de muestras almacenadasen archivos de texto, las cuales
pueden ser muestras proporcionadas como ejemplo
o bien mluestras proporcionadas por el
usuario *I

void

LeePatrones(char
Indicadoru,int
Matrizuu)
{

static char NomArchEjemplo[NUMREN][NUMCOL]:= {


("c:\\proyecto\\salida\\ejemplol .txt\O"},
{"c:\\proyecto\\salida\\ejemplo2.txt\O"},
{"c:\\proyecto\\salida\\ejemplo3.txt\O"},
("c:\\proyecto\\salida\\ejemplo4.txt\O"},
{"c:\\proyecto\\salida\\ejemplo5.txt\O~'},
("c:\\proyecto\\salida\\ejemplo6.txt\O"}

1;

static char NomArchMuestra[NUMREN][NUMCOL]=:{


("c:\\proyecto\\salida\\muestral .txt\Ol'},

("c:\\proyecto\\salida\\muestra2.txt\0"},
{"c:\\proyecto\\salida\\muestra3.txt\O"},
("c:\\proyecto\\salida\\muestra4.txt\O},
{"c:\\proyecto\\salida\~uestra5.txt\O"},
~c:\\proyecto\\saIida\\muestra6.txt\O")

33

Redes neuronales de entrada binaria

1;
int Ind,Valor;
Valot=atoi(lndicador);
switch (Valor) {
case O : for ( Ind=O ; IndcNUMARCH ; Ind++ ) {
LeeMuestra(lnd,NomArchEjemplo[lnd],Matriz);

break;
case 1 : for ( Ind=O ; IndcNUMARCH ; Ind++ ) {
LeeMuestra(lnd,NomArchMuestra[lnd],Matriz);

1
break;
default :
break;

}PLeePatrones */

/* SeleccionaPat : Esta funcion solo selecciona uno delos renglones de la


matriz de patrones */

void SeleccionaPat(int Sel,int MatrizP[M][120],int PatronSel[l20])


int Ind;
for ( Ind=O ; lndc120 ; Ind++ )
PatronSel[lnd] = MatrizP[Sel][lnd];
}/* SeleccionaPat */

/* Buscavalor : Esta funcion solo verifica si un elemento se encuentraen una

lista *I
void BuscaValor(int Lista[l20],int Valorjnt Ind,int *Esta)
{

int Ap;
*Esta = CIERTO;
Ap = O;
if (Ind==O)
*Esta = FALSO;
else {
while ( (Lista[ApJ!=Valor)&&(Ap<lnd) )
Ap++;
if ( Ap>=lnd )
*Esta = FALSO;

}/* Buscavalor */

34

Redes neuronales de entrada binaria

/* Esta funcin altera aleatoriomente un patronen un porcentaje dado por el parametro


PorcAlteracin */

void AlteraPatron(int PatronSel[l20],int PatronAlt[l20],int PorcAlteracion)


{

int Ap,i,lnd,Valor,Esta,Cant;
int Lista[l20];
Cant = (N*PorcAlteracion)/lOO;
for ( Ap=O ; ApcN ; Ap++ )
PatronAlt[Ap] = PatronSel[Ap];
Ind = O;
while ( IndcCant ) {
Valor = random(N);
BuscaValor(Lista,Valor,lnd,&Esta);
if ( !Esta ) {
Lista[lnd] = Valor;
Ind++;

for ( =O ; <Cant ; i++) {


if ( PatronAlt[Lista[i]] == -1 )
PatronAlt[Lista[i]] = 1;
else
PatronAlt[Lista(i]] = -1;

}/* AlteraPatron */
/* Esta funcin guardala representacin de un patron enun archivo de texto *I

void GuardaPatron(int Arreglo[],char NornArchI])


{
int Ind;
FILE *Salida;
if ( (Salida=fopen(NomArch,"wt"))!=NULL) {
for ( Ind=O ; l n d 4 2 0 ; Ind++) {
switch (Arreglo[lnd]) {
case1 : fprintf(Salida,"O");
break;
case -1 : fprintf(Salida,"l");
break;
default : break;

1
1

fclose(Sa1ida);

else {
printf("E1 archivo no se abrio
...\n");

35

Redes neuronales de entrada binaria


}/* GuardaPatron */
/* CalculaMatrizT : */

void CalculaMatrizT(int MatrizP[M][120],int MatrizT[120][120])


{
int i,j,s;
for ( =O;icN ; i++)
for (j=O; jcN ; j++ ) {
MatrizT[i][j] = O;
if(i!=j){
for ( s=O ; s<M ; S++ )
MatrizT[i]Lj] =
MatrizT[i)[j] + MatrizP[s][i]*MatrizP[s]h];

}/* for */

}/* CalculaMatrizT *I

/* InicializaSalida : Esta funcion solo copia un vector en otro I

void InicializaSalida(int PatronEnt[l20],int PatronSal[l20])


{
int Ind;
for ( Ind=O ; Ind<N ; Ind++ )
PatronSal[lnd] = PatronEnt[lnd];
}/* InicializaSalida *I

/* ActualizaSalida : Esta funcion realiza el calculo para los N nuevos

valores de salida */
void ActualizaSalida(int MatrizT[120][120],int PatronAnt[l20],
int PatronAct[l20],int Patronlnicial[l20],int Cont)
{

int Ind,i,Aux;
for ( Ind=O ; IndcN ; Ind++ ) {
Aux = O;
for ( i=O ; icN ; i++)
if ( Cont==l )
Aux = Aux + (MatrizT[i][lnd]*PatronAnt[i])+Patronlnicial[i];
else
Aux = Aux + (MatrizT[i][lnd]*PatronAnt[i])+FatronAct[i];
if ( Aux>O )
PatronAct[lnd] = 1;
else
PatronAct[lnd) = -1;

36

Redes neuronales de entrada binaria


}/* ActualizaSalida */
/* RealizaComparacion : Esta funcion determina si se continua o no con el
proceso */

void RealizaComparacion(int PatronSal[l20],int PatronSalAc:t[l20],int *Continua)


{
int Ind;
Ind = O;
while ( (PatronSal[lnd] == PatronSalAct[lnd])&&(Ind<N) )
Ind++;
if ( Ind==N )
*Continua = FALSO;
}/* RealizaComparacion */

/* AlgoritmoDeHopfield : */

void AlgoritmoDeHopfield(int MatrizP[M][120],int Patronlnicial[l20],


int PatronSalAct[l20],int *Cont)
{
int MatrizT[l20][120];
int Continua=CIERTO;
int PatronSal[l20];
*Cont=O;
CalculaMatrizT(MatrizP,MatrizT);

InicializaSalida(Patronlnicial,PatronSalAct);
do { (*Cant)++;

InicializaSalida(PatronSalAct,PatronSal);
ActualizaSalida(MatrizT,PatronSal,PatronSal,kt,
Patronlnicial,*Cont);
RealizaComparacion(PatronSal,PatronSalAc~,&Continua);
} while (Continua);
}/* AlgoritmoDeHopfield */

Redes neuronales de entrada binaria

Programa parasimular la red de Carpenter-Grossberg


El programa esta hecho para simular el comportamiento de M
muestras con Nelementos por muestra, donde el valor de M es 5 y N
es 35; auque el programa facilmente podria modificarse para cambiar
estos valores.
En el programalas representaciones de las muestras se leen de
archivos de texto.La trayectoria para estos archivos de textoes:
c:\proyecto\carpent\entrada y los nombres de los archivos para las
muestras ejemplo son EJEMPLOx.TXT y para las muestras que
pueden ser proporcionadas por el usuario MUESTRAx.TXT.
El usuario puede hacer pruebas con sus propios patrones
modificando las archivos MUESTRAx.TXT. Como se podr apreciar
si se editan estos archivos, estos .son solo una lnea de texto
conteniendo O's y 1'S,con la nica condicin que el nmero de O's o
1'Sdebe ser N.
El numero de muestras y de elementos por muestra puede
variar y para alguien interesado en hacer pruebas puede modificarse
fcilmente el cdigo fuente del programa.
Para correr el programa se requieren 3 parmetros en la lnea
de comandos, como se muestra.
CNornbreDelPrograma Opcin ValorDeRHO:* Donde:
NombreDelPrograma: Es el nombre del programa ejecutable
Opcin: Puede ser el valor O(muestrasejemplo) o l(muestras del
usuario)
VaiorDeRHO: Es el valor de RHO el cual debe ser un valor real entre O
Y 1.
Ejemplo : CARPENT O 0.9
Esto significa que se esta corriendo el programa ejecutable
llamado CARPENT, empleando las muestras proporcionadas como
ejemplo y con un valor para RHO de 0.9.

38

Redes neuronales de entrada binaria


#include <stdio.h>
#include cconio.h>
#include <stdlib.h>
#include <process.h>
#include <math.h>
#include <ctype.h>
#include <string.h>
#define CIERTO 1
/* Constanteempleadacomoun valor booleano */
#define FALSO O
/* Constanteempleadacomounvalclrbooleano
*/
#define M
4
/* Nmero
de
muestras
*/
##define N
35
I* Nmerodeelementospormuestra
*/
#define B-IN1 0.02777778 /* l/(N+l) */
#define NUMENTEJEMPLO 5 /* Nfmero de muestras del ej'emplo */
#define NUMENTMUESTRAS 5 /* N f mero de muestras proporcionadas por
el usuario */

struct text-info Iniciallnfo;

/* Definicien de los encabezados de las funciones


*/

void ValidaArgumentosDeEntrada(int argc,char *argvn,float *RHO);


int ValidaNumEntrada(void);
void LeeMuestra(char NomArchnjnt VectorX[]);
void MuestraEntradasDisponibles(char Indicador!);
void LeeEntrada(char Indicador0,int VectorX[]);
void ComputeMatchingScores(f1oat MatrizB[N][M],int VectorX[N],float VectorU[M]);
void SelectBestMatchingExemplar(f1oatVectorU[M],int *India?J);
void VigilanceTest(int VectorX[N],int MatrizT[N][M],intlndiceJ,float RH0,int *EsMayor);
void TemporarilySetToZero(f1oat MatrizB[N][M],int IndiceJ,float MatrizAuxiliar[N][M],int
Arreglolndicador[M]);
void AdaptBestMatchingExemplar(int MatrizT[N][M],int VectorX[N],int IndiceJ,float MatrizB[N][M]);
void EnableNodes(f1oat MatrizAuxiliar[N][M],float MatrizB[N][hA],int Arreglolndicador[M]);
void MuestraVectorX(int VectorX[N],int x0,int y0,char Titulo[);
void MuestraMatrizT(int MatrizT[N][M]);

39

Redes neuronales de entrada binaria


/* Este programa tiene como objetivo simularel comportamiento de la red de

Carpenter-Grossberg
*/

void main(int argc,char *argv[])


{
static int MatrizT[N][M] = {

40

Redes neuronalesde entrada binaria


I* Este programa tiene como objetivo simular el comportamiento de la red de
Carpenter-Grossberg
*I

void main(int argc,char *argv[)


{
static int MatrizT[N][M] = {

40

Redes neuronales de entrada binaria

static float MatrizAuxiliar[N][M] = {

I;
static float MatrizB[N][M] = {
{B_INI,B_INI,B_INI,B_INI),
{B_INI,B_lNl,B_INl,B_INI},
{B_INI,B_INI,B_INI,B_INI),
{B_lNl,B_lNl,B_lNl,B_INI},
{B_INI,B_INI,B_INI,B_INI),
{B~lNl,B~lNl,B_lNI,B_INI},
{B~lNl,B~lNl,B_lNl,B_INI),
{B_lNl,B_lNl,B_lNI,B_lNI},

41

Redes neuronales de entrada binaria

{B_lNl,B_lNI,B_INI,B_lNI},
{B_lNl,B_lNl,B~lNI,B_INI),
{B_INI,B_INI,B_INI,B_lNI},
{B_INI,B_INI,B_INI,B_INI},
{B_INI,B_INI,B_INI,B_INI},
{B_INI,B_INI,B~INI,B_INI},
{B_INI,B_INI,B_INI,B_INI},
{B_INI,B_INI,B_INI,B_INI},
{B~lNl,B_lNl,B~lNl,B~lNI},
{B_lNl,B~lNl,B_lNl,B~INI},
{B_INI,B_INI,B_INI,B~INI},
{B_INI,B_INI,B_INI,B_INI},
{F3_INl,6_lNI,B_INI,B~INI},
{B_lNl,B_lNl,B_lNl,B_INI),
{B~INl,B_INI,B_INl,B~INI},
{B_INI,B_INI,B_INI,B_INI},
{B_INl,B~lNl,B~lNl,B_INI),
{B_lNl,B~lNl,B_lNl,B~iNI},
{B_INl,B~INI,B_INI,B_INI},
{B_INI,B_INI,B_INI,B_INI},

static int Arreglolndicador[M] = {O,O,O,O};


int IndiceJ,EsMayor,VectorX[N];
float RHO,VectorU[M];

ValidaArgumentosDeEntrada(argc,argv,&RHO);
gettextinfo(&lnicialInfo);
textcolor@VHITE);
textbackground(6LUE);
MuestraEntradasDisponibles(argv[l]);
LeeEntrada(argv[l],VectorX);
for(; ; 1 {
CornputeMatchingScores(MatrizB,VectorX,VectorU);
SelectBestMatchingExernplar(VectorU,&lndiceJ);
VigilanceTestO/ectorX,MatrizT,lndiceJ,RHO,&EsMayor);
if ( !EsMayor) {
TemporarilySetToZero(MatrizB,IndiceJ,MatrizAuxiliar,
Arreglolndicador);
}

42

Redes neuronales de entrada binaria


else {
AdaptBestMatchingExemplar(MatrizT,VectorX,lndiceJ,
MatrizB);

EnableNodes(MatrizAuxiliar,MatrizB,Arreglolndicador);
gotoxy(2,17); printf("Ultima");
gotoxy(2,18); printf("Entrada");
MuestraVectorX(VectorX,10,14,"");
gotoxy(l7,17); printf("Muestras");
MuestraMatrizT(Matriz~;
LeeEntrada(argv[l],VectorX);
1
J

}/* for */

textmode(lnicial1nfo.currmode);
}/* main */

/* Esta funci$n tiene como objetivo validar los parametros de entrada al

programa.
Entrada : Argumentos de entrada de la linea de comandos
Salida : Valor validado para RHO
*/

void ValidaArgumentosDeEntrada(int argc,char *argv[J,float*RHO)


{

clrscro;
if ( argc!=3 ) {
printf("Nfmer0 de parametros incorrecto...by;
printf("La linea de comandos debe ser : \n\n");
printf("<NombreDelProgramaOpcion ValorRHO>\n\n");
printf("Donde...\n\n");
printf("NombreDe1Programa : CARPNEW\n");
: O (Ejemplo), 1 (Muestras Propias)\n");
printf("0pcion
: Valor
Real
en
[O,l]\n");
printf("ValorRH0
exit (O);

else {

1h'3;

switch ( atoi(argv[l]) ) {
case O : break;
, case 1 : break;
default : printf("E1 parametro2 es incorrecto...\n");
printf("Su valor debe ser O o
exit (O);
break;

if ( (atof(argv[2])<0)[[(atof(argv[2])>1) ) {
printf("E1 parametro 3 es incorrecto...\n\n");

43

Redes neuronales de entradabinaria

else {

printf("Su valor debe ser real\n");


printf("y estar en el intervalo [O,l]\n");
exit (O);
*RHO=atof(argv[2]);

}/* ValidaArgumentosDeEntrada */

/* Esta funcien tiene como objetivo validar que la entrada que sera leida de

un archivo sea valida.


La funci$n pregunta al usuario si se desea continuar, si la respuesta es
NO, el programa termina; en caso contrario se valida que la entrada
seleccionada sea valida.

*I
int VaIidaNumEntrada(void)
{
int NumEntrada;
char Respuesta,Car;
char NumEntradaCad[3]="1 O\O";
do {

gotoxy(2,22);prntf(""Desea continuar (S/N) :


Respuesta=toupper(getcheO);
} while ( Respuesta!='N' && Respuesta!='S' );
if ( Respuesta=='N' ) {
exit (O);

'I);

else {
do {

gotoxy(2,23);printf("Numero de entrada : ");


if ( isdigit(Car=getcheO) ) {
NumEntradaCad(O]=Car;
NumEntradaCad[l]='\O';

1
NumEntrada=atoi(NumEntradaCad);
if ( (NurnEntradacl) 11 (NumEntrada>S) ) {
gotoxy(2,25);printf("La entrada debe ser un

valor entero en [l
,S]");

}while( ((NumEntrada)<l)

return NumEntrada;

}/* ValidaNumEntrada */

44

11 ((NumEntradapS) );

Redes neuronales de entrada binaria


I* Esta funcien tiene como objetivo leer una entrada de un archivo
*/

void LeeMuestra(char NomArch[],int Vector><[])


{
int i;
FILE *Arch;
charCaracter;
if ( (Arch=fopen(NomArch,"rt"))==NULL ) {

printf("Error al tratar de abrir el archivo


...\n");
exit (O);

1
else {

=O;
do {

Caracter=getc(Arch);
if ( Caracter=='O' ) {
VectorX[i++]=O;

if ( Caracter=='l' ) {
VectorX[i++]=l ;

1
}while( !feof(Arch) );
fclose(Arch);
)I* else *I
I/* LeeMuestra */

/* Esta funcign muestraen modo texto las entradas que pueden estar

disponibles desde un conjuntode archivos


*I

void MuestraEntradasDisponibles(charIndicadorn)
{
int VaIorlx0=26,y0=5,lnd,Aux;
intVectorX[N];
char CadAux[3];
static char NomArchEjemplo[5][50]= {

rc:\\proyecto\\carpent\\entrada\\ejemplol .txt\O"},

("c:\\proyecto\\carpent\\entrada\\ejemplo5.txt\O"}

1:
45

Redes neuronales de entrada binaria


static char NomArchMuestra[5][50]= {
{"c:\\proyecto\\carpent\\entrada\\muestral .txt\O"},

Valot=atoi(lndicador);
clrscro;
gotoxy(l5,2); printf("Programa para simular lared de Carpenter-Grossberg");
gotoxy(2,8); printf("Entradas");
gotoxy(2,9);printf("Disponibles");
switch (Valor) {
/* Para el ejemplo */

case O : for ( Ind=O ; IndcNUMENTEJEMPLO ; Ind++ ) {


LeeMuestra(NomArchEjemplo[lnd],VectorX);
Aux=lnd+l;
itoa(Aux,CadAux,1O);
MuestraVectorX(VectorX,xO,yO,CadAux);
xO=xO+7;

1;
break;
/* Para las muestras proporcionadas porel usuario *I

case 1 : for ( Ind=O ; IndcNUMENTMUESTRAS; Ind++ ) {


LeeMuestra(NomArchMuestra[lnd],VectorX);
Aux=lnd+l ;
itoa(Aux,CadAux,l O);
MuestraVectorX(VectorX,xO,yO,CadAux);
xO=xO+7;

1;

break;

default : break;

}/* switch */
} P MuestraEntradasDisponibles*/

46

Redes neuronales de entrada binaria


/* Esta funcign lee una entrada a partir de un archivo. Aqui se tiene en
cuenta el valor del argumento el cual indica si la entrada ser leida
del conjunto de muestras ejemploo bien del conjunto de muestras dado

por el usuario (dando la opcign de terminarel programa antes de leer


la entrada
*I

void LeeEntrada(char Indicador[],int VectorX[])


{

static char NomArchEjemplo[5][50]= {

("c:\\proyecto\\carpent\\entrada\\ejemplo.txt\O"},

static char NomArchMuestra[5][50]= {

{"c:\\proyecto\\carpent\\entrada\\muestral.txt\O"},

int NumEntrada,Valor;
Valot=atoi(lndicador);

switch (Valor) {
/* Para el ejemplo */

case O : NumEntrada=ValidaNumEntradaO;
LeeMuestra(NomArchEjemplo[NumEntrada-l],VectorX);
break;
/* Para las muestras del usuario *I

47

Redes neuronales de entrada binaria


case 1 : NurnEntrada=ValidaNumEr:tradaO;
LeeMuestra(NomArchMuestra[NumEntrada-l],VectorX);
break:
default : break;

}/* switch *I
}/* LeeEntrada */

/* Esta funci$n es la implementaci$n del paso 3 del algoritmo para la red de

Carpenter-Grossberg
*/

void ComputeMatchingScores(f1oat MatrizB[NJ[M],int VectorX[N],float VectorU[M])


{

int iJ;
for ( j = O

: j<M ; j++ ) {

VectorUh]=O;
for ( i=O ; <N ; i++)
VectorU[j] = VectorUo] + MatrizB[i][j] * VectorX[i]:

}/* ComputeMatchingScores */

/* Esta funci$n es laimplementaci$n del paso 4 del algoritmo para la red de

Carpenter-Grossberg
*I

void SelectBestMatchingExemplar(f1oatVectorU(M1,int *IndiceJ)


{
int =O;
float Maximo;

*IndiceJ = O;
Maximo = VectorU[i];
; icM ; i++ )
for ( =I
if ( VectorU[i]>Maximo ) {
Maximo = VectorU[i];
'IndiceJ = i;

}/* SelectBestMatchingExemplar */

48

Redes neuronales de entrada binaria


/* Esta funcig!n esla implementaci#n delpaso 5 del algoritmo para la red de

Carpenter-Grossberg
*I

void VigilanceTest(int VectorX[N],int MatrizT[N][M],int IndiceJ,float RHO,

int "EsMayor)
{

float Razon,NormaX=O.O,NormaTPuntoX=O.O;
int i;

*EsMayor=FALSO;
for ( i=O ; <N ; i++) {
NormaX = NormaX + VectorX[i];
NormaTPuntoX = NormaTPuntoX + MatrizT[i][lndiceJ]*VectorX[i];

if ( NormaX==O ) {
exit (O);

else {

Razon = NormaTPuntoNNormaX;
if ( RazowRHO )
*EsMayor = CIERTO;

}/* VigilanceTest */

/*

Esta funcien es la implementacig!n del paso6 del algoritmo para la red de


Carpenter-Grossberg

*/

void TemporarilySetToZero(f1oat MatrizB[N][M],int IndiceJ,


float MatrizAuxiliar[N][M],int
Arreglo!ndicador[M])
{

int i;

Arreglolndicador[lndiceJ]=l;
for ( i=O ; icN ; i++) {
MatrizAuxiliar[i][lndiceJ1= MatrizB[i][lndiceJ];
MatrizB[i][lndiceJ) = 0.0;
}
}/* TemporarilySetToZero */

4s

Redes neuronales de entrada binaria


/* Esta funcien es la implementaci$ndel paso 7 del algoritmo para la red de

Carpenter-Grossberg
*/

void AdaptBestMatchirigExemplar(intMatrizT[N][M],int VectorX[N],int IndiceJ,float MatrizB[N][M])


{
float Denominador;
int
i,NormaTPuntoX=O.O;
for ( =O ; <N ; i++)
NorrnaTPuntoX = NormaTPuntoX + MatrizT[i][lndiceJ]*VectorX[i];
Denominador = 0.5 + NormaTPuntoX;
for ( =O ; <N ; i++)
MatrizB[i][lndiceJ] = (MatrizT(i][lndiceJ]*VectorX[i])/Denominador;
for ( i=O ; <N ; i++ )
MatrizT[i][lndiceJ] = MatrizT[i][lndiceJ]*VectorX[i];
}/* AdaptBestMatchingExemplar */

/* Esta funci@nes la implementaci$ndel paso 8 del algoritmo para la red de

Carpenter-Grossberg
*/

void EnableNodes(f1oat MatrizAuxiliar[NJ[M],floatMatrizB[N][M],


int Arreglolndicador[M])
{
int i,lnd;
float Auxiliar:
for ( Ind=O ; Ind<M ; Ind++ ) {
if ( Arreglolndicador[lnd]==l ) {
for ( i=O ; <N ; i++) {
Auxiliar = MatrizAuxiliar[ij[lnd];
MatrizAuxiiiar[i][lnd] = MatrizB[i][lnd];
MatrizB[i][lnd] = Auxiliar;

Arreglolndicador[lnd]=O;
}/* for */

}/* EnableNodes */

50

Redes neuronales de eptrada binaria


/* Esta funci$n

solo despliega en modo caracter la representaciGn de una

muestra

*/

void MuestraVectorX(int VectorX[N],int x0,int y0,char Titulo[])


{
int i,lnd;
int x,y;
i = o;
x = xo;
Y = yo;

gotoxy(xO+Z,yO-l); printf("%s",Titulo);
while ( <N ) {
for ( Ind=O; lndc5 ; Ind++ ) {
if ( VectorX[i]==l ) {
gotoxy(x,y); printf("k");
}

else {

gotoxy(x,y); printf(" ");

i++;
x++;

x = xo;
y++;

}/*while */
}/* MuestraVectorX */

/* Esta funci$n solo despliega un conjunto de muestras, las cuales se

encuentran almacenadas en la MatrizT

*/

void MuestraMatrizT(int MatrizT[N][M])


{

int i,lnd,lnd2;
int x0=26,y0=14;
int x,y;
i = o;
x = xo;
Y = Yo;

for ( lnd=O ; hd<M ; Ind++ ) {


=O;
gotoxy(x0+2,y0-1); printf("M%d",lnd);
while ( <N ) {
for ( lnd2=0 ; l n d 2 4 ; Ind2++ ) {
if ( MatrizT[i][lnd]==l ) {

Redes neuronales d e entrada binaria/* Esta funcign solo despliega en modo caracter la representacignde una

muestra
*/

void MuestraVectorX(int VectorX[N],int x0,int y0,char Titulo[])


{

int i,lnd;
int x,y;
i = o;
x = xo;
Y = Yo;

gotoxy(x0+2,y0-1); printf("%s",Titulo);
while ( <N ) {
for ( Ind=O; l n d 4 ; Ind++ ) {
if ( VectorX[i]==l ) {
gotoxy(x,y); printf("k");

else {

gotoxy(x,y); printf("

'I);

i++;
x++;

x = xo;
y++;
}/* while */

I/* MuestraVectorX */

/* Esta funcien solo despliega un conjunto de muestras, las cualesse

encuentran almacenadas en la MatrizT


*I
void MuestraMatrizT(int MatrizT[N][M])

int i,lnd,lnd2;
int x0=26,y0=14;
int x,y;
i = o;
x = xo;
Y = yo;

for ( Ind=O ; IndcM ; Ind++ ) {

=O;
gotoxy(x0+2,y0-1); printf("M%d",Ind);
while ( <N ) {
for ( lnd2=0 ; l n d 2 ~ 5; lnd2++ ) {
if ( MatrizT[i][lnd]==l ) {

51

Redes neuronales de entrada binaria

ibliografia
1. An introduction to Computing with Neural Nets

Richard P. Lippmann
/EASSP Magazine, April 1987
2. NeuralNetworks,Algorithms,Applications
Techniques
James A. Freeman
David M. Skapura

and Programming

3. Neurocomputing

Robert Hetch-Nieisen
Addison- Wesley
4. FundamentalsofNeuralNetworks,Architectures,Algorithms
and Applications
Laurene Fausett
Prentice Hall
5. Turbo C Reference Guide
Borland lnternational

53