Uno de los algoritmos más populares: entrenamiento de retropropagación.

La propagación hacia atrás es uno de los métodos más comunes para entrenar redes neuronales. Rumelhart, Hinton y Williams (1986) introdujeron la propagación hacia atrás, que sigue siendo popular en la actualidad. Los programadores a menudo usan la propagación hacia atrás para entrenar redes neuronales profundas porque escala bien cuando se ejecuta en una unidad de procesamiento de gráficos. Para comprender este algoritmo para redes neuronales, debemos explorar cómo entrenarlo y cómo maneja los patrones.

La retropropagación clásica se ha ampliado y modificado, dando como resultado muchos algoritmos de entrenamiento diferentes. En este capítulo, analizaremos los algoritmos de entrenamiento más utilizados para redes neuronales. Comenzamos con la retropropagación clásica y terminamos este capítulo con un descenso de gradiente estocástico.

6.1 Comprensión del gradiente

La retropropagación es un tipo de descenso de gradiente, y estos dos términos a menudo se usan indistintamente en muchos libros de texto. El descenso de gradiente se refiere al cálculo de un gradiente en cada peso en la red neuronal para cada elemento de entrenamiento. Dado que la red neuronal no genera el valor esperado del elemento de entrenamiento, el gradiente de cada peso le indicará cómo modificar el peso para lograr el resultado deseado. Si la red neuronal genera el resultado esperado, el gradiente de cada peso será 0, lo que significa que no es necesario modificar los pesos.

El gradiente es la derivada de la función de error al valor actual del peso. La función de error se utiliza para medir la brecha entre la salida de la red neuronal y la salida esperada. De hecho, podemos usar el descenso de gradiente, en el que el gradiente de cada peso puede llevar la función de error a un valor más bajo.

El gradiente es esencialmente la derivada parcial de la función de error con respecto a cada peso en la red neuronal. Cada peso tiene un gradiente, que es la pendiente de la función de error. El peso es la conexión entre dos neuronas. El cálculo del gradiente de la función de error puede determinar si el algoritmo de entrenamiento debe aumentar o disminuir el peso. A su vez, esta determinación reducirá el error de la red neuronal. El error es la diferencia entre la salida esperada de la red neuronal y la salida real. Muchos algoritmos de entrenamiento diferentes llamados "algoritmos de entrenamiento de propagación" utilizan gradientes. En general, el gradiente le dice a la red neuronal la siguiente información:

  • Los pesos de gradiente cero no causarán errores en la red neuronal;
  • Gradiente negativo: se debe aumentar el peso para reducir el error;
  • Gradiente positivo: el peso debe reducirse para reducir el error.

Dado que muchos algoritmos se basan en cálculos de gradientes, comenzamos analizando este proceso.

 6.1.1 ¿Qué es un gradiente?

Primero, exploremos el degradado. Básicamente, el entrenamiento es una búsqueda del conjunto de peso, lo que hará que la red neuronal tenga el error más pequeño para el conjunto de entrenamiento. Si disponemos de recursos informáticos ilimitados, solo tenemos que probar varias combinaciones de peso posibles para determinar el peso que proporciona el menor error durante el entrenamiento.

Debido a que no tenemos recursos informáticos ilimitados, debemos utilizar algún tipo de atajo para evitar la necesidad de verificar todas las combinaciones posibles de pesos. Estos algoritmos de entrenamiento utilizan técnicas inteligentes para evitar búsquedas de fuerza bruta para todos los pesos. Pero este tipo de búsqueda exhaustiva será imposible, porque incluso las redes pequeñas tienen un número ilimitado de combinaciones de peso.

Considere una imagen que muestra el error de la red neuronal para cada posible peso. La figura 6-1 muestra el error de un solo peso.

 

Figura 6-1 El error de un solo peso

Es fácil ver en la Figura 6-1 que el mejor peso es curvo

 

(

 

) La posición con el valor más bajo. El problema es que solo vemos el error del peso actual, no podemos ver la imagen completa porque el proceso requiere una búsqueda exhaustiva. Sin embargo, podemos determinar la pendiente de la curva de error para un peso específico. En la Figura 6-1, vemos que la curva de error es

 

= Pendiente en 1,5. Tangente a la curva de error (en

 

= 1,5) la línea recta da la pendiente. En este ejemplo, la pendiente o pendiente es −0,562 2. Una pendiente negativa significa que al aumentar el peso se reducirá el error.

El gradiente se refiere a la pendiente instantánea de la función de error bajo un cierto peso. La derivada de la curva de error en este punto da el gradiente. La pendiente de esta línea nos dice qué tan empinada es la función de error bajo cierto peso.

La derivada es uno de los conceptos más básicos del cálculo. Para este libro, solo necesita comprender que la derivada proporciona la pendiente de la función en un punto específico. La técnica de entrenamiento y la pendiente pueden proporcionarle información que se puede utilizar para ajustar los pesos y reducir errores. Ahora, usando la definición práctica de gradiente, mostraremos cómo calcularlo.

 6.1.2 Calcular la pendiente

Calcularemos un gradiente para cada peso por separado. Nos enfocamos no solo en ecuaciones, sino también en la aplicación de gradientes en redes neuronales reales con valores reales. La figura 6-2 muestra la red neuronal que usaremos: red neuronal XOR.

 

Figura 6-2 Red neuronal XOR

Además, la misma red neuronal se utiliza en varios ejemplos de los recursos en línea de este libro (consulte la introducción). En este capítulo, mostraremos algunos cálculos para ilustrar el entrenamiento de redes neuronales. Debemos usar los mismos pesos iniciales para mantener estos cálculos consistentes. Sin embargo, los pesos anteriores no tienen características y son generados aleatoriamente por el programa.

La red neuronal mencionada anteriormente es una red neuronal feedforward típica de tres capas. Como estudiamos antes, los círculos representan neuronas, las líneas que conectan los círculos representan pesos y los rectángulos en el medio de las líneas de conexión dan el peso de cada conexión.

El problema al que nos enfrentamos ahora es calcular la derivada parcial de cada peso en la red neuronal. Cuando una ecuación tiene múltiples variables, usamos derivadas parciales. Cada peso se trata como una variable porque estos pesos cambiarán de forma independiente a medida que cambie la red neuronal. La derivada parcial de cada peso solo muestra la influencia independiente de cada peso en la función de error. La derivada parcial es el gradiente.

La regla de la cadena del cálculo se puede utilizar para calcular cada derivada parcial. Comenzamos con un elemento de conjunto de entrenamiento. Para la Figura 6-2, proporcionamos [1,0] como entrada y esperamos que la salida sea 1. Puede ver que aplicamos la entrada a la Figura 6-2. La entrada de la primera neurona de entrada es 1.0 y la entrada de la segunda neurona de entrada es 0.0.

Esta entrada se alimenta a través de una red neuronal y, en última instancia, produce una salida. El capítulo 4 "Redes neuronales de alimentación directa" presenta el proceso exacto de cálculo de la salida y la suma. La propagación hacia atrás tiene direcciones tanto hacia adelante como hacia atrás. Al calcular la salida de la red neuronal, se produce la propagación hacia adelante. Solo calculamos el gradiente para este elemento de datos en el conjunto de entrenamiento, y otros elementos de datos en el conjunto de entrenamiento tendrán diferentes gradientes. A continuación, analizaremos cómo combinar el gradiente de cada elemento del conjunto de entrenamiento.

Ahora estamos listos para calcular el gradiente. A continuación se resumen los pasos para calcular el gradiente de cada peso:

  • Calcule el error de acuerdo con el valor ideal del conjunto de entrenamiento;
  • Calcule el incremento del nodo de salida (neurona);
  • Calcule el incremento de los nodos neuronales internos;
  • Calcule un solo gradiente.

Discutiremos estos pasos en el siguiente contenido.

6.2 Calcular el incremento del nodo de salida

Calcule un valor constante para cada nodo (neurona) en la red neuronal. Comenzaremos con el nodo de salida y luego retropropagaremos gradualmente a través de la red neuronal. El término "retropropagación" proviene de este proceso. Inicialmente calculamos los errores de las neuronas de salida y luego los propagamos hacia atrás a través de la red neuronal.

El incremento de nodo es el valor que calcularemos para cada nodo. El incremento de capa también describe este valor, porque podemos calcular el incremento de una capa a la vez. Al calcular los nodos de salida o los nodos internos, el método para determinar el incremento del nodo puede ser diferente. Primero calcule el nodo de salida y considere la función de error de la red neuronal. En este libro, estudiaremos la función de error cuadrático y la función de error de entropía cruzada.

 6.2.1 Función de error cuadrático

Los programadores de redes neuronales suelen utilizar funciones de error cuadráticas. De hecho, puede encontrar muchos ejemplos de uso de funciones de error cuadrático en Internet. Si está leyendo un programa de muestra, pero no mencionó la función de error específica, entonces el programa puede usar una función de error cuadrática, también conocida como función MSE, que discutimos en el Capítulo 5 "Capacitación y Evaluación". La ecuación 6-1 muestra la función MSE:

 

(6-1)

La ecuación 6-1 será la salida real de la red neuronal (

 

) Y salida esperada (

 

) Se compararon. variable

 

Multiplique el número de elementos de entrenamiento por el número de neuronas de salida. El caso en el que MSE procesa múltiples neuronas de salida en una sola neurona de salida. La ecuación 6-2 muestra el incremento nodal usando la función de error cuadrático:

 

(6-2)

La función de error cuadrático es muy simple, porque toma la diferencia entre la salida esperada de la red neuronal y la salida real.

 

′ Representa la derivada de la función de activación.

 6.2.2 Función de error de entropía cruzada

La función de error cuadrático a veces puede tardar mucho en ajustar los pesos correctamente. La ecuación 6-3 muestra la función de error de entropía cruzada (error de entropía cruzada, CE):

 

(6-3)

Como se muestra en la Ecuación 6-4, el cálculo de incrementos de nodos usando la función de error de entropía cruzada es mucho más simple que usando la función MSE.

 

(6-4)

La función de error de entropía cruzada generalmente dará mejores resultados que la función de error cuadrático porque la función de error cuadrático crea un gradiente pronunciado para el error. Recomendamos utilizar la función de error de entropía cruzada.

6.3 Calcular el incremento de nodo restante

Ahora que el incremento del nodo de salida se ha calculado de acuerdo con la función de error apropiada, podemos calcular el incremento del nodo interno, como se muestra en la Ecuación 6-5:

 

(6-5)

Calcularemos los incrementos de nodo para todas las neuronas ocultas e insesgadas, pero no es necesario calcular los incrementos de nodo para las neuronas de entrada y sesgo. Aunque podemos calcular fácilmente los incrementos de nodo de las neuronas de entrada y sesgo utilizando la Ecuación 6-5, estos valores no son necesarios para el cálculo del gradiente. Pronto verá que el cálculo del gradiente de los pesos solo considera las neuronas conectadas a los pesos. El sesgo y las neuronas de entrada son solo el punto de partida de la conexión, nunca son el final.

Si desea ver el proceso de cálculo del gradiente, hay varios ejemplos de JavaScript que muestran estos procesos de cálculo. Estos ejemplos se pueden encontrar en la siguiente URL:

http://www.heatonresearch.com/aifh/vol3/

6.4 La derivada de la función de activación

El proceso de retropropagación requiere derivadas de la función de activación y, por lo general, determinan cómo se realizará el proceso de retropropagación. La mayoría de las redes neuronales profundas modernas utilizan funciones de activación lineales, Softmax y ReLU. También exploraremos la derivada del tipo S y la función de activación de tangente hiperbólica para comprender por qué la función de activación de ReLU funciona tan bien.

 6.4.1 Derivada de la función de activación lineal

Una función de activación lineal no se considera una función de activación porque solo devuelve cualquier valor dado. Por lo tanto, la función de activación lineal a veces se denomina función de activación uniforme. La derivada de la función de activación es 1, como se muestra en la Ecuación 6-6:

 

(6-6)

Como se mencionó anteriormente, el alfabeto griego

 

Representa la función de activación, en

 

El apóstrofe en la parte superior derecha indica que estamos usando la derivada de la función de activación. Ésta es una de varias representaciones matemáticas de derivadas.

 6.4.2 Derivada de la función de activación Softmax

En este libro, la función de activación de Softmax y la función de activación lineal solo se utilizan en la capa de salida de la red neuronal. Como se mencionó en el Capítulo 1, "Conceptos básicos de la red neuronal", la diferencia entre la función de activación de Softmax y otras funciones de activación es que su valor también depende de otras neuronas de salida, no solo de la neurona de salida que se está calculando actualmente. Para mayor comodidad, la fórmula 6-7 muestra nuevamente la función de activación de Softmax:

 

(6-7)

 

El vector representa la salida de todas las neuronas de salida. La ecuación 6-8 muestra la derivada de la función de activación:

 

(6-8)

Para la derivada anterior, usamos una notación ligeramente diferente. La razón con el símbolo ∂ en cursiva representa la derivada parcial, que se usa cuando se diferencia una ecuación con múltiples variables. Para tomar una derivada parcial, puede diferenciar la ecuación con respecto a una variable mientras mantiene constantes todas las demás variables. La parte superior indica la función a diferenciar. En este ejemplo, la función a diferenciar es la función de activación

 

. El ∂ en la parte inferior representa la diferenciación respectiva de derivadas parciales. En este ejemplo, estamos calculando la salida de la neurona y todas las demás variables se tratan como constantes. La diferenciación es la tasa instantánea de cambio: solo una variable puede cambiar a la vez.

Si se utiliza la función de error de entropía cruzada, la derivada de la función de activación lineal o Softmax no se utilizará para calcular el gradiente de la red neuronal. Por lo general, solo usa funciones de activación lineal y Softmax en la capa de salida de la red neuronal. Por lo tanto, no necesitamos preocuparnos por sus derivadas con respecto a los nodos internos. Para los nodos de salida que usan la función de error de entropía cruzada, la derivada de las funciones de activación lineal y Softmax es siempre 1. Por lo tanto, rara vez utilizará derivadas de funciones de activación lineales o Softmax para nodos internos.

 6.4.3 Derivada de la función de activación de tipo S

La ecuación 6-9 muestra la derivada de la función de activación de tipo S:

 

(6-9)

El aprendizaje automático a menudo usa la función de activación sigmoidea expresada en las ecuaciones 6-9. Derivamos esta fórmula realizando operaciones algebraicas en la derivada de la función sigmoidea, para usar la función de activación sigmoidea en su propio cálculo de derivada. Para mejorar la eficiencia computacional, las letras griegas en la función de activación anterior

 

Representa la función de activación sigmoidea. En el proceso de feedforward, calculamos el valor de la función de activación sigmoidea. Mantener el valor de la función de activación sigmoidea facilita el cálculo de la derivada de la función de activación sigmoidea. Si está interesado en cómo obtener la fórmula 6-9, puede consultar el siguiente sitio web:

http://www.heatonresearch.com/aifh/vol3/deriv_sigmoid.html

 6.4.4 La derivada de la función de activación de la tangente hiperbólica

La ecuación 6-10 da la derivada de la función de activación tangente hiperbólica:

 

(6-10)

En este libro, recomendamos utilizar la función de activación de tangente hiperbólica en lugar de la función de activación sigmoidea.

 6.4.5 Derivada de la función de activación de ReLU

La ecuación 6-11 muestra la derivada de la función de activación de ReLU:

 

(6-11)

Estrictamente hablando, la función de activación de ReLU no tiene derivada en 0, pero, debido a la convención, cuando

 

Cuando es 0, se reemplaza el gradiente en 0. Las redes neuronales profundas con funciones de activación tangente sigmoidea e hiperbólica pueden ser difíciles de entrenar mediante retropropagación. Hay muchos factores que causan esta dificultad, y el problema del gradiente que desaparece es una de las razones más comunes. La figura 6-3 muestra la función de activación de la tangente hiperbólica y su gradiente / derivada.

 

Figura 6-3 Función de activación de la tangente hiperbólica y su gradiente / derivada

La figura 6-3 muestra que cuando la función de activación de la tangente hiperbólica (línea continua) se acerca a -1 y 1, la derivada de la activación de la tangente hiperbólica (línea de puntos) desaparece a 0. Tanto la función de activación de tipo S como la de tangente hiperbólica tienen este problema, pero la función de activación de ReLU no. La figura 6-4 muestra la función de activación sigmoidea y su derivada de desaparición.

 

Figura 6-4 Función de activación de tipo S y su derivada de desaparición

6.5 Aplicar propagación hacia atrás

La retropropagación es un algoritmo de entrenamiento simple que puede usar el gradiente calculado para ajustar el peso de la red neuronal. Este método es una forma de descenso de gradiente porque reducimos el gradiente a un valor más bajo. A medida que el programa ajusta estos pesos, la red neuronal producirá una salida más ideal. El error general de la red neuronal debería disminuir con el entrenamiento. Antes de discutir el proceso de actualización de las ponderaciones de retropropagación, primero debemos discutir dos formas diferentes de actualizar las ponderaciones.

 6.5.1 Capacitación por lotes y capacitación en línea

Hemos mostrado cómo calcular el gradiente para un solo elemento del conjunto de entrenamiento. Anteriormente en este capítulo, calculamos el gradiente de la entrada de la red neuronal [1,0] y la salida esperada 1. Para un solo elemento del conjunto de entrenamiento, este resultado es aceptable, pero la mayoría de los conjuntos de entrenamiento tienen muchos elementos. Por lo tanto, podemos procesar varios elementos del conjunto de capacitación de dos formas, a saber, capacitación en línea y capacitación por lotes.

El entrenamiento en línea significa que debe modificar los pesos después de cada elemento del conjunto de entrenamiento. Con los gradientes obtenidos en el primer elemento del conjunto de entrenamiento, puede calcular los pesos y cambiarlos. Cuando el entrenamiento progresa al siguiente elemento del conjunto de entrenamiento, la red neuronal también se calculará y actualizará. El entrenamiento continuará hasta que haya agotado cada elemento del conjunto de entrenamiento. En este punto, se ha completado una iteración o época de entrenamiento.

El entrenamiento por lotes también utiliza todos los elementos del conjunto de entrenamiento, pero no tenemos prisa por actualizar todos los pesos. En su lugar, sumamos el gradiente de cada elemento del conjunto de entrenamiento. Una vez que hayamos completado la suma de los gradientes de los elementos del conjunto de entrenamiento, podemos actualizar los pesos de la red neuronal. En este punto, la iteración está completa.

A veces, podemos establecer el tamaño del lote. Si su conjunto de entrenamiento puede tener 10,000 elementos, puede optar por actualizar el peso de la red neuronal cada 1,000 elementos, de modo que el peso de la red neuronal se actualice 10 veces durante la iteración de entrenamiento.

El entrenamiento en línea es la forma original de retropropagación. Si desea ver el cálculo de la versión por lotes del programa, consulte el siguiente ejemplo en línea:

http://www.heatonresearch.com/aifh/vol3/xor_batch.html

 6.5.2 Descenso de gradiente estocástico

El entrenamiento por lotes y el entrenamiento en línea no son las únicas opciones para la propagación hacia atrás. El descenso de gradiente estocástico (SGD) es el algoritmo más popular entre los algoritmos de retropropagación. SGD puede trabajar en modo de entrenamiento por lotes o en línea. El SGD en línea simplemente selecciona aleatoriamente los elementos del conjunto de entrenamiento, luego calcula los gradientes y realiza actualizaciones de peso. Este proceso continúa hasta que el error alcanza un nivel aceptable. En comparación con atravesar todo el conjunto de entrenamiento en cada iteración, la selección de elementos aleatorios del conjunto de entrenamiento generalmente converge a pesos aceptables más rápido.

El SGD de lote se puede lograr seleccionando el tamaño del lote. Para cada iteración, el número de elementos del conjunto de entrenamiento que no deben exceder el tamaño del lote seleccionado se selecciona al azar, por lo que se selecciona un lote pequeño. Al actualizar, los gradientes en el procesamiento de mini lotes se suman como actualizaciones regulares de procesamiento por lotes de retropropagación. Esta actualización es muy similar a la actualización de procesamiento por lotes regular, la diferencia es que cada vez que se requiere un lote, se selecciona aleatoriamente un lote pequeño. Las iteraciones generalmente procesan un solo lote en SGD. El tamaño del lote suele ser mucho más pequeño que el conjunto de entrenamiento completo. Una opción común para el tamaño de lote es 600.

 6.5.3 Actualización del peso de retropropagación

Ahora, estamos listos para actualizar los pesos. Como se mencionó anteriormente, tratamos los pesos y los gradientes como matrices unidimensionales. Dados estos dos arreglos, estamos listos para calcular las actualizaciones de peso para las iteraciones del entrenamiento de retropropagación. La ecuación 6-12 da la fórmula para actualizar los pesos para la propagación hacia atrás:

 

(6-12)

La fórmula 6-12 calcula el cambio de peso de cada elemento en la matriz de peso. También notará que la Ecuación 6-12 requiere cambios en los pesos de la iteración anterior. Debe almacenar estos valores en otra matriz. Como se mencionó anteriormente, la dirección de la actualización del peso es opuesta al signo del gradiente: un gradiente positivo hará que el peso disminuya, mientras que un gradiente negativo hará que el peso aumente. Debido a esta relación inversa, las ecuaciones 6-12 comienzan con un signo negativo.

La ecuación 6-12 calcula el incremento de peso como el producto del gradiente y la tasa de aprendizaje ( denotado por ε ). Además, sumamos el producto del cambio de peso anterior y el valor de la cantidad de movimiento ( denotado por α ). La velocidad de aprendizaje y el impulso son los dos parámetros que debemos proporcionar al algoritmo de retropropagación. La elección de los valores de la tasa de aprendizaje y el impulso es muy importante para el rendimiento del entrenamiento. Desafortunadamente, la determinación de la velocidad y el impulso de aprendizaje se logra principalmente mediante prueba y error.

La tasa de aprendizaje escala el gradiente, lo que puede ralentizar o acelerar la velocidad de aprendizaje. Una tasa de aprendizaje inferior a 1.0 ralentizará la velocidad de aprendizaje. Por ejemplo, una tasa de aprendizaje de 0.5 reducirá cada gradiente en un 50%; una tasa de aprendizaje superior a 1.0 acelerará el entrenamiento. De hecho, la tasa de aprendizaje es casi siempre inferior a 1.

La elección de una tasa de aprendizaje demasiado alta hará que su red neuronal no converja y producirá un error global más alto, en lugar de converger a un valor más bajo. La elección de una tasa de aprendizaje demasiado baja hará que la red neuronal dedique mucho tiempo a lograr la convergencia.

Al igual que la tasa de aprendizaje, el impulso también es un factor de escala. Aunque es opcional, el impulso determina qué porcentaje del cambio de peso de la iteración anterior debe aplicarse a esta iteración. Si no desea utilizar el impulso, simplemente especifique su valor como 0.

Momentum es una técnica utilizada para la propagación hacia atrás para ayudar a entrenar a evitar los mínimos locales, que son los valores identificados por los puntos bajos en el mapa de error, en lugar de los verdaderos mínimos globales. La propagación hacia atrás tiende a encontrar un mínimo local y no puede volver a saltar. Este proceso conduce a un mayor error de convergencia de entrenamiento, que no es lo que esperábamos. Momentum puede aplicar algo de fuerza a la red neuronal en la dirección de su cambio actual, lo que le permite romper el mínimo local.

 6.5.4 Elección de la velocidad y el impulso de aprendizaje

El impulso y la tasa de aprendizaje contribuyen al éxito del entrenamiento, pero de hecho no forman parte de la red neuronal. Una vez que se completa el entrenamiento, los pesos después del entrenamiento se mantendrán sin cambios y ya no se usará el impulso o la tasa de aprendizaje. Son esencialmente una especie de "andamiaje" temporal que se utiliza para crear redes neuronales entrenadas. Elegir el impulso y la tasa de aprendizaje adecuados afectará la eficacia del entrenamiento.

La tasa de aprendizaje afectará la velocidad del entrenamiento de la red neuronal y la reducción de la tasa de aprendizaje hará que el entrenamiento sea más detallado. Una tasa de aprendizaje más alta puede omitir el ajuste de peso óptimo, y una tasa de aprendizaje más baja siempre producirá mejores resultados. Sin embargo, reducir la velocidad de entrenamiento aumentará en gran medida el tiempo de ejecución. Reducir la tasa de aprendizaje en el entrenamiento de redes neuronales puede ser una técnica eficaz.

Puedes usar el impulso para luchar contra los mínimos locales. Si encuentra que la red neuronal se está estancando, el valor de impulso más alto puede hacer que el entrenamiento exceda el mínimo local que encuentra. Después de todo, elegir buenos valores para el impulso y la tasa de aprendizaje es un proceso de prueba y error. Puede realizar ajustes según el progreso del entrenamiento. El impulso generalmente se establece en 0.9 y la tasa de aprendizaje generalmente se establece en 0.1 o menos.

 6.5.5 Momento de Nesterov

Debido a la aleatoriedad introducida por lotes pequeños, el algoritmo SGD a veces puede producir resultados incorrectos. Los pesos pueden actualizarse de manera muy útil en una iteración, pero la selección incorrecta de elementos de entrenamiento hará que se revoquen en el siguiente mini lote. Por lo tanto, el impulso es una herramienta rica en recursos que puede aliviar este resultado de entrenamiento inestable.

Nesterov Momentum es una aplicación técnica relativamente nueva inventada por Yu Nesterov en 1983, que ha sido actualizada en su libro Introductory Lectures on Convex Optimization: A Basic Course [1]. Esta técnica a veces se denomina descenso de gradiente acelerado de Nesterov. Aunque una explicación matemática completa del impulso de Nesterov está más allá del alcance de este libro, cubriremos las ponderaciones en detalle para que pueda implementarlas. Los ejemplos de este libro (incluidos los ejemplos de JavaScript en línea) contienen la implementación del impulso de Nesterov. Además, los recursos en línea de este libro incluyen algunos programas de ejemplo de JavaScript para la actualización del peso de impulso de Nesterov.

La fórmula 6-13 calcula la actualización de peso parcial en función de la tasa de aprendizaje ( ε ) y el impulso ( α ):

 

(6-13)

Para la iteración actual

 

Indica que se utilizó la iteración anterior

 

−1 significa. Esta actualización de peso parcial se llama

 

, A partir de 0 inicialmente. El cálculo posterior de la actualización de peso parcial se basa en el valor anterior de la actualización de peso parcial. La derivada parcial en la ecuación 6-13 es el gradiente de la función de error bajo el peso actual. La ecuación 6-14 muestra la actualización del impulso de Nesterov, que reemplaza la actualización estándar del peso de retropropagación que se muestra en la ecuación 6-12:

 

(6-14)

El cálculo de la actualización de peso anterior es una ampliación de parte de la actualización de peso. La ecuación 6-14 muestra que el peso incremental se ha agregado al peso actual. SGD with Nesterov momentum es uno de los algoritmos de entrenamiento más efectivos para el aprendizaje profundo.

6.6 Resumen de este capítulo

Este capítulo presenta la retropropagación clásica y SGD. Estos métodos se basan en el descenso de gradientes. En otras palabras, optimizan los pesos individuales con derivados. Para un peso dado, la derivada proporciona la pendiente de la función de error al programa. La pendiente permite que el programa determine cómo actualizar los pesos. Cada algoritmo de entrenamiento interpreta la pendiente o el gradiente de manera diferente.

Aunque la propagación hacia atrás es uno de los algoritmos de entrenamiento más antiguos, sigue siendo uno de los algoritmos más populares. La propagación hacia atrás consiste en agregar gradientes a los pesos, los gradientes negativos aumentarán los pesos y los gradientes positivos disminuirán los pesos. Usamos la tasa de aprendizaje para escalar los pesos para evitar que los pesos cambien demasiado rápido. Una tasa de aprendizaje de 0.5 significa un gradiente que aumenta el peso a la mitad, y una tasa de aprendizaje de 2.0 significa un gradiente que aumenta el peso en un factor de 2.

Existen muchas variantes del algoritmo de retropropagación, algunas de las cuales (como la propagación elástica) son populares. El capítulo 7 presentará algunas variantes de retropropagación. Aunque es útil comprender estas variantes, SGD sigue siendo uno de los algoritmos de entrenamiento de aprendizaje profundo más comunes.

Este artículo está extraído de "Algoritmos de inteligencia artificial (volumen 3): aprendizaje profundo y redes neuronales"

 

Este libro es el Volumen 3 de una serie de libros que presentan la IA. La IA es un campo con una amplia gama de investigación que cubre muchas subdisciplinas. Para los lectores que no hayan leído el Volumen 1 o el Volumen 2 de esta serie, la introducción de este libro proporcionará algunos antecedentes. Los lectores no necesitan leer el Volumen 1 o el Volumen 2 antes de leer este libro. La información disponible en el Volumen 1 y el Volumen 2 se describe a continuación.

Desde las primeras etapas de la inteligencia artificial, las redes neuronales han jugado un papel vital. Ahora, nuevas y emocionantes tecnologías, como el aprendizaje profundo y la convolución, están llevando las redes neuronales en una dirección completamente nueva. Este libro combina aplicaciones de redes neuronales en diversas tareas del mundo real, como el reconocimiento de imágenes y la ciencia de datos, e introduce las tecnologías de redes neuronales actuales, incluida la activación de ReLU, descenso de gradiente estocástico, entropía cruzada, regularización, abandono y visualización.

El público objetivo de este libro son aquellos que están interesados ​​en la inteligencia artificial, pero que carecen de una buena base matemática. Los lectores solo necesitan tener un conocimiento básico de los cursos universitarios de álgebra. Este libro proporciona a los lectores códigos de programas de muestra compatibles, y actualmente existen versiones de Java, C # y Python.

Supongo que te gusta

Origin blog.csdn.net/epubit17/article/details/115185415
Recomendado
Clasificación