Академический Документы
Профессиональный Документы
Культура Документы
Declarativa
1
NDICE
1. Introduccin
2
NDICE
3. Definicin de Capas
3.1 Definicin de una Capa
3.2 Definicin de mltiples Capas
5. El perceptrn Simple
5.1 Introduccin.
5.2 Ejemplo de entrenamiento
5.2.1 Entrenamiento 1iteracin
5.2.2 Entrenamiento 2iteracin
5.3 Otro Ejemplo de entrenamiento sobre la mquina.
3
NDICE
7. NeuroScheme
7.1 Introduccin
7.2 Seis Razones para elegir la programacin funcional
7.3 Arquitectura de la Herramienta
7.4 Interfaz con el Sistema
7.5 Interfaz Grfica de Usuario
7.6 Implementacin de RNAS
7.7 Resultados Obtenidos
8. Conclusiones
8.1 Conclusiones Haskell
8.2 Conclusiones NeuroScheme
8.3 Trabajo Futuro
9. Referencias
4
1. Introduccin
En la actualidad, la gran mayora del software de simulacin y entrenamiento
de redes neuronales es desarrollado mediante lenguajes imperativos como
C++, Java...
5
1.1 Haskell y La computacin
Numrica
La programacin funcional ofrece la oportunidad de crear un cdigo mucho
ms comprensible y fcil de manejar gracias:
La similitud sintctica con la matemtica.
Los altos niveles de abstraccin permiten crear un cdigo ms estructurado y reusable.
No se pide obtener una alta eficiencia en tiempo por parte de Haskell, pues su
misma naturaleza como lenguaje de alto nivel lo impide.
6
1.2 Computacin celular
Este nuevo paradigma computacional suministra nuevas
formas de hacer la computacin ms eficiente (en
trminos de velocidad, coste, disipacin, almacenamiento
y calidad de la solucin) para tratar grandes problemas
en dominios de aplicacin especficos.
7
1.3 Redes Neuronales
Una red de neuronas artificiales est caracterizada por su:
8
1.3.1 Redes Neuronales
Celulares
Las redes neuronales celulares estn constituidas
por un conjunto de unidades de proceso, llamadas
neuronas, cuyos valores posibles pueden ser discretos
o continuos y el valor que presenta cada unidad
neuronal viene dado por una funcin que depende de
una combinacin lineal de los estados de las unidades
vecinas. (potencial sinptico)
9
1.4 Objetivos
Mostrar que es posible aprovechar la potencia expresiva de Haskell
para la definicin eficiente de las redes neuronales.
10
2. Construccin de una librera
de Redes Neuronales en Haskell
Para construir un algoritmo en programacin funcional,
este debe ser visto como una funcin explicita, al cual
se le ingresa unos valores de entrada para retornar una
salida, de manera similar una red neuronal se comporta
como una funcin. La figura nos presenta de manera
esquemtica la relacin.
11
2.1 Estructura de datos
Al momento de representar una matriz haciendo uso de las programacin
funcional es necesario construir una estructura de datos que haga uso de listas
en vez de tablas e ndices por los siguientes motivos:
Las listas son la estructura lineal ms importante de Haskell, adems cuenta con un gran
nmero de funciones y operaciones para utilizarlas.
La siguiente figura muestra como se representa una matriz por medio de listas
de listas, donde cada una de ellas representa una fila de la matriz.
12
2.2 lgebra Lineal sin ndices
El siguiente paso consiste en desarrollar una librera de operaciones
bsicas de lgebra lineal para construir los algoritmos de entrenamiento.
Para ver el proceso de construccin observe en la siguiente figura, la
funcin zipmatriz se usa para definir funciones que respectivamente
sumen, resten y multipliquen elemento a elemento dos matrices, esta
abstraccin hace uso del concepto de funcin de alto nivel.
Nota: Cdigo de Cesar Augusto Acosta Minoli (estas funciones podran sustituirse por funciones predefinidas en haskell)
13
2.3 Iteracin y Recursin
El entrenamiento de una red neuronal es un proceso iterativo en el
cual la red actualiza sus pesos y umbrales hasta que se cumpla un
fIter se define haciendo uso de s
criterio de parada.
misma y hace uso de valores enteros
El modelopara determinar
imperativo de el nmero de ciclos
programacin de la la iteracin y la
implementa
iteracin
actualizacin ( init. yde
por medio final).
ciclosEnylaasignaciones.
llamada Sin embargo la
iteracin recursiva
y la actualizacin de variables
init aumenta se puede
en una unidad y superar por medio
de declaraciones
el proceso recursivas.
termina una vez init sea igual
a final, de lo contrario sigue modificando
La figuraelmuestra
valor g alatravs
funcindefIter la cual
alguna realiza
funcin h. un proceso Iterativo
mediante la recursin.
14
2.3 Iteracin y Recursin
Los elementos mencionados anteriormente son de suma importancia para
la construccin de los algoritmos de entrenamiento. A continuacin se
mostrar algunos de los elementos implementados.
15
2.3 Iteracin y Recursin
Por lo tanto es necesario declarar los siguientes tipos:
16
3. Definicin de una capa
Para simular una capa se defini la funcin simlayer:
17
3.1.1. Funcin de transferencia
Un hecho interesante estriba en que la funcin
de activacin f puede ser definida en un
modulo anterior y luego ser llamada, bien se
puede definir una arquitectura perceptrn o
una Adalaine respectivamente como :
18
3.2 Definicin de mltiples
capas
La funcin anterior nos permite definir una funcin para el
caso en el cual tenemos una arquitectura de cualquier
cantidad de capas y neuronas en cada capa.
19
4. Ventajas de usar Haskell
Un hecho interesante estriba en que la cantidad de cdigo para la
creacin de la librera es realmente pequeo en comparacin con otros
lenguajes de programacin. (No supera los 70K), para apreciar esto en
detalle observe el cdigo la funcin trainperceptron.
Nota: Cdigo de Cesar Augusto Acosta Minoli (Hay funciones que deberan estar mas optimizadas a la programacin funcional)
20
5. El perceptrn Simple
5.1 Introduccin.
Arquitectura de la Red :
N sensores de entrada : x1,x2,,xN pertenecientes a R
1 unidad de proceso: y perteneciente a {0,1} {-1,1}
Regla de aprendizaje:
Memorizamos p pares de patrones : {x1,z1}, {x2,z2},,{
xp,zp}
21
5.1 El perceptrn Simple
Introduccin.
Dinmica de la computacin:
y=f(u)
: umbral o sesgo
h=
22
5.1 El perceptrn Simple
Introduccin.
(k) : tasa de aprendizaje, que optimiza la convergencia de la red.
23
5.2 Ejemplo de entrenamiento
Vamos a tener dos clases de patrones de entrada posibles
los de CLASE A
los de CLASE B
Patrones de entrada
clase A={ (-0.5, -0.5), (-0.5, 0.5) }
clase B={ ( 0.3, -0.5), (0.0, 1.0) }
24
5.2.1 Entrenamiento 1iteracin
25
5.2.1 Entrenamiento 1iteracin
Como h es menor que el umbral (u = 1 ) entonces el perceptron
pondr a la salida uno 0
El perceptrn estar determinado por la funcin paso, es decir si
el potencial sinptico es mayor que el umbral entonces pone a la
salida un 1, de lo contrario pondr un 0.
26
5.2.2 Entrenamiento 2iteracin
Ahora cogemos otro patrn cualquiera de entrada, por ejemplo
uno de la clase A : (-0.5, 0.5)
27
5.2.2 Entrenamiento 2iteracin
Segn expusimos anteriormente:
n es el patrn de aprendizaje n=0.1
wi(1): peso sinptico de la entrada i, durante la iteracin 1.
xi : valor de la entrada i
zi : Salida deseada para la entrada i
yi : Salida Obtenida para la entrada i
u(i): umbral durante la iteracin i
28
5.2.2 Entrenamiento 2iteracin
29
5.3 Otro Ejemplo de entrenamiento
sobre la mquina.
module ParityProblem where
import Transfer
import NeuralNetwork
import Interface
p::Input
p= [[0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0],
[0.0,0.0,1.0,1.0,0.0,0.0,1.0,1.0],
[0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0]]
t:: Target
t= [[0.0,1.0,1.0,0.0,1.0,0.0,0.0,1.0]]
30
5.3 Otro Ejemplo de
entrenamiento sobre la mquina
El resultado es el siguiente:
Simulacion :
[0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0;
0.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0]
Supervision :
[0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0;
0.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0]
31
6. Estudio comparativo: Haskell vs. Matlab
El estudio comparativo muestra que el desempeo de la
librera es bastante bueno teniendo como referente a Matlab
para los problemas propuestos.
32
6. Estudio comparativo: Haskell vs. Matlab
Tiempos en Clasificacin
3,5
2,5
Tiempo
2 Haskell
1,5 Matlab
0,5
0
Perceptron Adalina BAM Perceptron BGM
multicapa
Tipo de Red
Todas las pruebas se realizaron en un PC con procesador AMD-ATHLON de 850 Mhz con 256
Mb de memoria, utilizando Windows 98 como sistema operativo.
El compilador para la librera en Haskell fue GHC compiler versin 5.04.3 para Windows y los
tiempos fueron capturados mediante la funcin getClockTime, una funcin pre-definida de
Haskell.
33
7. NEUROSCHEME
7.1 Introduccin
34
7.2 Seis razones para elegir la
programacin funcional.
1. La programacin funcional es mucho ms simple, ya que las
expresiones son construidas en forma natural inherentemente
recursiva.
35
7.2 Seis razones para elegir la
programacin funcional.
5. Es posible alternar el orden de evaluacin de las expresiones en los
lenguajes funcionales.
36
7.3 Arquitectura de la Herramienta
El ncleo de la herramienta es un interprete de Scheme basado en un
montculo de memoria.
Un compilador.
37
7.4 Interfaz con el sistema y usuarios
38
7.5 Interfaz grfica de usuario
39
7.6 Implementacin de RNAS
Se han implementado tres modelos de propagacin hacia delante:
Feedforward.
Cascada correlacin.
Cascada hacia delante.
40
7.7 Resultados Obtenidos
La red neuronal se modela como un tipo de dato propio del lenguaje,
lo que implica que se encuentra codificada en lenguaje Scheme,
haciendo que la velocidad de los algoritmos de entrenamiento sea tan
alta como en las aplicaciones de usuario final disponibles hoy en da
(matlab).
41
8. Conclusiones
En el transcurso del trabajo, podemos destacar las siguientes
conclusiones:
42
8.1 Conclusiones HASKELL
La implementacin en Haskell permite que el cdigo sea transparente
y ver la forma en que la librera est implementada.
43
8.1 Conclusiones HASKELL
Como ejemplo de estas alianzas, muchos de los algoritmos de
Matlab estn desarrollados en una eficiente librera de bajo nivel
diseada para el lgebra lineal numrica (conocida como
LAPACK)
45
8.3 Trabajo Futuro
Se hace necesario un estudio sobre las posibilidades de hacer
una alianza entre lenguajes de bajo nivel y Haskell para la
construccin de algoritmos precompilados de bajo nivel que
puedan ser usados por Haskell.
46
9. Referencias
1. Blas C. Ruiz Jimnez...[et al.], Programacin funcional
con Haskell Mlaga : Universidad, Secretariado de
Publicaciones, D.L. 1995
47
9. Referencias
5. Martn del Bro B., A. Sanz,(2001) Redes neuronales y
Sistemas Borrosos. Madrid : Ra-Ma, 2 ed.
7. Mark P Jones, Alastair Reid, the Yale Haskell Group, and the
OGI School of Science & Engineering at OHSU, (1994-2002)
The Hugs 98 User Manual, web:
http://cvs.haskell.org/Hugs/pages/hugsman/index.html
48
9. Referencias
8. Jos R. Hilera y Victor J Martinez."REDES NEURONALES
ARTIFICIALES". Madrid : Ra-ma, [1995]
49