Redes Neuronales en Haskell

39
Redes Neuronales en Haskell Antonio Claros, Juan Fco. Gutiérrez, Juan Miguel Muñoz UNIVERSIDAD DE MÁLAGA ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA INFORMÁTICA Programación Declarativa Avanzada

description

UNIVERSIDAD DE MÁLAGA ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA INFORMÁTICA. Programación Declarativa Avanzada. Redes Neuronales en Haskell. Antonio Claros, Juan Fco. Gutiérrez, Juan Miguel Muñoz. Contenidos. Antecedentes Históricos Neurocomputación - PowerPoint PPT Presentation

Transcript of Redes Neuronales en Haskell

Page 1: Redes Neuronales en Haskell

Redes Neuronales en Haskell

Antonio Claros, Juan Fco. Gutiérrez, Juan Miguel Muñoz

UNIVERSIDAD DE MÁLAGAESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA

INGENIERÍA INFORMÁTICA

Programación Declarativa Avanzada

Page 2: Redes Neuronales en Haskell

Contenidos Antecedentes Históricos Neurocomputación Redes Neuronales en Haskell Redes Neuronales en MATLAB Redes Neuronales en LISP Redes Neuronales en la Universidad Conclusiones Referencias

2

Page 3: Redes Neuronales en Haskell

Antecedentes Históricos(I) Las raíces de la computación datan del siglo XIX Problema de

Decisión: “Dada una

representación formal de una afirmación matemática, diseñar un algoritmo que determine si la afirmación es verdadera o falsa”.

David Hilbert (1862-1943)

3

Page 4: Redes Neuronales en Haskell

Antecedentes Históricos(II) Teorema de

Incompletitud: “Ningún sistema de

razonamiento matemático es lo suficientemente potente para ser capaz de probar toda afirmación cierta acerca de las propiedades de los números naturales”. Kart Gödel (1906-

1978)

4

Page 5: Redes Neuronales en Haskell

Antecedentes Históricos(III) Tesis Church-Turing:

“La clase de problemas que se pueden resolver utilizando el sistema de programación de Turing es exactamente el mismo que los que se pueden resolver utilizando cualquier sistema de programación razonable”.

Alan Turing (1912-1954)

5

Page 6: Redes Neuronales en Haskell

Antecedentes Históricos(IV) Warren McCulloch y Walter Pitts padres de la

neurocomputación con la publicación en 1943 “A logical calculus of the ideas immanent in nervous activity”.

En 1957, Frank Rosenblatt desarrolló un conjunto de redes neuronales artificiales que se denominaron perceptrones.

Teuvo Kohonen, en 1972, trabajó en el desarrollo de las redes neuronales de memoria asociativa.

Ágil Carpenter junto con Stephen Grossberg , desarrollaron las redes autoorganizadas

John Hopfield en 1980,trabajó con varias redes neuronales recurrentes con pesos fijos y activaciones adaptativas que pueden resolver problemas de optimización combinatoria

6

Page 7: Redes Neuronales en Haskell

Neurocomputación (I). Red Neuronal.

¿Qué es una red neuronal? ¿Por qué se elige el cerebro como modelo a

seguir?

7

Page 8: Redes Neuronales en Haskell

Neurocomputación (II). Componentes.

Componentes de una red neuronal: Neuronas Conexiones sinápticas Pesos sinápticos Función de activación

8

Page 9: Redes Neuronales en Haskell

Neurocomputación (III). Características.

No linealidad.

Representación de correspondencias entrada-salida.

Tolerancia a fallos y robustez frente a ruido.

Masivamente paralelas.

Información contextual.

9

Page 10: Redes Neuronales en Haskell

Neurocomputación (IV). Aplicaciones.

No haya algoritmo. Entradas con ruido. Con alto costo computacional

Ejemplos: Clasificación de patrones (voz, imágenes, etc.) Problema del viajante y homólogos. Robótica (controladores). Y muchos más…

10

Page 11: Redes Neuronales en Haskell

Redes Neuronales en Haskell (I).Preámbulos. Matrices en Haskell.

Operaciones sobre matrices.

11

Page 12: Redes Neuronales en Haskell

Redes Neuronales en Haskell (II).Componentes.

Conexiones sinápticas. Totalmente conectada

Pesos sinápticos. Matriz Wi,j (i=entrada, j=neurona).

Umbral Vector

12

Page 13: Redes Neuronales en Haskell

Redes Neuronales en Haskell (III).Componentes (II).

Función de transferencia. Personalizable (Paso, Signo, Identidad, etc.)

Red neuronal, entradas y salidas.

13

Page 14: Redes Neuronales en Haskell

Redes Neuronales en Haskell (IV).Simulación. ¿Cómo se calcula la salida de una neurona?

Implementación de una red de una capa.

Implementación de una red multicapa.

14

Page 15: Redes Neuronales en Haskell

Redes Neuronales en Haskell (V).Entrenamiento (I). Depende del modelo.

Perceptrón simple. Algoritmo:

1. Inicializar la red con pesos y umbrales aleatorios.2. Elegir patrones de entrenamiento3. Evaluar cada patrón de entrenamiento, y si la clasificación es

incorrecta, modificar los pesos hasta corregirla.4. Si hubo errores, repetir 3.

Regla de aprendizaje:

15

Page 16: Redes Neuronales en Haskell

Redes Neuronales en Haskell (VI).Entrenamiento (II). Implementación en Haskell.

Problema: Bucles. Solución: añadir un parámetro de parada a la función.

16

Page 17: Redes Neuronales en Haskell

Redes Neuronales en MATLAB(I)

MATLAB es un software de computación numérica

MATLAB es un software muy usado, tanto en universidades como para propósitos de desarrollo e investigación.

Fue creado en la década de los setenta por Cleve Moler

Reconociendo el potencial comercial del software se unieron junto a Steve Bangert para fundar en 1984 The MathWorks

17

Page 18: Redes Neuronales en Haskell

Redes Neuronales en MATLAB(II)

MATLAB (Laboratorio de Matrices) Las matrices son ideales para el diseño de Redes

Neuronales Una red de Hopfield de 6 neuronas se puede representar

mediante un vector y una Matriz

Donde representa la neurona i

Donde es el peso sináptico entre la neurona i y la neurona j

18

Page 19: Redes Neuronales en Haskell

Redes Neuronales en MATLAB(III) El Perceptrón Simple

Librería Neural Network Toolbox™ Implementación de la Función OR:

19

Page 20: Redes Neuronales en Haskell

Redes Neuronales en MATLAB(IV) El Perceptrón Simple

Necesitaremos los patrones de entrenamiento y las salidas deseadas

Lo siguiente será crear la red con la función newp especifica para los perceptrones:

‘hardlim’ representa la función paso ‘learnp’ especifica el tipo de entrenamiento

net = newp([0 1;0 1], 1,’hardlim’,’learnp’);

20

Page 21: Redes Neuronales en Haskell

Redes Neuronales en MATLAB(V) El Perceptrón Simple

Se inicializan los pesos

Se entrena a la red

Numero de épocas o iteraciones Error admisible

net.IW{1,1}=[rands(1) rands(1)]; net.b{1}=rands(1);

net.trainParam.epochs = 20; net.trainParam.goal = 0; [net, tr, Y, E]= train(net, P, T)

21

Page 22: Redes Neuronales en Haskell

Redes Neuronales en MATLAB(VI) El Perceptrón Simple

Se simula la red y se presentan los parametros

S= sim(net, P); net.IW{1}net.b{1}mae(S-T)

22

Page 23: Redes Neuronales en Haskell

Redes Neuronales en MATLAB(VII) El Perceptrón Multicapa

Muy parecido al perceptrón simpleload diabetes;[pn,minp,maxp,tn,mint,maxt]=premnmx(P,T);net=newff([minmax(pn))],[15 1],{'tansig’,’logsig’},’trainrp’);

net.trainParam.show=20; Se muestran los resultados cada 50 iteracionesnet.trainParam.lr=0.1; Tasa de aprendizaje net.trainParam.epochs=500; Número máximo de iteraciones net.trainParam.goal=0.05; Tolerancia de error como criterio de parada net.trainParam.min_grad=0.0000001; Valor mínimo del gradiente para parar

net1=train(net,pn,T); Sn=sim(net1,pn);

23

Page 24: Redes Neuronales en Haskell

Redes Neuronales en LISP(I)Introducción a LISP(I)

LISP (LISt Processing).

Propuesto por John McCarthy a finales de los 50 como una alternativa al modelo de computación tradicional.

Las listas son la base tanto de los programas como de los datos en LISP, proporcionando un conjunto potente de funciones que las manipulan.

Implementado internamente como punteros.

24

Page 25: Redes Neuronales en Haskell

Redes Neuronales en LISP(II)Introducción a LISP(II)

Originalmente un lenguaje simple y pequeño.

Se le han ido incorporando funciones especializadas como estructuras de datos, aritmética de reales… provocando la aparición de diferentes dialectos del LISP.

en 1983, la Agencia de Proyectos Avanzados de Investigación propuso un dialecto standard del lenguaje, conocido bajo el nombre de Common Lisp.

25

Page 26: Redes Neuronales en Haskell

Redes Neuronales en LISP(III)Introducción a LISP(III)

En un principio, muchos de los programas desarrollados dentro del ámbito de la Inteligencia Artificial se implementaron en LISP.

Posteriormente, aparecieron formalismos de más alto nivel utilizando LISP como lenguaje para su implementación.

Se podría considerar el LISP como el lenguaje referencia de la Inteligencia Artificial.

26

Page 27: Redes Neuronales en Haskell

Redes Neuronales en LISP(IV)Implementación.

Existe un repositorio de código Lisp accesible y público (http://aima.cs.berckeley.edu/).

En él están implementados los principales tipos de redes neuronales, así como una amplia gama de funciones necesarias para su manipulación.

27

Page 28: Redes Neuronales en Haskell

Redes Neuronales en LISP(V)Perceptrón Simple(I) Funciones:

(make-perceptron n m).

(network-output lista-entrada nn).

(perceptron-update per lista-entrada lista-salida-actual lista-salida-deseada).

(print-nn nn)

28

Page 29: Redes Neuronales en Haskell

Redes Neuronales en LISP(VI)Perceptrón Simple(II). Desarrollo(defvar *mi-per*)*MI-PER*

(setf *mi-per* (make-perceptron 2 2))<red-neuronal-unicapa-16>

(dotimes (i 10000)(perceptron-update *mi-per* '(0 0) (network-output '(0 0) *mi-per*) '(0))(perceptron-update *mi-per* '(1 0) (network-output '(1 0) *mi-per*) '(1))(perceptron-update *mi-per* '(0 1) (network-output '(0 1) *mi-per*) '(1))(perceptron-update *mi-per* '(1 1) (network-output '(1 1) *mi-per*) '(1)))

NIL

(network-output '(0 0) *mi-nn*)(0.01649841654154332)(network-output '(1 0) *mi-nn*)(0.9763548612073125)(network-output '(0 1) *mi-nn*)(0.9826598437895642)(network-output '(1 1) *mi-nn*)(0.9771186414633854)

29

Page 30: Redes Neuronales en Haskell

Redes Neuronales en LISP(VII)Perceptrón Multicapa(I) Funciones:

(make-connected-nn lista).

(network-output lista-entrada nn).

(backprop-update nn lista-entrada lista-salida-actual lista-salida-deseada).

(print-nn nn).

30

Page 31: Redes Neuronales en Haskell

Redes Neuronales en LISP(VIII)Perceptrón Multicapa(II). Desarrollo(defvar *mi-nn*)*MI-NN*

(setf *mi-nn* (make-connected-nn '(2 2 1)))<red-neuronal-multicapa-27>

(dotimes (i 10000)(backprop-update *mi-nn* '(0 0) (network-output '(0 0) *mi-nn*) '(0))(backprop-update *mi-nn* '(1 0) (network-output '(1 0) *mi-nn*) '(1))(backprop-update *mi-nn* '(0 1) (network-output '(0 1) *mi-nn*) '(1))(backprop-update *mi-nn* '(1 1) (network-output '(1 1) *mi-nn*) '(0)))

NIL

> (network-output '(0 0) *mi-nn*)> (0.01755890776674844)> (network-output '(1 0) *mi-nn*)>(0.9800031228551442)> (network-output '(0 1) *mi-nn*)>(0.9835795152680812)> (network-output '(1 1) *mi-nn*)>(0.015557196826686817)

31

Page 32: Redes Neuronales en Haskell

Comparativa(I)Haskell, Matlab y Lisp(I)

Para realizar el muestreo:

La función OR

1000 iteraciones para completar el aprendizaje.

Los tiempos han sido medidos antes de la impresión de los resultados.

32

Page 33: Redes Neuronales en Haskell

Comparativa(II)Haskell, Matlab y Lisp(II)

En cuanto al tiempo de ejecución de nuestro: Matlab ha sido el más bajo. Por delante de Haskel. Lisp ha sido el más lento.

0

0,1

0,2

0,3

0,4

0,5

0,6

0,7

Perceptrón Simple

HaskellMatlabLisp

33

Page 34: Redes Neuronales en Haskell

Redes Neuronales en la Universidad(I)

Universidad Granada 2 asignaturas (una troncal y otra optativa) MATLAB

Universidad Sevilla 1 Tema introductorio de una asignatura

Troncal sobre Teoría del Conocimiento e Inteligencia Artificial

Carácter completamente teórico

34

Page 35: Redes Neuronales en Haskell

Redes Neuronales en la Universidad(II)

Universidad Politécnica de Madrid 1 asignatura (optativa) Carácter teórico

Universidad Politécnica de Barcelona 1 tema de una asignatura (optativa) Carácter introductorio y teórico

35

Page 36: Redes Neuronales en Haskell

Conclusiones

¿Cuál elegir? Depende de nuestras necesidades:

Máxima eficiencia: MATLAB Gran volumen de datos: MATLAB RN relativamente pequeñas: Haskell Claridad del programa: Haskell

¿Haskell o Lisp? Haskell más eficiente y menos engorroso Al final se reduce a una cuestión de

preferencia

36

Page 37: Redes Neuronales en Haskell

Referencias Apuntes Jose Muñoz Perez, asignatura “Modelos

Computacionales” Universidad de Málaga (2009) “Redes Neuronales y Sistemas Borrosos” Bonifacio Martín

del Brio (2001) “Estructura Dinámica y Aplicaciones de las Redes de

Neuronas Artificiales” Juan Rios (1991) Wikipedia http://es.wikipedia.org Imágenes google http://images.google.es/imghp?

hl=es&tab=wi Razonando con Haskell.

Una Introducción a la Programación Funcional , Blas C. Ruiz, Francisco Gutiérrez, Pablo Guerrero y José E. Gallardo.

37

Page 38: Redes Neuronales en Haskell

Referencias

Trabajo Redes Neuronales en Haskell (2006), Francisco Jesús Fernández Burgos, José Manuel Cortés López

Paginas web de las diferentes asignaturas: Universidad Granada:

http://decsai.ugr.es/~castro/MCII/ http://decsai.ugr.es/index.php?p=temarios&cod_asigtura=24

Universidad Sevilla: http://www.us.es/estudios/titulaciones/planes/plan_26_23/asignatura_260108

Universidad Madrid: http://www.dia.fi.upm.es/index.php?page=inteligencia-artificial-coenexionista-rna&hl=es_ES

Universidad Barcelona: http://www.fib.upc.edu/es/infoAca/estudis/assignatures/A.html

38

Page 39: Redes Neuronales en Haskell

Gracias por la atención.

Antonio Claros, Juan Fco. Gutiérrez, Juan Miguel Muñoz