Memoria a corto-largo plazo (LSTM)

Introducción a la memoria a corto-largo plazo (LSTM)

Aprenda cómo funciona la LSTM, dónde aplicarla y cómo diseñarla

Una red de memoria a corto-largo plazo (LSTM) es un tipo de red neuronal recurrente (RNN). Las LSTM se utilizan principalmente para aprender, procesar y clasificar datos secuenciales, ya que pueden aprender dependencias a largo plazo entre unidades de tiempo de datos.

Cómo funcionan las LSTM

LSTM y RNN

Las redes LSTM son una forma especializada de la arquitectura de RNN. Las RNN utilizan información anterior para mejorar el rendimiento de una red neuronal con entradas actuales y futuras. Contienen un estado oculto y bucles, que permiten que la red almacene información anterior en estado oculto y funcione con secuencias. Las RNN tienen dos conjuntos de pesos: uno para el vector del estado oculto y otro para las entradas. Durante el entrenamiento, la red aprende los pesos de las entradas y del estado oculto. Cuando se implementa, la salida se basa en la entrada actual y en el estado oculto, que a su vez se basa en entradas anteriores.

En la práctica, las RNN simples tienen una capacidad limitada para aprender dependencias a largo plazo. Las RNN se suelen entrenar mediante retropropagación, que puede provocar un problema de desvanecimiento o explosión de gradiente. Estos problemas hacen que los pesos de la red sean muy pequeños o muy grandes, lo que limita la eficacia en aplicaciones que requieren que la red aprenda relaciones a largo plazo.

La RNN utiliza un estado oculto en la entrada, que también se utiliza como entrada adicional para la RNN en la siguiente unidad de tiempo.

Flujo de datos en la unidad de tiempo t para una RNN tradicional.

Arquitectura de capas de las LSTM

Las capas de LSTM utilizan puertas adicionales para controlar qué información del estado oculto se exporta como salida y al siguiente estado oculto. Estas puertas adicionales solucionan el problema común de las RNN para aprender dependencias a largo plazo. Además del estado oculto de las RNN tradicionales, la arquitectura de un bloque de LSTM generalmente tiene una celda de memoria, puerta de entrada, puerta de salida y puerta de olvido. Las puertas adicionales permiten que la red aprenda relaciones de datos a largo plazo de manera más eficaz. Su menor sensibilidad al intervalo de tiempo hace que las redes LSTM sean mejores para analizar datos secuenciales que las RNN simples. En la siguiente figura, se muestra la arquitectura de una LSTM y su flujo de datos en la unidad de tiempo t.

Una red LSTM utiliza unidades adicionales, como la puerta de olvido y la celda de memoria, que evitan problemas de desvanecimiento y explosión de gradiente.

Flujo de datos en la unidad de tiempo t de una unidad de LSTM. La puerta de olvido y la celda de memoria evitan problemas de desvanecimiento o explosión de gradiente.

Los pesos y sesgos de la puerta de entrada controlan cuánto fluye un nuevo valor en la unidad de LSTM. Del mismo modo, los pesos y sesgos de la puerta de olvido y la puerta de salida controlan cuánto permanece un valor en la unidad, y hasta qué punto se utiliza ese valor de unidad para calcular la activación de la salida del bloque de LSTM, respectivamente.

El siguiente diagrama ilustra el flujo de datos a través de una capa de LSTM con múltiples unidades de tiempo. El número de canales de la salida coincide con el número de unidades ocultas de la capa de LSTM.

Diagrama que muestra cómo se propaga la información a través de las múltiples unidades de tiempo de una capa de LSTM.

Flujo de datos para una LSTM con múltiples unidades de tiempo. Cada operación de la LSTM recibe el estado oculto y el estado de celda de la operación anterior, y pasa un estado oculto y estado de celda actualizados a la siguiente operación.

Arquitectura de redes LSTM

Las LSTM funcionan bien con datos de secuencias y series temporales para tareas de clasificación y regresión. También funcionan bien con vídeos, ya que son básicamente una secuencia de imágenes. Del mismo modo que cuando se trabaja con señales, es útil realizar extracción de características antes de suministrar la secuencia de imágenes a la capa de LSTM. Utilice redes neuronales convolucionales (CNN), como GoogLeNet, para extraer características de cada trama. La siguiente figura muestra cómo diseñar una red LSTM para distintas tareas.

Diagrama de la arquitectura de una red LSTM con capas utilizadas para crear una RNN para distintas tareas.

Arquitectura de red LSTM para tareas de clasificación, regresión y clasificación de vídeos.

LSTM bidireccional

Una LSTM bidireccional (BiLSTM) aprende dependencias bidireccionales entre unidades de tiempo de datos de secuencias o series temporales. Estas dependencias pueden resultar útiles cuando desea que la red aprenda de la serie temporal completa en cada unidad de tiempo. Las redes BiLSTM permiten un entrenamiento adicional, ya que los datos de entrada se pasan a través de la capa de LSTM dos veces, lo que puede aumentar el rendimiento de la red.

Una BiLSTM consta de dos componentes de LSTM: forward LSTM y backward LSTM. Forward LSTM funciona desde la primera unidad de tiempo hasta la última unidad de tiempo. Backward LSTM funciona desde la última unidad de tiempo hasta la primera unidad de tiempo. Después de pasar los datos a través de los dos componentes de LSTM, la operación concatena las salidas a lo largo de la dimensión del canal.

Diagrama que muestra las operaciones de forward y backward LSTM en una BiLSTM.

Arquitectura de una BiLSTM con múltiples unidades de tiempo.

Ejemplos para familiarizarse con las LSTM en MATLAB

Aplicación de LSTM

Las LSTM son particularmente eficaces para trabajar con datos secuenciales, que pueden variar en longitud, y para aprender dependencias a largo plazo entre unidades de tiempo de esos datos. Entre las aplicaciones comunes de LSTM se incluyen análisis de sentimiento, modelado de lenguaje, reconocimiento de voz y análisis de vídeos.

Aplicaciones amplias de LSTM

Las RNN son una tecnología clave en las siguientes aplicaciones:

  • Procesamiento de señales. Las señales son básicamente datos secuenciales que a menudo se recopilan a partir de sensores a lo largo del tiempo. La clasificación y regresión automática con conjuntos de datos de señales de gran tamaño permiten realizar predicciones en tiempo real. Los datos de señales no procesados se pueden suministrar a redes profundas o preprocesarse para enfocarse en determinadas características, como componentes de frecuencia. La extracción de características puede mejorar enormemente el rendimiento de una red.
  • Procesamiento del lenguaje natural (PLN). El lenguaje es básicamente secuencial; los elementos de texto son de longitud variable. Las LSTM son una excelente herramienta para tareas de procesamiento del lenguaje natural, como clasificación de texto, generación de texto, traducción automática y análisis de sentimiento, ya que pueden aprender a contextualizar las palabras de una oración.

Pruebe los siguientes ejemplos para comenzar a aplicar redes LSTM a procesamiento de señales y procesamiento del lenguaje natural.

Aplicaciones verticales de LSTM

A medida que las aplicaciones de Deep Learning siguen expandiéndose, las LSTM se utilizan en las siguientes aplicaciones verticales:

Uso de redes LSTM para estimar emisiones de NOx

El equipo de ingeniería de Renault utilizó redes LSTM para desarrollar tecnología de próxima generación para vehículos con cero emisiones (ZEV).

Obtuvieron los datos de entrenamiento a partir de pruebas realizadas en un motor real. Durante las pruebas, el motor se sometió a ciclos de conducción comunes. Los datos capturados, que incluían par motor, velocidad del motor, temperatura del refrigerante, y emisiones del número de marcha, sirvieron como entrada para la red LSTM. Después de realizar iteraciones del diseño de la arquitectura de LSTM, la versión final logró una precisión del 85-90% en la predicción de los niveles de NOx.

LSTM con MATLAB

Utilizar MATLAB® con Deep Learning Toolbox™ permite diseñar, entrenar y desplegar redes LSTM. Usar Text Analytics Toolbox™ o Signal Processing Toolbox™ permite aplicar redes LSTM a análisis de texto o señales.

Diseño y entrenamiento de redes

Puede diseñar y entrenar redes LSTM de forma programática con pocas líneas de código. Utilice capas de LSTM, capas de LSTM bidireccionales y capas proyectadas de LSTM para crear redes LSTM. También puede diseñar, analizar y modificar redes LSTM de manera interactiva con la app Deep Network Designer.

Red BiLSTM simple creada interactivamente con la app Deep Network Designer.

Uso de la app Deep Network Designer para crear, visualizar y editar redes LSTM interactivamente.

Importación y exportación de redes

Puede intercambiar redes LSTM con marcos de Deep Learning basados en Python®:

  • Importe modelos de PyTorch®, TensorFlow™ y ONNX™ con una sola línea de código.
  • Importe modelos de PyTorch y TensorFlow con Deep Network Designer interactivamente.
  • Exporte redes LSTM a TensorFlow y ONNX con una línea de código.
Diagrama que ilustra la interoperabilidad entre MATLAB, TensorFlow, ONNX y PyTorch de redes LSTM y otras redes neuronales profundas.

Conversión de redes LSTM entre MATLAB, TensorFlow, ONNX y PyTorch.

Despliegue de redes

Despliegue una red LSTM entrenada en sistemas integrados, empresariales o la nube.

  • Genere automáticamente código C/C++ y CUDA optimizado para desplegarlo en CPU y GPU.
  • Genere código Verilog® y VHDL® sintetizable para desplegarlo en FPGA y SoC.
Diagrama que ilustra la generación de código desde MATLAB y Simulink para desplegar redes neuronales profundas en CPU, GPU, microcontroladores y FPGA.

Despliegue rápidamente redes de Deep Learning entrenadas en producción.