Deep Learning avec Python

FST
Page 1 sur 4Lecteur de document UniversityLib

Deep Learning avec Python

FST · Deep Learning · course

Browse all intelligence artificielle et données documents

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 :

Advertisement

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

Advertisement

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

Advertisement

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

Advertisement

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]