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:
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.
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:
donde las funciones de , y están modeladas por redes neuronales. Para simplificar la expresión, simplemente elimino los argumentos:
Entonces, podemos ver que el nuevo "vector de estado celular" ( ) es una suma ponderada del viejo vector de estado ( ) y un vector de estado celular "intermedio" ( ). 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"vector). En realidad, sería más exacto decir que con los dos vectores de pesos ( y ) "mezclamos" la memoria antigua y la nueva.
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:
donde es una función sigmoidea aplicada a cada componente del vector de estado celular.
Entonces, mi pregunta es: ¿por qué (o cómo exactamente) esta arquitectura resuelve el problema?
En particular, no entiendo lo siguiente:
- 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"?
- 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").