lbourdois/en-fr-nyu-dl-course-corpus huggingface dataset:
English: An example of this type of architecture is to have the input as one image while the output will be a sequence of words representing the English descriptions of the input image. To explain using Figure 6, each blue bubble here can be an index in a dictionary of English words. For instance, if the output is the sentence “This is a yellow school bus”. You first get the index of the word “This” and then get the index of the word “is” and so on. Some of the results of this network are shown below. For example, in the first column the description regarding the last picture is “A herd of elephants walking across a dry grass field.”, which is very well refined. Then in the second column, the first image outputs “Two dogs play in the grass.”, while it’s actually three dogs. In the last column are the more wrong examples such as “A yellow school bus parked in a parking lot.” In general, these results show that this network can fail quite drastically and perform well sometimes. This is the case that is from one input vector, which is the representation of an image, to a sequence of symbols, which are for example characters or words making up the English sentences. This kind of architecture is called an autoregressive network. An autoregressive network is a network which gives an output given that you feed as input the previous output.
French: Un exemple de ce type d’architecture est d’avoir comme entrée une image et comme sortie une séquence de mots représentant les descriptions de l’image d’entrée. Pour expliquer l’utilisation de la figure 6, chaque bulle bleue peut être un index dans un dictionnaire de mots. Par exemple, si la sortie est la phrase « This is a yellow school bus » (« C’est un bus scolaire jaune »). Vous obtenez d’abord l’index du mot « This », puis l’index du mot « is », et ainsi de suite. Certains des résultats de ce réseau sont présentés ci-dessous. Par exemple, dans la première colonne, la description concernant la dernière image est « A herd of elephants walking across a dry grass field » (« Un troupeau d’éléphants marchant à travers un champ d’herbe sèche »), ce qui est très bien précisé. Ensuite, dans la deuxième colonne, la première image donne « Two dogs play in the grass » (« Deux chiens jouent dans l’herbe »), alors qu’il s’agit en fait de trois chiens. Dans la dernière colonne, on trouve les exemples les plus erronés comme « A yellow school bus parked in a parking lot » (« Un bus scolaire jaune garé dans un parking »). En général, ces résultats montrent que ce réseau peut échouer de manière assez radicale et être parfois performant. C’est le cas d’un vecteur d’entrée, qui est la représentation d’une image, à une séquence de symboles, qui sont par exemple des caractères ou des mots composant les phrases. Ce type d’architecture est appelé un réseau autorégressif. Un réseau autorégressif est un réseau qui donne une sortie lorsque vous alimentez comme entrée la sortie précédente.
English: The second type is sequence to a final vector. This network keeps feeding a sequence of symbols and only at the end gives a final output. An application of this can be using the network to interpret Python. For example, the input are these lines of Python program.
French: Le second type est le « sequence to vector ». Ce réseau continue de donner une séquence de symboles et renvoie à la fin qu’une sortie finale. Une application de ce type peut être l’utilisation d’un réseau pour interpréter Python. Par exemple, les entrées sont ces lignes du programme Python.
English: Then the output should be 12184. These two examples display that you can train a neural network to do this kind of operation. We just need to feed a sequence of symbols and enforce the final output to be a specific value.
French: La sortie devrait être 12184. Ces deux exemples montrent que l’on peut entraîner un réseau de neurones à effectuer ce genre d’opération. Il suffit de donner une séquence de symboles et de faire en sorte que la sortie finale soit une valeur spécifique.
English: The third is sequence to vector to sequence, shown in Figure 10. This architecture used to be the standard way of performing language translation. You start with a sequence of symbols here shown in pink. Then everything gets condensed into this final h, which represents a concept. For instance, we can have a sentence as input and squeeze it temporarily into a vector, which is representing the meaning and message that to send across. Then after getting this meaning in whatever representation, the network unrolls it back into a different language. For example “Today I’m very happy” in a sequence of words in English can be translated into Italian or Chinese. In general, the network gets some kind of encoding as inputs and turns them into a compressed representation. Finally, it performs the decoding given the same compressed version. In recent times we have seen networks like Transformers, which we will cover in the next lesson, outperform this method at language translation tasks. This type of architecture used to be the state of the art about two years ago (2018).
French: Le troisième cas est « sequence to vector to sequence », comme le montre la figure 10. Cette architecture était autrefois la méthode standard pour effectuer les traductions linguistiques. On commence par une séquence de symboles illustrée ici en rose. Ensuite, tout est condensé dans ce h final qui représente un concept. Par exemple, nous pouvons avoir une phrase comme entrée et la comprimer temporairement dans un vecteur, qui représente le sens et le message à transmettre. Ensuite, après avoir obtenu ce sens dans n’importe quelle représentation, le réseau le déroule dans une autre langue. Par exemple, « Today I’m very happy » dans une séquence de mots en anglais peut être traduit en italien ou en chinois. En général, le réseau reçoit une sorte d’encodage en entrée et le transforme en une représentation compressée. Enfin, il effectue le décodage en donnant la même version compressée. Les transformers surpassent cette méthode dans les tâches de traduction. Ce type d’architecture était encore à la pointe de la technologie il y a environ deux ans (2018).
English: Figure 14 showcases how how by training this kind of network will pick up on some semantics features. For exmaple in this case you can see there is a vector connecting man to woman and another between king and queen, which means woman minus man is going to be equal to queen minus king. You will get the same distance in this embeddings space applied to cases like male-female. Another example will be walking to walked and swimming to swam. You can always apply this kind of specific linear transofmation going from one word to another or from country to capital.
French: La figure 14 montre comment l’entraînement de ce type de réseau permet de saisir certaines caractéristiques sémantiques. Par exemple, dans ce cas, il y a un vecteur reliant « man » à « woman » et un autre entre « king » et « queen ». Cela signifie que « woman » - « man » = « queen » et « king ». On obtient la même distance dans cet espace d’enchâssement pour des cas comme homme-femme. Il est possible d’appliquer ce type de transformation linéaire pour passer d’une conjugaison à une autre ou d’un pays à une capitale.
English: The fourth and final case is sequence to sequence. In this network, as you start feeding in input the network starts generating outputs. An example of this type of architecture is T9, if you remember using a Nokia phone, you would get text suggestions as you were typing. Another example is speech to captions. One cool example is this RNN-writer. When you start typing “the rings of Saturn glittered while”, it suggests the following “two men looked at each other”. This network was trained on some sci-fi novels so that you can just type something and let it make suggestions to help you write a book. One more example is shown in Figure 16. You input the top prompt and then this network will try to complete the rest.
French: Le quatrième et dernier cas est celui du « sequence to sequence ». Dans ce type de réseau, lorsque on commence à donner les entrées, le réseau commence à générer des sorties. Un exemple est le T9, qui était présent sur les téléphones Nokia. Il fournissait des suggestions de texte pendant que l’on écrivait. Un autre exemple est la génération de sous-titre depuis la voix. Un exemple intéressant est ce « RNN écrivain ». En commençant notre phrase par « Les anneaux de Saturne scintillent pendant que », le réseau suggère « deux hommes se regardent ». Ce réseau a été entraîné sur certains romans de science-fiction. Un autre exemple est présenté à la figure 16. La phrase saisie est celle en haut. Le réseau complète le reste.
English: In order to train an RNN, backpropagation through time (BPTT) must be used. The model architecture of RNN is given in the figure below. The left design uses loop representation while the right figure unfolds the loop into a row over time.
French: Pour entraîner un RNN, il faut utiliser la rétropropagation à travers le temps. L’architecture du RNN est donnée dans la figure ci-dessous. Le modèle de gauche utilise la représentation pliée tandis que le modèle de droite déplie la boucle en une ligne au fil du temps.
English: The first equation indicates a non-linear function applied on a rotation of a stack version of input where the previous configuration of the hidden layer is appended. At the beginning, h[0] is set 0. To simplify the equation, Wh​ can be written as two separate matrices, [Whx​ Whh​], thus sometimes the transformation can be stated as
French: La première équation indique une fonction non linéaire appliquée à une rotation d’une version empilée de l’entrée où la configuration précédente de la couche cachée est ajoutée. Au début, h[0] est mis à 0. Pour simplifier l’équation, Wh​ peut être écrit sous forme de deux matrices séparées, [Whx​ Whh​], ainsi parfois la transformation peut être énoncée comme
English: When dealing with a sequence of symbols, we can batchify the text into different sizes. For example, when dealing with sequences shown in the following figure, batch-ification can be applied first, where the time domain is preserved vertically. In this case, the batch size is set to 4.
French: Lorsqu’il s’agit d’une séquence de symboles, nous pouvons regrouper le texte en différentes tailles. Par exemple, lorsqu’il s’agit des séquences illustrées dans la figure suivante, la batch-ification peut être appliquée lorsque le domaine temporel est préservé verticalement. Dans ce cas, la taille du batch est fixée à 4.
English: When performing RNN on the first batch, firstly, we feed x[1]=[a g m s] into RNN and force the output to be y[1]=[b h n t]. The hidden representation h[1] will be sent forward into next time step to help the RNN predict y[2] from x[2]. After sending h[T−1] to the final set of x[T] and y[T], we cut gradient propagation process for both h[T] and h[0] so that gradients will not propagate infinitely(.detach() in Pytorch). The whole process is shown in figure below.
French: Lors de l’exécution du RNN sur le premier batch, nous introduisons d’abord x[1]=[a[g[m]s] dans le réseau et forçons la sortie à être y[1]=[b[h[n]t]. La représentation cachée h[1] est envoyée au prochain pas de temps pour aider le RNN à prédire y[2] à partir de x[2]. Après avoir envoyé h[T−1] à l’ensemble final de x[T] et y[T], nous coupons le processus de propagation des gradients pour h[T] et h[0] afin que les gradients ne se propagent pas à l’infini (.detach() en Pytorch). L’ensemble du processus est illustré dans la figure ci-dessous.
English: The figure above is a typical RNN architecture. In order to perform rotation over previous steps in RNN, we use matrices, which can be regarded as horizontal arrows in the model above. Since the matrices can change the size of outputs, if the determinant we select is larger than 1, the gradient will inflate over time and cause gradient explosion. Relatively speaking, if the eigenvalue we select is small across 0, the propagation process will shrink gradients and leads to the gradient vanishing.
French: La figure ci-dessus est une architecture RNN standard. Afin d’effectuer une rotation sur les étapes précédentes du RNN, nous utilisons des matrices qui peuvent être considérées comme des flèches horizontales dans la figure ci-dessus. Comme les matrices peuvent modifier la taille des sorties, si le déterminant que nous sélectionnons est supérieur à 1, le gradient gonflera au fil du temps et provoquera une explosion du gradient. Mathématiquement parlant, si la valeur propre que nous sélectionnons est petite par rapport à 0, le processus de propagation réduira les gradients et entraînera la disparition du gradient.
English: In typical RNNs, gradients will be propagated through all the possible arrows, which provides the gradients a large chance to vanish or explode. For example, the gradient at time 1 is large, which is indicated by the bright color. When it goes through one rotation, the gradient shrinks a lot and at time 3, it gets killed.
French: Dans les RNNs standards, les gradients se propagent à travers toutes les flèches possibles, ce qui leur donne une grande chance de disparaître ou d’exploser. Par exemple, le gradient au temps 1 est grand, ce qui est indiqué par la couleur vive. Lorsqu’il effectue une rotation, le gradient rétrécit beaucoup et au temps 3, il a disparu.
English: In the case above, we split the original network into 4 networks. Take the first network for instance. It takes in a value from input at time 1 and sends the output to the first intermediate state in the hidden layer. The state has 3 other networks where the ∘∘s allows the gradients to pass while the −−s blocks propagation. Such a technique is called gated recurrent network.
French: Dans le cas ci-dessus, nous avons divisé le réseau initial en 4 réseaux. Prenons le premier réseau par exemple. Il prend une valeur de l’entrée au temps 1 et envoie la sortie au premier état intermédiaire de la couche cachée. L’état a 3 autres réseaux où le ∘∘ permet aux gradients de passer tandis que le −− bloque la propagation. Une telle technique est appelée réseau récurrent à portes.
English: Below are equations expressing an LSTM. The input gate is highlighted by yellow boxes, which will be an affine transformation. This input transformation will be multiplying c[t], which is our candidate gate.
French: Les équations expliquant une LSTM sont visibles dans la figure 22. La porte d’entrée est représentée par des cases jaunes, et sont une transformation affine. Cette transformation d’entrée multiplie c[t], qui est notre porte candidate.
English: Don’t forget gate is multiplying the previous value of cell memory c[t−1]. Total cell value c[t] is don’t forget gate plus input gate. Final hidden representation is element-wise multiplication between output gate o[t] and hyperbolic tangent version of the cell c[t], such that things are bounded. Finally, candidate gate c~[t] is simply a recurrent net. So we have a o[t] to modulate the output, a f[t] to modulate the don’t forget gate, and a i[t] to modulate the input gate. All these interactions between memory and gates are multiplicative interactions. i[t], f[t] and o[t] are all sigmoids, going from zero to one. Hence, when multiplying by zero, you have a closed gate. When multiplying by one, you have an open gate.
French: La « Don’t forget gate » sur le graphique multiplie la valeur précédente de la cellule mémoire c[t−1]. La valeur totale de la cellule c[t] est égale à la somme de la « Don’t forget gate» et de l’« Input gate ». La représentation cachée finale est une multiplication par élément entre la porte de sortie o[t] et la version tangente hyperbolique de la cellule c[t], de sorte que les valeurs soient limitées. Enfin, la porte candidate c~[t] est simplement un réseau récurrent. Nous avons donc un o[t] pour moduler la sortie, un f[t] pour moduler la porte « don’t forget », et un i[t] pour moduler la porte d’entrée. Toutes ces interactions entre la mémoire et les portes sont des interactions multiplicatives. i[t], f[t] et o[t] sont tous des sigmoïdes, allant de 0 à 1. Par conséquent, en multipliant par 0, vous obtenez une porte fermée. En multipliant par 1, vous avez une porte ouverte.
English: How do we turn off the output? Let’s say we have a purple internal representation thth and put a zero in the output gate. Then the output will be zero multiplied by something, and we get a zero. If we put a one in the output gate, we will get the same value as the purple representation.
French: Comment éteindre la sortie ? Supposons que nous ayons une représentation interne violette thth et que nous mettions un 0 dans la porte de sortie. La sortie sera alors 0 multiplié par quelque chose ce qui donne 0. Si nous mettons un 1 dans la porte de sortie, nous obtenons la même valeur que la représentation en violet.
English: Similarly, we can control the memory. For example, we can reset it by having f[t]and i[t] to be zeros. After multiplication and summation, we have a zero inside the memory. Otherwise, we can keep the memory, by still zeroing out the internal representation thth but keep a one in f[t]. Hence, the sum gets c[t−1] and keeps sending it out. Finally, we can write such that we can get a one in the input gate, the multiplication gets purple, then set a zero in the don’t forget gate so it actually forget.
French: De même, nous pouvons contrôler la mémoire. Par exemple, nous pouvons la réinitialiser en faisant en sorte que f[t] et i[t] soient des 0. Après multiplication et sommation, nous avons un 0 dans la mémoire. Sinon, nous pouvons conserver la mémoire, en mettant toujours à 0 la représentation interne th mais en gardant un 1 dans f[t]. Ainsi, la somme obtient c[t−1] et continue à l’envoyer. Enfin, nous pouvons écrire de manière à obtenir un 1 dans la porte d’entrée, la multiplication devient violette, puis mettre un 0 dans la porte « don’t forget » pour qu’elle oublie réellement.
English: The goal is to classify sequences. Elements and targets are represented locally (input vectors with only one non-zero bit). The sequence begins with an B, ends with a E (the “trigger symbol”), and otherwise consists of randomly chosen symbols from the set {a, b, c, d} except for two elements at positions t1​ and t2​ that are either X or Y. For the DifficultyLevel.HARD case, the sequence length is randomly chosen between 100 and 110, t1t1​ is randomly chosen between 10 and 20, and t2t2​ is randomly chosen between 50 and 60. There are 4 sequence classes Q, R, S, and U, which depend on the temporal order of X and Y. The rules are: X, X -> Q; X, Y -> R; Y, X -> S; Y, Y -> U.
French: Cette section se réfère au code du notebook Jupyter trouvable ici pour la version en anglais et ici pour la version en français. L’objectif est de classer les séquences. Les éléments et les cibles sont représentés localement (vecteurs d’entrée avec un seul bit non nul). La séquence commence par un B (pour begins en anglais), se termine par un E (pour ends en anglais) qui le symbole déclencheur. Sinon la séquence est constituée de symboles choisis au hasard dans l’ensemble {a, b, c, d}, à l’exception de deux éléments aux positions t1 et t2 qui sont soit X soit Y. Dans le cas du DifficultyLevel.HARD, la longueur de la séquence est choisie au hasard entre 100 et 110, t1t1​ est choisi au hasard entre 10 et 20, et t2t2​ est choisi au hasard entre 50 et 60. Il y a 4 classes de séquence Q, R, S, et U, qui dépendent de l’ordre temporel de X et Y. Les règles sont les suivantes : X, X -> Q; X, Y -> R; Y, X -> S; Y, Y -> U.
English: The return type from a data generator is a tuple with length 2. The first item in the tuple is the batch of sequences with shape (32,9,8). This is the data going to be fed into the network. There are eight different symbols in each row (X, Y, a, b, c, d, B, E). Each row is a one-hot vector. A sequence of rows represents a sequence of symbols. The first all-zero row is padding. We use padding when the length of the sequence is shorter than the maximum length in the batch. The second item in the tuple is the corresponding batch of class labels with shape (32,4), since we have 4 classes (Q, R, S, and U). The first sequence is: BbXcXcbE. Then its decoded class label is [1,0,0,0], corresponding to Q.
French: Le type retourné par un générateur de données est un tuple de longueur 2. Le premier élément du tuple est le batch de séquences de forme (32,9,8). Ce sont les données qui vont être introduites dans le réseau. Il y a huit symboles différents dans chaque ligne (X, Y, a, b, c, d, B, E). Chaque ligne est un vecteur one-hot. Une séquence de lignes représente une séquence de symboles. La première ligne entièrement nulle est un rembourrage. Nous utilisons le rembourrage lorsque la longueur de la séquence est plus courte que la longueur maximale du batch. Le deuxième élément du tuple est le batch correspondant aux labels des classes de forme (32,4), puisque nous avons 4 classes (Q, R, S, et U). La première séquence est : BbXcXcbE. Ensuite, son label décodé est [1,0,0,0], ce qui correspond à Q.
English: With an easy level of difficulty, RNN gets 50% accuracy while LSTM gets 100% after 10 epochs. But LSTM has four times more weights than RNN and has two hidden layers, so it is not a fair comparison. After 100 epochs, RNN also gets 100% accuracy, taking longer to train than the LSTM.
French: Avec un niveau de difficulté facile, RNN obtient une précision de 50% tandis que LSTM obtient 100% après 10 époques. Mais la LSTM a quatre fois plus de poids que le RNN et possède deux couches cachées, ce qui ne permet pas une comparaison équitable. Après 100 époques, le RNN obtient également une précision de 100 %, ce qui prend plus de temps que la LSTM pour s’entraîner.
English: The above visualization is drawing the value of hidden state over time in LSTM. We will send the inputs through a hyperbolic tangent, such that if the input is below −2.5, it will be mapped to −1, and if it is above 2.5, it will be mapped to 1. So in this case, we can see the specific hidden layer picked on X (fifth row in the picture) and then it became red until we got the other X. So, the fifth hidden unit of the cell is triggered by observing the X and goes quiet after seeing the other X. This allows us to recognize the class of sequence.
French: La visualisation ci-dessus donne la valeur de l’état caché au fil du temps dans la LSTM. Nous passons les entrées dans une tangente hyperbolique, de sorte que si l’entrée est inférieure à −2,5, elle sera mise en correspondance avec −1 et si elle est supérieure à 2,5, elle sera mise en correspondance avec 1. Dans ce cas, nous pouvons donc voir la couche cachée spécifique choisie sur X (cinquième ligne de l’image), qui devient rouge jusqu’à ce que nous obtenions l’autre X. Ainsi, la cinquième unité cachée de la cellule est déclenchée par l’observation du X et se calme après avoir vu l’autre X. Cela nous permet de reconnaître la classe de la séquence.
English: Echoing signal n steps is an example of synchronized many-to-many task. For instance, the 1st input sequence is "1 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 ...", and the 1st target sequence is "0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 ...". In this case, the output is three steps after. So we need a short-time working memory to keep the information. Whereas in the language model, it says something that hasn’t already been said.
French: L’écho du signal n étapes est un exemple de tâche synchronisée de plusieurs à plusieurs. Par exemple, la 1ère séquence d’entrée est 1 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 ..., et la 1ère séquence cible est 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 .... Dans ce cas, la sortie se fait trois étapes plus tard. Nous avons donc besoin d’une mémoire de travail de courte durée pour conserver les informations. Alors que dans le modèle linguistique, cela revient à dire quelque chose qui n’a pas encore été dit.