the - tensorflow keras time series
Keras-LSTMs con estado vs sin estado (2)
Me está costando mucho conceptualizar la diferencia entre los LSTM con estado y sin estado en Keras. Mi entendimiento es que al final de cada lote, el "estado de la red se restablece" en el caso sin estado, mientras que para el caso con estado, el estado de la red se conserva para cada lote, y luego se debe reiniciar manualmente en el Fin de cada época.
Mis preguntas son las siguientes: 1. En el caso sin estado, ¿cómo se está aprendiendo la red si el estado no se conserva entre lotes? 2. ¿Cuándo se utilizarían los modos sin estado o con estado de una LSTM?
La red aún aprende la conexión del artículo i y del artículo i + 1 en cada lote. Entonces, si decide utilizar RNN sin estado, muy a menudo dividiría su serie en múltiples segmentos, cada segmento de longitud N. Si alimenta esos segmentos en la red, todavía aprenderá a predecir el siguiente elemento dado su conocimiento sobre todos los anteriores elementos.
Creo que la mayoría de la gente usa RNN sin estado en la práctica, porque si usamos RNN con estado, en la producción, la red se ve obligada a lidiar con secuencias largas infinitas, y esto puede ser complicado de manejar.
En primer lugar, le recomiendo que aprenda los conceptos de BPTT (Propagación hacia atrás a través del tiempo) y SGD de mini lotes (Pendiente de gradiente estocástico), luego tendrá una mejor comprensión del procedimiento de entrenamiento de LSTM.
Para tus preguntas,
Q1. En casos sin estado, LSTM actualiza los parámetros en batch1 y luego inicia estados ocultos y estados de celda (generalmente todos ceros) para batch2, mientras que en casos con estado, utiliza los estados ocultos de última salida del batch1 y estados de celdas como estados iniciales para batch2.
Q2. Como puede ver arriba, cuando dos secuencias en dos lotes tienen conexiones (por ejemplo, precios de un stock), es mejor que use el modo con estado, de lo contrario (por ejemplo, una secuencia representa una oración completa) debería usar el modo sin estado.
Por cierto, @ vu.pham dijo que if we use stateful RNN, then in production, the network is forced to deal with infinite long sequences
. En realidad, esto no parece correcto, como se puede ver en la Q1, LSTM NO aprenderá en toda la secuencia, primero aprende la secuencia en batch1, actualiza los parámetros y luego aprende la secuencia en batch2.