lbourdois/en-fr-nyu-dl-course-corpus huggingface dataset:
English: The key thing that has made contrastive learning work well in the past, taking successful attempts is using a large number of negatives. One of the good paper taking successful attempts, is instance discrimination paper from 2018, which introduced this concept of a memory bank. This is powered, most of the research methods which are state of the art techniques hinge on this idea for a memory bank. The memory bank is a nice way to get a large number of negatives without really increasing the sort of computing requirement. What you do is you store a feature vector per image in memory, and then you use that feature vector in your contrastive learning.
French: L’élément clé qui a fait que l’apprentissage contrastif a bien fonctionné dans le passé est l’utilisation d’un grand nombre de négatifs. Le papier de Wu et al. (2018) a introduit le concept de banque de mémoire. C’est un outil puissant et la plupart des méthodes de pointes actuelles s’articulent autour de cette idée. La banque de mémoire est un bon moyen d’obtenir un grand nombre de négatifs sans vraiment augmenter les besoins informatiques. Ce qui est fait, est que nous stockons un vecteur de caractéristiques par image dans la mémoire, puis utilisons ce vecteur de caractéristiques dans votre apprentissage contrastif.
English: The way to evaluate this is basically by standard pre-training evaluation set-up. For transfer learning, we can pretrain on images without labels. The standard way of doing this is to take an image net, throw away the labels and pretend as unsupervised.
French: Pour l’apprentissage par transfert, nous pouvons faire un pré-entraînement sur des images sans label. La méthode standard consiste à prendre un réseau d’images, à jeter les labels et à faire semblant de ne pas être supervisé.
English: Evaluation can be performed by full fine-tuning (initialisation evaluation) or training a linear classifier (feature evaluation). PIRL robustness has been tested by using images in-distribution by training it on in-the-wild images. So we just took 1 million images randomly from Flickr, which is the YFCC data set. And then we basically performed pre-training on these images and then performed transplanting on different data sets.
French: L’évaluation peut être effectuée par un finetuning complet (évaluation de l’initialisation) ou par l’entraînement d’un classifieur linéaire (évaluation des caractéristiques). La robustesse de PIRL a été testée en l’entraînant sur des images en milieu naturel, à savoir un million d’images prises au hasard sur Flickr (jeu de données YFCC). Puis il a été appliqué sur différents jeux de données.
English: PIRL was first evaluated on object detection task (a standard task in vision) and it was able to outperform ImageNet supervised pre-trained networks on both VOC07+12 and VOC07 data sets. In fact, PIRL outperformed even in the stricter evaluation criteria, APall and that’s a good positive sign.
French: PIRL a d’abord été évalué sur la tâche de détection d’objets. Il a surpassé les réseaux pré-entraînés de manière supervisée sur ImageNet sur les jeux de données VOC07+12 et VOC07. En fait, PIRL a même surpassé les critères d’évaluation les plus stricts, APall.
English: PIRL was then evaluated on semi-supervised learning task. Again, PIRL performed fairly well. In fact, PIRL was better than even the pre-text task of Jigsaw. The only difference between the first row and the last row is that, PIRL is an invariant version, whereas Jigsaw is a covariant version.
French: PIRL a ensuite été évalué sur une tâche d’apprentissage semisupervisée. Là encore, il a obtenu d’assez bons résultats. En fait, il a même été meilleur que la tâche de prétexte Jigsaw. La seule différence entre la première et la dernière rangée est que PIRL est une version invariante, alors que Jigsaw est une version covariante.
English: Now when evaluating on Linear Classifiers, PIRL was actually on par with the CPCv2, when it came out. It also worked well on a bunch of parameter settings and a bunch of different architectures. And of course, now you can have fairly good performance by methods like SimCLR or so. In fact, the Top-1 Accuracy for SimCLR would be around 69-70, whereas for PIRL, that’d be around 63.
French: Sur l’évaluation sur de la classification, PIRL est au même niveau que CPCv2. Il a également bien fonctionné sur un certain nombre de paramètres et d’architectures différentes. Depuis, la méthode SimCLR fait mieux avec une précision top-1 d’environ 69-70 contre environ 63 pour PIRL.
English: PIRL was evaluated on “In-the-wild” Flickr images from the YFCC data set. It was able to perform better than Jigsaw, even with 100 times smaller data set. This shows the power of taking invariance into consideration for the representation in the pre-text tasks, rather than just predicting pre-text tasks.
French: PIRL a été évalué sur les images du jeu de données YFCC. Il a été plus performant que Jigsaw, même avec un jeu de données 100 fois plus petit. Cela montre la puissance de la prise en compte de l’invariance pour la représentation dans les tâches de prétexte, plutôt que de simplement prédire les tâches de prétexte.
English: Now, going back to verifying the semantic features, we look at the Top-1 accuracy for PIRL and Jigsaw for different layers of representation from conv1 to res5. It’s interesting to note that the accuracy keeps increasing for different layers for both PIRL and Jigsaw, but drops in the 5th layer for Jigsaw. Whereas, the accuracy keeps improving for PIRL, i.e. more and more semantic.
French: Maintenant, pour en revenir à la vérification des caractéristiques sémantiques, nous examinons la précision Top-1 pour PIRL et Jigsaw pour différentes couches de représentation, de conv1 à res5. Il est intéressant de noter que la précision augmente pour les différentes couches pour PIRL et Jigsaw, mais qu’elle diminue dans la 5e couche pour Jigsaw. En revanche, la précision continue à s’améliorer pour PIRL, c’est-à-dire de plus en plus sémantique.
English: PIRL is very good at handling problem complexity because you’re never predicting the number of permutations, you’re just using them as input. So, PIRL can easily scale to all 362,880 possible permutations in the 9 patches. Whereas in Jigsaw, since you’re predicting that, you’re limited by the size of your output space.
French: PIRL est très efficace pour gérer la complexité des problèmes car on ne prédit jamais le nombre de permutations, on les utilise simplement comme données d’entrée. Ainsi, PIRL peut facilement s’adapter aux 362880 permutations possibles dans les 9 patchs. Alors que dans Jigsaw, nous sommes limités par la taille de l’espace de sortie.
English: The paper “Misra & van der Maaten, 2019, PIRL” also shows how PIRL could be easily extended to other pretext tasks like Jigsaw, Rotations and so on. Further, it could even be extended to combinations of those tasks like Jigsaw+Rotation.
French: Le papier de PIRL montre également comment il peut être facilement étendu à d’autres tâches de prétexte comme Jigsaw, les rotations, etc. En outre, il peut même être étendu à des combinaisons de ces tâches comme Jigsaw+Rotation.
English: In terms of invariance property, one could, in general, assert that the invariance of PIRL is more than that of the Clustering, which in turn has more invariance than that of the pretext tasks. And similarly, the performance to is higher for PIRL than Clustering, which in turn has higher performance than pretext tasks. This suggests that taking more invariance in your method could improve performance.
French: En termes de propriété d’invariance, on pourrait, en général, affirmer que l’invariance de PIRL est plus que celle du Clustering, qui à son tour a plus d’invariance que celle des tâches de prétexte. De même, la performance est plus élevée pour PIRL que pour le Clustering, qui à son tour a une performance plus élevée que les tâches de prétexte. Cela suggère que le fait d’ajouter de l’invariance dans une méthode pourrait améliorer les performances.
English: Wouldn’t the network learn only a very trivial way of separating the negatives from the positives if the contrasting network uses the batch norm layer (as the information would then pass from one sample to the other)?
French: Le réseau n’apprendrait-il pas une façon très triviale de séparer les négatifs des positifs si le réseau utilise la couche de batch normalisation (car l’information passerait alors d’un échantillon à l’autre) ?
English: In general, yeah. In SimCLR, a variant of the usual batch norm is used to emulate a large batch size. So, batch norm with maybe some tweaking could be used to make the training easier
French: En général, oui. Dans SimCLR, une variante de la normalisation par batch est utilisée pour émuler une grande taille de batch. Ainsi, la normalisation par batch avec peut-être quelques modifications pourrait être utilisée pour faciliter l’entraînement.
English: Does the batch norm work in the PIRL paper only because it’s implemented as a memory bank - as all the representations aren’t taken at the same time? (As batch norms aren’t specifically used in the MoCo paper for instance)
French: La normalisation par batch fonctionne-t-elle dans le papier PIRL uniquement parce qu’elle est mise en œuvre en tant que banque de mémoire ? Etant donné que toutes les représentations ne sont pas prises en même temps
English: Yeah. In PIRL, the same batch doesn’t have all the representations and possibly why batch norm works here, which might not be the case for other tasks where the representations are all correlated within the batch
French: Oui. Dans PIRL, le même batch n’a pas toutes les représentations et est peut-être la raison de pourquoi la normalisation par batch fonctionne ici. Cela pourrait ne pas être le cas pour d’autres tâches où les représentations sont toutes corrélées dans le batch.
English: So, other than memory bank, are there any other suggestions how to go about for n-pair loss? Should we use AlexNet or others that don’t use batch norm? Or is there a way to turn off the batch norm layer? (This is for a video learning task)
French: Outre la banque de mémoire, existe-t-il d’autres suggestions sur la manière de procéder en cas de perte n-paires ? Devrions-nous utiliser AlexNet qui n’utilise pas la noramlisation par batch ou existe-t-il un moyen de désactiver la couche de normalisation par batch ? Notamment dans le cadre d’une tâche d’apprentissage vidéo
English: Generally frames are correlated in videos, and the performance of the batch norm degrades when there are correlations. Also, even the simplest implementation of AlexNet actually uses batch norm. Because, it’s much more stable when trained with a batch norm. You could even use a higher learning rate and you could also use for other downstream tasks. You could use a variant of batch norm for example, group norm for video learning task, as it doesn’t depend on the batch size
French: Généralement, les images sont corrélées dans les vidéos et la performance de la normalisation par batch se dégrade lorsqu’il y a des corrélations. De plus, même la plus simple des implémentations d’AlexNet utilise en fait la normalisation par batch. En effet, il est beaucoup plus stable lorsqu’il est entraîné avec. Vous pourriez même utiliser un taux d’apprentissage plus élevé et vous pourriez également l’utiliser pour d’autres tâches en aval. Vous pouvez utiliser une variante de la normalisation par batch, par exemple la normalisation par groupe pour les tâches d’apprentissage vidéo, car elle ne dépend pas de la taille du batch.
English: In PIRL, why is NCE (Noise Contrastive Estimator) used for minimizing loss and not just the negative probability of the data distribution: h(vI,vIt)?
French: Dans PIRL, pourquoi utilise-t-on le NCE (Noise Contrastive Estimator) pour minimiser les pertes et pas seulement la probabilité négative de la distribution des données : h(vI​,vIt​) ?
English: Actually, both could be used. The reason for using NCE has more to do with how the memory bank paper was set up. So, with k+1 negatives, it’s equivalent to solving k+1 binary problem. Another way of doing it is using a softmax, where you apply a softmax and minimize the negative log-likelihood
French: En fait, les deux pourraient être utilisés. La raison de l’utilisation du NCE a plus à voir avec la façon dont le papier de la banque de données a été mis en place. Ainsi, avec k+1 négatifs, cela équivaut à résoudre k+1 problème binaire. Une autre façon de procéder est d’utiliser une fonction softmax et minimiser la log-vraisemblance négative.
English: There are a certain class of techniques that are useful for the initial stages. For instance, you could look at the pretext tasks. Rotation is a very easy task to implement. The number of moving pieces are in general good indicator. If you’re planning to implement an existing method, then you might have to take a closer look at the details mentioned by the authors, like - the exact learning rate used, the way batch norms were used, etc. The more number of these things, the harder the implementation. Next very critical thing to consider is data augmentation. If you get something working, then add more data augmentation to it.
French: Il existe une certaine classe de techniques qui sont utiles pour les étapes initiales. Par exemple, vous pouvez examiner les tâches de prétexte. La rotation est une tâche très facile à mettre en œuvre. Le nombre de pièces en mouvement est en général un bon indicateur. Si vous envisagez de mettre en œuvre une méthode existante, vous devrez peut-être examiner de plus près les détails mentionnés par les auteurs, comme le taux d’apprentissage exact utilisé, la manière dont les normes de lot ont été utilisées, etc. Plus ces éléments sont nombreux, plus la mise en œuvre est difficile. Le prochain point très important à prendre en compte est l’augmentation des données. Si quelque chose fonctionne, il faut y ajouter une augmentation des données.
English: Generally, it’s good idea. But, it hasn’t been implemented partly because it is tricky and non-trivial to train such models. Integrative approaches are harder to implement, but perhaps the way to go in the future.
French: Généralement, c’est une bonne idée. Mais, elle n’a pas été mise en œuvre en partie parce qu’il est délicat et non trivial d’entraîner de tels modèles. Les approches intégratives sont plus difficiles à implémenter mais c’est peut-être la voie à suivre à l’avenir.
English: If you train on one hot labels, your models tend to be very overconfident. Tricks like label smoothing are being used in some methods. Label smoothing is just a simple version of distillation where you are trying to predict a one hot vector. Now, rather than trying to predict the entire one-hot vector, you take some probability mass out of that, where instead of predicting a one and a bunch of zeros, you predict say 0.97 and then you add 0.01, 0.01 and 0.01 to the remaining vector (uniformly). Distillation is just a more informed way of doing this. Instead of randomly increasing the probability of an unrelated task, you have a pre-trained network to do that. In general softer distributions are very useful in pre-training methods. Models tend to be over-confident and so softer distributions are easier to train. They converge faster too. These benefits are present in distillation
French: Si vous entraînez sur un seul label, vos modèles ont tendance à être trop confiants. Des astuces comme le lissage des labels sont utilisées dans certaines méthodes. Le lissage de label est une simple version de la distillation où vous essayez de prédire un vecteur one-hot. Maintenant, plutôt que d’essayer de prédire le vecteur one-hot entier, vous en retirez une certaine masse de probabilité, où au lieu de prédire un 1 et un tas de 0, vous prédisez par exemple 0,97 et vous ajoutez ensuite 0,01, 0,01 et 0,01 au vecteur restant (uniformément). La distillation est simplement une façon plus éclairée de procéder. Au lieu d’augmenter de manière aléatoire la probabilité d’une tâche sans rapport, vous disposez d’un réseau pré-entraîné pour le faire. En général, les distributions plus douces sont très utiles dans les méthodes d’entraînement préalable. Les modèles ont tendance à être trop confiants et les distributions plus douces sont plus faciles à entraîner. Elles convergent aussi plus rapidement. Ces avantages sont présents dans la distillation.
English: In this section, we also consider a few more parameters shown in Figure 2. Given car length L, d1​ the distance between car and trailer and d2​ the length of the trailer, etc, we can calculate the change of angle and positions:
French: Dans cette section, nous examinons quelques autres paramètres illustrés dans la figure 2. Étant donné la longueur de la voiture L, d1​ la distance entre la voiture et la remorque et d2​ la longueur de la remorque, nous pouvons calculer le changement d’angle et de positions :
English: Here, s denotes the signed speed and ϕ the negative steering angle. Now we can represent the state by only four parameters: xcab​, ycab​, θ0​ and θ1​. This is because Length parameters are known and xtrailer,ytrailer is determined by xcab,ycab,d1,θ1​.
French: Ici, s indique la vitesse signée et ϕ l’angle de braquage négatif. Maintenant, nous pouvons représenter l’état par seulement quatre paramètres : xcab​, ycab​, θ0​ et θ1. Cela s’explique par le fait que les paramètres de longueur sont connus et que xtrailer,ytrailer est déterminé par xcab,ycab,d1,θ1​.
English: As shown above, in the abstract diagram, the two blocks are the two networks that will be trained. At each time step kk, the “Trailer Truck Kinematics”, or what we have been calling the emulator, takes in the 6-dimension state vector and the steering signal generated from the controller and generate a new 6-dimension state at time k+1k+1.
French: entraînement d’un réseau de neurones pour contrôler le camion
English: The emulator takes the current location (Θcabt​,xcabt​,ycabt​, Θtrailert, xtrailert​, ytrailert​) plus the steering direction ϕt as input and outputs the state at next timestep (Θcabt+1​,xcabt+1​,ycabt+1​, Θtrailert+1​, xtrailert+1, ytrailert+1​). It consists of a linear hidden layer, with ReLu activation function, and an linear output layer. We use MSE as the loss function and train the emulator via stochastic gradient descent.
French: L’émulateur prend l’emplacement actuel (ΘcabtΘcabt​,xcabt,ycabtxcabt​,ycabt​, Θtrailert, xtrailert​, ytrailert​) plus le sens de direction ϕt comme entrée et sort l’état au pas de temps suivant (Θcabt+1​,xcabt+1,ycabt+1​, Θtrailert+1​, xtrailert+1, ytrailert+1). Il se compose d’une couche cachée linéaire, avec fonction d’activation ReLU, et d’une couche de sortie linéaire. Nous utilisons la MSE comme fonction de perte et entraînons l’émulateur via une descente de gradient stochastique.
English: In this setup, the the simulator can tell us the location of next step given the current location and steering angle. Therefore, we don’t really need a neural-net that emulates the simulator. However, in a more complex system, we may not have access to the underlying equations of the system, i.e. we do not have the laws of the universe in a nice computable form. We may only observe data that records sequences of steering signals and their corresponding paths. In this case, we want to train a neural-net to emulate the dynamic of this complex system.
French: Dans cette configuration, le simulateur peut nous indiquer l’emplacement de l’étape suivante, compte tenu de la position actuelle et de l’angle de braquage. Par conséquent, nous n’avons pas vraiment besoin d’un réseau neuronal qui émule le simulateur. Cependant, dans un système plus complexe, nous pouvons ne pas avoir accès aux équations sous-jacentes du système, c’est-à-dire que nous n’avons pas les lois de l’univers sous une forme calculable agréable. Nous ne pouvons observer que des données qui enregistrent des séquences de signaux de direction et leurs trajectoires correspondantes. Dans ce cas, nous voulons entraîner un réseau de neurones pour émuler la dynamique de ce système complexe.
English: We generate two lists first. We generate an input list by appending the randomly generated steering angle ϕ and the initial state which coming from the truck by running truck.state(). And we generate an output list that is appended by the output state of the truck which can be computed by truck.step(ϕ).
French: Nous générons d’abord deux listes : une liste d’entrée en ajoutant l’angle de braquage généré aléatoirement ϕ et l’état initial qui provient du camion en exécutant truck.state() et une liste de sortie à laquelle est ajouté l’état de sortie du camion qui peut être calculé par truck.step(ϕ).
English: Notice that torch.randperm(len(train_inputs)) gives us a random permutation of the indices within the range 0 to length of training inputs minus 1. After the permutation of indices, each time ϕ_state is chosen from the input list at the index i. We input ϕ_state through the emulator function that has a linear output layer and we get next_state_prediction. Notice that the emulator is a neural netork defined as below:
French: Remarquons que torch.randperm(len(train_inputs)) nous donne une permutation aléatoire des indices dans la fourchette 0 à la longueur des entrées d’entrainement moins 1. Après la permutation des indices, chaque fois que ϕ_state est choisi dans la liste des entrées à l’index i. Nous entrons ϕ_state par la fonction de l’émulateur qui a une couche de sortie linéaire et nous obtenons next_state_prediction.
English: Block C represents the controller. It takes in the current state and ouputs a steering angle. Then block T (emulator) takes both the state and angle to produce the next state.
French: Le bloc C représente le contrôleur. Il prend en compte l’état actuel et fournit un angle de braquage. Ensuite, le bloc T (émulateur) prend à la fois l’état et l’angle pour produire l’état suivant.
English: To train the controller, we start from a random initial state and repeat the procedure(C and T) until the trailer is parallel to the dock. The error is calculated by comparing the trailer location and dock location. We then find the gradients using backpropagation and update parameters of the controller via SGD.
French: Pour entraîner le contrôleur, nous partons d’un état initial aléatoire et répétons la procédure (C et T) jusqu’à ce que la remorque soit parallèle au quai. L’erreur est calculée en comparant l’emplacement de la remorque et l’emplacement du quai. Nous trouvons ensuite les gradients en utilisant la rétropropagation et mettons à jour les paramètres du contrôleur via SGD.
English: This is a detailed graph of (C, T) process. We start with a state (6 dimension vector), multiply it with a tunable weights matrix and get 25 hidden units. Then we pass it through another tunable weights vector to get the output (steering signal). Similarly, we input the state and angle ϕ (7 dimension vector) through two layers to produce the state of next step.
French: Voici un graphique détaillé du processus (C, T). Nous commençons par un état (vecteur à 6 dimensions), le multiplions par une matrice de poids accordables et obtenons 25 unités cachées. Ensuite, nous le faisons passer par un autre vecteur de poids accordables pour obtenir la sortie (signal de direction). De même, nous introduisons l’état et l’angle ϕ (vecteur à 7 dimensions) à travers deux couches pour produire l’état de l’étape suivante.
English: In this section, we discussed about the common activation functions in Pytorch. In particular, we compared activations with kink(s) versus smooth activations - the former is preferred in a deep neural network as the latter might suffer with gradient vanishing problem. We then learned about the common loss functions in Pytorch.
French: Dans cette section, nous discutons des fonctions d’activation communes dans PyTorch. En particulier, nous comparons les fonctions d’activation avec coude(s) par rapport aux fonctions d’activation lisses. La première est préférée dans un réseau neuronal profond car la seconde pourrait souffrir d’un problème de disparition du gradient. Nous découvrons ensuite les fonctions de perte communes dans PyTorch.