Un réseau neuronal récurrent (« Recurrent Neural Network » ou RNN), est un réseau de neurones profond entraîné sur des données séquentielles ou des données de séries temporelles pour créer un modèle de machine learning (ML) capable de tirer des prédictions séquentielles ou de tirer des conclusions sur la base d’entrées séquentielles.
Un RNN pourrait être utilisé pour prédire les niveaux d’inondation quotidiens sur la base des données météorologiques, des marées et des inondations quotidiennes passées. Mais les RNN peuvent également être utilisés pour résoudre des problèmes ordinaux ou temporels tels que la traduction linguistique, le traitement automatique du langage naturel (NLP), l’analyse des sentiments, la reconnaissance vocale et le sous-titrage.
À l’instar des réseaux neuronaux traditionnels, tels que les réseaux neuronaux à action directe et les réseaux neuronaux convolutifs (CNN), les réseaux neuronaux récurrents utilisent les données d’entraînement pour apprendre. Les RNN utilisent leur « mémoire » : les informations des entrées antérieures ont une influence sur l’entrée et la sortie en cours.
Alors que les réseaux d’apprentissage profond traditionnels supposent que les entrées et les sorties sont indépendantes les unes des autres, la sortie des RNN dépend des éléments antérieurs de la séquence. Bien que les événements futurs soient également utiles pour déterminer la sortie d’une séquence donnée, les réseaux neuronaux récurrents unidirectionnels ne peuvent pas tenir compte de ces événements dans leurs prédictions.
Prenons une expression idiomatique, telle que « être cloué au lit », qui est couramment utilisée lorsqu’une personne est malade, pour nous aider dans l’explication des RNN. Pour qu’elle ait un sens, elle doit être exprimée dans cet ordre spécifique. Par conséquent, les réseaux récurrents doivent tenir compte de la position de chaque mot dans la phrase idiomatique, puis ils utilisent cette information pour prédire le mot suivant dans la séquence.
Chaque mot de l’expression « être cloué au lit » fait partie d’une séquence, où l’ordre compte. Le RNN suit le contexte en maintenant un état masqué à chaque intervalle temporel. Une boucle de rétroaction est créée en passant l’état masqué d’une étape à l’autre. L’état masqué agit comme une mémoire qui stocke des informations sur les entrées précédentes. À chaque intervalle temporel, le RNN traite l’entrée actuelle (par exemple, un mot dans une phrase) ainsi que l’état masqué de l’intervalle temporel précédent. Cela permet au RNN de « se souvenir » des points de données précédents et d’utiliser ces informations pour influencer la sortie actuelle.
Une autre caractéristique distinctive des réseaux récurrents est qu’ils partagent des paramètres sur chaque couche du réseau. Alors que les réseaux à propagation avant ont des poids différents sur chaque nœud, les réseaux neuronaux récurrents partagent le même paramètre de poids au sein de chaque couche du réseau. Cela dit, ces poids sont toujours ajustés au cours des processus de rétropropagation et de descente de gradient afin de faciliter l’apprentissage par renforcement.
Les réseaux neuronaux récurrents utilisent des algorithmes de propagation avant et de rétropropagation à travers le temps (« Backpropagation Through Time » ou BPTT) pour déterminer les gradients (ou les différences), ce qui est légèrement différent de la rétropropagation traditionnelle, car elle est propre aux données séquentielles. Les principes de la BPTT sont les mêmes que ceux de la rétropropagation traditionnelle : le modèle s’entraîne lui-même en calculant les erreurs de sa couche de sortie à sa couche d’entrée. Ces calculs nous permettent d’ajuster les paramètres du modèle de manière appropriée. La BPTT diffère de l’approche traditionnelle en ce sens qu’elle additionne les erreurs à chaque intervalle temporel, alors que les réseaux à propagation à action directe n’ont pas besoin d’additionner les erreurs, car ils ne partagent aucun paramètre sur chaque couche.
Une fonction d’activation est une fonction mathématique appliquée à la sortie de chaque couche de neurones du réseau pour introduire une non-linéarité et permettre au réseau d’apprendre des schémas plus complexes dans les données. Sans fonctions d’activation, le RNN se contenterait de calculer les transformations linéaires de l’entrée. Il serait alors incapable de traiter des problèmes non linéaires. La non-linéarité est cruciale pour l’apprentissage et la modélisation de schémas complexes, en particulier dans des tâches telles que le NLP, l’analyse de séries temporelles et la prédiction de données séquentielles.
La fonction d’activation contrôle l’amplitude de la sortie du neurone, en maintenant les valeurs dans une plage spécifiée (par exemple, entre 0 et 1 ou -1 et 1), ce qui permet d’éviter que les valeurs ne deviennent trop grandes ou trop petites lors des propagations en avant et des rétropropagations. Dans les RNN, les fonctions d’activation sont appliquées à chaque intervalle temporel aux états masqués, contrôlant la façon dont le réseau met à jour sa mémoire interne (état masqué) en fonction de l’entrée actuelle et des états masqués passés.
Les fonctions d’activation les plus courantes (illustrées ci-dessous) sont les suivantes :
La fonction sigmoïde consiste à interpréter la sortie comme des probabilités ou à contrôler des portes qui décident de la quantité d’informations à retenir ou à oublier. Cependant, la fonction sigmoïde est sujette au problème de disparition du gradient (expliquée plus loin), ce qui la rend moins idéale pour les réseaux plus profonds.
La fonction Tanh (tangente hyperbolique), souvent utilisée car elle produit des valeurs centrées sur zéro, permet d’obtenir un meilleur flux de gradient et d’apprendre plus facilement les dépendances à long terme.
La fonction ReLU (unité linéaire rectifiée) peut entraîner des problèmes d’explosion de gradients en raison de sa nature illimitée. Cependant, des variantes telles que Leaky ReLU et Parametric ReLU ont été utilisées pour atténuer certains de ces problèmes.
Pour en savoir plus sur le fonctionnement des RNN, consultez notre analyse approfondie des réseaux neuronaux récurrents.
Les réseaux à propagation avant cartographient les entrées et les productions une à une, et bien que nous ayons visualisé les réseaux neuronaux récurrents de cette façon dans les schémas précédents, ils n’ont pas cette contrainte. Au lieu de cela, la longueur de leurs entrées et sorties peut varier, et différents types de RNN sont utilisés pour différents cas d’utilisation, tels que la génération de musique, la classification des sentiments et la traduction automatique. Les variantes les plus populaires de l’architecture des réseaux neuronaux récurrents incluent :
La version la plus basique d’un RNN, où la sortie à chaque intervalle temporel dépend à la fois de l’entrée actuelle et de l’état masqué de l’intervalle temporel précédent, souffre de problèmes tels que la disparition des gradients, ce qui rend difficile l’apprentissage des dépendances à long terme. Ils excellent dans les tâches simples avec des dépendances à court terme, comme prédire le mot suivant dans une phrase (pour les phrases courtes et simples) ou la valeur suivante dans une série temporelle simple.
Les RNN sont adaptés aux tâches qui traitent les données de manière séquentielle en temps réel, comme le traitement des données des capteurs pour détecter des anomalies dans des délais courts, où les entrées sont reçues une par une et les prédictions doivent être faites immédiatement sur la base des entrées les plus récentes.
Alors que les réseaux neuronaux récurrents (« Recurrent Neural Networks » ou RNN) unidirectionnels ne peuvent s’appuyer que sur des entrées antérieures pour faire des prédictions sur l’état actuel, les RNN bidirectionnels, ou BRNN, extraient des données postérieures pour en améliorer la précision. Pour revenir à l’exemple « être cloué au lit », un modèle basé sur un BRNN peut mieux prédire que le deuxième mot de cette phrase est « être cloué » s’il sait que le dernier mot de la séquence est « lit ».
La LSTM est une architecture RNN populaire, qui a été introduite par Sepp Hochreiter et Juergen Schmidhuber comme solution au problème du gradient qui disparaît. Ces travaux ont abordé le problème des dépendances à long terme. Autrement dit, si l’état précédent qui influence la prédiction actuelle ne se situe pas dans un passé récent, le modèle RNN risque de ne pas être en mesure de prédire avec précision l’état actuel.
Supposons que nous voulions prédire les mots en italique dans le groupe de phrases suivant : « Alice est allergique aux fruits à coque. Elle ne peut pas manger de beurre de cacahuètes ». Le contexte d’une allergie aux fruits à coque peut nous aider à anticiper que les aliments qui ne peuvent pas être consommés sont ceux qui contiennent des fruits à coque. Toutefois, si ce contexte était antérieur de quelques phrases, il serait difficile, voire impossible, pour le RNN de relier les informations.
Pour y remédier, les réseaux LSTM possèdent des « cellules » situées dans les couches cachées du réseau neuronal artificiel, qui possèdent trois portes : une porte d’entrée, une porte de sortie et une porte d’oubli. Ces portes contrôlent le flux d’informations nécessaires pour prévoir la sortie sur le réseau. Par exemple, si les pronoms de genre, tels que « elle », ont été répétés plusieurs fois dans les phrases précédentes, vous pouvez les exclure de l’état de la cellule.
Une GRU est similaire à une LSTM, car elle permet également de résoudre le problème de mémoire à court terme des modèles RNN. Au lieu d’utiliser un « état de cellule » pour réguler les informations, elle utilise des états cachés et, au lieu de trois portes, il y en a deux : une porte de réinitialisation et une porte de mise à jour. À l’instar des portes dans les LSTM, les portes de réinitialisation et de mise à jour contrôlent quelles informations doivent être conservées et dans quelle quantité.
En raison de leur architecture plus simple, les GRU sont plus efficaces en termes de calcul et nécessitent moins de paramètres que les LSTM. Cela les rend plus rapides à entraîner et souvent plus adaptées à certaines applications en temps réel ou aux ressources limitées.
Ils sont couramment utilisés pour les tâches de séquence à séquence, telles que la traduction automatique. L’encodeur traite la séquence d’entrée dans un vecteur de longueur fixe (contexte) et le décodeur utilise ce contexte pour générer la séquence de sortie. Cependant, le vecteur de contexte de longueur fixe peut constituer un goulot d’étranglement, en particulier pour les longues séquences d’entrée.
L’utilisation des RNN a diminué dans le domaine de l’intelligence artificielle, notamment en faveur d’architectures telles que les modèles de transformeurs, mais les RNN ne sont pas obsolètes. Les RNN étaient traditionnellement populaires pour le traitement des données (par exemple, les séries temporelles et la modélisation linguistique) en raison de leur capacité à gérer les dépendances temporelles.
Cependant, la faiblesse des RNN face aux problèmes de gradients qui disparaissent et qui explosent, ainsi que l’essor des modèles de transformeurs tels que BERT et GPT, ont entraîné ce déclin. Les transformeurs peuvent capturer les dépendances à long terme de manière beaucoup plus efficace, sont plus faciles à paralléliser et sont plus performants dans des tâches telles que le NLP, la reconnaissance vocale et les prévisions de séries temporelles.
Cela dit, les RNN sont toujours utilisés dans des contextes spécifiques où leur nature séquentielle et leur mécanisme de mémoire peuvent être utiles, en particulier dans des environnements plus petits et aux ressources limitées ou pour des tâches où le traitement des données bénéficie d’une récurrence étape par étape.
Pour les personnes qui souhaitent expérimenter de tels cas d’utilisation, Keras est une bibliothèque open source populaire, désormais intégrée à la bibliothèque TensorFlow, qui fournit une interface Python pour les RNN. L’API est conçue pour être facile à utiliser et à personnaliser, ce qui permet aux utilisateurs de définir leur propre couche de cellules RNN avec un comportement personnalisé.
Entraînez, validez, réglez et déployez une IA générative, des modèles de fondation et des capacités de machine learning avec IBM watsonx.ai, un studio d’entreprise nouvelle génération pour les générateurs d’IA. Créez des applications d’IA en peu de temps et avec moins de données.
Mettez l’IA au service de votre entreprise en vous appuyant sur l’expertise de pointe d’IBM dans le domaine de l’IA et sur son portefeuille de solutions.
Réinventez les workflows et les opérations critiques en ajoutant l’IA pour optimiser les expériences, la prise de décision et la valeur métier en temps réel.