Backpropagation-BP

Backpropagation-BP es un método de aprendizaje de las RNA. El primero que trabaja con la “Backpropagation-BP” fue Seppo Linnainmaa quién lo introduce en 1.970  como un modelo de diferenciación automática (AD). Fue implementado en los ordenadores de aquella época como se utiliza actualmente en la retrocesión y en los perceptrones multicapa.

Seppo Linnainmaa
Linnainmaa
Paul Werbos
Paul Werbos

 

Más tarde, Paul John Werbos en 1.974, lo propone en su tesis doctoral  “Beyond regression: new tools for prediction and analysis in the behavioral sciences”, como un método de optimización general para realizar la diferenciación automática de funciones complejas anidadas, pero no fue utilizado, como lo conocemos hoy, hasta que se producen los siguientes acontecimientos:

 

  • 1.985 David E.Rumelhart, Geoffrey E.Hinton y Ronald J. William publican “Learning representations by back-propagating errors”.
  • 1.986  David Parker, David Rumelhart y Yann LeCun amplían las espectativas del algoritmo basándose en los trabajos de Werbos, denominándolo BPTT (Backpropagation Through Time).
  • 1.986 Yann Le Cun, publica “Learning Processes in a Asymetric Threshold Network. In Disordered Systems and Biological Organization”
  • 1.986 David E.Rumelhart y James Macclelland publicaron “Parallel distributed processing: explorations in the microstructure of cognition”.

 

Backpropagation es un método para el aprendizaje supervisado que se basa en el cálculo del gradiente. El fundamento es fácil, tomamos la salida de nuestra red y evaluamos ese valor contra el resultado deseado. Si el error es grande y no nos satisface, los pesos entre capas se modifican (hacia atrás, desde la salida hacia la entrada) y se vuelven a procesar, así repetidamente hasta que el resultado sea el esperado. La implementación no es tan fácil, además, tiene algunas deficiencias que son solucionadas por Cascade Correlation.

 

Visto de otra forma: La idea del aprendizaje es la aplicación repetida de la regla de la cadena para calcular la influencia de cada peso en la red con respecto a una función de error f(e):

donde:

wij es el peso de la neurona j a la neurona i.

s es el resultado

neti es la suma ponderada de las entradas de la neurona i.

 

Una vez que se conoce la derivada parcial para cada peso, el objetivo es reducir la función de error y se logra realizando un descenso de gradiente simple. En la página gradiente descendente se puede ver un ejemplo en lenguaje Java.

 

Pongamos un ejemplo básico de Retrocesión.

En el algoritmo de retrocesión cada ciclo de entrenamiento implica que la salida actual es comparada con la salida deseada, entonces se calcula el error para las unidades de salida y los pesos en la salida son ajustados para reducir el error, esto da un error estimado para las neuronas ocultas y así sucesivamente.

 

Para no complicarlo se han tomado solo dos neuronas, no se actualizan los sesgos. Se ha preferido poner el ejemplo en hoja de cálculo, puede ser más legible que haberlo escrito en un lenguaje de programación. Adelantamos el resultado de 2 ciclos, en solo dos pasadas se ve como mejoramos y con el gráfico lo complementamos.

 

Gráfico del ejemplo de Backpropagation
Resumen gráfico del ejemplo de Backpropagation

Valores de entrada:

x1=  0,055

x2 = 0,598

 

Salida deseada:

e1 = 0,500

e2 = 1,000

 

Pesos (w), según entrada ciclo 1

 

 

Ciclo 1

Ejemplo Backpropagation "Retrocesión

 

Ciclo 2

 

Ejemplo Backpropagation Retrocesión pagina 2

 

 

 

 

Resumen: Evolución de la retrocesión en los dos primeros ciclos
Error Ciclo 1 ciclo2 Reducción error
Salida capa 1 0,02529616742974 0,02455469408033 -0,0007414733494
Salida capa 2 0,03075306299364 0,02996516814885 -0,0007878948448
Error Total 0,05604923042338 0,05451986222918 -0,0015293681942

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *