Titeur : Dr. Haithem Hermessi
Cours : Deep Learning avec Python
A/U :2021-2021
Calcul des gradients pour les modules des réseaux de neurones et
astuces pratiques pour la rétropropagation
1. Exemple
Nous considérons un exemple concret de rétropropagation assistée par un graphique visuel. La
fonction arbitraire G(w) est introduite dans la fonction de coût C, qui peut être représentée sous forme
de graphique. Par la manipulation de la multiplication des matrices jacobiennes, nous pouvons
transformer ce graphe en un qui calculera les gradients à l’envers. (Notez que PyTorch et TensorFlow
font cela automatiquement pour l’utilisateur, c’est-à-dire que le graphe en avant est automatiquement
“inversé” pour créer le graphe dérivé qui rétropropage le gradient).
Dans cet exemple, le graphique vert à droite représente le gradient. En suivant le graphe à partir du nœud
supérieur, il s’ensuit que :
Publicité
2. Modules de base des réseaux neuronaux
Il existe différents types de modules préconstruits en plus des modules Linear et ReLU bien connus. Ils
sont utiles car ils sont optimisés de manière unique pour remplir leurs fonctions respectives (par
opposition à une combinaison d’autres modules élémentaires).
3. LogSoftMax vs. SoftMax
SoftMax est un moyen pratique de transformer un groupe de nombres en un groupe de nombres
positifs entre 00 et 11 dont la somme vaut 1. Ces nombres peuvent être interprétés comme une
distribution de probabilité. Par conséquent, il est couramment utilisé dans les problèmes de
classification. yi dans l’équation ci-dessous est un vecteur de probabilités pour toutes les catégories.
Cependant, l’utilisation de softmax laisse la possibilité que les gradients disparaissent dans le réseau. La
disparition du gradient est un problème, car elle empêche les poids en aval d’être modifiés par le réseau
neuronal, ce qui peut empêcher complètement l’entraînement du réseau neuronal. La fonction sigmoïde
logistique, qui est la fonction softmax pour une valeur, montre que lorsque ss est grand, h(s)h(s) vaut 1,
et lorsque s est petit, h(s) vaut 0. Comme la fonction sigmoïde est plate à h(s) = 0 et h(s) = 1, le gradient
Publicité
est de 0, ce qui se traduit par un gradient qui disparaît.
4. Astuces pour la rétropropagation :
Utiliser ReLU comme fonction d’activation non linéaire
ReLU fonctionne mieux pour les réseaux à plusieurs couches, ce qui a fait que des alternatives comme
la fonction sigmoïde et la fonction de tangente hyperbolique tanh(⋅) ont perdu de leur popularité. La
raison pour laquelle ReLU fonctionne le mieux est probablement due à son unique nœud qui le rend
d’échelle équivalente.
Utiliser la perte d’entropie croisée comme fonction objectif pour les problèmes de classification
La fonction log softmax, dont nous avons parlé plus tôt dans la conférence, est un cas particulier de
l’entropie croisée. Dans PyTorch, assurez-vous de fournir la fonction de perte d’entropie croisée
avec log softmax comme entrée (par opposition à softmax normale).
Utiliser la descente de gradient stochastique sur les minibatchs pendant l’entraînement
Comme nous l’avons vu précédemment, les minibatchs vous permettent d’entraîner plus efficacement
car les données sont redondantes ; vous ne devriez pas avoir besoin de faire une prédiction et de calculer
Publicité
la perte sur chaque observation à chaque étape pour estimer le gradient.
Mélangez l’ordre des exemples d’entraînement lorsque vous utilisez la descente stochastique
L’ordre est important. Si le modèle ne voit que des exemples d’une seule classe à chaque étape de
l’entraînement, il apprendra à prédire cette classe sans savoir pourquoi il devrait le faire. Par exemple,
si vous essayez de classer des chiffres de l’ensemble de données du MNIST et que les données ne sont
pas mélangées, les paramètres de biais dans la dernière couche prédiraient simplement toujours zéro,
puis s’adapteraient pour toujours prédire un, puis deux, etc. Idéalement, vous devriez avoir des
échantillons de chaque classe dans chaque minibatch.
Utiliser un schéma pour diminuer le taux d’apprentissage
Le taux d’apprentissage devrait diminuer au fur et à mesure de l’entraînement. En pratique, la plupart
des modèles avancés sont entraînés en utilisant des algorithmes comme Adam qui adaptent le taux
d’apprentissage au lieu d’un simple SGD avec un taux d’apprentissage constant.
Utiliser la régularisation L1 et/ou L2 pour le taux de décroissance des poids
Vous pouvez ajouter un coût pour les poids importants à la fonction de coût. Par exemple, en utilisant
Publicité
la régularisation L2, nous définirions la perte L et mettrions à jour les pondérations w comme suit :
Pour comprendre pourquoi on appelle cela le taux de décroissance des poids (weight decay en anglais),
notez que nous pouvons réécrire la formule ci-dessus pour montrer que nous multiplions wi par une
constante inférieure à un pendant la mise à jour.
Initialisation des poids
Les poids doivent être initialisés au hasard, mais ils ne doivent pas être trop grands ou trop petits pour
que la sortie soit à peu près de la même variance que l’entrée. PyTorch comporte plusieurs astuces
d’initialisation des poids. Une des astuces qui fonctionne bien pour les modèles profonds est
l’initialisation de Kaiming où la variance des poids est inversement proportionnelle à la racine carrée du
nombre d’entrées.
Happy Learning
Contact: [email protected]