• Aucun résultat trouvé

Nous avons vu, dans la section précédente, les différents algorithmes de descente de gradient ainsi que le fonctionnement des optimiseurs. Néanmoins, la descente de gradient repose, comme son nom l’indique, sur le gradient de la fonction objective (c’est-à-dire le gradient du réseau de neurones et de la fonction de coût associée). Dans cette partie nous expliquerons comment calculer le gradient des paramètres d’un réseau de neurones permettant ainsi d’être optimisé grâce à l’algorithme de descente de gradient.

Nous savons que les réseaux de neurones sont composés de couches d’opérateurs et sont donc des compositions de fonction. Afin d’obtenir l’erreur faite par le réseau sur un mini-batch (voir section précédente) nous présentons donc les entrées à la première couche du réseau qui calcule les activations (cartes de caractéristiques) et transmet ces données à la couche suivante qui recommence le processus jusqu’à la sortie du réseau. Cette étape, où les données traversent les différentes couches du réseau, de l’entrée à la sortie, est appelée propagation ("forward" en anglais). À partir des sorties du réseau, une fonction de perte permet de calculer l’erreur faite par rapport aux valeurs cibles.

Une fois que l’on a obtenu l’erreur, on cherche à calculer le gradient de cette dernière par rapport aux paramètres du réseau. Un réseau étant une composition de fonctions,

on utilise le théorème de dérivation des fonctions composées aussi appelé règle de dérivation en chaîne (ou chain rule en anglais).

Def. 2.14

Chain rule

Si g est une fonction dérivable au point x et f est une fonction dérivable au point g(x) alors (f ◦ g) est dérivable au point x et :

(f ◦ g)0(x) = f0(g(x)) × g0(x) (2.14)

On peut réécrire cette formule en utilisant la notation des dérivées de Leibniz :

(f ◦ g)0(x) = ∂f (g(x)) ∂x = ∂f (g(x)) ∂g(x) × ∂g(x) ∂x (2.15)

Ce théorème nous donne la possibilité d’exprimer le gradient des paramètres d’un réseau de neurones en fonction des gradients des différents opérateurs composant le réseau. f1 f2 𝑥 𝑤# 𝑤$ f3 𝑤% 𝑦# 𝑦$ 𝑦% 𝜕𝑓% 𝜕𝑤% 𝜕𝑓% 𝜕𝑦$ 𝜕𝑓$ 𝜕𝑤$ 𝜕𝑓$ 𝜕𝑦# 𝜕𝑓# 𝜕𝑤#

Fig. 2.5.: Exemple du calcul de gradient sur un réseau composé de trois opérateurs f1, f2,

f3dépendant des paramètres w1, w2et w2.

Afin d’expliquer comment calculer le gradient des paramètres, nous utiliserons un exemple dont le réseau est schématisé dans la figure 2.5. Notre exemple est un réseau composé de trois couches de calculs f1, f2et f3dépendant des paramètres respectifs w1, w2et w3. Le réseau prend une entrée x qui est donnée à l’opérateur f1 pour produire une sortie y1 donnée à l’opérateur f2 pour obtenir une sortie y2 qui est finalement donnée à l’opérateur f3 pour obtenir la sortie finale y3.

Pour rappel, l’objectif est de calculer le gradient des paramètres par rapport à y3et donc ∇w1,w2,w3y3 = [∂y3

∂w1, ∂y3

∂w2,∂y3

∂w3].

Le gradient de y3 par rapport à w3 est facile à calculer, car la fonction f3(qui produit la sortie y3) dépend directement de w3. On a donc :

w3y3 = ∂y3 ∂w3

= ∂f3(y2, w3)

∂w3

Le gradient de y3 par rapport à w2 est moins évident à calculer puisque y3 est obtenue par composition de la fonction f2et f3 (on a (f2◦ f3)(y1) = y3). Il est donc nécessaire d’utiliser le théorème de dérivation des fonctions composées vu ci-dessus. On obtient alors : ∇w2y3 = ∂y3 ∂w2 = ∂f3(y2, w3) ∂w2 = ∂f3(y2, w3) ∂y2 × ∂y2 w2 = ∂f3(y2, w3) ∂y2 ×∂f2(y1, w2) ∂w2 (2.17)

Autrement dit, pour calculer le gradient de y3 par rapport à w2 il faut calculer le gradient de f3 par rapport à son entrée y2 puis le gradient de f2 par rapport à ses paramètres w2.

De la même manière on peut calculer le gradient de w1 par rapport à y3en utilisant plusieurs fois le théorème de dérivation des fonctions :

w1y3= ∂y3 ∂w1 = ∂f3(y2, w3) ∂w1 = ∂f3(y2, w3) ∂y2 × ∂y2 ∂w1 = ∂f3(y2, w3) ∂y2 × ∂f2(y1, w2) ∂w1 = ∂f3(y2, w3) ∂y2 × ∂f2(y1, w2) ∂y1 × ∂y1 ∂w1 = ∂f3(y2, w3) ∂y2 × ∂f2(y1, w2) ∂y1 × ∂f1(x, w1) ∂w1 (2.18)

Ainsi, pour calculer le gradient de w1par rapport à y3on a besoin du gradient de f3 par rapport à y2, du gradient de f2par rapport à y1et du gradient de f1par rapport à x. Or, le gradient de f3 par rapport à y2a déjà été calculé pour obtenir ∇w2y3 il n’est donc pas nécessaire de le recalculer.

De manière générale, pour chaque opérateur (ou couche) f (x, w) = y présent dans un réseau de neurones il faut pouvoir calculer le gradient de la couche par rapport à ses paramètres ∂f (x,w)w ainsi que le gradient de la couche par rapport à ses entrées ∂f (x,w)x afin de le transmettre aux couches précédentes. Cette transmission du gradient (qui remonte le réseau au travers des différentes couches) est appelée rétro-propagation du gradient (ou backpropagation en anglais).

Le calcul du gradient des paramètres d’un réseau se fait donc en deux étapes, la propagation (forward pass) des données dans le réseau, de l’entrée jusqu’à la fonction de perte puis la rétro-propagation (backward pass) des gradients de la fonction de pertes jusqu’à l’entrée du réseau.

2.2.3 Dropout

Lorsque les réseaux de neurones deviennent trop grands (avec trop de neurones et donc trop de paramètres) il devient difficile de les entraîner sans subir un effet de sur-apprentissage. Lorsqu’un réseau sur-apprend (apprend à reconnaitre par cœur les données d’entrée) ses neurones se spécialisent pour reconnaitre les images de la base de données d’entraînement (et perdent donc en performance de généralisation). Intuitivement, on peut considérer que chaque neurone reconnait une image précise de l’ensemble d’entraînement et que ce dernier, quand il reconnait son image, est l’unique responsable de la prédiction finale. Afin de corriger ce problème, Srivas-tava et al. ont développé une technique, appelée dropout [Sri+14], empêchant les neurones d’être seuls responsables dans une prise de décision. Cette technique, a montré des résultats exceptionnels lors de l’entraînement des réseaux.

Fig. 2.6.: Illustration de l’opérateur de Dropout (tirée du papier [Sri+14]). À droite le réseau entièrement connecté. À gauche, des neurones ont été aléatoirement désactivés. Le principe du dropout est extrêmement simple. En phase d’entraînement, à chaque évaluation d’un nouvel exemple d’entrée, des neurones ont une certaine probabilité

pd’être désactivé c’est-à-dire que leurs sorties y a une probabilité p d’être mise à 0. Plus formellement, si l’on considère r = Bernoulli(p), une variable aléatoire tirée selon une distribution de Bernoulli et dont la valeur est égale à 1 avec une probabilité

pet 0 sinon, alors la valeur d’un perceptron devient y = r × h(Pwi× xi+ b). Dans la littérature, la probabilité de désactivation d’un neurone la plus communément utilisée est de 50%. En phase de test, les neurones sont activés en permanence (r = 1). Néanmoins, il est important que les neurones fournissent la même énergie

"moyenne" que durant l’entraînement. Par conséquent, la valeur de sortie de chaque neurone est multipliée par la valeur de la probabilité p : y = p × h(P

wi× xi+ b).

Il y a plusieurs façons intéressantes d’expliquer pourquoi le dropout améliore l’ap-prentissage et prévient le sur-apl’ap-prentissage. Premièrement, comme nous l’avons expliqué, un neurone ne peut pas être seul responsable dans la prédiction finale du réseau. En effet, les neurones étant régulièrement désactivés lors de l’entraînement (avec une probabilité p) la prédiction finale du réseau ne peut reposer sur unique-ment l’un d’entre eux, les neurones doivent chacun prendre part aux prédictions en "collaborant". Une autre vision, tout aussi intéressante, est d’observer le réseau dans sa globalité. Lors de la désactivation aléatoire des neurones, on construit en fait un nouveau réseau inclus dans le réseau d’origine (voir figure 2.6). Entraîner un réseau avec du dropout revient donc, à chaque passe dans le réseau, à entraîner un réseau différent appartenant à l’ensemble des réseaux inclus dans le réseau d’origine. Le dropout peut donc être vu comme l’entraînement simultané de nombreux réseaux de neurones partageant des paramètres. Il a été démontré qu’en phase de test, le dropout correspond à la moyenne géométrique d’un nombre exponentiel de modèles faiblement entraînés [BS14]. Il a été plus particulièrement démontré que le dropout correspond à un terme de régularisation L2 supplémentaire dans la fonction de coût [BS14].