¿Cómo ayuda LSTM a prevenir el problema de gradiente de fuga (y explosión) en una red neuronal recurrente?

Hay dos factores que afectan la magnitud de los gradientes: los pesos y las funciones de activación (o más precisamente, sus derivadas) a través de las cuales pasa el gradiente.

Si cualquiera de estos factores es menor que 1, entonces los gradientes pueden desaparecer con el tiempo; Si es mayor que 1, puede ocurrir una explosión. Por ejemplo, la derivada de tanh es [math] <1 [/ math] para todas las entradas excepto 0; sigmoide es aún peor y siempre es [matemática] \ leq 0.25 [/ matemática].

En la recurrencia del LSTM, la función de activación es la función de identidad con una derivada de 1.0. Por lo tanto, el gradiente propagado hacia atrás no se desvanece ni explota al pasar, sino que permanece constante.
El peso efectivo de la recurrencia es igual a la activación de la puerta olvidada . Entonces, si la puerta de olvido está activada (activación cercana a 1.0), entonces el gradiente no desaparece. Como la activación de la puerta de olvidar nunca es [matemática]> 1.0 [/ matemática], el gradiente tampoco puede explotar.
Por eso, LSTM es tan bueno para aprender dependencias de largo alcance.

Debido a que la arquitectura LSTM permite desactivar la escritura en una celda al “apagar” la puerta, evitando así cualquier cambio en el contenido de la celda durante muchos ciclos. Esto significa que se pueden aprender dependencias a más largo plazo; que no son posibles con arquitecturas de tipo tanh.

De manera similar, incluso cuando la puerta está “abierta”, la ecuación de actualización LSTM no reemplaza completamente el contenido de una celda en ningún momento, sino que mantiene un promedio ponderado de un nuevo valor y un valor anterior.

Hay muchas variaciones de LSTM. Esta respuesta toma como ejemplo la versión descrita en esta página de papel en arxiv.org.

Observe de cerca la fórmula para calcular [matemáticas] c ^ l_t [/ matemáticas]:

[matemáticas] c ^ l_t = i \ otimes g + f \ otimes c ^ l_ {t-1} [/ matemáticas]

Ahora suponga que en un paso de tiempo [math] t [/ math], tiene el error [math] \ dfrac {\ partial L} {\ partial c ^ l_t} [/ math], luego, por regla de cadena, el término [ matemáticas] c ^ l_ {t-1} [/ matemáticas] recibiría el error:

[matemáticas] \ dfrac {\ partial} {\ partial c ^ {l} _ {t-1}}: = \ dfrac {\ partial} {\ partial c ^ {l} _ {t-1}} + f \ otimes \ dfrac {\ partial L} {\ partial c ^ l_t} [/ math]

Dado que [math] f [/ math], la puerta de olvido, es la velocidad a la que desea que la red neuronal olvide su memoria pasada, la señal de error como se describió anteriormente se propaga perfectamente al paso de tiempo anterior. En muchos papeles LSTM, esto se conoce como el carrusel lineal que evita la desaparición del gradiente a través de muchos pasos de tiempo.

En la mayoría de las versiones de LSTM que conozco, la fórmula LSTM comparte la propiedad similar.

En términos más simples,

Motivo del problema de gradiente de fuga: en una red de varias capas, los gradientes para capas más profundas se calculan como productos de muchos gradientes (de funciones de activación). Cuando esos gradientes son pequeños o cero, desaparecerá fácilmente. (Por otro lado, cuando son mayores que 1, posiblemente explotará). Por lo tanto, se vuelve muy difícil de calcular y actualizar.

Solución 1) Use funciones de activación que tengan valores de gradiente ‘buenos’. No CERO en un rango razonable, No es tan pequeño, No es tan grande …

Solución 2) Use la función de activación (pasar o bloquear, o en otras palabras, 1 o 0), no la función de activación. Y entrena la ‘combinación’ de todas esas puertas. Al hacer esto, no importa cuán ‘profunda’ sea su red o cuán ‘larga’ sea la secuencia de entrada, la red puede recordar esos valores, siempre y cuando esas puertas sean todas 1 a lo largo del camino. <- Así es como LSTM / GRU hizo el trabajo.

En general, los RNN tienen una función de transición con una transformación afín seguida de una no linealidad puntual, por ejemplo, la función tangente hiperbólica:

h (t) = tanh (W x (t) + U h (t − 1) + b)

Los gradientes en capas más profundas se calculan como producto de diferenciales. Entrenado durante mucho tiempo, esto puede conducir a un problema de gradiente de explosión o desaparición dependiendo de si los gradientes individuales son más o menos de 1. Esto los hace inadecuados cuando los datos de entrada tienen secuencias largas, longitudes variables o si es necesario capturar dependencias a largo plazo.

La arquitectura LSTM aborda este problema al introducir una celda de memoria que puede preservar el estado durante largos períodos de tiempo.

Celda de memoria: c (t) = i (t) • u (t) + f (t) • c (t-1), seguido de, Capa oculta: h (t) = o (t) • tanh (c ( t)), donde i = puerta de entrada, u = puerta de actualización, f = puerta de olvido yc (t-1) = valor anterior.

Aquí, al cambiar los valores de i, fyu, se puede controlar la cantidad de información que la red retiene / descarta en toda la serie de entradas, así como controlar la dependencia de las entradas individuales. La mayor regulación ayuda a superar el problema de gradiente de desaparición / explosión. Asignar memoria a cada celda y editarla a medida que se proporcionan nuevas entradas, ayuda a mantener las dependencias de las entradas anteriores y conservar el estado durante largas sesiones de entrenamiento.

Hay muchas buenas explicaciones que entran en gran detalle técnico, por lo que intentaré dar una explicación intuitiva menos detallada sobre por qué el gradiente no desaparece (e intentaré pensar en una buena explicación de por qué no explota y editar esto más tarde). La clave principal es la puerta de entrada, que bloquea la entrada.

En un RNN hipotético que no usa LSTM, digamos que nuestra unidad oculta en el tiempo t obtiene 1/2 de su valor de la unidad oculta en el tiempo t-1, y 1/2 de la entrada actual. Luego, la influencia de una entrada en las unidades ocultas decae exponencialmente con el tiempo, ya que se reduce a la mitad.

Ahora supongamos que tenemos una entrada única al principio, la unidad oculta obtiene su valor de eso y bloqueamos completamente todas las entradas futuras. Entonces, la influencia de esa primera entrada no decae en absoluto, ya que no se reduce a la mitad en cada paso de tiempo.