Está en la página 1de 22

Implementacin de Redes Neuronales Artificiales en Haskell

Csar Augusto Acosta Minoli, Efran Alberto Hoyos, Julin Marn


(Paper Publicado en Reista de !nestigaciones "niersidad del #uindo$ "niersidad del
#uindo, $%&, p$%'' ( %&), *++&,
Resumen
En la actualidad, la gran -ayora del soft.are de si-ulaci/n y entrena-iento de redes neuronales es
desarrollado -ediante lengua0es i-peratios co-o C, 1ortran y Pascal$ El presente artculo tiene
co-o fin, presentar al lengua0e de progra-aci/n funcional Haskell, co-o alternatia para la
i-ple-entaci/n de algorit-os de si-ulaci/n y entrena-iento de redes neuronales aproec2ando las
potencialidades 3ue este ofrece y sin recurrir al uso de arreglos e ndices, los cuales son
responsables de la poca eficiencia y e4presiidad de los algorit-os nu-ricos i-ple-entados en
lengua0es funcionales$ 5e logr/ -ostrar 3ue es posible eitar el uso de arreglos e ndices para la
i-ple-entaci/n de redes neuronales feedforward multicapa, generando un c/digo claro, si-ple y
corto en co-paraci/n con los lengua0es i-peratios$ 5e encontr/, c/-o Haskell puede ser adecuado
para la e4peri-entaci/n con nueos algorit-os de entrena-iento de redes neuronales gracias a su
si-ilitud sintctica con la -ate-tica y las fortale6as del lengua0e$ 5e desarroll/ una interfase en
Haskell para 3ue cual3uier usuario pueda entrenar redes neuronales feedforward multicapa, sin
tener un conoci-iento profundo en progra-aci/n funcional$ El estudio co-paratio con Matlab
-ostr/ 3ue la librera de redes neuronales desarrollada en Has7ell tiene un buen dese-pe8o y se
puede usar co-o cual3uier otro si-ulador con fines e4peri-entales y educatios$
Palabras Claes9 Has7ell, Redes :euronales, ;ise8o e !-ple-entaci/n, <engua0es funcionales,
feedford.ard -ultilayer$
Abstract
:o.adays, -ost of t2e soft.are to train and si-ulate neural net.or7 is deeloped in languages li7e
C, 1=R>RA: and Pascal$ >2is article intends to s2o. 2o. Has7ell, a functional progra--ing
language, can be used to build a library to train and si-ulate Feedforward Multilayer Neural
Network .it2 all t2e features and adantages t2at t2e language can offer$ >2is i-ple-entation
doesn?t use arrays nor inde4, .2ic2 are responsible for lo. efficiency and little e4pressieness for
so-e nu-eric algorit2-s i-ple-ented in t2at .ay .2en using functional progra--ing$ @e find
t2at Has7ell can be useful to deelop ne. algorit2-s to train neural net.or7s due to its syntactic
si-ilarity to -at2e-atics and its language strengt2s$ Aood results are obtained .2en co-paring t2e
Matlab :eural :et.or7 toolbo4 and t2e Has7ell :eural :et.or7 library$ >2e library in t2is
proposal can be used for educational and e4peri-ental purposes$
Keywords9 Has7ell, :eural :et.or7s, design and i-ple-entation, functional language,
feedford.ard -ultilayer$
%
"Learn at least one new [programming] language every year.
Different languages solve te same pro!lems in different ways.
"y learning several different approaces# you can elp !roaden
your tinking and avoid getting stuck in a rut."
$e %ragmatic %rogrammer
Introduccin
<a progra-aci/n funcional presenta una nuea alternatia para el dise8o e i-ple-entaci/n
de algorit-osB -uc2os son los aspectos 3ue -uestran el poder de este tipo de progra-aci/n$
Actual-ente e4iste una gran co-unidad de cientficos de la co-putaci/n de diersas uniersidades
y centros de inestigaci/n a niel -undial -ostrando resultados interesantes en diferentes ca-pos
%
$
Este tipo de progra-aci/n ofrece una for-a diferente de ra6onar ante un proble-a co-putacionalB
co-o e0e-plo es posible garanti6ar -ediante el rigor -ate-tico, 3ue el algorit-o 3ue usted dise8a
2ace real-ente lo 3ue debe 2acer, esto a pri-era ista lo 2ace -s confiable 3ue los lengua0es
i-peratios y per-ite 2acer un segui-iento -s claro del algorit-o en tie-po de dise8o$ 5egCn
Ric2ard Dird (Dird, *+++, %%,, para co-prender esta isi/n debe-os tener en cuenta 3ue9 EELa
programaci&n desde una perspectiva funcional# consiste en construir definiciones y en usar el
computador para evaluar e'presiones# el papel del programador consiste en definir una funci&n
(ue permita resolver un pro!lema dadoF$
Esta posici/n propone resoler los proble-as -ediante la definici/n de funciones e4plcitas, sin
e-bargo, la prctica nos -uestra 3ue en algunos proble-as e4iste tal i-posibilidad debido a 3ue
2ay una gran cantidad de situaciones 3ue son difciles de -odelar y de resoler -ediante procesos
algort-icos$ Por tal -otio es necesario 3ue este paradig-a co-putacional centre sus o0os en la
co-putaci/n blanda co-o una alternatia para a-pliar su ca-po de acci/n$
%
Para una infor-aci/n co-pleta y detallada de este paradig-a de progra-aci/n isite ...$2as7ell$org
*
;entro de la co-putaci/n blanda y desde un punto de ista -ate-tico, una red neuronal se
co-porta co-o una funci/n entre con0untos, esta concepci/n a pesar de ser i-ple-entada
inicial-ente en los lengua0es i-peratios es in2erente-ente funcional$
Para resoler un proble-a -ediante redes neuronales se re3uiere bsica-ente de construir una
funci/n a tras de un proceso iteratio, sin 3ue e4ista una representaci/n e4plcita o si-b/lica de
la -is-a$
E4isten diferentes for-as -ediante las cuales las redes neuronales son lleadas a la prctica segCn
las especificaciones te/ricas, esto es lo 3ue se conoce co-o EE)mplementaci&n??$ En la actualidad las
redes neuronales se i-ple-entan bsica-ente por soft.are, es decir -ediante la si-ulaci/n de la
red en un PC conencional, o por 2ard.are, -ediante el uso de dispositios electr/nicos$ <a
i-ple-entaci/n por soft.are es la -s si-ple, in-ediata y poco costosa$ Alrededor de esta
tendencia e4isten en ersi/n co-ercial y freeware, una gran diersidad de 2erra-ientas para
entrenar y si-ular redes neuronales$ <a gran -ayora de estos desarrollos son reali6ados por -edio
de lengua0es i-peratios co-o es el caso de C, 1=R>RA: y Pascal (H!<ERA,*+++,%+G,$
5e 2an 2ec2o algunos intentos por llear a la progra-aci/n funcional las redes neuronales
(5ERRARE:5,%HHH,, sin e-bargo 2an e4istido algunos aspectos 3ue 2an i-pedido el aance en
esta rea9 la relatia 0uentud de los lengua0es funcionales frente a los lengua0es i-peratios genera
apata por parte de los progra-adores conencionales y por otra parte, el ca-bio de paradig-a al
cual se tiene 3ue enfrentar un progra-ador 3ue ingresa al -undo de la progra-aci/n funcional
produce co-o resultado 3ue algunas i-ple-entaciones desarrolladas en los lengua0es funcionales
lu6can co-o si-ples traducciones i-peratias, este es el caso de la i-ple-entaci/n del Ilgebra
<ineal -ediante el uso de arreglos e ndices, la cual es a su e6 el soporte -ate-tico de las redes
neuronales$
;estacadas inestigaciones en el rea, -uestran 3ue el ca-ino -enos indicado para la
i-ple-entaci/n de algorit-os de lgebra lineal en los lengua0es funcionales es -ediante el uso de
'
arreglos e ndices, estos -uestran poca eficiencia y e4presiidad (5ERRARE:5,%HHH,
(5J!D!:5JK, %HHL,$ ;ic2os traba0os ta-bin -uestran 3ue la soluci/n -s prctica se obtiene por
-edio de listas, ya 3ue los lengua0es funcionales son dise8ados teniendo en cuenta a las listas co-o
la estructura lineal -s i-portante y por3ue cuentan con un gran nC-ero de funciones y
operaciones para utili6arlas$ Parece ser, 3ue la ruta de una i-ple-entaci/n de redes neuronales
sigue en esta direcci/n, pero Mc/-o se i-ple-entan y se dise8an algorit-os para si-ular y entrenar
una red neuronal sin ndicesN
El presente artculo tiene co-o fin -ostrar 3ue es posible construir una librera para la si-ulaci/n y
el entrena-iento de redes neuronales feedforward multicapa en Has7ell sin recurrir al uso de
arreglos e ndices$ El ob0etio es aproec2ar las potencialidades 3ue ofrece la progra-aci/n
funcional co-o es el caso del -ane0o de listas, lla-ados recursios, ealuaci/n pere6osa y
funciones de alto orden para el desarrollo de soft.are con un c/digo corto, seguro, de fcil
co-prensi/n y -anteni-iento$
En la pri-era secci/n se pretende refinar los conceptos necesarios para co-prender la filosofa de
la progra-aci/n funcional$ En la secci/n siguiente se -uestran los algorit-os de
entrena-iento de redes neuronales 3ue son i-ple-entados en Has7ell y, final-ente se
presenta una discusi/n sobre el dese-pe8o de la librera a tras de un estudio co-paratio
con Matlab y otros lengua0es de progra-aci/n, -ostrando as las posibilidades 3ue Has7ell
ofrece en el dise8o e i-ple-entaci/n de algorit-os en general$
Haskell: un lenguaje de Programacin uncional
<a gran -ayora de los lengua0es de progra-aci/n e4istentes en la actualidad se pueden
clasificar en dos grandes ra-as segCn la filosofa 3ue los acoge9 <os lengua0es i-peratios co-o es
el caso de *# %ascal# Fortran y los lengua0es declaratios co-o por e0e-plo %rolog# +,-Mo,art y
Lisp$ 5e dice 3ue un lengua0e es i-peratio si consiste de una secuencia de co-andos e
&
instrucciones de asignaci/n las cuales son e0ecutadas de -anera estricta una despus de otra$ Por su
parte, el -odelo declaratio se interesa -s por el !u" debe ser co-putado, en e6 del cmo debe
ser co-putado, esta filosofa ca-bia las secuencias de co-andos e instrucciones por declaraciones
y definiciones de0ando 3ue la -3uina se ocupe del restoB por este -otio los lengua0es declaratios
son considerados co-o lengua0es de alto niel$
<a progra-aci/n funcional for-a parte del pensa-iento declaratio$ 5egCn Peter Oan Roy y 5eif
Haridi (OA: R=K P$ y HAR!;! 5$, *++*, la progra-aci/n funcional consiste de definir
funciones las cuales son e0ecutadas -ediante la ealuaci/n de e4presiones, donde las funciones son
erdaderas funciones en el sentido -ate-tico$ 5e dice 3ue un lengua0e funcional cuya Cnica for-a
de calcular sea -ediante la ealuaci/n de funciones es un lengua0e funcional puro$ <os lengua0es
pura-ente funcionales se basan en un for-alis-o lla-ado el lam!da-c.lculo una teora
-ate-tica desarrollada inicial-ente por /lon,o *urc, la cual consiste bsica-ente en la
definici/n y ealuaci/n de funciones a tras de una serie de operaciones abstractas co-o lo son la
unificaci/n, el a0uste de patrones y la ealuaci/n pere6osa entre otras$
Has7ell es un lengua0e de progra-aci/n funcional$ <lea su no-bre en 2onor al l/gico -ate-tico
Has7ell Droo7s Curry (%H++(%HL*,$ Has7ell 2a tenido algunas -odificaciones desde su creaci/n en
%HLL, la Clti-a ersi/n estable es Has7ell HL (J=:E5, PE>ER5=:, %HHH,$
Has7ell es un lengua0e funcional puro (no posee e4tensiones i-peratias,, la co-putaci/n la reali6a
a tras de definiciones en e6 de 2acerlo por asignaciones co-o en los lengua0es i-peratiosB no
e4isten estructuras cclicas co-o por e0e-plo el for y el do-while de C y no e4isten las ariables en
el sentido de -utabilidad ni asignaciones destructias, por e0e-plo en Has7ell es i-posible 2acer
P49Q4R%S co-o usual-ente alguien lo 2ara en Pascal$
A continuaci/n ere-os algunas caractersticas 3ue 2acen de l un lengua0e -oderno y atractio
para ser ob0eto de estudio9
G
Polimorfismo de #ipos9 Has7ell se caracteri6a por ser fuerte-ente tipeado o esttica-ente tipeado,
es decir los tipos de las ariables y las funciones son detectados en tie-po de co-pilaci/n$ El
tipeado esttico per-ite detectar -uc2os errores en tie-po de co-pilaci/n y no en tie-po de
e0ecuci/n co-o suele suceder en algunos lengua0es$ Ade-s el siste-a de tipos de Has7ell posee
una propiedad -uy i-portante conocida co-o polimorfismo$ Para entender y apreciar su poder en
detalle obsere la siguiente funci/n definida en Has7ell9
long 00 [a]-1)nt
long [] 2 3
long 4'0's5 2 6 7 long 's
igura $% 1unci/n 3ue calcula la longitud de una lista
<a funci/n 3ue se -uestra en la figura 6 calcula la longitud de una lista, la pri-era lnea indica el
no-bre de la funci/n (long,, en la parte derec2a de (99, se obsera el tipo de la funci/n (TaU(V!nt,, el
poli-orfis-o radica en 3ue sin i-portar el tipo de la lista, la funci/n sie-pre retornar un entero$
Por e0e-plo al ealuar cual3uiera de las siguientes tres e4presiones9
long [6#8#9] long [[:#;]#[8#<]#[=#>]] long [?a@#@!@#@,@]
5e obtiene co-o respuesta '$ En estos casos los tipos de las e4presiones de entrada son
respectia-ente T!ntU, TT!ntUU y TC2arU$ Este 2ec2o es su-a-ente interesante ya 3ue las funciones se
pueden dise8ar de for-a general y por lo tanto pueden ser re(usadas con gran facilidad$
unciones de alto ni&el: ;entro de la progra-aci/n funcional algunos autores consideran 3ue las
Pfunciones son ciudadanos de pri-er claseS(D!R;,*+++,, esta frase tiene un gran significado en
Has7ell , ya 3ue las funciones en s -is-as son alores, las cuales pueden ser al-acenadas, pueden
ser pasadas co-o argu-entos a otras funciones y ta-bin retornar co-o resultado de una funci/n$
A3uellas funciones 3ue reciben funciones co-o argu-ento son consideradas co-o funciones de
)
alto nivel$ Para er esta propiedad considere-os un e0e-plo clsico de la literatura en progra-aci/n
funcional9
map :: (a ->b) -> [a] ->[b]
map f [] = []
map f (x:xs) = f x: map f xs
igura '% 1unci/n map%
<a funci/n map 3ue se describe en la figura *, recibe co-o argu-entos una funci/n de la for-a
(ab,, una lista de tipo a ([a]) y retorna una lista de tipo b ([b]), la funci/n map aplica una funci/n
a cada uno de los ele-entos de una lista$ =bsere una e6 -s la generalidad 3ue ofrece el
poli-orfis-o de tipos$ Oea-os algunos e0e-plos del uso de map9
map (R', T%,*,'U Q T&,G,)U
map (W', T%,*,'U Q T',),HU
map (ead, TT',&,GU,T*,GU,T),L,HUU Q T',*,)U
<as funciones de alto niel son un poderoso -ecanis-o de abstracci/n 3ue puede -e0orar
sustancial-ente la estructura y -odularidad de -uc2os progra-as$
(&aluacin Pere)osa: Has7ell proporciona un -todo para ealuar e4presiones conocido co-o
pere6oso o no estricto$ Este -todo s/lo ealCa las partes necesarias de una e4presi/n para obtener
la respuesta, 2ay partes de la e4presi/n 3ue no son ealuadas del todo$
Ajuste de Patrones : El A0uste de Patrones es otra caracterstica funda-ental dentro de los
lengua0es funcionalesB sire co-o es3ue-a de pensa-iento en el -o-ento de definir funciones$
>o-e-os por e0e-plo una funci/n 3ue su-e los ele-entos de una lista de enteros (figura ;,9
X
suma 00 [)nt]-1)nt-1)nt
suma [] s 2 s
suma 4'0's5 s 2 suma 's 4'7s5
igura *$ 1unci/n 3ue su-a los ele-entos de una lista$
Por e0e-plo, si defini-os suma [A#8#9] 3 obtendre-os co-o resultado %G$
<a funci/n su-a recibe dos par-etros9 la lista de enteros y un par-etro en el cual ire-os
acu-ulando la su-a dentro de un proceso recursivo$
=bsere en la figura ' co-o la funci/n se define a tras de los posibles alores de entrada 3ue
pueda to-ar, define la funci/n su-a en el caso de 3ue una lista sea aca9 su-a TU s Q s, y
posterior-ente se define en el caso de una lista cuya cabe6a es 4 y cola es 4s su-a (494s, s Q su-a
4s (4Rs,$ El ealuador busca 3ue el alor de entrada se a0uste a algunos de los argu-entos
i63uierdos de las definiciones y en caso de encontrar alguno entonces su e4presi/n derec2a ser
usada para la lla-ada de la funci/n$ 1inal-ente note la i-portancia 3ue tiene el a0uste de patrones a
la 2ora de definir un proceso recursivo en Has7ell$
;e acuerdo con lo anterior Has7ell ofrece algunas enta0as 3ue suenan bastante interesantes en el
-o-ento de desarrollar soft.are9
Est abierto 2acia la ense8an6a, la inestigaci/n y el desarrollo de aplicaciones,
incluyendo la construcci/n de siste-as robustos
$
Es de do-inio pCblico, cual3uier persona puede usarlo libre-ente$
Has7ell per-ite eli-inar los parntesis de las e4presiones -ediante el -ecanis-o de
a0uste patrones por e0e-plo f(4,y,6, puede ser escrito co-o Pf 4 y 6S$ ;e -anera si-ilar
las definiciones pueden ser escritas sin usar punto y co-a (B, para separarlas, solo e4ige
3ue las e4presiones estn escritas en colu-nas siguiendo la -is-a sangra$ <o anterior
2ace 3ue el c/digo sea corto, claro y de fcil -anteni-iento$
Pocos errores en tie-po de e0ecuci/n$
L
Per-ite re(usar el c/digo gracias a la generalidad 3ue ofrece el poli-orfis-o$ Por lo tanto,
es posible adaptarlo con facilidad a una gran cantidad de aplicaciones$
<a ealuaci/n pere6osa y las funciones de alto orden per-iten construir progra-as -s
-odulares, donde cada parte (funci/n, tiene su propio significado y es independiente del
progra-a$
5in e-bargo, es i-posible dar todos los crditos a Has7ell pues e4isten algunas desenta0as9
Has7ell ofrece al progra-ador -enos control sobre la -a3uina (progra-aci/n de alto
niel,, esto puede traer ciertos inconenientes cuando se 3uiere dise8ar soft.are donde el
-4i-o dese-pe8o se re3uiere a cual3uier costo (progra-aci/n de ba0o niel,$
El recolector de basura a pesar de librar al progra-ador del -ane0o de -e-oria tiene un
costo en tie-po de e0ecuci/n, lo cual puede repercutir en la eficiencia del progra-a$
A pesar de todo, los autores e inestigadores de Has7ell (H"AHE5 ,%HH+, argu-entan 3ue el
sacrificio es -ni-o co-parado con las enta0as 3ue ofrece el lengua0e$ <os beneficios de un
-odelo de progra-aci/n 3ue ofre6ca -s soporte alen -s 3ue los -odestos costos de e0ecuci/n$
+onstruccin de una librer,a de Redes Neuronales en Haskell
Para construir un algorit-o en progra-aci/n funcional, este debe ser isto co-o una
funci/n e4plicita, al cual se le ingresa unos alores de entrada para retornar una salida, de -anera
si-ilar una red neuronal se co-porta co-o una funci/n$$ <a figura A nos presenta de -anera
es3ue-tica la relaci/n$
uncin Haskell Red Neuronal
y Q f ( x , output Q progra-a (input, output Q red (input,
igura -% El concepto de Red neuronal y de Algorit-o en Has7ell$
A2ora bien, para lograr una i-ple-entaci/n con 4ito es necesario considerar los siguientes
aspectos9 estructura de datos, las funciones de Ilgebra <ineal y Clculo, el proble-a de la iteraci/n,
H
co-o al-acenar los pesos y bias de la red, el con0unto de entrena-iento y las funciones de
actiaci/n$
(structura de datos
Al -o-ento de representar una -atri6 2aciendo uso de la progra-aci/n funcional es necesario
construir una estructura de datos 3ue 2aga uso de listas en e6 de arreglos e ndices por los
siguientes -otios9
<as listas son la estructura lineal -s i-portante de Has7ell, ade-s cuenta con un gran
nC-ero de funciones y operaciones para utili6arlas$
A parte de la poca e4presiidad, la representaci/n de una -atri6 inde4ada en Has7ell es poco
eficiente, ya 3ue los alores al ser atrapados en el constructor de datos Array, son de difcil
acceso y esto tiene un costo co-putacional$
<a figura 8 nos -uestra co-o se representa una -atri6 por -edio de listas de listas, donde cada
una de ellas representa una fila de la -atri6$
[ ] [ ] [ ] [ ] B i g f e c ! a
B i
g f e
c ! a
, , , , , , , , =
igura .% "na -atri6 co-o lista de listas$
/lgebra 0ineal sin ,ndices
El siguiente paso consiste en desarrollar una librera de operaciones bsicas de lgebra lineal para
construir los algorit-os de entrena-iento$ Para er el proceso de construcci/n obsere 3ue en la
figura 9, la funci/n )ipmatriz se usa para definir funciones 3ue respectia-ente su-en, resten y
-ultipli3uen ele-ento a ele-ento dos -atrices, esta abstracci/n 2ace uso del concepto de funci/n
de alto niel$
%+
zipFila ::(Num a)=>(a->a->a)->[a]->[a]->[a]
zipFila f [] [] = []
zipFila f (x:xs)(y:ys) = (f x y):zipFila f xs ys
zipMatriz ::(Num a)=>(a->a->a)->[[a]]->[[a]]->[[a]]
zipMatriz f [] [] = []
zipMatriz f (x:xs)(y:ys) = zipFila f x y: zipMatriz f xs ys
sumaMatriz,restaMatriz, mulmatriz ::(Num a)=>[[a]]->[[a]]->[[a]]
sumaMatriz a b = zipMatriz (+) a b
restaMatriz a b = zipMatriz (-) a b
mulMatriz a b = zipMatriz (*) a b
Ejemplo:
sumaMatriz [[3,],[!,"]] [[#,$],[%&,']] = [[%%,%3],[%!,#]]
igura 1% 1unci/n )ipmatri)$
;e -anera si-ilar es posible construir funciones para desarrollar diferentes tipos de clculos
-atriciales sin 2acer uso de arreglos e ,ndices, co-o lo son los productos entre -atrices, el clculo
de la inersa, soluci/n de siste-as de ecuaciones, el proceso de ortogonali6aci/n de Ara-(5c2-idt
entre otros$
Iteracin y Recursin
El entrena-iento de una red neuronal es un proceso iteratio el cual consiste de la actuali6aci/n de
sus pesos y !ias 2asta 3ue se cu-pla un criterio de parada$ El -odelo i-peratio de progra-aci/n
i-ple-enta la iteraci/n y la actuali6aci/n por -edio de ciclos y asignaciones$ En el caso de
lengua0e C, el proceso iteratio se puede 2acer por e0e-plo por -edio de la estructura do2
w3ile4+ondicin5 la cual se e0ecuta una y otra e6 -ientras la condici/n sea erdadera$ En el caso
de la actuali6aci/n, los lengua0es i-peratios proporcionan la posibilidad de 3ue una ariable puede
ca-biar su alor en -e-oria, esto se puede 2acer -ediante una asignacin$ Por su parte, Has7ell
no ofrece estructuras cclicas ni asignaciones, esto se debe a la naturale6a -is-a de la
%%
progra-aci/n funcional la cual actCa por -edio de declaraciones y reducci/n de e4presiones$ 5in
e-bargo la iteraci/n y la actuali6aci/n de ariables se puede superar por -edio de declaraciones
recursivas$ Es fcil de-ostrar por inducci/n -ate-tica 3ue todo proceso iteratio se puede
e4presar co-o un proceso recursio$ <a figura > nos -uestra la funci/n fIter la cual reali6a un
proceso !teratio -ediante la recursi/n$ =bsere co-o fIter se define 2aciendo uso de s -is-a y
2ace uso de alores enteros para deter-inar el nC-ero de ciclos de la iteraci/n ( init$ y final5% En el
lla-ado recursio init au-enta en una unidad y el proceso ter-ina una e6 init sea i(ual a final,
de lo contrario sigue modificando el valor g a travs de alguna funcin h.
fIter :: a -> )*t -> )*t -> b
fIter ( i*it fi*al = if (i*it==fi*al) t+e* ( else fIter (+ () (i*it+%) fi*al
igura 6% Proceso !teratio 2aciendo uso de la recursi/n$
<a i-ple-entaci/n lleada a cabo se reali6/ pensando en los algorit-os de entrena-iento de redes
feedfor.ard -ulticapa$ <a ar3uitectura de una capa de este tipo de red luce co-o en la figura L9
igura 7% Ar3uitectura de una capa$
Por lo tanto es necesario declarar los siguientes tipos co-o se aprecia en la figura =9
type )*put = [[Fl,at]]
type -ar(et=[[Fl,at]]
type NeuralNet.,r/ = ( [[Fl,at]],[[Fl,at]] )
igura 8% 1unci/n )ipmatri)$
%*
fIter g
34g5
<os tipos )nput y $arget no son -s 3ue una redeclaraci/n de una -atri6 de tipo 1loat$ Por su parte,
el tipo NeuralNetwork se define co-o una pare0a ordenada donde el pri-er co-ponente
corresponde a la -atri6 de pesos y la segunda co-ponente corresponde a la -atri6 de !ias de la
capa, es decir ( ) ! C, $
Para si-ular una capa se define la funci/n simlayer9
sim0ayer :: )*put->NeuralNet.,r/->(Fl,at->Fl,at)->-ar(et
sim0ayer p1 (.,b) f = mapMatriz f (sumar2e3t,r4,lum*as (pMatriz . p1) b)
igura $9% 1unci/n simlayer$
=bsere en la figura 63 la gran si-ilitud sintctica con la for-ulaci/n -ate-tica de la salida de
una capa, pues el lla-ado de esta funci/n seria de la siguiente for-a9
a=simlayer p (W,b) f
"n 2ec2o interesante estriba en 3ue la funci/n de actiaci/n f puede ser definida en un -/dulo
anterior y luego ser lla-ada, de esta for-a se puede definir una ar3uitectura perceptron o una
Adalaine respectivamente co-o9
sim0ayer p (.,b) +ar5lim
sim0ayer p (.,b) pureli*e
<a funci/n anterior nos per-ite definir una funci/n para el caso en el cual tene-os una ar3uitectura
de cual3uier cantidad de capas y neuronas en cada capa (figura 66,$
simMultilayer :: )*put->[NeuralNet.,r/] ->[(Fl,at->Fl,at,Fl,at->Fl,at)] ->[-ar(et]
simMultilayer 6 [] 6 = []
simMultilayer p1 ((:(s) ((f,f7):fs) = a:simMultilayer a (s fs
.+ere
a=(sim0ayer p1 ( f)
igura $$% 1unci/n sim:ultilayer$
"na e6 se 2a definido una funci/n de si-ulaci/n, se necesario considerar toda una serie de
funciones au4iliares para el -ane0o de la infor-aci/n co-o lo son9
1unciones de conersi/n lista a Neuralnetwork y iceersa
1unciones para iniciali6ar los pesos y bias$
%'
1inal-ente 2ace falta construir las funciones de entrena-iento y de interfase con el usuario para
confor-ar la pri-era fase de la librera$ Estas son las siguientes9
1unci/n trainperceptron para entrenar una red Perceptron
1unci/n trainAdaline para entrenar una red Adaline
1unci/n train!"#$ para entrenar una red Dac7propagation con gradiente descendente
1unci/n train!bm para entrenar una red Dac7propagation con gradiente descendente en
-odo cascada$
1unci/n train!% para entrenar una red Dac7propagation con -o-entu-
1unci/n train!%& para entrenar una red Dac7propagation con rata de aprendi6a0e ariable
1unci/n trainC"! para entrenar una red Dac7propagation con gradiente con0ugado
1unci/n train'%! para entrenar una red Dac7propagation con <eenberg(Mar3uardt
Es de inters notar 3ue la cantidad de c/digo para la creaci/n de la librera es real-ente
pe3ue8o en co-paraci/n con otros lengua0es de progra-aci/n$ (:o supera los X+J,, para
apreciar esto en detalle obsere en la figura 6: el c/digo de la funci/n trainperceptron( la
cual recibe co-o argu-entos la -atri6 % de entrada, la -atri6 de $ de superisi/n y las -atrices de
pesos y !ias de la red$ Esta retorna las -atrices de pesos y !ias entrenadas$
trai*8er3eptr,* :: )*put->-ar(et->NeuralNet.,r/->)*t->[()*t,NeuralNet.,r/)]
trai*8er3eptr,* p t ( s+ = t8er3eptr,* p7 t7 ( size & s+
.+ere
p7 =(+ea59rray p)
t7 =(+ea59rray t)
size =(fr,m)*te(er (l,*( (+ea5 t)))
t8er3eptr,* :: [)*put]->[-ar(et]->NeuralNet.,r/ ->)*t ->)*t ->)*t->[()*t,NeuralNet.,r/)]
t8er3eptr,* p t ( : ep,3a s+ =
let
;
prueba=trai**i*( p t ( &<
*ext =if ((ep,3a =m,5= s+)==&) t+e* (ep,3a,([],[])):r else r<
r =t8er3eptr,* p t (s*5 prueba) : (ep,3a+%) s+
>
i* if (fst(prueba)==:) t+e* [(ep,3a,()] else *ext
trai**i*( :: [)*put]->[-ar(et]->NeuralNet.,r/->)*t->()*t,NeuralNet.,r/)
%&
trai**i*( [] 6 ( s = (s,()
trai**i*( (x:xs) (y:ys) ( s = if (es4er, e &)==& t+e* trai**i*( (xs)(ys) ( (s+%)
else trai**i*( (xs) (ys)(a3tualizar x e () s
.+ere
e = restaMatriz y (sim0ayer x ( +ar5lim)
es4er, :: [[Fl,at]]->)*t->)*t
es4er, [] s = s
es4er, (x:xs) s = if x==[&] t+e* es4er, xs s else es4er, xs (s+%)
a3tualizar :: [[Fl,at]]->[[Fl,at]]->NeuralNet.,r/->NeuralNet.,r/
a3tualizar p e (.,b) = (sumaMatriz . (pMatriz4 e p) , sumaMatriz b e)
igura $'% <a 1unci/n train!erceptron y sus funciones au4iliares$
;esin de (ntrenamiento
Para entrenar y dise8ar una red -ediante la librera de Redes :euronales, se puede usar
)ugs *+, un progra-a con la capacidad de interpretar el lengua0e Has7ell HL$ =tra alternatia es el
co-pilador ")C (Alasgo. Has7ell Co-piler, con la posibilidad de crear arc2ios e0ecutables$ <a
librera es portable y se puede usar tanto en el interpretador Hugs HL co-o en el co-pilador
Alasgo.$ Co-o e0e-plo, obsere la sesi/n de entrena-iento de la figura %', la cual puede ser
escrita en un fic2ero de e4tensi/n (W$t4t, y guardada con e4tensi/n (W$2s,$
Module 8arity8r,blem where
import -ra*sfer
import NeuralNet.,r/
import )*terfa3e
p ::)*put ?? Matriz 5e @*tra5a
p =[ [-%,-%,','],[&,!,&,!] ]
t ::-ar(et ?? Matriz 5e AuperBisiC*
t =[[-%,-%,%,%]]
brai* :: [NeuralNet.,r/] ?? 0ista 5e 8areDas 5e (E,b) Matriz 5e 8es,s y Fias
brai* = [([[-&G'H,&G'#],[-&G%,&G!],[&G'!,&G3] ], [ [-&G# ],[-&G%3],[-&G'] ]),( [[&G&$,-&G%H,&G%]],[[&G#]])]
ft :: [(Fl,at->Fl,at,Fl,at->Fl,at)] ?? 0ista 5e fu*3i,*es 5e a3tiBa3iC* p,r 3apas
ft = [(ta*si(,5Bta*si(),(pureli*,5Bpureli*)]
mai* = e*tre*arF8IAJ p t brai* ft &G&! 3&& !& &G&&&&%
igura $*% 5esi/n de Entrena-iento$
Al e0ecutar este -/dulo y lla-ando a la funci/n main ,-,. +/* se obtiene el resultado 3ue se
-uestra en la figura %&9
%G
K@p,3a &?3&&, MA@ %G3%&HH&?&G&&&&%&&&K
K@p,3a !&?3&&, MA@ &G&&%H&H'&?&G&&&&%&&&K
K@p,3a %&&?3&&, MA@ &G&&&%#%&3?&G&&&&%&&&K
K@p,3a %!&?3&&, MA@ &G&&&&$%$?&G&&&&%&&&K
K@p,3a '&&?3&&, MA@ &G&&&&%"H%?&G&&&&%&&&K
K@p,3a ''"?3&&, MA@ &G&&&&&$$H?&G&&&&%&&&K
Aimula3i,* :
[-%G&&""'&& -&G$$!$3H%& %G&&%'%%#& &G$$$!$&&]
AuperBisi,* :
[-%G&&&&&&&& -%G&&&&&&&& %G&&&&&&&& %G&&&&&&&&]
igura $-% Resultados de Entrena-iento$
<a librera ofrece la posibilidad de al-acenar los pesos y bias de la red en un arc2io de te4to$
(studio +omparati&o
Para estudiar el dese-pe8o de la i-ple-entaci/n se utili6aron arios proble-as de
referencia 3ue aparecen en la literatura de las redes neuronales$ Estos se encuentran clasificados
segCn su naturale6a y el ta-a8o de la infor-aci/n 3ue procesan$ Para reisar de for-a relatia la
eficiencia en tie-po de entrena-iento de la librera, se reali6an *+ corridas de cada funci/n sobre
un -is-o proble-a, -odificando los pesos iniciales de la red y los par-etros de entrena-iento de
cada funci/n$ En esta co-paraci/n la -e0or respuesta se considera a3uella 3ue ofre6ca el -enor
error medio cuadr0tico$ ;ic2a respuesta ser co-parada con Matlab e0ecutndola %+ eces y
utili6ando los -is-os par-etros y pesos iniciales de entrena-iento, el -e0or tie-po es to-ado en
a-bos casos$ >odas las pruebas se reali6aron en un PC con procesador AM;(A>H<=: de LG+ M26
con *G) Mb de -e-oria, utili6ando a @indo.s HL co-o siste-a operatio$ El co-pilador para la
librera en Has7ell fu AHC co-piler ersi/n G$+&$' para @indo.s y los tie-pos fueron capturados
-ediante la funci/n getCloc7>i-e, una funci/n pre(definida de Has7ell$ Para la co-paraci/n se us/
Matlab ersi/n )$%$+$&G+ release %*$%$ <a siguiente tabla 2ace un resu-en de los proble-as de
entrena-iento9
Proble-a >ipo de Proble-a Configuraci/n >olerancia (-se,
5eno Apro4$ 1unciones %(G(% +$++*
Encoder Apro4$ 1unciones %+(G(%+ +$+%
%)
Paridad ' bits Rec$ de Patrones '('(% +$++%
Paridad ) bits Rec$ de Patrones )(%*(% +$++%
#abla $% Proble-as de referencia para anali6ar el dese-pe8o$
En las siguientes ta!las :# ; y A se obsera la co-paraci/n reali6ada entre la librera de Has7ell y
Matlab, a3u $4s5, significa tie-po en segundos, D significa el nC-ero de pocas y mse el error
-edio cuadrtico$
Has7ell >(s, E Mse Matlab >(s, E Mse
DPb- %G% %G+++ +$++' traingd X+$+H %G+++ +$++*%GH&X
DPM *G *&%H +$++%HHLG traingd- XG$&% %G+++ +$&L'&G
DPMY G+ '%'+ +$++%HHHH& traingd4 %&$H& '%)L +$++%HHHG%
DPAC %L *+L +$++%)G&*) traincgf %$X) %%G +$++%HL)+L
DP<M ' *G +$+++%))XL trainl- +$'H *' +$++%GG%
#abla '% Co-paraci/n entre los -e0ores resultados obtenidos por las funciones de la librera de Has7ell y sus
respectias funciones 2o-ologas en Matlab para el entrena-iento de la funci/n sen(4,$
Has7ell >(s, E Mse Matlab >(s, E Mse
DPb- *' L)G& +$+++HHL) traingd '&$L* L)G& +$+++HHLL*L
DPM % &GH +$+++HGH% traingd- *$*G &GH +$+++HHGH+G
DPMY %' '%*+ +$+++LGG+' traingd4 %'$X' '*'+ +$+++HX*HG*
DPAC ' HG +$+++)L'& traincgf %$H' %)+ +$+++HH%X)X
DP<M % L +$+++%G&%X trainl- +$*X L +$+++%G'*'G
#abla *% Co-paraci/n entre los -e0ores resultados obtenidos por las funciones de la librera de Has7ell y sus
respectias funciones 2o-ologas en Matlab para el proble-a de la paridad de ' bits$
Has7ell >(s, E Mse Matlab >(s, E Mse
DPb- G' ')*H +$++HHH*'* traingd &&$+G %++++ +$+G%''&&
DPM *) %GHG +$++HHL*+% traingd- &X$'G %++++ +$+*+L&'H
DPMY ' %+' +$++H*X+)H traingd4 +$H& %&) +$++H'+GX&
DPAC '% %X* +$++HHX&X traincgf %$+& )H +$+%++++L
DP<M %*' X +$+++X%*&% trainl- %$*) H* +$+%++++&
#abla -% Co-paraci/n entre los -e0ores resultados obtenidos por las funciones de la librera de Has7ell y sus
respectias funciones 2o-ologas en Matlab para el proble-a del Encoder %+(G(%+$
El estudio co-paratio -uestra 3ue el dese-pe8o de la librera es bastante bueno teniendo co-o
referente a Matlab para los proble-as propuestos$ <a secci/n anterior ta-bin -uestra un c/digo
claro, corto en co-paraci/n con los lengua0es i-peratios y sin la necesidad de usar arreglos e
ndices$ 5in e-bargo se -ostr/ 3ue se re3uiere de -uc2o -s tie-po para reali6ar las operaciones$
%X
<o anterior per-ite for-ular la siguiente pregunta9 MCul puede ser el papel de Has7ell frente a la
co-putaci/n nu-rica en la actualidadN
Haskell y 0a computacin Num"rica
<a progra-aci/n funcional ofrece la oportunidad de crear un c/digo -uc2o -s co-prensible y
fcil de -ane0ar gracias a la si-ilitud sintctica con la -ate-tica, los altos nieles de abstraci/n
per-iten crear un c/digo -s estructurado y reusable$ :o se pide obtener una alta eficiencia en
tie-po por parte de Has7ell, pues su -is-a naturale6a co-o lengua0e de alto niel lo i-pide,
ade-s la relatia 0uentud de este tipo de progra-aci/n ofrece un gran ca-po de inestigaci/n en
el cual se puede pensar en buscar nueas alternatias para la construcci/n de co-piladores -s
eficientes, co-o ta-bin en la for-aci/n de alian6as con lengua0es de ba0o niel para la
opti-i6aci/n de algunas operaciones, co-o es el caso del producto de alores de punto flotante$ <o
i-portante a destacar estriba en las posibilidades 3ue tiene Has7ell para la creaci/n y
e4peri-entaci/n de nueos algorit-os en el ca-po de la co-putaci/n nu-rica$ Co-o e0e-plo es
posible, aproec2ar el lengua0e para la e4peri-entar -odificaciones en los algorit-os ob0eto de
estudio, este es el caso del algorit-o para entrenar una red neuronal por -edio del gradiente
descendente 2aciendo uso del momentum para filtrar la oscilaci/n del algorit-o frente a la rata de
aprendi6a0e$ <a regla para calcular el gradiente es9
"na posible -odificaci/n de este algorit-o consiste en al-acenar el gradiente negatio
-ultiplicado por la rata de aprendi6a0e de la iteraci/n anterior9
Esta -odificaci/n no i-plica un ca-bio significatio en la estructura del c/digo de la funci/n
train!%, sin e-bargo se obtienen interesantes resultados en el caso del proble-a de la paridad
con ' bits$ <a ta!la 8 contiene la co-paraci/n entre train!% y la funci/n -odificada
%L
train!%mod, considerando *+ corridas de a-bas funciones con diferentes pesos iniciales y
diferentes par-etros de entrena-iento$ En este caso se registr/ el nC-ero de pocas y el -se de
cada sesi/n, el -4i-o nC-ero de pocas per-itidas fu de %G+++$
No. Semilla Lr Mo
Epocas
train!% mse
Epocas
train!%mod mse mod
1 742 0,4 0,8 2339 0,00098567 1057 0,00090055
2 635 0,6 0,8 1662 0,00099051 617 0,00091584
3 978 0,4 0,9 15000 0,21901823 1710 0,00096925
4 30 0,7 0,9 5066 0,00099667 1469 0,00089077
5 730 0,5 0,9 691 0,0009966 679 0,00096144
6 230 0,5 0,9 768 0,00099915 835 0,000993
7 316 0,6 0,9 15000 0,4999997 804 0,00098025
8 246 0,8 0,9 2470 0,0009996 4248 0,00099187
9 77 0,6 0,9 1216 0,00099865 682 0,00096919
10 508 0,6 0,9 15000 0,5 2698 0,00093841
11 92 0,6 0,9 15000 0,499999 4251 0,00094779
12 513 0,6 0,9 943 0,00099666 1062 0,00094563
13 715 0,6 0,9 1440 0,00099993 814 0,00095915
14 524 0,6 0,9 1007 0,00099917 576 0,00099122
15 301 0,6 0,9 15000 0,16697064 787 0,00098572
16 129 0,6 0,9 15000 0,18768963 822 0,00095913
17 753 0,6 0,9 15000 0,15018547 811 0,00094694
18 171 0.6 0.9 15000 0.18825182 1031 0.00096965
19 94 0,6 0,6 337 0,00099996 657 0,00099954
20 953 0,6 0,9 15000 0.18760048 1054 0.00097735
#abla .% Co-paraci/n entre los -e0ores resultados obtenidos por las funciones train"%M y train"%Mmod de
la librera de Has7ell$
=bsere en la ta!la 8 co-o la -odificaci/n train!%mod per-ite encontrar resultados en a3uellas
situaciones donde la funci/n original no conerge$ El pr/4i-o paso consistira entonces en reisar
las propiedades -ate-ticas de este resultado, las posibilidades 3ue este ofrece, y posterior-ente se
puede pensar en la i-ple-entaci/n de la -is-a en un lengua0e de ba0o niel$
+onclusiones y #rabajo uturo
En el transcurso de la inestigaci/n, en lo atinente a la reisi/n bibliogrficaB el dise8o y la
i-ple-entaci/n de la libreraB el desarrollo de la interfase y el estudio co-paratio con MatlabB se
destacan las siguientes conclusiones9
%H
#ued/ de-ostrado 3ue no es necesario usar ndices y arreglos para el dise8o e
i-ple-entaci/n de algorit-os 3ue si-ulen y entrenen redes neuronales$
Has7ell posee grandes posibilidades para el dise8o y ealuaci/n e4peri-ental de nueos
algorit-os de for-a rpida gracias a la cercana 3ue tiene con la especificaci/n del proble-a
a i-ple-entar y su si-ilitud sintctica con la -ate-tica$ Has7ell per-ite e4presar
algorit-os de for-a clara y si-ple, esto es Ctil en el -o-ento de desarrollar y de deriar
ersiones -s eficientes a ba0o niel$
<a librera sire con fines educatios, se puede usar para 3ue los estudiantes aprendan a
dise8ar y a entrenar redes neuronales co-o ta-bin la for-a co-o se i-ple-entan en
lengua0es funcionales$ 5e desarroll/ una tcnica efectia de escribir e i-ple-entar
algorit-os de redes neuronales considerando todas las enta0as y propiedades esenciales de
la progra-aci/n funcional$
Has7ell co-o lengua0e de progra-aci/n funcional puro, aCn no est preparado para co-petir
por la eficiencia en tie-po, su caracterstica de lengua0e de alto niel le i-pide tal rapide6,
por tal -otio es necesario la generaci/n de alian6as con lengua0es de ba0o niel 3ue se
encarguen de 2acer el traba0o pesado y -enos significatioB en el caso de las redes
neuronales el producto punto y el producto de -atrices$ Co-o e0e-plo de estas alian6as,
-uc2os de los algorit-os de Matlab estn desarrollados en una eficiente librera de ba0o
niel dise8ada para el lgebra lineal nu-rica conocida co-o <APACJ$ Adicional-ente
Matlab 2ace un uso cuidadoso de C y ensa-blador en -uc2as de sus rutinas$ Estas alian6as
2an logrado opti-i6ar significatia-ente las operaciones 3ue se pueden reali6ar en Matlab,
co-o referencia, para ciertas ersiones de Matlab, calcular el producto de -atrices de
ta-a8o G*L to-aba 2asta *G segundos, las nueas ersiones pueden reali6ar esta operaci/n
en -enos de '$) segundos$
#rabajo uturo
*+
5e 2ace necesario un estudio sobre las posibilidades de 2acer una alian6a entre lengua0es de
ba0o niel y Has7ell para la construcci/n de algorit-os preco-pilados de ba0o niel 3ue
puedan ser usados por Has7ell$
A niel te/rico es necesario obserar las posibilidades 3ue Has7ell ofrece para el dise8o de
nueos algorit-os de redes neuronales pura-ente funcionales, e4plicando la teora de las
redes desde el la-bda clculo$
*%
Referencias
%$ D!R;, R$ (*+++,, )ntroducci&n a la %rogramaci&n Funcional con Haskell , Prentice
Hall$
*$ ;EM">H, H$ (*+++, Neural Network Matla! $ool!o'. >2eMat2@or7s,!nc$
'$ ;=:=5=, K (*+++, Desarrollo y an.lisis del rendimiento de la programaci&n
funcional para la soluci&n de ecuaciones diferenciales. Eevista )ngenierFa y
desarrollo. Gniversidad del Norte# "arran(uilla *olom!ia.
&$ 1A"5E>>, <$ (%HH&, Fundamentals of Neural Networks. Prentice Hall$
G$ HAAA:, M$ ;EM">H, H$ y DEA<E, M$ (%HHG, Neural Network Design$ Plus
Publis2ing Co-pany$
)$ H!<ERA, J$ y MAR>!:EZ, O$(*+++, Eedes Neuronales /rtificiales. Alfao-ega$
X$ H"AHE5, J$ (%HH+, Cy Functional %rogramming Matters$ >utorial$
L$ J=:E5, M$ y PE>ER5=:, J$ (%HHH, Hugs HL$ Manual de "suario
H$ M=<ER, C$ (*+++,Matla! )ncorporates Lapack$ Matlab :e.s And :otes$
%+$ PEK>=: 5$ (*+++,, / Hentle )ntroduction to Haskell , >utorial$
%%$ RA=, O$ y RA=, H (%HH',, (%HH', CRR :eural :et.or7s and 1u66y <ogic,
EditMis Press$
%*$ R!E;M!<ER, M$ (%HH&, /dvanced Iupervised Learning in Multi-Layer
%erceptrons from "ackpropagation to /daptive Learning /lgoritms$ Journal of
Co-puter 5tandards and !nterfaces 5pecial !ssue on :eural :et.or7s$
%'$ R"5E<<, 5$ y :=RO!A, P$ (%HH), )nteligencia /rtificial0 Gn Dnfo(ue Moderno$
Prentice Hall$
%&$ 5ERRARE:5, P$ (%HHH, )mplementation te *onBugate Hradient /lgoritm in a
Functional Language$ Co-puter 5cience !nstitute "niersity of :i0-egen
%G$ 5HA:A, K$ y @AH, D$ (%HH), Hlo!al +ptimi,ation for Neural Network $raining$
Coordinated 5cience <aboratory "niersity of !llinois$
%)$ 5J!D!:5JK, J$ (%HHL,$ )nde'less Linear /lge!ra /lgoritms$ :u-eric #uest !nc
Hunstsille(=ntario Canada$
%X$ OA: R=K P$ y HAR!;! 5$, (*++*, *oncepts# $ecni(ues# and Models of *omputer
%rogramming.
**

También podría gustarte