viernes, 19 de noviembre de 2010

Tipo de salida del MLP y su uso

Como dijimos antes el el perceptron multicapa los elementos de entrada y los de la capa oculta deben tener una función de transferencia que no sea lineal, entonces solo nos queda como opción la sigmoide y la tangente hiperbólica.
Sin embargo la salida puede tener una función lineal o no lineal, segun el uso que se le da a la red.
Como sabemos las funciones sigmoidal y tangentoide son funciones limitadas en su conjunto imagen para valores del dominio en todo el campo real ( sus valores van de 0 a 1 para la sigmoidal y de -1 a 1 para la tangente hiperbólica ), en cambio una recta adquiere todos los valores de salida en el campo real.
Esto puede ser útil en muchos casos, como ejemplos tenemos para las redes con salida no lineal la posibilidad de representar la salida en "porcentajes" ( un ejemplo de uso real seria en mecánica, una viga en ciertas condiciones de presión/tracción, a que punto esta respecto la tensión de ruptura de la viga ) o también en la clasificación de patrones con salidas discretas "si" o "no" ( en medicina son ampliamente usadas las redes neuronales en la clasificación de tejidos, de modo que se puede reconocer si es tejido cancerigeno o no ). Una cosa que vale decir acerca del uso de estas redes para el calculo de porcentajes es que son muy imprecisas a valores cercanos a los limites, ya que las funciones usadas tienen como limites esos valores, pero nunca los alcanzan.
El perceptron multicapa puede ser usado con salidas continuas en el caso del calculo del valor de una función compleja ( no me refiero a números complejos, que sea claro ) la cual puede adoptar valores relativamente grandes. Con frecuencia se usan para las predicciones meteorológicas o en predicciones económicas.
En todo caso el uso que se le puede dar a una red neuronal es muy amplio, en campos como la medicina, meteorología y economía ( con los ejemplos anteriores ), reconocimiento de patrones ( actualmente hay software que reconoce la escritura usando redes neuronales ) y biometria.

En las dos siguientes entregas desarrollaremos en código en C++ para tratar de simular el funcionamiento del MLP, explicando un nuevo método que usaremos, en el cual no simularemos cada neurona sino la red completa.

domingo, 7 de noviembre de 2010

Curiosidades acerca de las neuronas II

Como otro off topic  hare otras citaciones acerca de las neuronas y del sistema nervioso en general.

El pulpo tiene 300000 millones de neuronas contra las 100000 millones del hombre. Su capacidad de aprender como evitar obstaculos, resolver simples problemas y memorizar patrones ya han sido comprobados por los cientificos de todo el mundo. De hecho se encuentran los llamados "pulpos imitadores", los cuales imitan a ciertos animales venenosos para no ser molestados.

Los nervios que se difunden por el cuerpo "estan hechos de mas neuronas". Por lo general los nervios que conducen los impulsos motorios estan compuestos en gran parte de axones de las neuronas que salen desde el encefalo y muchos sensores son neuronas mas especializadas.

El cerebro consume entre el 20% y el 25% de la energia metabolica basal. No es un misterio que el cerebro sea el organo que mas energia consume, de hecho tambien es uno de los organos que mas sangre y oxigeno necesitan. Casi toda la energia que necesita el cerebro es suministrada por la glucosa ( basicamente azucar ) la cual la transforman en CO2, piruvato, lactato y agua, los cuales son excretados.
Digamos que el esteriotipo de "el cerebro del grupo tiene bajo peso" queda justificado.

Algoritmo Error Back Propagation

El algoritmo "Error back propagation" o simplemente BP, un algoritmo muy utilizado en el campo de la redes neuronales, es el algoritmo usado para entrenar una red MLP. Esto consiste en calcular, como en el caso del perceptron simple, el error cometido a la salida y asi corregir el error en la capa de salida.
Despues este error se debe propagar a la capa oculta: digamos que "cada elemento en la capa oculta tiene parte de responsabilidad en el error cometido a la salida de la red, por lo tanto se debe corregir este error".
Hay que tener en cuenta que la salida de todos los elementos de la capa oculta se conectan a la entrada de cada uno de los elementos de la cada de salida, por lo tanto el valor del error retropropagado para la capa oculta es la suma ponderada del error de los elementos de salida, multiplicado por su respectivo peso sinaptico.
Asi tenemos que el error en la salida es:



Y el error en la capa oculta es:



Donde Z es la salida de los elementos de la capa oculta.
Asi tenemos que la variacion de los pesos sinapticos de la salida y de la capa oculta es respectivamente:





Donde I es la entrada a los elementos de la capa oculta, ya que como dijimos antes, en la capa de entrada no se realiza proceso alguno.

De este modo y repitiendo el entrenamiento hasta reducir el error de salida a un valor minimo o en cualquier modo aceptable, se hace que el MLP aprenda a dar respuesta segun el modo en el que nosotros lo hemos entrenado.
Este es un tipo de entrenamiento supervisado, ya que ademas de dar un patron de ingresos para el entrenamiento, tambien se dan patrones de la salida que se espera de la red.
Como ultima cosa, solo decir que hay muchas variantes de este algoritmo, algunas de esas variantes se utilizaran en futuro, otras solo se citaran como referencia teorica.

jueves, 4 de noviembre de 2010

Tipos de aprendizaje del perceptron: supervisado y no supervisado

Por ahora todos los ejemplos que hemos dado son de aprendizaje supervisado, pero también existen otros métodos de aprendizaje y que es necesario explicar para entrar completamente en la parte de los algoritmos de entrenamiento.
Cabe distinguir dos tipos de aprendizaje:
  • Aprendizaje supervisado
  • Aprendizaje no supervisado
El primero consiste en hacer como hemos hecho hasta el momento, dar un set de entradas a la ANN y además dar un set de las salida esperadas de parte de la red, de modo que a cada muestra se corrigen los errores entre la salida obtenida y la salida deseada de nuestra red ( seria puro caso no encontrar errores al inicio ).
En cambio, el aprendizaje no supervisado no se da un set de salidas esperadas, se deja que la red aprenda a responder organizadamente a través de las entradas que recibe y que se organice por si misma. De este modo, datos de ingreso similares ( o casi ) dan una determinada respuesta a la salida, consiguiendo una clasificación de las distintas entradas.

martes, 2 de noviembre de 2010

Perceptron multicapa ( multilayer perceptron: MLP )

Como dijimos anteriormente, el perceptron multicapa ( MLP de ahora en adelante ) ha sido una mejora en la arquitectura del perceptron simple. El MLP es capaz de resolver problemas que no son linealmente separables ( como la funcion logica XOR )
El MLP esta formado de multiples capas ( siempre mas de tres ) las cuales se dividen en:
  • Capa de entrada: es donde entra la informacion. En esta capa no se realiza ningun procesamiento.
  • Capa oculta: puede ser una o mas capas, y realizan parte del proceso para enviarlo a la salida.
  • Capa de salida: ultima capa del MLP, es donde se devuelve el resultado.

Cada una de estas capas puede estar formada por mas perceptrones, las cuales salidas estan conectadas unicamente con las capas seguientes, nunca entre la misma capa o una capa anterior. La funcion de transferencia de las salidas de los perceptrones deben ser derivables. Como estamos usando como funcion de transferencia la suncion sigmoide, tenemos una funcion derivable en todo el intervalo real, aunque no puede ser una funcion lineal.
El MLP tiene un algoritmo un poco mas complejo de entrenamiento que el del perceptron simple. Este algoritmo es denomidado BP ( del ingles back propagation, o retropropagacion ).
Como mejora del simple perceptron, el MLP puede emular cualquier funcion continua.
Uno de los problemas que pueda causar este tipo de redes neuronales es el hecho que no esta determinado el numero de capas o neuronas por capa en las capas ocultas. Esto solo se puede determinar mediante la experiencia, pero como regla general:
Si la red no logra aprender un determinado proceso se aumentan neuronas.
Si la red pierde capacidad de generalizacion, se quitan neuronas.
Otro problema en algunos casos seria el hecho que la cantidad de pesos sinapticos de actualizar por cada epoca se vuelve bastante elevado, haciendo que el tiempo de entrenamiento se incremente.

lunes, 1 de noviembre de 2010

Limitaciones del perceptron simple

Si alguno se dio cuenta, en el código de ejemplo anterior no es posible replicar todas las funciones lógicas.
De hecho, examinando la formula de salida del perceptron, por simplicidad a dos entradas:


Podemos ver que si ponemos el limite de la salida a 0, osease, justo al punto en el cual cambia de valor la salida se obtiene una ecuación del tipo:


Que es la ecuación de una recta genérica. Es decir, lo que este arriba de esa recta cuenta como una salida y lo que este abajo cuenta como otra salida ( digamos para el ejemplo 0 y 1 ).


Como se puede ver en las figuras, la función OR puede ser separada por una linea, teniendo los ejes como las entradas y los puntos proyectados como las salidas. Lo mismo ocurre en funcionen tipo AND y NAND o NOR. Sin embargo eso no es posible en la función XOR, que como se ve en la figura, debe ser separado por un mínimo de 2 lineas, o ser encerrado en un ovalo. Esto no es posible de hacer con un perceptron simple.
Por hacer un poco de historia digamos que Marvin Minsky e Seymour Papert demostraron este hecho, lo que causo que el interés por la investigación del perceptron menguara rápidamente.
De hecho para eliminar este problema es necesario agregar mas capas a la red neuronal, así aparece el MLP ( multilayer perceptron: perceptron multicapa ) que es una evolucion del perceptron simple y que además elimina grandes problemas del perceptron como el de la separación lineal.