¿Cuál es la intuición detrás de una red neuronal recurrente de memoria a corto plazo (LSTM)?

11

La idea detrás de Recurrent Neural Network (RNN) es clara para mí. Lo entiendo de la siguiente manera:
tenemos una secuencia de observaciones ( ) (o, en otras palabras, series de tiempo multivariadas). Cada observación individual es un vector numérico dimensional. Dentro del modelo RNN suponemos que la siguiente observación es una función de la observación anterior así como del "estado oculto" anterior , donde los estados ocultos también están representados por números vectores (las dimensiones de los estados observados y ocultos pueden ser diferentes). También se supone que los estados ocultos dependen de la observación previa y el estado oculto:o1,o2,,onoiNoi+1oihi

oi,hi=F(oi1,hi1)

Finalmente, en el modelo RNN, se supone que la función es una red neuronal. Entrenamos (ajustamos) la red neuronal utilizando los datos disponibles (una secuencia de observaciones). Nuestro objetivo en el entrenamiento es poder predecir la siguiente observación con la mayor precisión posible utilizando las observaciones anteriores.F

Ahora, la red LSTM es una modificación de la red RNN. Según tengo entendido, la motivación detrás de LSTM es resolver el problema de la memoria corta que es peculiar de RNN (los RNN convencionales tienen problemas para relacionar eventos que están demasiado separados en el tiempo).

Entiendo cómo funcionan las redes LSTM. Aquí está la mejor explicación de LSTM que he encontrado. La idea básica es la siguiente:

Además del vector de estado oculto, introducimos un denominado vector de "estado de celda" que tiene el mismo tamaño (dimensionalidad) que el vector de estado oculto ( ). Creo que el vector del "estado celular" se introduce para modelar la memoria a largo plazo. Como en el caso de RNN convencional, la red LSTM obtiene el estado observado y oculto como entrada. Usando esta entrada, calculamos un nuevo "estado de celda" de la siguiente manera:ci

ci+1=ω1(oi,hi)ci+ω2(oi,hi)cint(oi,hi),

donde las funciones de , y están modeladas por redes neuronales. Para simplificar la expresión, simplemente elimino los argumentos:ω1ω2cint

ci+1=ω1ci+ω2cint

Entonces, podemos ver que el nuevo "vector de estado celular" ( ci ) es una suma ponderada del viejo vector de estado ( ci1 ) y un vector de estado celular "intermedio" ( cint ). La multiplicación entre los vectores es por componentes (multiplicamos dos vectores N dimensionales y obtenemos, como resultado, otro vector N dimensional). En otras palabras, mezclamos dos vectores de estados celulares (el antiguo y el intermedio) usando pesos específicos de componentes.

Aquí está la intuición entre las operaciones descritas. El vector de estado celular puede interpretarse como un vector de memoria. El segundo vector de pesos (calculado por una red neuronal) es una puerta "mantener" (u olvidar). Sus valores deciden si mantenemos u olvidamos (borramos) un valor correspondiente del vector de estado de la celda (o vector de memoria a largo plazo). El primer vector de pesos ( ), que es calculado por otra red neuronal, se llama puerta "escribir" o "memorizar". Decide si una nueva memoria (el vector de estado de celda "intermedio") debe guardarse (o más precisamente, si un componente particular de la misma debe guardarse / escribirse). El "intermedio"ω2ω1ω1vector). En realidad, sería más exacto decir que con los dos vectores de pesos ( y ) "mezclamos" la memoria antigua y la nueva.ω1ω2

Entonces, después de la mezcla descrita anteriormente (u olvido y memorización) tenemos un nuevo vector de estado celular. Luego calculamos un estado oculto "intermedio" usando otra red neuronal (como antes, usamos el estado observado y el estado oculto como entradas). Finalmente, combinamos el nuevo estado de la celda (memoria) con el estado oculto "intermedio" ( ) para obtener el nuevo estado oculto (o "final") que realmente mostramos:oyohyohyonortet

hyo+1=hyonortetS(Cyo+1),

donde es una función sigmoidea aplicada a cada componente del vector de estado celular.S

Entonces, mi pregunta es: ¿por qué (o cómo exactamente) esta arquitectura resuelve el problema?

En particular, no entiendo lo siguiente:

  1. Usamos una red neuronal para generar memoria "intermedia" (vector de estado de celda) que se mezcla con la memoria "antigua" (o estado de celda) para obtener una memoria "nueva" (estado de celda). Los factores de ponderación para la mezcla también se calculan mediante redes neuronales. Pero, ¿por qué no podemos usar una sola red neuronal para calcular el "nuevo" estado de la celda (o memoria) O, en otras palabras, ¿por qué no podemos usar el estado observado, el estado oculto y la memoria antigua como entradas a una red neuronal que calcula la memoria "nueva"?
  2. Al final, usamos los estados observados y ocultos para calcular un nuevo estado oculto y luego usamos el "nuevo" estado de celda (o memoria (a largo plazo)) para corregir el componente del nuevo estado oculto calculado. En otras palabras, los componentes del estado de la celda se utilizan como pesos que simplemente reducen los componentes correspondientes del estado oculto calculado. Pero, ¿por qué se usa el vector de estado celular de esta manera particular? ¿Por qué no podemos calcular el nuevo estado oculto colocando el vector de estado de la celda (memoria a largo plazo) en la entrada de una red neuronal (que también toma los estados observados y ocultos como entrada)?

Adicional:

Aquí hay un video que podría ayudar a aclarar cómo se organizan las diferentes puertas ("mantener", "escribir" y "leer").

romano
fuente
1
Parece que entiendes LSTM mejor que yo, así que no publicaré una respuesta real, ya que puede que no sea lo que estás buscando: las puertas LSTM (principalmente las puertas olvidadas) le permiten mantener activaciones y gradientes durante tanto tiempo. según sea necesario. Entonces, la información en el tiempo t puede mantenerse disponible hasta el tiempo t + n, para n arbitrariamente grande.
rcpinto
@rcpinto, también creo que la idea principal detrás de la "arquitectura" propuesta es permitir mantener la información durante mucho tiempo (muchos pasos). Pero no entiendo qué es exactamente lo que lo hace posible. Las dos redes de compuertas ("mantener" y "escribir") podrían aprender que los pesos de retención deberían ser grandes y los pesos de escritura deberían ser pequeños (entonces mantendremos la memoria durante mucho tiempo). ¿Pero eso no se puede lograr con una sola red? ¿No puede una red neuronal (que toma el estado oculto (memoria) y el estado observable como entrada) aprender que el estado oculto debe mantenerse sin cambios?
Romano
De hecho, solo establezca la matriz de peso recurrente en la identidad y siempre mantendrá la última activación. El problema es siempre la parte, lo que significa que las nuevas entradas se acumularán y saturarán rápidamente la activación de las neuronas, lo que también es una especie de olvido. Por lo tanto, la capacidad de borrar una memoria anterior o bloquear la formación de nuevos recuerdos es crucial.
rcpinto
@rcpinto, pero ¿no puede lograrse la "capacidad de borrar una memoria anterior o bloquear la formación de una nueva" dentro de una única red neuronal? La red neuronal obtiene el vector de memoria (o un vector de estado oculto) y el vector de estado observado como entrada. ¿No puede esa red "decidir" mantener o reemplazar algunos componentes del estado oculto (su memoria) en función de los valores de los componentes en el vector de estado observado?
Romano
Los LSTM pueden hacerlo porque las puertas se abren o cierran de acuerdo con la entrada y el estado actuales. No existe tal concepto en los RNN simples. En este caso, el estado en sí mismo siempre reacciona a la entrada / estado directa e inmediatamente, evitando que "elija" si guardar o no la nueva información. Además, no existe un mecanismo para borrar parte de la memoria almacenada, siempre se acumulará de acuerdo con los pesos de entrada a la neurona, y esos pesos no pueden cambiar después del entrenamiento. Dado que las puertas LSTM son multiplicativas, simulan el cambio de peso durante la inferencia, reaccionando a la entrada / estado actual.
rcpinto

Respuestas:

1

Según entiendo sus preguntas, lo que imagina básicamente concatena la entrada, el estado oculto anterior y el estado anterior de la celda, y los pasa a través de una o varias capas completamente conectadas para calcular el estado oculto de salida y el estado de la celda, en lugar de calcular independientemente "actualizaciones que interactúan aritméticamente con el estado de la celda. Básicamente, esto crearía un RNN regular que solo generaba parte del estado oculto.

La razón principal para no hacer esto es que la estructura de los cálculos del estado de la celda de LSTM asegura un flujo constante de error a través de secuencias largas . Si utilizó pesos para calcular el estado de la celda directamente, ¡necesitaría propagarse a través de ellos en cada paso de tiempo! Evitar tales operaciones resuelve en gran medida los gradientes de desaparición / explosión que de otro modo plagarían a los RNN.

Además, la capacidad de retener información fácilmente durante períodos de tiempo más largos es una buena ventaja. Intuitivamente, sería mucho más difícil para la red aprender desde cero para preservar el estado de la célula durante períodos de tiempo más largos.

Vale la pena señalar que la alternativa más común a LSTM, el GRU , calcula de manera similar las actualizaciones de estado ocultas sin aprender pesos que operan directamente en el estado oculto.

Gianni
fuente
0

Si he entendido correctamente, ambas preguntas se reducen a esto. Dos lugares donde estamos usando tanh y sigmoid para procesar la información. En lugar de eso, deberíamos usar una única red neuronal que tome toda la información.

No conozco los inconvenientes de usar una sola red neuronal. En mi opinión, podemos usar una única red neuronal con no linealidad sigmoidea que aprende correctamente el vector que se usará de manera apropiada (agregado en el estado de la celda en el primer caso o transmitido como estado oculto en el segundo caso).

Sin embargo, de la forma en que lo estamos haciendo ahora, estamos rompiendo la tarea en dos partes, una parte que usa la no linealidad sigmoidea para aprender la cantidad de datos que se deben mantener. La otra parte que usa tanh como no linealidad es solo la tarea de aprender la información que es importante.

En términos simples, sigmoid aprende cuánto ahorrar y tanh aprende qué guardar y dividirlo en dos partes facilitará el entrenamiento.

aprendiz
fuente