Revolución IA

La Inteligencia Artificial está llamada a protagonizar la próxima Revolución tecnológica

Inicio Sobre Revolucionia Temas Para saber más Contacto

Algoritmo Back-Propagation (I)

Fernando P.    22/11/2017

Temas:  Fundamentos

Abrimos una serie de cuatro artículos para tratar el algoritmo Back-Propagation, que es la técnica más general que se usa para entrenar de forma supervisada perceptrones multicapa o, en general, redes neuronales artificiales orientadas hacia adelante.

En esta primera entrega, vamos a analizar la problemática general que da lugar a este algoritmo y vamos a ver la estructura general del algoritmo y cómo opera a rasgos generales para conseguir el entrenamiento de redes complejas.

El entrenamiento de perceptrones
Ya vimos que el entrenamiento de perceptrones simples era posible siempre mediante un algoritmo bastante sencillo que usaba un concepto bautizado como Regla Delta.

Este algoritmo basado en la Regla delta converge siempre suponiendo que, efectivamente, el perceptrón pueda ser entrenado para el problema en cuestión. Es la base de todas las esperanzas que se depositaron hacia los años 60 del pasado siglo en los perceptrones como técnica definitiva para construir clasificadores.

Las esperanzas se desvanecieron en cuanto se comprobó que los perceptrones no podían representar determinadas funciones simples, como es el caso de la función XOR. La alternativa natural a los perceptrones simples eran los perceptrones multicapa, pero durante años no se dispuso de un algoritmo general que permitiera su entrenamiento.

El entrenamiento de los perceptrones simples es sencillo porque cada peso de conexiones entre neuronas tiene una incidencia directa en la salida de una componente del perceptrón. En el caso de perceptrones multicapa, los pesos de las capas intermedias no afectan directamente a la salida, su contribución a la salida del perceptrón está modificada por otros pesos en conexiones de capas posteriores.

La Regla Delta modifica cada peso en función de su contribución al error que comete el perceptrón al clasificar un caso de entrada. Si la contribución es significativa se modifica ese peso para rebajar su contribución al error. Calcular la contribución al error de los pesos en la última capa es sencillo, pero para las capas anteriores es bastante más complicado y este es el motivo de que se tardara en disponer de un algoritmo para el entrenamiento de perceptrones multicapa.

Hacia los años 80 del pasado siglo se probó que la capacidad de representación de los perceptrones multicapa puede llegar a ser muy grande, sin las limitaciones de los perceptrones simples y se puso a punto un algoritmo genérico para entrenar perceptrones multicapa que se bautizó como Back-Propagation.

Funcionamiento general del algoritmo Back-Propagation Algoritmo Back-Propagation
El algoritmo Back-Propagation está basado en la idea de buscar un mínimo (local o global) de la función de coste asociada al perceptrón multicapa.

Básicamente, el algoritmo es una solución al problema que consiste en localizar los valores de los pesos en las conexiones entre neuronas que minimizan la función de coste de la red.

Así visto, es un planteamiento sencillo de una clase de problema bien estudiado en Investigación Operativa. Lo que hace al problema distinto de otros es el elevado número de variables sobre las que optimizar (los pesos en las conexiones entre neuronas) y la acusada no linealidad que exhiben los perceptrones multicapa como consecuencia de la adopción de funciones de activación no lineales, introducidas exprésamente para aumentar la capacidad de representación de los perceptrones multicapa.

El algoritmo Back-Propagation funciona como un algoritmo clásico que itera siguiendo una ruta de descenso de gradiente de la función de error para tratar de localizar un mínimo local de la misma.

En cada iteración calcula el gradiente de la función de error respecto a todas sus variables (los pesos) y a partir de ahí modifica cada peso en la dirección opuesta a su gradiente, con lo que disminuye la contribución al error de todos los pesos y el valor de la función de error disminuye en cada iteración, hasta que lleguemos a un mínimo local.

El término Back-Propagation viene de la idea de que el algoritmo opera en dos fases:

  1. Se toman los casos de entrada y se propagan hacia adelante por toda la red para calcular la salida de la red y el valor de la función de error a partir de esa salida y de los valores esperados para esa salida
  2. Se calcula el gradiente de la función de error y esa información se usa para propagar (hacia atrás) por toda la red cambios en los pesos de las conexiones entre neuronas

Optimización global
En general, una red bien entrenada será aquella para la que consigamos una configuración de los pesos en las conexiones entre neuronas de forma que el valor de la función de error sea cero o suficientemente próximo a cero.

Cláramente, tal y como hemos planteado el funcionamiento general del algoritmo Back-Propagation, puede resultar insuficiente para conseguir un entrenamiento adecuado de la red. Esto es debido a que la función de error puede tener una forma muy compleja, con múltiples mínimos locales, y puede suceder que el algoritmo quede atrapado en uno de estos mínimos locales con un elevado valor absoluto de la función de error.

Para resolver este problema se pueden usar técnicas estándar de Investigación Operativa para optimización global, como pueden ser el algoritmo Simulated Annealing.

En general, la misión básica del algoritmo Back-Propagation es localizar un mínimo local de la función de error usando descenso de gradiente, que es lo que vamos a ver en esta serie de artículos. Refinamientos adicionales para tratar el problema de la optimización global serán tratados en sucesivos artículos.

Regla Delta Generalizada
El algoritmo Back-Propagation utiliza una versión generalizada de la Regla Delta. La Regla Delta ya fue introducida con el entrenamiento de perceptrones simples.

Sea  θ  el conjunto de pesos en las conexiones de todas las neuronas de la red

Sea  θ(t)  el conjunto de valores de los pesos en la iteración  t  del algoritmo

En estas condiciones,  Eθ(t)  será el valor de la función de error para la red en la iteración  t

Sea  η > 0  un valor positivo que denominaremos coeficiente o velocidad de aprendizaje

A partir de todo lo anterior podemos plantear la regla general de modificación de los pesos de la red en cada iteración del algoritmo, que denominaremos Regla Delta Generalizada:

Sea  wθ  uno de los pesos de la red

En la iteración  t + 1, este peso  w  deberá ser modificado en la forma

Δw = -η ⋅ ∂Eθ(t) / ∂w

Es decir, se trata de la versón formal que establece que en cada iteración del algoritmo debemos modificar los pesos de las conexiones entre neuronas de forma que se reduzca su contribución al valor de la función de error y esta disminuya en la siguiente iteración.

El valor del coeficiente de aprendizaje establece el tamaño de los cambios que introducimos en los pesos en cada iteración. Un valor grande acelera la convergencia del algoritmo pero se corre el riesgo de no poder localizar un mínimo porque se reduce la precisión de los valores de los pesos. Un valor pequeño aumenta la precisión pero aumenta el número de iteraciones necesarias. Se trata de algo con lo que debe experimentarse y que merece tratarse en un artículo aparte.

Uso de casos de entrada para calcular la función de error
Cuando tratamos el tema de la función de coste para perceptrones multicapa, ya planteamos la posibilidad de poder definir la función de error usando todos los casos de entrada o de plantear una optimización parcial usando sólo algunos o incluso un solo caso de entrada.

En la versión más sencilla del algoritmo Back-Propagation, se usa una optimización parcial que opera con un solo caso de entrada en cada iteración.

En esta situación, la función de error es mucho más sencilla y sólo depende de ese caso de entrada. Pero en cada iteración del algoritmo estaremos optimizando para ese caso de entrada concreto y puede suceder que lo que hacemos para un caso se destruya al optimizar para otro, resultando en un comportamiento errático del algoritmo.

En la práctica, la optimización parcial suele funcionar bien siempre que el problema no sea muy complejo y los casos de entrada se puedan separar en clases más o menos bien definidas. Pero siempre nos queda el recurso a una optimización más general, usando muchos o todos los casos de entrada.

Se trata de una cuestión delicada que tiene un impacto enorme en la complejidad del proceso de entrenamiento y que también merece ser tratada en un artículo aparte.

Sumario del algoritmo
Con todo lo visto aquí, vamos a dar un sumario muy general de lo que sería el algoritmo Back-Propagation. Básicamente, podemos decir que viene a ser una versión refinada del algoritmo general para aprendizaje supervisado en clasificadores:

  1. Seleccionar un conjunto de casos de entrada y sus correspondientes clases de salida para efectuar el entrenamiento. Sea  S  este conjunto
  2. Elegir un factor de aprendizaje  η
  3. Fijar a valores aleatorios en el intervalo  [-1,1]  todos los pesos entre conexiones de neuronas de la red
  4. Para cada par de entrenamiento (caso de entrada/clase de salida) en  S, repetir 5 a 8 comenzando con  t = 0
  5. Aplicar el caso de entrada a la red y calcular la salida de la red
  6. Calcular el error que comete la red, comprobar el criterio de parada de la red (error muy cerca de cero, error estancado o exceso de iteraciones  t). Si se satisface el criterio de parada, elegir el siguiente par de entrenamiento, hacer  t = 0  y volver a 5. Si no quedan más pares de entrenamiento, el algoritmo ha finalizado y la red está entrenada
  7. Modificar los pesos de las conexiones entre neuronas de la red usando la Regla Delta Generalizada para el error calculado en el paso anterior
  8. Hacer  t = t + 1, ir a 5

En la siguiente entrega de esta serie de artículos sobre el algoritmo Back-Propagation, vamos a introducir el caso especial de un perceptrón con dos capas y vamos a calcular las expresiones de la Regla Delta Generalizada para este tipo de red.



El algoritmo Back-Propagation es una generalización de algoritmos más sencillos que puede llegar a complicarse mucho, por lo que es necesario hacer algunas simplificaciones. Pero en la práctica tiene tendencia a funcionar bien con problemas bien planteados.



Para saber más:

Libro de Philip D. Wasserman sobre redes neuronales artificiales orientadas hacia adelante. Es un libro sencillo pero suficientemente riguroso. El capítulo 3 trata sobre el algoritmo Back-Propagation.

Libro de Russell Reed y Robert J Marks dedicado a redes neuronales artificiales orientadas hacia adelante. El capítulo 5 introduce el algoritmo Back-Propagation y el resto del libro está dedicado a estudiar variaciones y refinamientos del algoritmo.



 

Inicio Powered by NetBSD
 
HTML5
 
En general, todo el contenido de este sitio web es original, salvo referencias o enlaces a otros sitios web y citas o reproducciones expresamente presentadas como tales.

No está permitida la reproducción ni la copia del contenido de este sitio web sin el permiso expreso de la propiedad del mismo.

Este sitio web no utiliza cookies ni ningún otro mecanismo para almacenar información en los navegadores de los visitantes ni para realizar seguimiento de los mismos.

2017,2018 Revolucionia.net
Sobre Revolucionia
Temas
Para saber más
Contacto