Monday, November 26, 2012

Reporte 3 [CLASE]
Perceptron que reconoce un "AND"

Los perceptrones son los sistemas neuronales más simples, aunque no por ello resultan exentos de utilidad ya que son, a pesar de sus inherentes limitaciones, eficientes procesadores de información.  Así pues, su estudio como entidad independiente está plenamente justificado. Dado que algunas de sus características,tales como su comportamiento geométrico y estadístico, la filosofía de sus algoritmos de aprendizaje, el balance que se debe efectuar en su diseño entre el poder de aproximación y el de estimación, son extensibles a otros sistemas neuronales más complicados, el análisis en detalle de estos sencillos dispositivos puede dar una idea de las ventajas y limitaciones de otras estructuras relacionadas.


El perceptrón en su forma más general tiene una arquitectura que se puede descomponer en tres partes:

1. Una serie de procesadores-φ que realizan una transformación entre el espacio de entrada X de dimensión d y el espacio V de dimensión M (pre-procesado).
2. Una suma ponderada de los M componentes del vector de entrada transformado más un valor de polarización (o umbral).
3. Una transformación τ realizada sobre la suma ponderada

Unidad Basica de un perceptron


En el perceptrón se distinguen dos formas de operación principales, dependiendo de si la función τ toma valores discretos o continuos:

1. Como aproximador de funciones de salida binaria o clasificador. Cuando  τ(g(x)) toma valores discretos (+1,-1 ó 1,0) el perceptrón se puede considerar como un clasificador de patrones que pertenecen a dos clases. Es decir que el perceptrón es una función que realiza una transformación no lineal del tipo x∈ℜ d →{-1,+1} o {0,1} asignando así x a la clase 1 cuando toma el valor 1 y a la clase 2 cuando toma el valor -1 (ó 0). 
Un caso particular de funciones de salida binaria son las funciones lógicas que son del tipo {0,1} d→{0,1}. De esta forma se puede afirmar que un perceptron (en su forma más general) puede implementar cualquier función del álgebra de Boole.

2. Como aproximador de funciones reales. Cuando τ(g(x)) toma valores continuos (ℜ) el perceptrón se puede utilizar como un aproximador de funciones reales. Si  τ es lineal, o sea  τ(g(X))=g(X), el perceptrón se convierte en un aproximador de funciones lineal teniendo {f1(x), f2(x), ..., fM(x), 1} como funciones básicas



Básicamente el problema del aprendizaje en el caso del perceptrón se puede descomponer como veremos a continuación en dos pasos:

1. Proponer una función a minimizar cuya solución implique conseguir lo que perseguimos
(por ejemplo, conseguir un discriminante que separe dos clases linealmente separables o que separe dos clases linealmente no separables de la mejor forma posible).

2. Proponer un método de optimización que nos permita a través del conjunto de entrenamiento (de tamaño N) obtener la solución deseada. Esto es, un algoritmo que sea capaz de calcular (en un  tiempo finito) los parámetros del dispositivo que sean solución del sistema de N ecuaciones resultantes. Puesto que se puede proponer infinidad de funciones a minimizar y métodos de optimización que minimicen dichas funciones, restringiremos nuestro estudio a varias funciones y en concreto a un único método de optimización que las minimice, el basado en el descenso (o ascenso) de gradiente estocástico.

Además dichos algoritmos para dos casos bien diferenciados:

1) Cuando τ es una función del tipo escalón y por ello no derivable (perceptrones tipo I)
2) Cuando τ es una función real, continua y derivable (perceptrones tipo II



Ahora bien para el caso de nuestro reporte 3 se nos pide hacer que el codigo en python de un "NAND" se transforme en un AND y checar las diferencias entre el NAND y AND una vez ejecutados los codigos para que de esta manera queden ejemplificadas las funcionalidades diversas que puede presentar un perceptrón. He aqui entonces el codigo en python de el ejemplo de un NAND







Ahora bien la modificación a este codigo funcionando como un AND sería:






De manera que mediante esta modificación que se le hace al entrenamiento (training set) obtenemos valores diferentes, ya que en lugar de obtener los resultados del NAND que aparecen arriba, estos generan una serie de 9 iteraciones antes de obtener la normalización. A diferencia de estos resultados en el cambio generado para el AND, aparecen en la primer serie un resultado de cero para todos y solamente 2 series para la corrida, ya que los resultados generados siempre se mantienen cercanos.



Con estas observaciones en el código obtenido podemos realizar conclusiones sobre los perceptrones, En la etapa de aprendizaje, el objetivo que se persigue es hacer mínima la discrepancia o error entre la salida obtenida por la red y la salida deseada por el usuario ante la presentación de un conjunto de patrones denominado grupo de entrenamiento. Sin embargo cuando el perceptron va ganando aprendizaje, llega a un punto de normalización, como se puede ver en la grafica indicada,



donde se puede ver claramente el margen de error y como este conforme aumentan las iteraciones va disminuyendo considerablemente, hasta alcanzar lo que se denomina "normalización" o la normal, este tipo de algoritmos podemos implementarlos en sistemas, donde nos interesa que el aprendizaje del perceptron, pueda estar ligado a eventos o cambios en eventos, con los que pueda producirse una estimación o anticipación mediante una predicción establecida por medio del aprendizaje histórico y que esta a su vez, genere información cada vez mas acertada y con un margen de error cada vez menor.

De igual forma podemos ver en la gráfica como las validaciones que hagamos a este codigo conforme pasen las iteraciones, obtenemos una linea muy similar a la del error de entrenamiento, la cual nos ayuda a ver el comportamiento del perceptron en cuanto a numero de iteraciones y el numero de errores encontrados, lo que nos provee información clara y concisa de lo que esta sucediendo en el entrenamiento del perceptrón.

Video demostrativo en C++ de como implementa y trabaja un perceptrón una tarea de entrenamiento, no se tiene un video propio, por ejemplo de los códigos modificados, para observar los cambios en los resultados arrojados, así que optamos por mostrar un trabajo de la red utilizando lenguaje C++, esperando pueda ampliarse aun mas el panorama de el funcionamiento de un perceptron y sus alcances.




Bibliografía Consultada

  • Arana, E., Delicado, P., Martí-Bonmatí, L. (1999). Validation procedures in radiologic diagnostic 
  • models. Neural network and logistic regression. Investigative Radiology, 34(10), 636-642.  
  • Arbib, M.A. (Ed.) (1995). The handbook of brain theory and neural networks. Cambridge, Mass.: 
  • MIT Press.  
  • Arbib, M.A., Erdi, P. y Szentagothai, J. (1997). !eural organization: structure, function and 
  • dynamics. Cambridge, Mass.: MIT Press.  
  • Bahbah, A.G. y Girgis, A.A. (1999). Input feature selection for real-time transient stability 
  • assessment for artificial neural network (ANN) using ANN sensitivity analysis. Proceedings of the 21 
  • st International Conference on Power Industry Computer Applications, 295-300.  
  • Battiti, R. (1992). First and second order methods for learning: between steepest descent and 
  • Newton's method. !eural Computation, 4(2), 141-166.  
  • Bishop, C.M. (1995). !eural networks for pattern recognition. New York: Oxford University Press.  
  • De Lillo, A. y Meraviglia, C. (1998). The role of social determinants on men´s and women´s mobility 
  • in Italy. A comparison of discriminant analysis and artificial neural networks. Substance Use and 
  • Misuse, 33(3), 751-764.  
  • Fahlman, S.E. (1988). Faster-learning variations on back-propagation: an empirical study. 
  • Proceedings of the 1988 Connectionist Models Summer School, 38-51.

Imagenes utilizadas de

Curso de Redes Neuronales Artificiales (2000-2001). ETSETB- DEPARTAMENT D’ENGINYERIA ELECTRONICA. 

Introducción a los Agentes y Sistemas Multiagente. Llamas Bello César Departamento de Informática. Universidad de Valladolid. pp 10-25.