¿Cuándo Keras reinicia un estado LSTM?

Leí todo tipo de textos al respecto, y ninguno parece responder a esta pregunta muy básica. Siempre es ambiguo:

En una capa stateful = False LSTM, keras restablece estados después de:

  • Cada secuencia; o
  • ¿Cada lote?

Supongamos que tengo X_train en forma de (1000,20,1), lo que significa 1000 secuencias de 20 pasos de un solo valor. Si hago:

 model.fit(X_train, y_train, batch_size=200, nb_epoch=15) 

¿Repondrá los estados para cada secuencia individual (restablece los estados 1000 veces)?
¿O restablecerá los estados para cada lote (restablece los estados 5 veces)?

Chequeando con algunas pruebas, llegué a la siguiente conclusión, que está de acuerdo con la documentación y con la respuesta de Nassim:

Primero, no hay un solo estado en una capa, sino un estado por muestra en el lote. Hay estados paralelos batch_size en dicha capa.

Stateful = False

En un caso stateful=False , todos los estados se restablecen juntos después de cada lote .

  • Un lote con 10 sequences crearía 10 states y los 10 estados se restablecerían automáticamente después de procesarse.

  • El próximo lote con 10 sequences creará 10 new states , que también se restablecerán después de procesar este lote

Si todas esas secuencias tienen length (timesteps) = 7 , el resultado práctico de estos dos lotes es:

20 secuencias individuales, cada una con longitud 7

Ninguna de las secuencias está relacionada. Pero por supuesto: los pesos (no los estados) serán únicos para la capa, y representarán lo que la capa ha aprendido de todas las secuencias.

  • Un estado es: ¿Dónde estoy ahora dentro de una secuencia? ¿Qué paso del tiempo es? ¿Cómo se comporta esta secuencia particular desde su comienzo hasta ahora?
  • Un peso es: ¿qué sé sobre el comportamiento general de todas las secuencias que he visto hasta ahora?

Stateful = True

En este caso, también existe el mismo número de estados paralelos, pero simplemente no se restablecerán en absoluto .

  • Un lote con 10 sequences creará 10 states que permanecerán tal como están al final del lote.

  • El próximo lote con 10 sequences (se requiere que sea 10, ya que el primero fue 10) reutilizará los mismos 10 states que se crearon antes.

El resultado práctico es: las 10 secuencias en el segundo lote continúan las 10 secuencias del primer lote, como si no hubiera habido ninguna interrupción.

Si cada secuencia tiene length (timesteps) = 7 , entonces el significado real es:

10 secuencias individuales, cada una con longitud 14

Cuando veas que alcanzaste la longitud total de las secuencias, entonces llamas a model.reset_states() , lo que significa que ya no continuarás con las secuencias anteriores, ahora comenzarás a alimentar nuevas secuencias.

En el documento del código RNN puedes leer esto:

Nota sobre el uso de statefulness en RNN:

Puede configurar las capas RNN para que sean ‘con estado’, lo que significa que los estados calculados para las muestras en un lote se reutilizarán como estados iniciales para las muestras en el siguiente lote. Esto supone un mapeo uno a uno entre muestras en diferentes lotes sucesivos.

Sé que esto no responde directamente a su pregunta, pero para mí confirma lo que estaba pensando: cuando una LSTM no es con estado, el estado se restablece después de cada muestra. No funcionan por lotes, la idea en un lote es que cada muestra es independiente la una de la otra.

Entonces tiene 1000 reinicio del estado para su ejemplo.

En Keras hay dos modos para mantener los estados: 1) El modo predeterminado (stateful = False) donde el estado se restablece después de cada lote. AFAIK aún se mantendrá el estado entre diferentes muestras dentro de un lote. Por lo tanto, para su ejemplo, el estado se restablecería 5 veces en cada época.

2) El modo stateful donde el estado nunca se reinicia. Depende del usuario restablecer el estado antes de una nueva época, pero Keras en sí no reiniciará el estado. En este modo, el estado se propaga desde la muestra “i” de un lote a la muestra “i” del siguiente lote. En general, se recomienda restablecer el estado después de cada época, ya que el estado puede crecer demasiado tiempo y volverse inestable. Sin embargo, en mi experiencia con conjuntos de datos de pequeño tamaño (20,000 a 40,000 muestras), restablecer o no reiniciar el estado después de una época no hace una gran diferencia en el resultado final. Para conjuntos de datos más grandes, puede hacer la diferencia.

El modelo de estado será útil si tiene patrones que abarcan más de 100 pasos de tiempo. De lo contrario, el modo predeterminado es suficiente. En mi experiencia, configurar el tamaño del lote aproximadamente equivalente al tamaño (pasos de tiempo) de los patrones en los datos también ayuda.

La configuración con estado podría ser bastante difícil de entender al principio. Uno esperaría que el estado se transfiriera de la última muestra de un lote a la primera muestra del siguiente lote. Pero el estado se propaga a través de lotes entre las mismas muestras numeradas. Los autores tenían dos opciones y eligieron la segunda. Lea sobre esto aquí . Consulte también la sección de preguntas frecuentes de Keras sobre RNN con estado

Ampliando la respuesta de @ Nassim_Ben, es cierto que cada secuencia se considera independiente para cada instancia del lote. Sin embargo, debe tener en cuenta que el estado oculto de los RNN y la memoria de la celda pasan a la siguiente celda durante 20 pasos. El estado oculto y la memoria de la celda normalmente se establece en cero para la primera celda en las 20 celdas.

Después de la vigésima celda, y luego de que el estado oculto (solo, no la memoria de la celda) pasa a las capas superiores al RNN, el estado se restablece. Voy a suponer que significan memoria celular y estado oculto aquí.

Así que sí, se restablece para las 1000 instancias, sin embargo, teniendo en cuenta que batch_size=200 , se restablece 5 veces, y cada lote se restablece después de que hayan terminado de pasar la información a través de esos 20 pasos. Espero que entiendas esto.

Aquí hay un proyecto que hice donde tuve la misma pregunta. Preste especial atención a la celda 15 y su explicación en el blob después de la celda 11. Seguí añadiendo cartas porque el estado se restablecía de otra manera.

    Intereting Posts