Réseaux neuronaux récurrents

Apprentissage profond intermédiaire avec PyTorch

Michal Oleszak

Machine Learning Engineer

Neurone récurrent

  • Réseaux à propagation avant
  • RNN : connexions en retour
  • Neurone récurrent :
    • Entrée x
    • Sortie y
    • État caché h
  • En PyTorch : nn.RNN()

Schéma d'un neurone RNN simple : le neurone applique des poids et l'activation, reçoit l'entrée x et produit les sorties y et h, où h est réinjecté sur lui-même.

Apprentissage profond intermédiaire avec PyTorch

Dérouler le neurone récurrent dans le temps

Schéma du neurone récurrent. Au pas de temps 0, il reçoit les entrées h0 et x0, et produit les sorties y0 et h1.

Apprentissage profond intermédiaire avec PyTorch

Dérouler le neurone récurrent dans le temps

Schéma du neurone récurrent. Au pas de temps 1, il reçoit les entrées h1 et x1, et produit la sortie y1.

Apprentissage profond intermédiaire avec PyTorch

Dérouler le neurone récurrent dans le temps

Schéma du neurone récurrent. Au pas de temps 2, il reçoit les entrées h2 et x2, et produit les sorties y2 et h3.

Apprentissage profond intermédiaire avec PyTorch

RNN profonds

Schéma de deux neurones récurrents formant une couche. À chaque pas de temps, les sorties y sont transmises à un autre neurone.

Apprentissage profond intermédiaire avec PyTorch

Architecture séquence-à-séquence

  • Entrée : une séquence, on utilise toute la séquence de sorties
  • Exemple : reconnaissance vocale en temps réel

Schéma d'architecture : à chaque pas de temps, il y a une nouvelle entrée, tandis que toutes les sorties y produites à chaque pas sont en vert comme utilisées,

Apprentissage profond intermédiaire avec PyTorch

Architecture séquence-à-vecteur

  • Entrée : une séquence, on n'utilise que la dernière sortie
  • Exemple : classification de sujets de texte

Schéma d'architecture : à chaque pas de temps, il y a une nouvelle entrée, tandis que seule la dernière sortie y du dernier pas est en vert comme utilisée,

Apprentissage profond intermédiaire avec PyTorch

Architecture vecteur-à-séquence

  • Entrée : un seul vecteur, on utilise toute la séquence de sorties
  • Exemple : génération de texte

Schéma d'architecture : il n'y a qu'une entrée, au premier pas de temps, tandis que toutes les sorties y produites à chaque pas sont en vert comme utilisées,

Apprentissage profond intermédiaire avec PyTorch

Architecture encodeur-décodeur

  • Traiter toute la séquence d'entrée, puis commencer à utiliser la séquence de sorties
  • Exemple : traduction automatique

Schéma d'architecture : dans la première partie (encodeur), des entrées sont reçues à chaque pas mais les sorties sont ignorées ; dans la seconde (décodeur), il n'y a plus d'entrées mais toutes les sorties de chaque pas sont utilisées.

Apprentissage profond intermédiaire avec PyTorch

RNN avec PyTorch

class Net(nn.Module):
    def __init__(self):
        super().__init__()

self.rnn = nn.RNN( input_size=1, hidden_size=32, num_layers=2, batch_first=True, )
self.fc = nn.Linear(32, 1)
def forward(self, x): h0 = torch.zeros(2, x.size(0), 32)
out, _ = self.rnn(x, h0)
out = self.fc(out[:, -1, :]) return out
  • Définir la classe du modèle avec la méthode __init__
  • Définir la couche récurrente, self.rnn
  • Définir la couche linéaire, fc
  • Dans forward(), initialiser le premier état caché à zéros
  • Faire passer l'entrée et le premier état caché dans la couche RNN
  • Prendre la dernière sortie du RNN et la passer à la couche linéaire
Apprentissage profond intermédiaire avec PyTorch

Passons à la pratique !

Apprentissage profond intermédiaire avec PyTorch

Preparing Video For Download...