sábado, 4 de octubre de 2008

Algoritmo

Esta red presenta una capa de entrada con n neuronas y una capa de salida con m neuronas y al menos una capa de neuronas ocultas internas. Cada neurona (menos en la capa de entrada) recibe entrada de todas las neuronas de la capa previa y genera salida hacia todas las neuronas de la capa siguiente (salvo las de salida). No hay conexiones hacia atrás (feedback) ni laterales o autorrecurrentes.
El funcionamiento de la red consiste en un aprendizaje de un conjunto predefinido de pares de entradas-salidas dados como ejemplo, empleando un ciclo propagación-adaptación de dos fases:
Primero se aplica un patrón de entrada como estímulo para la primera capa de las neuronas de la red, se va propagando a través de todas las capas superiores hasta generar una salida, se compara el resultado obtenido en las neuronas de salida con la salida que se desea obtener y se calcula un valor del error para cada neurona de salida.
Estos errores se transmiten hacia atrás, partiendo de la capa de salida, hacia todas las neuronas de la capa intermedia que contribuyan directamente a la salida, recibiendo el porcentaje de error aproximado a la participación de la neurona intermedia en la salida original. Este proceso se repite, capa por capa, hasta que todas las neuronas de la red hayan recibido un error que describa su aportación relativa al error total. Basándose en el valor del error recibido, se reajustan los pesos de conexión de cada neurona, de manera que en la siguiente vez que se presente el mismo patrón, la salida esté más cercana a la deseada, es decir, que el error disminuya.
A diferencia de la regla delta en el caso del perceptrón, esta técnica requiere el uso de neuronas cuya función de activación sea continua y por tanto diferenciable. Generalmente la función será de tipo sigmoidal.
Según María Alejandra Ochoa (2004), los pasos y fórmulas a utilizar para aplicar el algoritmo de entrenamiento son:

Paso1:
Se inicializan los pesos de la red con valores pequeños y aleatorios.

Paso 2:
Se presenta un patrón de entrada: Xp=xp1,xp2,...,xpn y se especifica la salida deseada: d1,d2,...,dM (si se utiliza como clasificador, todas las salidas deseadas serán 0, salvo una, que es la de la clase a la que pertenece el patrón de entrada).

Paso 3:
Se calcula la salida actual de la red, para ello se presentan las entradas y se va calculando la salida que presenta cada capa hasta llegar a la capa de salida y1,y2,...,yM.
Luego
· Se calculan las entradas netas para las neuronas ocultas procedentes de las
neuronas de entrada.
· Para una neurona j oculta: donde el índice h se refiere a magnitudes de la capa oculta (hidden), el subíndice p, al p-ésimo vector de entrenamiento y j a la j-ésima neurona oculta. El término q, es opcional, ya que solo actúa como una entrada más.
· Se calculan las salidas de las neuronas ocultas:
· Se realizan los mismos cálculos para obtener las salidas de las neuronas de salida; (capa 0: output)
Paso 4:
Calcula los términos de error para todas las neuronas.
Si la neurona k es una neurona de la capa de salida, el valor de delta es:



La función f debe ser derivable, para ello existen dos funciones que pueden servir: la función lineal
y la función sigmoidal:
La elección de la función de salida depende de la forma de representar los datos: si se desean salidas binarias, se emplea la función sigmoidal, en otro caso es tan aplicable una como la otra. Para este trabajo se ha hecho uso de la función lineal.
Para la función lineal tenemos fk0' mientras que la derivada de una función f sigmoidal es:


Por lo que los términos de error para las neuronas de salida quedan:
para la salida lineal, y
para la salida sigmoidal.


Si la neurona j no es de salida se tiene:

Donde se observa que el error en las capas ocultas depende de todos los términos de error de la capa de salida. De aquí surge el término de propagación hacia atrás. Para la función sigmoidal: Donde k se refiere a todas las neuronas de la capa superior a la de la neurona j. Así, el error que se produce en una neurona oculta es proporcional a la suma de los errores conocidos que se producen en las neuronas a las que está conectada la salida de ésta, multiplicados por el peso de la conexión.

Paso 5:
Actualización de los pesos.
En este paso se utiliza el algoritmo recursivo, comenzando por las neuronas de salida y trabajando hacia atrás hasta llegar a la capa de entrada, ajustando los pesos de la forma siguiente:
Para los pesos de las neuronas de la capa de salida:


y para los pesos de las neuronas de la capa oculta:

En ambos casos, para acelerar el proceso de aprendizaje, se puede añadir un término momento (b(beta)) de valor

en el caso de la neurona de salida, y

cuando es el caso de una neurona oculta.

Paso 6:
El proceso se repite hasta que el término de error resulta aceptablemente pequeño para cada uno de los patrones aprendidos.



viernes, 1 de agosto de 2008

Regla Delta

La regla delta propuesta por Widrow en 1960 ha sido extendida a redes con capas intermedias con conexiones hacia adelante (feedforward) y cuyas células tiene funciones de activación continuas (lineales o sigmoidales), dando lugar al algoritmo Backpropagation.
Estas funciones continuas son no decrecientes y derivables, a diferencia de la función escalón que se utiliza en el Perceptrón, que no es derivable en el punto de discontinuidad.
Este algoritmo utiliza también una función o superficie de error asociada a la red, buscando el estado estable de mínima energía o de mínimo error a través del camino descendente de la superficie del error. Por ello, realimenta el error del sistema para realizar la modificación de los pesos en un valor proporcional al gradiente decreciente de dicha función de error.
El error es la diferencia cuadrática media entre las salidas de la red con los pesos actuales y las salidas deseadas. El método que sigue la regla delta generalizada para ajustar los pesos es actualizarlos de forma proporcional a la delta o diferencia entre la salida deseada y la obtenida:
Dada una neurona Ui y la salida que produce yi el cambio que se produce en el peso de la conexión que une la salida de dicha neurona con la unidad Uj (wji) para un patrón de aprendizaje p determinado es: En donde el subíndice p se refiere al patrón de aprendizaje concreto y a(alfa) es la constante o tasa de aprendizaje.

Figura. Conexión entre una neurona de una capa oculta con una neurona de salida. (Villanueva, 2002)

El punto en el que difieren la regla delta generalizada de la regla delta es en el valor concreto de dpj. Por otro lado, en las redes multinivel a diferencia de las redes sin neuronas ocultas, en principio no se puede conocer la salida deseada de las neuronas de las capas ocultas para poder determinar los pesos en función del error cometido. Sin embargo inicialmente si podemos conocer la salida deseada de las neuronas de salida. Según esto, si consideramos la unidad Uj de salida, entonces definimos

donde dpj es la salida deseada de la neurona j para el patrón p y netj es la entrada neta que recibe la neurona j.
Esta fórmula es como la de la regla delta, excepto en lo que se refiere a la derivada de la función de transferencia. Este término representa la modificación que hay que realizar en la entrada que recibe la neurona j en el caso en que dicha neurona no sea de salida, el error que se produce estará en función del error que se comenta en las neuronas que reciban como entrada la salida de dicha neurona. Esto es lo que se denomina el procedimiento de propagación del error hacia atrás.

Figura. Conexiones entre neuronas de capa de entrada, oculta y de salida. (Villanueva, 2002)

Según esto, en el caso de que Uj no sea una neurona de salida, el error que se produce esta en función del error que se comete en las neuronas que reciben como entrada la salida de Uj.

Donde el rango k cubre todas aquellas neuronas a las que la red está conectada con la salida de Uj. De esta forma, el error que se produce en una neurona oculta es la suma de los errores que se producen en las neuronas a las que está conectada la salida de ésta, multiplicando cada uno de ellos por el peso de la conexión.

Adición de un momento a la regla delta generalizada
El método de propagación de error, también conocido como del gradiente descendiente, requiere un importante número de cálculos para lograr el ajuste de los pesos en la red. En la implementación del algoritmo, se toma una amplitud de paso que viene dada por la tasa de aprendizaje a(alfa). A mayor tasa de aprendizaje, mayor es la modificación de los pesos en cada iteración, con lo que el aprendizaje será más rápido, por otra parte, puede dar lugar a oscilaciones. Rumelhart, Hinton y Williams sugirieron que para filtrar estas oscilaciones se añada en la expresión del incremente de los pesos un término (momento)b (beta), de manera que dicha expresión quede: donde b(beta) es una constante (momento) que determina el efecto en t+1 del cambio de pesos en el instante t (Rumelhart, Hinton, & Williams, 1986).
Con este momento se logra la convergencia de la red en menor número de iteraciones, ya que si en t el incremento de un peso era positivo y en t+1 también, entonces el descenso por la superficie del error en t+1 es mayor. Sin embargo, si en t el incremento era positivo y en t+1 es negativo, el paso que se da en t+1 es más pequeño, lo cual es adecuado, ya que esto significa que ha pasado por un mínimo y que los pasos deben ser menores para poder alcanzarlo.
Resumiendo, el algoritmo queda como sigue:


donde:

si Uj es una neurona de salida, y

si Uj no es una neurona de salida

lunes, 14 de julio de 2008

Funcionamiento

De forma simplificada el funcionamiento de la red Backpropagation consiste en el aprendizaje de un conjunto definido de pares de entradas-salidas dados como ejemplo, empleando un ciclo de propagación-adaptación de dos fases:
Primero se aplica un patrón de entrada como estímulo para la primera capa de neuronas de la red, se va propagando a través de todas las capas superiores hasta generar una salida, se compara el resultado obtenido en las neuronas de salida con la salida que se desee obtener y se calcula un valor del error para cada neurona de salida. A continuación estos errores se transmiten hacia atrás, partiendo de la capa de salida, hacia todas las neuronas de la capa intermedia que contribuyeron directamente a la salida, recibiendo el porcentaje de error aproximado a la participación de la neurona intermedia en la salida original. Este proceso se repite capa por capa, hasta que todas las neuronas de la red hayan recibido un error que describa su aportación relativa al error total. Basándose en el valor de error recibido, se reajustan los pesos de conexión de cada neurona, de manera que en la siguiente vez que se presente el mismo patrón, la salida esté más cerca de la deseada; es decir, el error disminuya.

Aplicaciones

· Codificación de la información.
· Traducción de texto en lenguaje hablado.
· Compresión de datos.
· Inspección de calidad de pintura.
· Reconocimiento de lenguaje hablado.
· Reconocimiento óptico de caracteres (OCR)
·

En cardiología:
o Clasificación de señales electrocardiográficas.
o Detección de taquicardias ventriculares y supra ventriculares.
o Detección de complejos QRS anómalos.
o Reconocimiento de formas anormales en señales ECG (electrocardiográficas).
o Cancelación de ruido en señales ECG.

Historia

En 1986 Rumelhart, Hinton y Williams, desarrollaron un método que tenía por objetivo lograr que una red neuronal aprendiera la asociación que existe entre los patrones de entrada que ingresan a la misma y las clases correspondientes, utilizando más niveles de neuronas de los que empleó Rosenblatt en su Perceptrón. El método está basado en la generalización de la regla delta y logra ampliar considerablemente el rango de aplicación de las redes neuronales.
El primer algoritmo de entrenamiento para redes multicapa fue desarrollado por Paul Werbos en 1974, este se desarrolló en un contexto general, para cualquier tipo de redes, siendo las redes neuronales una aplicación especial, razón por la cual el algoritmo no fue aceptado dentro de la comunidad de desarrolladores de redes neuronales. Fue solo hasta mediados de los años 80 cuando el algoritmo Backpropagation o algoritmo de propagación inversa fue redescubierto al mismo tiempo por varios investigadores, David Rumelhart, Geoffrey Hinton y Ronal Williams, David Parker y Yann Le Cun. El algoritmo se popularizó cuando fue incluido en el libro "Parallel Distributed Processing Group" por los sicólogos David Rumelhart y James McClelland. La publicación de este libro trajo consigo un auge en las investigaciones con redes neuronales, siendo la Backpropagation una de las redes más ampliamente empleadas, aun en nuestros días.
Uno de los grandes avances logrados con la Backpropagation es que esta red aprovecha la naturaleza paralela de las redes neuronales para reducir el tiempo requerido por un procesador secuencial para determinar la correspondencia entre unos patrones dados. Además el tiempo de desarrollo de cualquier sistema que se este tratando de analizar se puede reducir como consecuencia de que la red puede aprender el algoritmo correcto sin que alguien tenga que deducir por anticipado el algoritmo en cuestión.
La mayoría de los sistemas actuales de cómputo se han diseñado para llevar a cabo funciones matemáticas y lógicas a una velocidad que resulta asombrosamente alta para el ser humano. Sin embargo la destreza matemática no es lo que se necesita para solucionar problemas de reconocimiento de patrones en entornos ruidosos, característica que incluso dentro de un espacio de entrada relativamente pequeño, puede llegar a consumir mucho tiempo. El problema es la naturaleza secuencial del propio computador; el ciclo tomar – ejecutar de la naturaleza Von Neumann solo permite que la máquina realice una operación a la vez. En la mayoría de los casos, el tiempo que necesita la máquina para llevar a cabo cada instrucción es tan breve (típicamente una millonésima de segundo) que el tiempo necesario para un programa, así sea muy grande, es insignificante para los usuarios. Sin embargo, para aquellas aplicaciones que deban explorar un gran espacio de entrada o que intentan correlacionar todas las permutaciones posibles de un conjunto de patrones muy complejo, el tiempo de computación necesario se hace bastante grande.

Backpropagation

Este blog es la continuacion del blog llamado Lo Basico sobre: Redes Neuronales, esperemos les sea de gran utilidad.
Backpropagation es el modelo de red neuronal más usado. Es un modelo de conexiones hacia delante (feedforward) que utiliza pares de vectores en las entradas y salidas con valor verdadero para entrenar a la red.
Además, es un algoritmo para entrenar o programar los pesos de una red neuronal con un número indeterminado de capas. Se caracteriza por la representación interna del conocimiento que es capaz de organizar en la capa intermedia de las células, para conseguir cualquier correspondencia entre la entrada y la salida de la red.
La importancia de la red consiste en su capacidad de autoadaptar los pesos de las neuronas de las capas intermedias para aprender la relación que existe entre un conjunto de patrones dados como ejemplo y sus salidas correspondientes. Después del entrenamiento, puede aplicar esta misma relación a nuevos vectores de entrada con ruido o incompletas, dando una salida activa si la nueva entrada es parecida a las presentadas durante el aprendizaje.
La capacidad de generalización es una característica importante que se exige a los sistemas de aprendizaje, se entiende como la facilidad de dar salidas satisfactorias a entradas que el sistema no ha visto nunca en su fase de entrenamiento y que puede aplicar a entradas no presentadas durante la etapa de aprendizaje, esto para clasificarlas según las características que compartan con los ejemplos de entrenamiento.
Las redes tipo Backpropagation tienen una gran versatilidad, debido a la naturaleza de su proceso de aprendizaje, que solamente necesita de dos ecuaciones para propagar las señales de error hacia atrás. Se elige entre una u otra ecuación dependiendo si la unidad de proceso es o no de salida.
El algoritmo Backpropagation puede entrenar redes multicapas feedforward, con funciones de transferencia diferenciables para ejecutar funciones de aproximación, asociación y clasificación de patrones. Pueden entrenarse también otros tipos de redes, aunque la red multicapa es la más comúnmente usada. El término Backpropagation se refiere al proceso por el cual pueden calcularse las derivadas de error de la red, con respecto a los pesos de la red. Este proceso puede usarse con varias estrategias de optimización diferentes.
Se han desarrollado numerosas variaciones de Backpropagation, con el propósito de mejorar la velocidad del proceso de entrenamiento.
A continuación se da una breve historia de este tipo de red, se muestran aplicaciones y lo más importante, el algoritmo de Backpropagation, el cual se describe paso a paso.