Le LSTM (Long Short-Term Memory) est un réseau récurrent doté d'une mémoire qu'il gère lui-même : des portes décident à chaque pas ce qu'il garde, ce qu'il ajoute et ce qu'il oublie. Il lit des séquences longues sans perdre le début. Longtemps la référence en traduction et en reconnaissance vocale, il reste très utilisé sur les séries de capteurs.
Un technicien tient un carnet de bord. À chaque relevé, il décide quoi rayer, quoi noter et quoi retenir pour son diagnostic. Le carnet garde ce qui compte, même s'il date de plusieurs jours.
En plus de l'état caché du RNN, le LSTM transporte une mémoire à long terme (l'état de cellule), modifiée seulement par petites touches. L'information ancienne peut ainsi survivre sur de nombreux pas.
Une porte d'oubli efface ce qui ne sert plus, une porte d'entrée ajoute l'information utile du pas courant, une porte de sortie choisit ce qui est transmis. Chaque porte est un petit réseau qui produit des coefficients entre 0 et 1.
Après la fenêtre de 24 heures, une couche de sortie prévoit la température suivante. En maintenance, c'est l'écart entre prévision et mesure réelle qui déclenche l'alerte.
Température et vibration relevées toutes les heures. Le modèle apprend le fonctionnement normal sur les 1 200 premières heures, cycle de 24 heures compris.
Le LSTM prévoit la température de chaque heure à partir des 24 précédentes. Quand l'écart avec la mesure réelle dépasse le seuil, l'heure est signalée. Le jeu contient des pics anormaux isolés et, à partir de l'heure 1400, un saut de température et une dérive de la vibration avant la panne.
Le seuil est ici le 99e centile des écarts observés pendant l'apprentissage : environ 1 % de fausses alertes attendues en régime normal. On le règle avec l'équipe maintenance selon le coût d'une intervention inutile et celui d'une panne manquée.
Noms donnés pour Keras, identiques en R (keras3) et en Python.
Le nombre de pas passés que le modèle voit (ici 24 heures). Elle doit couvrir au moins un cycle complet du phénomène : une journée, une semaine.
La taille de la mémoire. 32 à 128 en général. Plus grande, elle capte plus de motifs mais surapprend plus vite sur peu de données.
Centrer et réduire chaque variable, avec les moyennes et écarts-types de la seule période d'apprentissage. Sans cela, l'entraînement converge mal.
Éteint au hasard une partie des connexions pendant l'entraînement pour limiter le surapprentissage. 0,1 à 0,3 est un bon point de départ.
# Maintenance prédictive : LSTM en R
library(keras3)
capteurs <- read.csv("capteurs_machine.csv")
serie <- as.matrix(capteurs[, c("temperature", "vibration")])
centre <- colMeans(serie[1:1200, ])
echelle <- apply(serie[1:1200, ], 2, sd)
serie <- scale(serie, center = centre, scale = echelle) # normalisation sur la période d'apprentissage
# Fenêtres de 24 h pour prévoir la température de l'heure suivante
fen <- 24
n <- nrow(serie) - fen
X <- array(0, dim = c(n, fen, 2))
for (i in 1:n) X[i, , ] <- serie[i:(i + fen - 1), ]
y <- serie[(fen + 1):nrow(serie), 1]
coupe <- 1200 - fen # apprentissage sur les 1 200 premières heures
set_random_seed(42)
modele <- keras_model_sequential(input_shape = c(fen, 2))
modele <- layer_lstm(modele, units = 32)
modele <- layer_dense(modele, units = 1)
compile(modele, optimizer = "adam", loss = "mse")
fit(modele, X[1:coupe, , ], y[1:coupe], epochs = 20, batch_size = 32, validation_split = 0.1, verbose = 0)
# Écart prévision / réalité en degrés, seuil = 99e centile de l'apprentissage
ecarts <- abs(predict(modele, X, verbose = 0)[, 1] - y) * echelle[1]
seuil <- quantile(ecarts[1:coupe], 0.99)
alertes <- which(ecarts > seuil) + fen - 1 # numéros d'heure, en partant de 0
cat("Seuil :", round(seuil, 2), "°C\n")
print(alertes[alertes < 1400])
cat("Alertes après l'heure 1400 :", sum(alertes >= 1400), "\n")
# Maintenance prédictive : LSTM en Python
import numpy as np
import pandas as pd
import keras
capteurs = pd.read_csv("capteurs_machine.csv")
serie = capteurs[["temperature", "vibration"]].values
centre, echelle = serie[:1200].mean(axis=0), serie[:1200].std(axis=0)
serie = (serie - centre) / echelle # normalisation sur la période d'apprentissage
# Fenêtres de 24 h pour prévoir la température de l'heure suivante
fen = 24
X = np.array([serie[t - fen:t] for t in range(fen, len(serie))])
y = serie[fen:, 0]
coupe = 1200 - fen # apprentissage sur les 1 200 premières heures
keras.utils.set_random_seed(42)
modele = keras.Sequential([keras.Input(shape=(fen, 2)), keras.layers.LSTM(32), keras.layers.Dense(1)])
modele.compile(optimizer="adam", loss="mse")
modele.fit(X[:coupe], y[:coupe], epochs=20, batch_size=32, validation_split=0.1, verbose=0)
# Écart prévision / réalité en degrés, seuil = 99e centile de l'apprentissage
ecarts = np.abs(modele.predict(X, verbose=0).ravel() - y) * echelle[0]
seuil = np.quantile(ecarts[:coupe], 0.99)
alertes = np.arange(fen, len(serie))[ecarts > seuil] # numéros d'heure
print("Seuil :", round(seuil, 2), "°C")
print("Alertes avant l'heure 1400 :", alertes[alertes < 1400])
print("Alertes après l'heure 1400 :", (alertes >= 1400).sum())
Le RNN simple recalcule entièrement son état à chaque pas et oublie vite le début de la séquence. Le LSTM ajoute une mémoire séparée et des portes qui la modifient progressivement, ce qui lui permet d'apprendre des dépendances sur des dizaines ou des centaines de pas.
Sur une seule série de quelques centaines de points, ARIMA ou un lissage exponentiel font souvent aussi bien et s'expliquent mieux. Le LSTM prend l'avantage avec beaucoup de données, plusieurs variables liées, des relations non linéaires ou de nombreuses séries apprises ensemble.
Sur le texte, oui. Sur les séries temporelles et les données de capteurs, le LSTM reste un choix solide et léger, et des méthodes simples font parfois jeu égal avec les Transformers. Il faut tester sur ses propres données.
Deux portes au lieu de trois et pas de mémoire séparée. Moins de paramètres, entraînement plus rapide.
Voir la fiche → la référence statistiqueUn modèle de série temporelle lisible et rapide. À battre avant de justifier un LSTM.
Voir la fiche → repérer le changement de régimeTrouve les dates où la moyenne ou la variance d'une série change, comme le saut de l'heure 1400.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus