Retropropagación - Backpropagation

En el aprendizaje automático , la retropropagación ( backprop , BP ) es un algoritmo ampliamente utilizado para entrenar redes neuronales de retroalimentación . Existen generalizaciones de retropropagación para otras redes neuronales artificiales (ANN) y para funciones en general. Todas estas clases de algoritmos se denominan genéricamente "retropropagación". Al ajustar una red neuronal , la propagación inversa calcula el gradiente de la función de pérdida con respecto a los pesos de la red para un solo ejemplo de entrada-salida, y lo hace de manera eficiente , a diferencia de un cálculo directo ingenuo del gradiente con respecto a cada peso individualmente. Esta eficiencia hace factible el uso de métodos de gradiente para entrenar redes multicapa, actualizando pesos para minimizar las pérdidas; descenso de gradiente , o variantes como el descenso de gradiente estocástico , se utilizan comúnmente. El algoritmo de retropropagación funciona calculando el gradiente de la función de pérdida con respecto a cada peso mediante la regla de la cadena , calculando el gradiente una capa a la vez, iterando hacia atrás desde la última capa para evitar cálculos redundantes de términos intermedios en la regla de la cadena; este es un ejemplo de programación dinámica .

El término retropropagación se refiere estrictamente solo al algoritmo para calcular el gradiente, no a cómo se usa el gradiente; sin embargo, el término se usa a menudo de manera vaga para referirse a todo el algoritmo de aprendizaje, incluida la forma en que se usa el gradiente, por ejemplo, mediante el descenso de gradiente estocástico. La retropropagación generaliza el cálculo del gradiente en la regla delta , que es la versión de una sola capa de la retropropagación, y a su vez se generaliza mediante diferenciación automática , donde la retropropagación es un caso especial de acumulación inversa (o "modo inverso"). El término retropropagación y su uso general en redes neuronales fue anunciado en Rumelhart, Hinton & Williams (1986a) , luego elaborado y popularizado en Rumelhart, Hinton & Williams (1986b) , pero la técnica fue redescubierta independientemente muchas veces y tuvo muchos predecesores datando a la década de 1960; ver § Historia . En el libro de texto de aprendizaje profundo de Goodfellow, Bengio & Courville (2016) se ofrece una descripción general moderna .

Visión general

La retropropagación calcula el gradiente en el espacio de peso de una red neuronal de retroalimentación, con respecto a una función de pérdida . Denotar:

  • : entrada (vector de características)
  • : salida de destino
    Para la clasificación, la salida será un vector de probabilidades de clase (por ejemplo, y la salida de destino es una clase específica, codificada por la variable one-hot / ficticia (por ejemplo, ).
  • : función de pérdida o "función de coste"
    Para la clasificación, esto suele ser entropía cruzada (XC, pérdida logarítmica ), mientras que para la regresión suele ser la pérdida de error al cuadrado (SEL).
  • : el número de capas
  • : los pesos entre la capa y , donde es el peso entre el -ésimo nodo de la capa y el -ésimo nodo de la capa
  • : funciones de activación en la capa
    Para la clasificación, la última capa suele ser la función logística para la clasificación binaria y softmax (softargmax) para la clasificación de clases múltiples, mientras que para las capas ocultas esta era tradicionalmente una función sigmoidea (función logística u otras) en cada nodo (coordenada), pero hoy en día es más variado, siendo común el rectificador ( rampa , ReLU ).

En la derivación de la retropropagación, se utilizan otras cantidades intermedias; se introducen según sea necesario a continuación. Los términos de sesgo no se tratan especialmente, ya que corresponden a una ponderación con una entrada fija de 1. A efectos de retropropagación, la función de pérdida específica y las funciones de activación no importan, siempre que ellas y sus derivadas puedan evaluarse de manera eficiente.

La red general es una combinación de composición de funciones y multiplicación de matrices :

Para un conjunto de entrenamiento, habrá un conjunto de pares de entrada-salida, . Para cada par de entrada-salida en el conjunto de entrenamiento, la pérdida del modelo en ese par es el costo de la diferencia entre la salida prevista y la salida objetivo :

Tenga en cuenta la distinción: durante la evaluación del modelo, los pesos son fijos, mientras que las entradas varían (y la salida objetivo puede ser desconocida), y la red termina con la capa de salida (no incluye la función de pérdida). Durante el entrenamiento del modelo, el par de entrada-salida es fijo, mientras que los pesos varían y la red termina con la función de pérdida.

La retropropagación calcula el gradiente para un par de entrada-salida fijo , donde los pesos pueden variar. Cada componente individual del gradiente puede calcularse mediante la regla de la cadena; sin embargo, hacer esto por separado para cada peso es ineficaz. La retropropagación calcula de manera eficiente el gradiente evitando cálculos duplicados y no calculando valores intermedios innecesarios, calculando el gradiente de cada capa, específicamente, el gradiente de la entrada ponderada de cada capa, denotado por , de atrás hacia adelante.

De manera informal, el punto clave es que, dado que la única forma en que un peso afecta la pérdida es a través de su efecto en la siguiente capa, y lo hace de manera lineal , son los únicos datos que necesita para calcular los gradientes de los pesos en la capa y luego puede calcular la capa anterior y repetir de forma recursiva. Esto evita la ineficiencia de dos formas. En primer lugar, evita la duplicación porque al calcular el gradiente en la capa , no es necesario volver a calcular todas las derivadas en capas posteriores cada vez. En segundo lugar, evita cálculos intermedios innecesarios porque en cada etapa calcula directamente el gradiente de los pesos con respecto al resultado final (la pérdida), en lugar de calcular innecesariamente las derivadas de los valores de las capas ocultas con respecto a los cambios en los pesos .

La propagación hacia atrás se puede expresar para redes simples de retroalimentación en términos de multiplicación de matrices , o más generalmente en términos del gráfico adjunto .

Multiplicación de matrices

Para el caso básico de una red de retroalimentación, donde los nodos en cada capa están conectados solo a los nodos en la capa siguiente inmediata (sin omitir ninguna capa), y hay una función de pérdida que calcula una pérdida escalar para la salida final, la propagación hacia atrás puede ser entendido simplemente por multiplicación de matrices. Esencialmente, la retropropagación evalúa la expresión para la derivada de la función de costo como un producto de derivadas entre cada capa de derecha a izquierda - "hacia atrás" - con el gradiente de los pesos entre cada capa siendo una simple modificación de los productos parciales (el " error propagado hacia atrás ").

Dado un par de entrada-salida , la pérdida es:

Para calcular esto, uno comienza con la entrada y avanza; denotar la entrada ponderada de cada capa como y la salida de la capa como la activación . Para la propagación hacia atrás , la activación y las derivadas (evaluadas en ) deben almacenarse en caché para su uso durante la pasada hacia atrás.

La derivada de la pérdida en términos de las entradas viene dada por la regla de la cadena; tenga en cuenta que cada término es una derivada total , evaluada al valor de la red (en cada nodo) en la entrada :

Estos términos son: la derivada de la función de pérdida; las derivadas de las funciones de activación; y las matrices de pesos:

El gradiente es la transposición de la derivada de la salida en términos de la entrada, por lo que las matrices se transponen y el orden de multiplicación se invierte, pero las entradas son las mismas:

La retropropagación consiste entonces esencialmente en evaluar esta expresión de derecha a izquierda (de manera equivalente, multiplicando la expresión anterior por la derivada de izquierda a derecha), calculando el gradiente en cada capa en el camino; hay un paso adicional, porque el gradiente de los pesos no es solo una subexpresión: hay una multiplicación adicional.

Introduciendo la cantidad auxiliar para los productos parciales (multiplicando de derecha a izquierda), interpretada como el "error a nivel " y definida como el gradiente de los valores de entrada a nivel :

Tenga en cuenta que es un vector, de longitud igual al número de nodos en el nivel ; cada componente se interpreta como el "costo atribuible a (el valor de) ese nodo".

El gradiente de los pesos en la capa es entonces:

El factor de es porque los pesos entre el nivel y el nivel de efecto son proporcionales a las entradas (activaciones): las entradas son fijas, los pesos varían.

Se puede calcular fácilmente de forma recursiva como:

Por tanto, los gradientes de los pesos se pueden calcular utilizando algunas multiplicaciones de matrices para cada nivel; esto es propagación hacia atrás.

En comparación con la computación directa ingenuamente (usando el para la ilustración):

Hay dos diferencias clave con la propagación hacia atrás:

  1. La informática en términos de evita la obvia multiplicación duplicada de capas y más.
  2. Multiplicar a partir de - propagar el error hacia atrás - significa que cada paso simplemente multiplica un vector ( ) por las matrices de pesos y derivadas de activaciones . Por el contrario, multiplicar hacia adelante, a partir de los cambios en una capa anterior, significa que cada multiplicación multiplica una matriz por una matriz . Esto es mucho más caro y corresponde a rastrear cada posible camino de un cambio en una capa hacia los cambios en la capa (para multiplicar por , con multiplicaciones adicionales para las derivadas de las activaciones), lo que calcula innecesariamente las cantidades intermedias de cómo pondera los cambios afectan los valores de los nodos ocultos.

Gráfico adjunto

Para gráficos más generales y otras variaciones avanzadas, la retropropagación se puede entender en términos de diferenciación automática , donde la retropropagación es un caso especial de acumulación inversa (o "modo inverso").

Intuición

Motivación

El objetivo de cualquier algoritmo de aprendizaje supervisado es encontrar una función que mapee mejor un conjunto de entradas a su salida correcta. La motivación para la propagación hacia atrás es entrenar una red neuronal de múltiples capas de manera que pueda aprender las representaciones internas apropiadas para permitirle aprender cualquier mapeo arbitrario de entrada a salida.

El aprendizaje como problema de optimización

Para comprender la derivación matemática del algoritmo de retropropagación, es útil desarrollar primero algo de intuición sobre la relación entre la salida real de una neurona y la salida correcta para un ejemplo de entrenamiento en particular. Considere una red neuronal simple con dos unidades de entrada, una unidad de salida y sin unidades ocultas, y en la que cada neurona usa una salida lineal (a diferencia de la mayoría de los trabajos en redes neuronales, en las que el mapeo de entradas a salidas no es lineal) que es el suma ponderada de su entrada.

Una red neuronal simple con dos unidades de entrada (cada una con una sola entrada) y una unidad de salida (con dos entradas)

Inicialmente, antes del entrenamiento, los pesos se establecerán de forma aleatoria. Luego, la neurona aprende de los ejemplos de entrenamiento , que en este caso consisten en un conjunto de tuplas donde y son las entradas a la red yt es la salida correcta (la salida que la red debería producir dadas esas entradas, cuando ha sido entrenada). La red inicial, dada y , calculará una salida y que probablemente difiera de t (dados pesos aleatorios). Se utiliza una función de pérdida para medir la discrepancia entre la salida objetivo ty la salida calculada y . Para análisis de regresión problemas el error cuadrático se puede utilizar como una función de pérdida, por clasificación de la crossentropy categórica se puede utilizar.

Como ejemplo, considere un problema de regresión usando el error cuadrado como pérdida:

donde E es la discrepancia o error.

Considere la red en un solo caso de formación: . Por lo tanto, la entrada y son 1 y 1 respectivamente y la salida correcta, t es 0. Ahora, si se traza la relación entre la salida de la red y en el eje horizontal y el error E en el eje vertical, el resultado es una parábola. El mínimo de la parábola corresponde a la salida y que minimiza el error E . Para un solo caso de entrenamiento, el mínimo también toca el eje horizontal, lo que significa que el error será cero y la red puede producir una salida y que coincida exactamente con la salida objetivo t . Por lo tanto, el problema de mapear entradas y salidas puede reducirse a un problema de optimización de encontrar una función que produzca el error mínimo.

Superficie de error de una neurona lineal para un solo caso de entrenamiento

Sin embargo, la salida de una neurona depende de la suma ponderada de todas sus entradas:

donde y son los pesos en la conexión de las unidades de entrada a la unidad de salida. Por lo tanto, el error también depende de los pesos entrantes a la neurona, que es en última instancia lo que debe cambiarse en la red para permitir el aprendizaje.

En este ejemplo, al inyectar los datos de entrenamiento, la función de pérdida se convierte en

Entonces, la función de pérdida toma la forma de un cilindro parabólico con su base dirigida a lo largo . Dado que todos los conjuntos de ponderaciones que satisfacen minimizan la función de pérdida, en este caso se requieren restricciones adicionales para converger en una solución única. Se podrían generar restricciones adicionales estableciendo condiciones específicas para los pesos o inyectando datos de entrenamiento adicionales.

Un algoritmo de uso común para encontrar el conjunto de pesos que minimiza el error es el descenso de gradiente . Por retropropagación, se calcula la dirección de descenso más pronunciada de la función de pérdida frente a los pesos sinápticos actuales. Luego, los pesos se pueden modificar a lo largo de la dirección de descenso más empinada y el error se minimiza de manera eficiente.

Derivación

El método de descenso de gradiente implica calcular la derivada de la función de pérdida con respecto a los pesos de la red. Esto se hace normalmente mediante retropropagación. Suponiendo una neurona de salida, la función de error al cuadrado es

dónde

es la pérdida del valor de salida y objetivo ,
es el resultado de destino para una muestra de entrenamiento, y
es la salida real de la neurona de salida.

Para cada neurona , su salida se define como

donde la función de activación es no lineal y diferenciable (incluso si el ReLU no está en un punto). Una función de activación utilizada históricamente es la función logística :

que tiene una derivada conveniente de:

La entrada a una neurona es la suma ponderada de las salidas de las neuronas anteriores. Si la neurona está en la primera capa después de la capa de entrada, la de la capa de entrada son simplemente las entradas a la red. El número de unidades de entrada a la neurona es . La variable denota el peso entre la neurona de la capa anterior y la neurona de la capa actual.

Encontrar la derivada del error

Diagrama de una red neuronal artificial para ilustrar la notación utilizada aquí

El cálculo de la derivada parcial del error con respecto a un peso se realiza usando la regla de la cadena dos veces:

 

 

 

 

( Ecuación 1 )

En el último factor del lado derecho de lo anterior, solo un término en la suma depende de , de modo que

 

 

 

 

( Ecuación 2 )

Si la neurona está en la primera capa después de la capa de entrada, es solo .

La derivada de la salida de la neurona con respecto a su entrada es simplemente la derivada parcial de la función de activación:

 

 

 

 

( Ecuación 3 )

que para el caso de la función de activación logística es:

Esta es la razón por la que la retropropagación requiere que la función de activación sea diferenciable . (Sin embargo, la función de activación de ReLU , que no es diferenciable en 0, se ha vuelto bastante popular, por ejemplo, en AlexNet )

El primer factor es sencillo de evaluar si la neurona está en la capa de salida, porque entonces y

 

 

 

 

( Ecuación 4 )

Si la mitad del error cuadrado se usa como función de pérdida, podemos reescribirlo como

Sin embargo, si está en una capa interna arbitraria de la red, encontrar la derivada con respecto a es menos obvio.

Considerando como una función con las entradas siendo todas las neuronas que reciben información de la neurona ,

y tomando la derivada total con respecto a , se obtiene una expresión recursiva para la derivada:

 

 

 

 

( Ecuación 5 )

Por lo tanto, la derivada con respecto a se puede calcular si se conocen todas las derivadas con respecto a las salidas de la siguiente capa, las más cercanas a la neurona de salida. [Tenga en cuenta que si alguna de las neuronas del conjunto no estuviera conectada a la neurona , sería independiente de y la derivada parcial correspondiente bajo la suma se desvanecería en 0.]

Sustituyendo la ecuación. 2 , ec. 3 Ec. 4 y Eq. 5 en la ecuación. 1 obtenemos:

con

si es la función logística y el error es el error cuadrado:

Para actualizar el peso usando el descenso de gradiente, se debe elegir una tasa de aprendizaje, . El cambio de peso debe reflejar el impacto de un aumento o una disminución de . Si , un aumento en los aumentos ; por el contrario, si , un aumento en la disminución . Lo nuevo se suma al peso anterior, y el producto de la tasa de aprendizaje y el gradiente, multiplicado por garantías de que cambia de una manera que siempre disminuye . En otras palabras, en la ecuación inmediatamente a continuación, siempre cambia de tal manera que se reduce:

Función de pérdida

La función de pérdida es una función que asigna valores de una o más variables a un número real que representa intuitivamente algún "costo" asociado con esos valores. Para la propagación hacia atrás, la función de pérdida calcula la diferencia entre la salida de la red y su salida esperada, después de que un ejemplo de entrenamiento se haya propagado a través de la red.

Supuestos

La expresión matemática de la función de pérdida debe cumplir dos condiciones para que sea posible utilizarla en retropropagación. La primera es que se puede escribir como un promedio de funciones de error más , por ejemplos individuales de formación, . La razón de esta suposición es que el algoritmo de retropropagación calcula el gradiente de la función de error para un solo ejemplo de entrenamiento, que debe generalizarse a la función de error general. El segundo supuesto es que se puede escribir en función de las salidas de la red neuronal.

Función de pérdida de ejemplo

Sea vectores adentro .

Seleccione una función de error que mida la diferencia entre dos salidas. La elección estándar es el cuadrado de la distancia euclidiana entre los vectores y :

La función de error sobre ejemplos de entrenamiento se puede escribir como un promedio de pérdidas sobre ejemplos individuales:

Limitaciones

El descenso de gradientes puede encontrar un mínimo local en lugar del mínimo global.
  • No se garantiza que el descenso de gradiente con retropropagación encuentre el mínimo global de la función de error, sino solo un mínimo local; Además, tiene problemas para cruzar mesetas en el panorama de la función de error. Durante mucho tiempo se pensó que este problema, causado por la no convexidad de las funciones de error en las redes neuronales, era un gran inconveniente, pero Yann LeCun et al. argumentan que en muchos problemas prácticos, no lo es.
  • El aprendizaje de retropropagación no requiere la normalización de los vectores de entrada; sin embargo, la normalización podría mejorar el rendimiento.
  • La propagación inversa requiere que las derivadas de las funciones de activación se conozcan en el momento del diseño de la red.

Historia

El término retropropagación y su uso general en redes neuronales fue anunciado en Rumelhart, Hinton & Williams (1986a) , luego elaborado y popularizado en Rumelhart, Hinton & Williams (1986b) , pero la técnica fue redescubierta independientemente muchas veces y tuvo muchos predecesores datando a la década de 1960.

Los conceptos básicos de la retropropagación continua se derivaron en el contexto de la teoría del control por Henry J. Kelley en 1960 y por Arthur E. Bryson en 1961. Utilizaron principios de programación dinámica . En 1962, Stuart Dreyfus publicó una derivación más simple basada únicamente en la regla de la cadena . Bryson y Ho lo describieron como un método de optimización de sistema dinámico de múltiples etapas en 1969. La retropropagación fue derivada por múltiples investigadores a principios de los 60 y fue implementada para ejecutarse en computadoras ya en 1970 por Seppo Linnainmaa . Paul Werbos fue el primero en Estados Unidos en proponer que podría usarse para redes neuronales después de analizarlo en profundidad en su disertación de 1974. Si bien no se aplicó a las redes neuronales, en 1970 Linnainmaa publicó el método general para la diferenciación automática (AD). Aunque es muy controvertido, algunos científicos creen que este fue en realidad el primer paso hacia el desarrollo de un algoritmo de retropropagación. En 1973, Dreyfus adapta los parámetros de los controladores en proporción a los gradientes de error. En 1974 Werbos mencionó la posibilidad de aplicar este principio a redes neuronales artificiales, y en 1982 aplicó el método AD de Linnainmaa a funciones no lineales.

Posteriormente, el método Werbos fue redescubierto y descrito en 1985 por Parker, y en 1986 por Rumelhart , Hinton y Williams . Rumelhart, Hinton y Williams demostraron experimentalmente que este método puede generar representaciones internas útiles de datos entrantes en capas ocultas de redes neuronales. Yann LeCun propuso la forma moderna del algoritmo de aprendizaje de retropropagación para redes neuronales en su tesis doctoral en 1987. En 1993, Eric Wan ganó un concurso internacional de reconocimiento de patrones mediante retropropagación.

Durante la década de 2000 cayó en desgracia, pero regresó en la década de 2010, beneficiándose de sistemas informáticos económicos y potentes basados ​​en GPU . Esto ha sido especialmente así en la investigación del reconocimiento de voz , la visión artificial , el procesamiento del lenguaje natural y el aprendizaje de la estructura del lenguaje (en la que se ha utilizado para explicar una variedad de fenómenos relacionados con el aprendizaje del primer y segundo idioma).

Se ha sugerido la propagación inversa de errores para explicar los componentes ERP del cerebro humano , como el N400 y el P600 .

Ver también

Notas

Referencias

Otras lecturas

enlaces externos