Redes Neuronales teoría y ejemplo

Introducción
Es claro que una computadora tiene la capacidad de procesar y calcular información a velocidades superiores al ser humano. ¿Por que no hacerlas para que reconozcan sonidos, imágenes, que distingan las formas de objetos?.  Actualmente todo esto es posible, la computadora ya no es solo para calcular más rápido o para guardar información en bases de datos. La computación clásica a evolucionado, todos estos cambios han permitido  la creación de redes neuronales artificiales (RNA) procesar imágenes, voz, reconocer patrones, predecir, clasificar, diagnosticar enfermedades. Las RNA son una rama de estudio de la Inteligencia Artificial (IA). Actualmente y desde los inicios de la computación se vienen realizando  cálculos y ofreciendo resultados deterministicos. Una RNA  tiene la capacidad de obtener un resultado para lograr un equilibrio, este le permite a una neurona reforzar su conocimiento. En efecto, el poder de una RNA esta en su estructura o topología y gracias las distintas salidasvaloresobtenidos le permite modificar los pesos de las neuronas que componen la red. Vemos entonces que gracias a esto se ha pasado de hacer un cálculo a fortalecer un conjunto de neuronas artificiales y con esto poder realizar las capacidades ya mencionadas. Entre las ventajas de las RNA están el “aprendizaje adaptativo, autoorganización, generalización, tolerancia a fallos, operación en tiempo real y fácil inserción dentro de la tecnología existente[2].


Luego de presentarles esta breve introducción veamos los antecedentes históricos, que por su puesto son muchos, pero en este caso trate de resumir lo más destacado sobre los orígenes de esta rama de la Inteligencia Artificial.

Antecedentes Históricos 
En 1936, el científico Alan Turing empezó a estudiar el cerebro como una forma de ver el mundo de la computación. En 1943 fueron creadas las bases de la computación neuronal por “Warren McCulloch” neurólogo y “Walter Pitts” un matemático. Modelaron la primera red neuronal simple que funcionaba con circuitos eléctricos. Consistía en sumar las señales y estas eran multiplicadas por los pesos escogidos de forma aleatoria. La entrada es comparada por un patrón preestablecido para determinar la salida de la red neuronal. Si en la comparación, la suma de las entradas multiplicadas por los pesos es >= que el patrón preestablecido la salida de la red es uno (1), en caso contrario la salida es cero (0). De esta manera surgió la primera RNA. Posteriormente otros estudios como en 1949 de Donald Hebb, en su libro "the organizational behavior". En dicho libro se publico su famosa regla que lleva su nombre, la regla indica que "Si un elemento de procesado simple recibe una entrada de otro elemento de procesado y ambos están activos, el peso correspondiente a su conexión debería reforzarse (aumentar)". Las características de la regla poseen Asociatividad y Autoorganización. De modo que la regla de Hebb trata de asociar patrones de salida a patrones de entrada y la estructura se organiza a si misma. El siguiente dato es de 1956, por entonces se organizó en Dartmouth(EE.UU) la primera conferencia sobre Inteligencia Artificial (IA).

En 1957, Frank Rosenblatt desarrolló el “Perceptron”. La capacidad de esta RNA era de “generalizar”. Rosenblatt creía que la conectividad existente en las redes biológicas tiene un elevado porcentaje de aleatoriedad, por lo que se oponía al análisis de McCulloch y Pitts en el cual se empleaba lógica simbólica para analizar estructuras bastante idealizadas. El modelo es muy usado hoy en día para reconocer patrones. Sin embargo, presenta limitaciones, no puede resolver una función OR exclusiva ya que no se trata de una clase linealmente separable como lo comprueban Minsky y Papert en "Perceptrons: An introduction to Computational Geometry" de 1969. 


La red neuronal perceptrón fue implementado por primera vez en una computadora IBM 704 en el año 1957, En el laboratorio de Aeronáutico de la Universidad de Cornell.


En 1959, Bernard Widrow y Marcial Hoff publican la teoría sobre adaptación neuronal y unos modelos inspirados en esa teoría, el Adaline (Adaptative Linear Neuron) primera red neuronal aplicada a un problema real (filtros adaptativos para eliminar ecos en las líneas telefónicas) y el Madaline (Multiple Adaline). “Kunihiko Fukushima desarrolló en 1980 el Neocognitrón, un modelo de RNA para el reconocimiento de patrones visuales. En 1982 John Hopfield presentó su trabajo (basado en la física estadística), el cual describe con claridad y rigor matemático una red la cual lleva su nombre. Esta es una variación del Asociador Lineal, pero además, mostró cómo tales redes pueden trabajar y qué pueden hacer. El otro trabajo pertenece a Teuvo Kohonen, con un modelo con capacidad de formar mapas de características de manera similar a como ocurre en el cerebro, el modelo tenía dos variantes denominadas LVQ y SOM"[2].

Conozcamos ahora la Neurona Biológica. No voy a entrar en detalle sobre neurobiologia, sin embargo creo que es suficiente el contenido que sigue a continuación para entender el funcionamiento de una neuronal biológica.



Neuronal Biológica
Gracias al descubrimiento de Santiago Ramón y Cajal en 1888 de la neurona, este ha permitido que en base a sus estudios los Srs. Warren, Pitts, Rosenblatt entre otros hallan podido crear una RNA. Con esto hoy existen modelos de neuronas artificiales. Con los estudios de Ramón y Cajal se determino que una neurona contiene tres componentes principales, el soma o cuerpo de la neurona, las dendritas y el axón.
Figura 1: Estructura de Neurona biológica
Tipos de Sipansis:
  • Sinapsis Excitatorias
  • Sinapsis Inhibidoras
El soma de una neurona constituye el procesador de la neurona, las dendritas son el árbol receptor de la red de señales eléctricas que cargan el soma. Este se encarga de sumar las señales de entrada y el axón es la salida de la información. Las conexiones de las neuronas son〖≈10〗^4 se hace entre el punto de contacto del axón de una célula entre una dendrita de otra célula. El contacto es llamado sinapsis. Se estima que existen ≈〖10〗^11 elementos interconectados unidireccionalmente. 

El contacto de las neuronas no es físico, existen 2mm a 4mm de separación y la transmisión de la información se hace vía impulsos eléctricos en el interior de la neurona y a otras se hace de forma química gracias a unas sustancias químicas llamadas neurotransmisores. Mas en detalle.



Ahora veamos la neuronal artificial que es un poco semejante a la biológica. En vez de recibir señales eléctricas recibiremos números reales de entrada a una neurona o más.


Neuronal Artificial
Dada la complejidad de una neurona biológica, para las RNA se han creado modelos simplificados que permiten imitar modestamente a una neurona biológica.  En el modelo artificial se incluyen señales (entradas reales) Psui o también denominadas Xsui provenientes de otras neuronas”,  la intensidad de la sinapsis Wsui (reales) y una función f(sigmoidal, S. hiperbolíca, limitador fuerte symétrico, lineal etc) que define el umbral

“Las señales Psu_i son variables continuas en lugar de pulsos discretos como en las neuronas biológicas. Cada señal de entrada es potencializada o atenuada por el peso sináptico o intensidad de conexión cuya función es análoga a la función de las sinapsis de la neurona biológica. Los pesos pueden ser positivos (excitatorios), o negativos (inhibitorios), el nodo sumatorio acumula las señales ponderadas y las pasa a la salida a través de una función umbral (también conocida como función de activación o transferencia)“[1].

Veamos una comparación de la estructura de una neurona biológica y artificial en las siguientes imágenes:

                                                                                  Figura 2: Neurona Biológica (izquierda) vs Artificial (derecha) 



Representar una RNA con varios parámetros no es suficiente en la figura 2. Un modelo apropiada es la figura 3.
Figura 3: Notación abreviada de una RNA 
 Fuentes Bibliográficas 
[1].  Aprendizaje no supervisado y el algoritmo wake-sleep en RNA. Universidad Tecnológica de la Mixteca. http://jupiter.utm.mx/~tesis_dig/11612.pdf [Consulta: 2 de diciembre de 2016].
[2]. Introducción a las Redes Neuronales. Universidad Tecnológica Nacional de Argentina. http://www.dariolara.com/tda/tds/RNA.pdf [Consulta: 2 de diciembre de 2016]. 


Red Neuronal Perceptrón - Entrenamiento
Atención en este parte desarrollare un ejemplo sobre el entrenamiento del perceptrón con una neurona, me disculpan si no esta la teoría entera del perceptrón. Sin embargo, le estoy dejando una presentación elaborada para que conozcan más  detalles sobre la teoría del perceptrón.
Como sabemos el Perceptrón es una red neuronal creada por Frank Rosenblatt en 1957 en un laboratorio militar. Entre alguna de sus características esta que solo puede resolver problemas linealmente separables, veamos que no todos los problemas se puede resolver utilizando un perceptrón con una sola neuorona. Tiene limitaciones, sin embargo se puede utilizar más neuronas o capas para resolver problemas mas complejos o más grandes. Luego de las limitaciones o del perceptrón tenemos una técnica muy avanzada para entrenar redes neuronales que se llama "propagación hacia atrás" o "Backpropagation en ingles".
Atención:
La técnicas de Backpropation requiere el uso de neuronas cuya función de activación sea continua, y por lo tanto, diferenciable. Generalmente, la función utilizada será del tipo sigmoidal <fuente>.
En este ejemplo que voy a desarrollar utilizare una función no diferenciable, se utilizara la función escalonada hardlims o Limitador Fuerte Simétrico que retorna:
-1 si: La salida de la red "a" es < 0 ; 1 si: La salida de la red "a" es >= 1
 A continuación les presento un cuadro de las distintas funciones de activación existentes:


Rápidamente veamos como el Perceptrón no puede resolver un problema no Linealmente separable con una neurona. Veamos el ejemplo para compuerta OR Exclusivo:
Compuerta OR Exclusiva en el espacio


Recordemos:
El perceptron simple es un hiperplano de dimensión n-1 capaz de separar las clases. La ecuación de dicho interplano es: w1*x1+w2*x2+θ=0

Ningún hiperplano puede separar al OR Exclusivo en un Perceptrón de las siguiente característica:

Por lo tanto es necesario utilizar mas neuronas para resolver el problema. Ahora el perceptrón no sería simple.

En el siguiente ejemplo veremos como entrenar el perceptrón simple para los siguientes patrones con sus respectivas salidas deseadas.
Patrones
p1[2 1] t=1 p2[0 -1] p3[-2 1] t=-1 p4[0 2] t=-1
Recordar:
El Perceptrón es un tipo de red de aprendizaje supervisado, es decir necesita conocer los valores esperados para cada una de las entradas presentadas.
Cuando un patrón "p" es aplicado a la red, la salida de la red es comparada con el valor esperado t, y la salida de la red esta determinada por:
Los pesos:
Los pesos deben de estar entre {-0.5 a 0.5}
Para este ejemplo los pesos a utilizar son:
w[-0.7 0.2]

El Bias (theta)
El valor del Bias (b) puede tomarse con un valor de un peso adicional. Generalmente se le asigna 1.
b=[0.5]

Velocidad de Aprendizaje (n)
La velocidad de aprendizaje generalmente es 1. Debe de estar entre {0.1 .. 1}

La formula para calcular el bías es:
 b_nuevo = b_anterior + ne

e = error.

La formula para calcular el error es:
 e = t  - a



La formula para los nuevos pesos "W" es:
W_nuevo = W_Anterior + n(t-a)p
Desarrollo de ejemplo
p1[2 1] t=1 p2[0 -1] t=1 
p3[-2 1] t=-1 p4[0 2] t=-1
W[-0.7 0.2] b[0.5]

iteración 0:
La red va a clasificar los patrones de entrenamiento según la característica de decisión mostrada en la siguiente figura, la cual depende de los valores de los pesos y ganancias iniciales.


*Como se aprecia el hiperplano no logra separar ambas clases en dos partes con los pesos iniciales y el bías actual. 
¿Que pasara en la siguiente iteración? 
¿Encontremos una buena salida? 
¿Necesitaremos actualizar pesos y bías?

Iteración 1
Como se aprecia la red a clasificado mal el patrón. La salida no fue la deseada. Por lo tanto, tenemos que actualizar pesos:

La actualización de los pesos y el bías conllevo a tener el siguiente hiperplano que aún no separa ambas clases:

Iteración 2 y 3
La red clasificó correctamente los patrones de acuerdo a la salida esperada.


Iteración 4

En la iteración 4 se obtuvo un error veamos:


Por lo tanto ya sabemos que hacer, actualizar pesos y luego nuestro bías:


Finalmente la red aprendió a clasificar correctamente los patrones. El hiperplano final logro separar ambas clases.
-b/w1 = -0.15 
-b/w2 = 0.27


Recordemos el hiperlano inicial:
Perceptron simple en un hiperplano de dimensión n-1 imposible de separar clases con los pesos w[-0.7 0.2]
Perceptron simple en un hiperplano de dimensión n-1 capaz de separar las clases con con pesos w[3.3 -1.8] y b=0.5


Comentarios

  1. ¿que tendencias tendría las redes neuronales en el futuro?

    ResponderEliminar
    Respuestas
    1. Hola doc, creo que esto va a ir muy lejos, seguirán nuevos desafíos y nuevos problemas serán resueltos con redes neuronales. Si esto crece la tecnología que permite que estas se desarrollen deberán seguir el mismo ritmo. Sin embargo, la mayoría de trabajos se hacen con redes neuronales con aprendizaje supervisado. Es decir, solo redes que pueden generalizar a patrones que ya conocen sus salidas, para que una red pueda generalizar tiene que enfrentarse a patrones que nunca a visto y que devuelva una salida correcta. Espero que la tendencia de estudios en redes neuronales con aprendizaje no supervisado cresca muchísimo, y que bueno sería que este en español jeje

      Eliminar
  2. Buen Tema, No me quedo claro, Sobre, ¿Cómo se entrena el perceptron?

    ResponderEliminar
    Respuestas
    1. Hola doc, tal como demostré el ejemplo se deben de asignar pesos aleatorios dentro de un rango permitido además del valor bías. Debes de tener tus patrones con una salida deseada para poder mandar un patrón a la red y procesarlo para obtener la salida. El problema debe de ser lineal-mente separable si no lo resuelve un perceptrón con una capa agrega más capas o más neuronas de manera piramidal. Más en profundidad

      Eliminar

Publicar un comentario