Inestabilidad del aprendizaje en línea para Stateful LSTM para el pronóstico de series de tiempo

Inestabilidad del aprendizaje en línea para Stateful LSTM para el pronóstico de series de tiempo

Algunas configuraciones de redes neuronales pueden resultar en un modelo inestable.

Esto puede dificultar su caracterización y comparación con otras configuraciones de modelos sobre el mismo problema utilizando estadísticas descriptivas.

Un buen ejemplo de un modelo aparentemente inestable es el uso del aprendizaje en línea (un tamaño de lote de 1) para un modelo de memoria a corto plazo (LSTM) con estado.

En este tutorial, descubrirá cómo explorar los resultados de un ajuste LSTM con estado utilizando el aprendizaje en línea en un problema de pronóstico de series de tiempo estándar.

Después de completar este tutorial, sabrá:

  • Cómo diseñar un arnés de prueba robusto para evaluar modelos LSTM en problemas de predicción de series de tiempo.
  • Cómo analizar una población de resultados, incluidas estadísticas resumidas, difusión y distribución de resultados.
  • Cómo analizar el impacto de aumentar el número de repeticiones de un experimento.

Pon en marcha tu proyecto con mi nuevo libro Deep Learning for Time Series Forecasting, que incluye tutoriales paso a paso y el Código fuente de Python archivos para todos los ejemplos.

Empecemos.

  • Actualizado Abr / 2019: Se actualizó el enlace al conjunto de datos.
Inestabilidad del aprendizaje en línea para Stateful LSTM para el pronóstico de series de tiempo

Inestabilidad del aprendizaje en línea para Stateful LSTM para el pronóstico de series de tiempo
Foto de Magnus Brath, algunos derechos reservados.

Inestabilidad del modelo

Cuando entrena la misma red con los mismos datos más de una vez, puede obtener resultados muy diferentes.

Esto se debe a que las redes neuronales se inicializan aleatoriamente y la naturaleza de optimización de cómo se ajustan a los datos de entrenamiento puede resultar en diferentes pesos finales dentro de la red. Estas diferentes redes, a su vez, pueden resultar en predicciones variadas dados los mismos datos de entrada.

Como resultado, es importante repetir cualquier experimento en redes neuronales varias veces para encontrar un rendimiento esperado promedio.

Para obtener más información sobre la naturaleza estocástica de los algoritmos de aprendizaje automático como las redes neuronales, consulte la publicación:

El tamaño del lote en una red neuronal define la frecuencia con la que se actualizan los pesos dentro de la red dada la exposición a un conjunto de datos de entrenamiento.

Un tamaño de lote de 1 significa que los pesos de la red se actualizan después de cada fila de datos de entrenamiento. A esto se le llama aprendizaje en línea. El resultado es una red que puede aprender rápidamente, pero una configuración que puede ser bastante inestable.

En este tutorial, exploraremos la inestabilidad del aprendizaje en línea para una configuración LSTM con estado para el pronóstico de series de tiempo.

Exploraremos esto observando el rendimiento promedio de una configuración LSTM en un problema de pronóstico de series de tiempo estándar sobre un número variable de repeticiones del experimento.

Es decir, volveremos a entrenar la misma configuración de modelo con los mismos datos muchas veces y observaremos el rendimiento del modelo en un conjunto de datos de reserva y revisaremos qué tan inestable puede ser el modelo.

Descripción general del tutorial

Este tutorial se divide en 6 partes. Son:

  1. Conjunto de datos de ventas de champú
  2. Arnés de prueba experimental
  3. Codificar y recopilar resultados
  4. Estadísticas básicas de resultados
  5. Repite vs prueba RMSE
  6. Revisión de resultados

Ambiente

Este tutorial asume que tiene un entorno Python SciPy instalado. Puede usar Python 2 o 3 con este ejemplo.

Este tutorial asume que tienes Keras v2.0 o superior instalado con el backend de TensorFlow o Theano.

Este tutorial también asume que tiene instalados scikit-learn, Pandas, NumPy y Matplotlib.

A continuación, echemos un vistazo a un problema de pronóstico de series de tiempo estándar que podemos usar como contexto para este experimento.

Si necesita ayuda para configurar su entorno Python, consulte esta publicación:

¿Necesita ayuda con Deep Learning para series temporales?

Realice ahora mi curso intensivo gratuito de 7 días por correo electrónico (con código de muestra).

Haga clic para registrarse y obtener también una versión gratuita en formato PDF del curso.

Descarga tu minicurso GRATIS

Conjunto de datos de ventas de champú

Este conjunto de datos describe el número mensual de ventas de champú durante un período de 3 años.

Las unidades son un recuento de ventas y hay 36 observaciones. El conjunto de datos original se atribuye a Makridakis, Wheelwright y Hyndman (1998).

El siguiente ejemplo carga y crea un gráfico del conjunto de datos cargado.

Al ejecutar el ejemplo, se carga el conjunto de datos como una serie Pandas e imprime las primeras 5 filas.

A continuación, se crea un gráfico de líneas de la serie que muestra una clara tendencia creciente.

Gráfico de línea del conjunto de datos de ventas de champú

Gráfico de línea del conjunto de datos de ventas de champú

A continuación, veremos la configuración de LSTM y el arnés de prueba utilizado en el experimento.

Arnés de prueba experimental

Esta sección describe el arnés de prueba utilizado en este tutorial.

División de datos

Dividiremos el conjunto de datos de Shampoo Sales en dos partes: una formación y un conjunto de prueba.

Los primeros dos años de datos se tomarán para el conjunto de datos de entrenamiento y el año restante de datos se utilizará para el conjunto de prueba.

Los modelos se desarrollarán utilizando el conjunto de datos de entrenamiento y harán predicciones sobre el conjunto de datos de prueba.

El pronóstico de persistencia (pronóstico ingenuo) en el conjunto de datos de prueba logra un error de 136.761 ventas de champú mensuales. Esto proporciona un límite inferior aceptable de rendimiento en el equipo de prueba.

Evaluación del modelo

Se utilizará un escenario de pronóstico continuo, también llamado validación del modelo de avance.

Cada paso de tiempo del conjunto de datos de prueba se recorrerá uno a la vez. Se utilizará un modelo para hacer un pronóstico para el paso de tiempo, luego se tomará el valor esperado real del conjunto de prueba y se pondrá a disposición del modelo para el pronóstico en el próximo paso de tiempo.

Esto imita un escenario del mundo real en el que las nuevas observaciones de ventas de champú estarían disponibles cada mes y se utilizarían en el pronóstico del mes siguiente.

Esto será simulado por la estructura del tren y los conjuntos de datos de prueba.

Se recopilarán todos los pronósticos del conjunto de datos de prueba y se calculará una puntuación de error para resumir la habilidad del modelo. Se utilizará el error cuadrático medio (RMSE), ya que castiga los errores grandes y da como resultado una puntuación en las mismas unidades que los datos de pronóstico, es decir, las ventas mensuales de champú.

Preparación de datos

Antes de que podamos ajustar un modelo LSTM al conjunto de datos, debemos transformar los datos.

Las siguientes tres transformaciones de datos se realizan en el conjunto de datos antes de ajustar un modelo y hacer un pronóstico.

  1. Transforme los datos de la serie temporal para que sean estacionarios. Específicamente una diferenciación de retraso = 1 para eliminar la tendencia creciente en los datos.
  2. Transformar la serie temporal en un problema de aprendizaje supervisado. Específicamente, la organización de datos en patrones de entrada y salida donde la observación en el paso de tiempo anterior se utiliza como entrada para pronosticar la observación en el paso de tiempo actual.
  3. Transforma las observaciones para tener una escala específica. Específicamente, para cambiar la escala de los datos a valores entre -1 y 1 para cumplir con la función de activación de tangente hiperbólica predeterminada del modelo LSTM.

Estas transformaciones se invierten en los pronósticos para devolverlos a su escala original antes del cálculo y la puntuación de error.

Modelo LSTM

Usaremos un modelo LSTM con estado base con 1 neurona ajustada para 1000 épocas.

Se requiere un tamaño de lote de 1, ya que utilizaremos la validación progresiva y realizaremos pronósticos de un paso para cada uno de los últimos 12 meses de datos de prueba.

Un tamaño de lote de 1 significa que el modelo se ajustará mediante el entrenamiento en línea (a diferencia del entrenamiento por lotes o el entrenamiento por mini lotes). Como resultado, se espera que el ajuste del modelo tenga alguna varianza.

Idealmente, se usarían más épocas de entrenamiento (como 1500), pero esto se truncó a 1000 para mantener los tiempos de ejecución razonables.

El modelo se ajustará utilizando el eficiente algoritmo de optimización ADAM y la función de pérdida de error cuadrático medio.

Carreras experimentales

Cada escenario experimental se ejecutará 100 veces y la puntuación RMSE en el conjunto de prueba se registrará desde el final de cada ejecución.

Todas las puntuaciones de la prueba RMSE se escriben en un archivo para su posterior análisis.

Sumérjase en los experimentos.

Codificar y recopilar resultados

La lista completa de códigos se proporciona a continuación.

Es posible que tarde algunas horas en ejecutarse en hardware moderno.

También te puede interesar