• Aucun résultat trouvé

5.5 Apprentissage profond : réseaux de neurones artificiels

5.5.3 Apprentissage

L’apprentissage d’un réseau de neurones feedforward consiste à estimer les paramètres θ = (Wi, bi), i ∈ {1, ..., l}où l est le nombre des couches appelé profondeur du réseau ; ceci en minimisant une fonction perte L(y, y)b qui quantifie l’écart entre les sorties estimée et cible. L(y, y)b dépend de la nature du problème. Si c’est un problème de régression, la fonction perte est souvent exprimée par l’erreur quadratique ky − ykb 2. Sinon, si c’est un problème de classification, L(y, y)b est généralement une entropie croisée.

Cette fonction est généralement associée à un terme de régularisation dans le but de réduire l’erreur de généralisation du réseau de neurones sans pour autant tomber dans le sur-apprentissage. La technique de dégradation des pondérations (weight decay) est applicable aux réseaux de neurones profonds et fait partie des approches de régularisation les plus populaires. Elle est équivalente à une régularisation de Tikhonov appliquée aux poids du réseau

W. Soit R(θ) le terme de régularisation :

R(θ) = λkW k2, (5.12) où λ est un paramètre qui définit le niveau de régularisation. Donc, la fonction coût à minimiser est désormais égale à :

J (θ) = ky(θ) − ykb 2+ λkW k2. (5.13) Minimiser une telle fonction se fait moyennant des méthodes de gradient. Dans cette partie de la thèse, on choisit d’utiliser la méthode de descente du gradient stochastique. C’est une extension de l’algorithme de descente de gradient classique. En apprentissage automatique et plus particulièrement les réseaux de neurones, la fonction coût est décomposée en la somme des fonctions coûts appliquées aux enregistrements des données d’entraînement une par une. On écrit :

J (θ) = 1 N N X i=1 L(xi, yi, θ), (5.14)

telles que (xi, yi), i ∈ {1, .., N }sont les données d’entraînement. La descente de gradient nécessite le calcul du gradient de ce terme qui est égal à :

θJ (θ) = 1 N N X i=1θL(xi, yi, θ). (5.15) Cette opération est O(N ). Ceci fait que l’opération peut être trop coûteuse en augmentant la taille des données d’entraînement. En utilisant le gradient stochastique, on peut calculer le gradient moyennant un échantillon des données d’entraînement de taille N0  N choisies aléatoirement. Le gradient est donc égal à :

G = 1 N0θ N0 X i=1 L(xi, yi, θ). (5.16) L’algorithme de descente suit ensuite le gradient de descente estimé par :

θ ← θ − lrG, (5.17) où lr est le pas d’itération ou taux d’apprentissage. Ce paramètre peut être fixé par l’utilisateur ou il peut aussi varier pendant l’entraînement selon des heuristiques. Intuitivement, le taux d’apprentissage doit être grand au début pour accélérer la convergence de l’algorithme et décroître au fur et à mesure qu’on s’approche de la solution pour affiner l’espace de recherche. Dans le but d’améliorer davantage la vitesse de convergence, on utilise la méthode du gradient stochastique de Momentum. Il s’agit d’accumuler une moyenne mobile en décroissance exponentielle des gradients antérieurs et continuer de se déplacer dans leur direction ce qui est illustré dans la figure 5.11B.

Dans la figure 5.11B, les courbes de niveau représentent une fonction de perte quadratique avec une matrice hessienne mal conditionnée. Le chemin rouge coupant à travers les contours indique le chemin suivi par le momentum car il minimise cette fonction. À chaque étape du chemin, nous dessinons une flèche indiquant le pas que la descente du gradient prendrait à ce point. Nous pouvons voir qu’une fonction quadratique mal conditionnée ressemble à une longue vallée étroite ou à un canyon aux pentes abruptes. Le momentum traverse correctement le canyon dans le sens de la longueur, tandis que les étapes de gradient perdent du temps à se déplacer d’avant en arrière sur l’axe étroit du canyon.

(A)Gradient stochastique (B)Gradient stochastique de Momentum

Fig. 5.11. : Illustration de l’effet du Momentum sur la convergence de l’algorithme du gradient stochastique [Goo+16].

L’algorithme du momentum introduit une variable de vitesse v qui quantifie la vitesse et la direction auxquelles les paramètres se déplacent dans l’espace des paramètres. Un hyper-paramètre α est introduit pour déterminer à quelle vitesse les contributions des gradients antérieurs vont diminuer. La règle de mise à jour est désormais exprimée par :

v ← αv − lrN10θ N 0 P i=1 L(xi, yi, θ) θ ← θ + v (5.18)

On voit bien que la vitesse v accumule les gradients. Plus α est grand par rapport à lr, plus les gradients antérieurs vont affecter la direction de descente.

Mis à part l’algorithme de descente du gradient stochastique, il existe bien d’autres méthodes d’optimisation qui peuvent être adaptées à l’entraînement des réseaux de neurones dans le but d’améliorer la vitesse de convergence et éviter de tomber dans des minimums locaux. On cite par exemple les méthodes du gradient second ordre qui utilisent une approximation itérative de la matrice hessienne (BFGS par exemple [Bro70 ; Fle70 ; Gol70 ; Sha70]). L’algorithme 2 représente la propagation avant qui permet de construire la sortieybet calculer la fonction perte L(y, y)b .

Une fois la fonction coût J calculée, pour appliquer une méthode du gradient, on doit calculer ∇θJ. Ceci peut se faire numériquement en appliquant l’algorithme de rétro-propagation [RHW86] suivant :

Algorithme 2 Algorithme de propagation avant dans un réseau de neurones

Soit l la profondeur du réseau de neurones

Wi, i ∈ {1, ..., l} les matrices de poids associées à chaque couche.

bi, i ∈ {1, ..., l} sont les vecteurs biais Soit θ = (Wi, bi), i ∈ {1, ..., l}

Soit x l’entrée et y la sortie cible.

L0 = x Pour k = 1...l faire Pk= WT kLk−1+ bk Lk = f (Pk) Fin pour b y = Lk J = L(y, y) + R(θ)b

Algorithme 3 Algorithme de rétro-propagation dans un réseau de neurones

Après la propagation avant Soit g = ∇ b yJ = ∇ b yL(y, y)b Pour k = l, ..., 1 faire

Convertir le gradient par rapport à la sortie yben un gradient dans la fonction d’activation non linéaire f

g = ∇PkJ = g f0(Pk)

Calculer les gradients par rapport aux paramètres du réseau (poids et biais)

bkJ = g + ∇bkR(θ)

WkJ = gLTk−1+ ∇WkR(θ)

Propager les gradients par rapport aux couches antérieures

g = ∇Lk−1J = WT kg

Fin pour

En somme, il s’agit de calculer le gradient de la sortie localement couche par couche dans le sens inverse de la propagation des données ce qui permet de déterminer enfin le gradient total ∇θJ.