• Aucun résultat trouvé

1.2 Apprentissage profond supervisé

1.2.4 Mise à jour des poids

Entraîner un réseau de neurones consiste à répéter la mise à jour des poids

wl

ij et biais bl

i du réseau jusqu’à ce que C (w, b) converge. On s’aide pour ça de l’algorithme de descente de gradient.

1.2.4.1 Le principe de l’algorithme de descente de gradient

L’algorithme de descente du gradient utilise le résultat de l’algorithme de rétro-propagation pour mettre à jour les paramètres. Il cherche à minimiser la fonction de coût C(x) en modifiant x. Il est itératif et procède par améliorations successives. Son but est de trouver ou de s’approcher d’un point stationnaire ou minimum glo-bal, c’est à dire d’un point où le gradient de la fonction de coût est nul et ainsi aboutir à une configuration stable du réseau neuronal. On a schématisé dans la Figure 1.2.3 son déplacement le long d’une pente d’erreur vers une valeur d’erreur minimale (cf Figure 1.2.3). Le principe de cet algorithme remonte à 1847 avec Cauchy [Cauchy 47].

Après une descente de gradient donc après une itération d’optimisation, les erreurs sont corrigées selon l’importance des neurones à participer à l’erreur finale. Les poids synaptiques qui contribuent à engendrer une erreur importante sont modifiés de manière plus significative que les poids qui engendrent une erreur marginale. Les poids sont ainsi soit diminués, soit augmentés, et le modèle est mis à jour. Le biais est une valeur scalaire ajouté en entrée. Cela permet d’avoir toujours des neurones actifs quelque soit la force du signal d’entrée. Ces biais sont modifiés comme les poids au cours de l’apprentissage.

La descente de gradient peut s’effectuer de plusieurs manières [Maurice 18] : — De manière globale (batch gradient) : on envoie au réseau toutes les données

en une seule fois, puis le gradient est calculé et les poids ajustés.

— Par des lots (mini-batch gradient) : on envoie au réseau les données par petits groupes d’une taille définie par l’expérimentateur dont on calcule les erreurs, puis l’erreur moyenne est calculée et enfin les poids sont mis à jour.

— De façon unitaire, stochastique (stochastic gradient) : cette méthode envoie une seule donnée à la fois dans le réseau et donc les poids sont mis à jour à chaque fois juste après.

Figure 1.2.3 – Illustration d’une façon pour l’algorithme de descente de gradient de guider une fonction jusqu’à un minimum via le calcul de sa dérivée par exemple. Adapté de [Goodfellow 16].

On peut noter que par abus de langage, la méthode par lots (mini-batch

gra-dient) est confondue avec la méthode unitaire (stochastic gradient). En pratique, la méthode globale n’a aucune chance avec des volumes massifs de données. Il y a des risques que les scripts échouent la machine a des chances d’être saturée. Et la méthode stochastique est inefficace numériquement comparé à la méthode par lots qui permet de vectoriser les calculs. De ce fait, la méthode par lots permet une meilleure convergence par rapport à la stochastique. Au cours de ce doctorat, j’utilise la méthode par lots (mini-batch gradient).

Pour favoriser la convergence de C (w, b), on a plusieurs méthodes d’optimisation à disposition.

Je n’expliciterai dans ce manuscrit que le principe de l’algorithme d’optimisation de base, la descente de gradient stochastique (SGD), ainsi que que celui utilisé dans les expériences présentées, Momentum et son amélioration par Nesterov. D’autres existent qui sont notamment abordés de manière pédagogique et mathématique dans [Ruder 16].

1.2 Apprentissage profond supervisé

1.2.4.2 La descente de gradient stochastique : SGD

La descente de gradient stochastique (SGD) est l’algorithme de descente du gradient de base qui est caractérisé par les équations au temps t [Rumelhart 86, Nielsen 15, Jouannic 17] :

w

ijl

(t + 1) ← w

l

ij

(t) − α ∗

∂C ∂wl

ij(t) pour un poids quelconque,

b

li

(t + 1) ← b

l

i

(t) − α ∗

∂C ∂bl

i(t) pour un biais quelconque. Où α est le taux ou pas d’apprentissage compris entre 0 et 1.

1.2.4.3 La méthode du moment : Momentum

La descente de gradient peut évoluer de manière hésitante ou hoquetant selon que la surface de la fonction d’erreur se courbe et se creuse plus dans une dimension qu’une autre au niveau des minima locaux [Sutton 86]. Pour optimiser le réseau, on veut éviter les oscillations au cours de l’apprentissage et ne pas se retrouver coincer dans un minimum local. Pour que chaque mise à jour des poids soit la plus optimale possible, on a besoin de savoir quelles étaient les mises à jour des poids précédentes. La méthode du moment ou Momentum est une méthode permettant d’accélérer la descente de gradient dans la direction voulue et d’atténuer les oscillations. Cela est possible grâce à l’ajout d’un coefficient au vecteur de mise à jour, ou terme d’inertie aussi appelé moment, entre le pas de temps précédent et le pas de temps présent [Rumelhart 86] : Au temps t, on exprime :

4w

l ij

(t + 1) ← λ ∗ 4w

l ij

(t) − α ∗

∂C ∂wl ij(t)

w

ijl

(t + 1) ← w

l ij

(t) + 4w

l ij

(t + 1)

On a alors :

w

ijl

(t + 1) ← w

l ij

(t) + λ ∗ 4w

l ij

(t) − α ∗

∂C ∂wl ij(t) λ : coefficient du moment, λ ∈ [0, 1].

α : taux d’apprentissage, α > 0 : permet de déterminer la taille du pas à prendre pour atteindre un minimum (local).

Momentum fonctionne comme une balle qui roule le long d’une pente et qui prend de la vitesse lors de la descente. Le taux d’apprentissage augmente pour les dimensions de la surface de la fonction de perte dont les gradients pointent dans la même direction. Il diminue lorsque les gradients ont des directions différentes [Plaut 86, Qian 99, Ruder 16].

Figure 1.2.4 – Schéma de la descente de gradient sans et avec momentum. Sans momentum, la descente progresse lentement car oscille beaucoup. Avec momentum, la convergence s’accélère car les oscillations sont amorties. Extrait de [Orr 99, Ruder 16].

1.2.4.4 Gradient accéléré de type Nesterov

Il faut savoir que l’inconvénient de Momentum est que la « balle »descend une pente mais n’anticipe pas si ça va monter à nouveau donc ne ralentit pas en cas d’approche d’un minimum local. Grâce au gradient accéléré de Nesterov (Nesterov

accelerated gradient, NAG, ou Nesterov momentum), cette anticipation existe car le calcul prend en compte la position future approximative des paramètres au temps

t [Nesterov 83, Sutskever 13] : Au temps t, on exprime :

4w

l ij

(t + 1) ← λ ∗ 4w

l ij

(t) − α ∗

∂C

(

wl ij(t)+λ∗4wl ij(t)

)

w

ijl

(t + 1) ← w

l ij

(t) + 4w

l ij

(t + 1)

On a alors :

w

ijl

(t + 1) ← w

l ij

(t) + λ ∗ 4w

l ij

(t) − α ∗

∂C

(

wl ij(t)+λ∗4wl ij(t)

)

λ : coefficient du moment, λ ∈ [0, 1].

α : taux d’apprentissage, α > 0 : permet de déterminer la taille du pas à prendre pour atteindre un minimum (local).

Tandis que Momentum calcule le gradient présent et saute dans la direction du gradient accumulé mis à jour, Nesterov saute dans la direction du gradient accumulé, mesure le gradient puis effectue une correction, ce qui permet la mise à jour complète du gradient accéléré de Nesterov. Cette mise à jour anticipée éviter d’aller trop vite et entraîne une réactivité accrue.

Cette technique a permis des progrès considérables des performances des réseaux neuronaux récurrents sur un certain nombre de tâches [Bengio 12, Sutskever 13].

1.2 Apprentissage profond supervisé