0% ont trouvé ce document utile (0 vote)
74 vues7 pages

Introduction aux Réseaux Neuronaux Récurrents

Transféré par

Maroua Lechleche
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • récurrence,
  • apprentissage,
  • échantillonnage,
  • taux d'apprentissage,
  • modèle génératif,
  • PNL,
  • langage naturel,
  • prédiction de mots,
  • génération de texte,
  • état caché récurrent
0% ont trouvé ce document utile (0 vote)
74 vues7 pages

Introduction aux Réseaux Neuronaux Récurrents

Transféré par

Maroua Lechleche
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • récurrence,
  • apprentissage,
  • échantillonnage,
  • taux d'apprentissage,
  • modèle génératif,
  • PNL,
  • langage naturel,
  • prédiction de mots,
  • génération de texte,
  • état caché récurrent

Qu’est-ce qu’un RNN?

Un réseau neuronal récurrent est un réseau neuronal spécialisé dans le traitement d’une séquence de
données x(t)= x(1), . . , x(τ) avec l’indice de pas temporel t allant de 1 à τ. Pour les tâches qui impliquent
des entrées séquentielles, telles que la parole et le langage, il est souvent préférable d’utiliser des RNNs.
Dans un problème de PNL, si vous voulez prédire le mot suivant dans une phrase, il est important de
connaître les mots qui la précèdent. Les RNNs sont appelés récurrents parce qu’ils effectuent la même
tâche pour chaque élément d’une séquence, avec le résultat dépendant des calculs précédents. Une
autre façon de penser les RNN est qu’ils ont une « mémoire » qui saisit l’information sur ce qui a été
calculé jusqu’à présent.

http://www.deeplearningbook.org/contents/rnn.html

Le côté gauche du diagramme ci-dessus montre une notation d’un RNN et sur le côté droit un RNN étant
déroulé (ou déplié) dans un réseau complet. Par dérouler, nous voulons dire que nous écrivons le réseau
pour la séquence complète. Par exemple, si la séquence qui nous intéresse est une phrase de 3 mots, le
réseau se déroulerait en un réseau neuronal à 3 couches, une couche pour chaque mot.

Input: x(t) est pris comme entrée dans le réseau à l’étape de temps t. Par exemple, x1,pourrait être un
vecteur à chaud correspondant à un mot d’une phrase.

Hidden state:: h(t) représente un état caché au moment t et agit comme « mémoire » du réseau. h(t)
est calculé en fonction de l’entrée actuelle et de l’état caché de l’étape précédente : h(t) = f(U x(t) + W
h(t 1)). La fonction f est considérée comme une transformation non linéaire telle que tanh, ReLU.
Weights : Le RNN a des entrées pour les connexions cachées paramétrées par une matrice de poids U,
des connexions récurrentes cachées à cachées paramétrabes par une matrice de poids W et des
connexions cachées à la sortie paramétrées par une matrice de poids V et toutes ces pesées (U,V,W)
sont partagées dans le temps.

Output : o(t) illustre la sortie du réseau. Dans la figure je viens de mettre une flèche après o(t) qui est
aussi souvent soumise à la non-linéarité, surtout quand le réseau contient d’autres couches en aval.

Forward Pass
La figure ne précise pas le choix de la fonction d’activation pour les unités cachées. Avant de procéder,
nous faisons quelques hypothèses : 1) nous supposons la fonction d’activation de tangente hyperbolique
pour la couche cachée. 2) Nous supposons que la sortie est discrète, comme si le RNN était utilisé pour
prédire des mots ou des caractères. Une façon naturelle de représenter les variables discrètes est de
considérer le résultat o comme donnant les probabilités log non normalisées de chaque valeur possible
de la variable discrète. Nous pouvons ensuite appliquer l’opération softmax comme étape de post-
traitement pour obtenir un coefficient vectoriel de probabilités normalisées sur la sortie.

Le passage RNN peut donc être représenté par l’ensemble d’équations ci-dessous.

Il est un exemple de réseau récurrent qui met en correspondance une séquence d’entrée avec une
séquence de sortie de même longueur. La perte totale pour une séquence donnée de valeurs x jumelées
à une séquence de valeurs y serait alors juste la somme des pertes sur toutes les étapes temporelles.
Nous supposons que les sorties o(t) sont utilisées comme argument à la fonction softmax pour obtenir le
coefficient de probabilité vectoriel sur la sortie. Nous supposons également que la perte L est la log-
vraisemblance négative de la vraie cible y(t) compte tenu de l’entrée jusqu’à présent.
Backward Pass
Le calcul du gradient consiste à effectuer une propagation vers l’avant en se déplaçant de gauche à
droite dans le graphique ci-dessus, suivie d’une propagation vers l’arrière en se déplaçant de droite à
gauche dans le graphique. L’exécution est O(τ) et ne peut être réduite par parallélisation car le graphe
de propagation vers l’avant est intrinsèquement séquentiel ; chaque étape temporelle ne peut être
calculée qu’après la précédente. Les états calculés dans le passe avant doivent être stockés jusqu’à ce
qu’ils soient réutilisés pendant le passe arrière, de sorte que le coût de la mémoire est également O(τ).
L’algorithme de contre-propagation appliqué au graphe non roulé avec le coût O(τ) est appelé contre-
propagation dans le temps (BPTT). Comme les paramètres sont partagés par toutes les étapes
temporelles du réseau, le gradient de chaque sortie dépend non seulement des calculs de l’étape
temporelle actuelle, mais aussi des étapes temporelles précédentes.

Computing Gradients

Compte tenu de notre fonction de perte L, nous devons calculer les gradients pour nos trois matrices de
poids U, V, W et les termes de biais b, c et les mettre à jour avec un taux d’apprentissage α. Semblable
au retour normal-propagation, le gradient nous donne une idée de la façon dont la perte est en train de
changer par rapport à chaque paramètre de poids. Nous mettons à jour les poids W pour minimiser la
perte avec l’équation suivante :

Il en va de même pour les autres poids U, V, b, c.

Calculons maintenant les gradients par BPTT pour les équations RNN ci-dessus. Les nœuds de notre
graphe informatique comprennent les paramètres U, V, W, b et c ainsi que la séquence des nœuds
indexés par t pour x (t), h(t), o(t) et L(t). Pour chaque nœud n, nous devons calculer le gradient nL de
manière récursive, en fonction du gradient calculé aux nœuds qui le suivent dans le graphe.

Gradient with respect to output o(t) (Gradient par rapport à la


sortie o(t))
est calculé en supposant que le o(t) sont utilisés comme argument de la fonction softmax pour obtenir le
coefficient vectoriel des probabilités sur la sortie. Nous supposons également que la perte est la
probabilité log négative de la vraie cible y(t).

https://eli.thegreenplace.net/2016/the-softmax-function-and-its-derivative/

Voyons maintenant comment le gradient s’écoule à travers l’état caché h(t). On peut clairement voir
dans le diagramme ci-dessous qu’à l’instant t, l’état caché h(t) a un gradient qui coule de la sortie
actuelle et du prochain état caché.

La flèche rouge indique le gradient de l’écoulement

Nous travaillons en arrière, à partir de la fin de la séquence. Au dernier pas de temps τ, h(τ) n’a que o(τ)
comme descendant, donc son gradient est simple :
Nous pouvons ensuite itérer en arrière dans le temps pour inverser les gradients à travers le temps, de
t=τ 1 jusqu’à t = 1, notant que h(t) (pour t < τ ) a comme descendants o(t) et h(t+1). Son gradient est
donc donné par :

Une fois les gradients sur les nœuds internes du graphe de calcul obtenus, on peut obtenir les gradients
sur les nœuds de paramètre. Les calculs de gradient utilisant la règle en chaîne pour tous les paramètres
sont :
Nous ne sommes pas intéressés à dériver ces équations ici, mais plutôt à les mettre en œuvre. Il y a de
très bons articles ici et ici qui fournissent des dérivations détaillées de ces équations.

RNN Backprop Through Time Equations – Back Propaganda

Implementation

Nous allons implémenter un réseau de neurones récurrent complet à partir de zéro en utilisant Python.
Nous allons essayer de construire un modèle de génération de texte en utilisant un RNN. Nous
entraînons notre modèle à prédire la probabilité d’un caractère en fonction des caractères précédents.
C’est un modèle génératif. Étant donné une séquence existante de caractères, nous échantillonnons un
caractère suivant à partir des probabilités prédites et répétons le processus jusqu’à ce que nous ayons
une phrase complète. Cette mise en œuvre est de Andrej Karparthy grand post construction d’un niveau
de personnage RNN. Ici nous allons discuter les détails de la mise en œuvre étape par étape.

Étapes générales à suivre :

Initialiser les matrices de poids U, V, W à partir de la distribution aléatoire et du biais b, c avec des zéros

Propagation directe pour calculer les prévisions

Calculer la perte

Propagation inverse pour calculer les gradients

Mise à jour des poids en fonction des gradients

Répéter les étapes 2 à 5

Vous aimerez peut-être aussi