Fondamentaux du Deep learning

FST
Page 1 sur 5Lecteur de document UniversityLib

Fondamentaux du Deep learning

FST · Programmation, Mathématiques, Reseaux Neuronaux · course

Browse all réseaux documents

Titeur : Dr. Haithem Hermessi

Cours : Fondamentaux du Deep learning

A/U :2021-2021

RNNs, GRUs, LSTMs, Attention, et Réseaux mémoire

1. Réseaux récurrents (RNNs) :

Dans un réseau neuronal convolutif, le graphe ou les interconnexions entre les modules ne peuvent

pas avoir de boucles. Il existe au moins un ordre partiel entre les modules, de sorte que les entrées

sont disponibles lorsque nous calculons les sorties.

Comme le montre la figure 1, il existe des boucles dans les réseaux neuronaux récurrents.

Figure 1 : Réseau neuronal récurrent enroulé

x(t) : entrée qui varie dans le temps

 Enc(x(t)) : encodeur qui génère une représentation de l’entrée

 h(t) : une représentation de l’entrée

 w : paramètres pouvant être entraînés

 g : fonction qui peut être un réseau de neurones compliqué. L’une des entrées est z(t−1) qui

z(t−1) : état caché précédent, qui est la sortie du pas de temps précédent

z(t) : état caché actuel

est la sortie du pas de temps précédent

 Dec(z(t)) : décodeur qui génère une sortie

2. Réseaux récurrents dépliés :

L’entrée est une séquence x1, x2,⋯, xT.

Je n’aime pas ce film

I don’t like this movie

Advertisement

Figure 2. Réseaux récurrents dépliés

temps

l’entrée

Dans la figure 2, l’entrée est x1, x2, x3.

Au

la

t=0,

représentation h(x(0))=Enc(x(0)) puis la passe à G pour générer l’état caché z(0)=G(h0,z’,w).

À t=0, z’ dans G peut être initialisé comme 0 ou initialisé de façon aléatoire. z(0) est passé au

décodeur pour générer une sortie et également au pas de temps suivant.

Comme il n’y a pas de boucles dans ce réseau nous pouvons mettre en œuvre la rétropropagation.

l’encodeur

génère

passée

x(0)

qui

est

à

La figure 2 montre un réseau avec une caractéristique particulière : chaque bloc partage les mêmes

poids. Trois encodeurs, décodeurs et fonctions G ont respectivement les mêmes poids sur différents

pas de temps.

Malheureusement, la rétropropagation à travers le temps (BPTT pour Backpropagation through

time) ne fonctionne pas aussi bien dans la forme naïve du RNN.

Problèmes avec les RNNs :

 Disparition du gradient :

o Dans une longue séquence, les gradients sont multipliés par la matrice de poids

Advertisement

(transposée) à chaque pas de temps. S’il y a de petites valeurs dans la matrice de

poids, la norme des gradients devient de plus en plus petite de manière

exponentielle.

 Explosion du gradient :

o Si nous avons une grande matrice de poids et que la non-linéarité dans la couche

récurrente n’est pas saturée, les gradients vont exploser. Les poids divergeront à

l’étape de mise à jour. Il se peut que nous devions utiliser un taux d’apprentissage

minuscule pour que la descente des gradients fonctionne.

L’une des raisons d’utiliser les RNNs est l’avantage de se souvenir des informations du passé.

Cependant, il pourrait ne pas mémoriser les informations d’il y a longtemps.

Un exemple du problème de la disparition des gradients. Considérons une entrée constituée des

caractères d’un programme en langage C. Le système indiquera s’il s’agit d’un programme

syntaxiquement correct. Un programme syntaxiquement correct doit avoir un nombre valide

d’accolades et de parenthèses. Ainsi, le réseau doit se souvenir du nombre de parenthèses et

d’accolades ouvertes à vérifier, et si nous les avons toutes fermées. Le réseau doit stocker ces

informations dans des états cachés comme un compteur. Cependant, en raison de la disparition des

gradients, il ne parviendra pas à conserver ces informations dans un programme long.

Astuces pour les RNNs

 Couper les gradients pour éviter l’explosion : Écrasez les gradients lorsqu’ils deviennent

trop importants.

Jouer sur l’initialisation (commencer à droite évite l’explosion/la disparition) : Initialiser

les matrices de poids pour préserver la norme dans une certaine mesure. Par exemple,

l’initialisation orthogonale initialise la matrice de poids comme une matrice orthogonale

aléatoire.

3. Modules multiplicatifs

Advertisement

Dans les modules multiplicatifs, plutôt que de calculer uniquement une somme pondérée d’entrées,

nous calculons les produits des entrées et nous calculons ensuite la somme pondérée de celles-ci.

La sortie du système est une somme pondérée classique d’entrées et de poids. Les poids eux-mêmes

sont également des sommes pondérées de poids et d’entrées.

Architecture d’hyper-réseau : les poids sont calculés par un autre réseau.

4. Les Gated Recurrent Units (GRUs) :

Comme mentionné ci-dessus, le RNN souffre de la disparition/explosion des gradients et ne se

souvient pas des états pendant très longtemps. Les GRUS, Cho et al. (2014), sont une application

de modules multiplicatifs qui tente de résoudre ces problèmes. C’est un exemple de réseau récurrent

avec mémoire. La structure d’une unité GRU est présentée ci-dessous :

Figure 3 : Gated Recurrent Unit

où ⊙ indique une multiplication par élément (produit Hadamard), xt est le vecteur d’entrée, ht est

le vecteur de sortie, zt est le vecteur de mise à jour, rt est le vecteur de réinitialisation, ϕh est une

tanh, et W,U,b sont des paramètres pouvant être appris.

Pour être précis, zt est un vecteur de porte qui détermine quelle part des informations passées doit

être transmise pour la suite. Il applique une fonction sigmoïde à la somme de deux couches linéaires

et un biais sur l’entrée xt et l’état précédent ht−1. zt contient des coefficients entre 0 et 1 résultant de

l’application de la fonction sigmoïde. L’état final de sortie ht est une combinaison convexe de ht−1

et de ϕh(Wh xt+Uh(rt⊙ht−1)+bh) via zt. Si le coefficient est égal à 1, la sortie de l’unité actuelle n’est

qu’une copie de l’état précédent et ignore l’entrée (ce qui est le comportement par défaut). S’il est

inférieur à 1, il prend en compte de nouvelles informations provenant de l’entrée.

La porte de réinitialisation rt est utilisée pour décider quelle quantité d’informations passées doit

être oubliée. Dans le nouveau contenu de la mémoire ϕh(Wh xt+Uh(rt⊙ht−1)+bh), si le coefficient

dans rt est 0, alors il ne stocke aucune des informations du passé. Si en plus zt vaut 0, alors le

système est complètement réinitialisé puisque ht ne regarderait que l’entrée.

5. Les LSTMs (Long Short-Term Memory) :

Advertisement

Les GRUs sont en fait une version simplifiée des LSTMs qui ont été conçues beaucoup plus

tôt, Hochreiter, Schmidhuber, 1997. En constituant des cellules de mémoire pour préserver les

informations passées, les LSTMs visent également à résoudre les problèmes de perte de mémoire

à long terme dans les RNNs. La structure des LSTMs est présentée ci-dessous :

Figure 4 : Long Short-Term Memory

où ⊙ indique une multiplication par élément, xt∈ℝa est un vecteur d’entrée de l’unité LSTM, ft

∈ ℝh est le vecteur d’activation de la porte d’oubli, it∈ ℝh est le vecteur d’activation de la porte

d’entrée/mise à jour, ot∈ ℝh est le vecteur d’activation de la porte de sortie, ht∈ ℝh est le vecteur

d’état caché (également appelé sortie), ct∈ ℝh est le vecteur d’état de la cellule.

Une unité LSTM utilise un état de cellule ct pour transmettre l’information. Elle régule la manière

dont l’information est préservée ou retirée de l’état de la cellule par des structures appelées “gates”

(portes). La porte d’oubli ft décide de la quantité d’informations que nous voulons conserver de

l’état de cellule précédent ct−1 en regardant l’entrée actuelle et l’état caché précédent. Elle produit

un nombre entre 0 et 1 comme coefficient de ct−1. tanh(Wcxt+Ucht−1+bc) calcule un nouveau candidat

pour mettre à jour l’état de la cellule, et comme la porte d’oubli, la porte d’entrée it décide de la

part de mise à jour à appliquer. Enfin, la sortie ht sera basée sur l’état de la cellule ct, mais passera

par une tanh puis sera filtrée par la porte de sortie ot.

Bien que les LSTMs soient largement utilisés en NLP, leur popularité est en baisse. Par exemple,

la reconnaissance vocale se dirige vers l’utilisation de ConvNets temporels, et les autres utilisations

se dirigent vers l’utilisation de transformers.

Happy Learning 

Contact: [email protected]