Perceptron multicouche et
Retro-propagation du gradient
Zoulikha KOUDAD
February 28, 2023
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Perceptron multicouche
Le perceptron multicouche (MLP: multi-layer perceptron) est
un réseau orienté de neurones articiels organisé en couches et
où l'information voyage dans un seul sens, de la couche
d'entrée vers la couche de sortie. La couche d'entrée ne
contient pas de neurones, c'est une couche virtuelle associe
aux entrées X (t ) du système.
Les neurones sont reliés entre eux par des connexions
pondérées.
Il n'existe pas de connexion entre les neurones d'une même
couche.
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Perceptron multicouche
Un MLP permet de faire une classication non linéaire avec
des frontières de décision convexes, concaves, ouvertes ou
fermées, et permet d'approximer n'importe quelle fonction.
Un réseaux à couche doit contenir au moins une couche avec
fonction d'activation sigmoïde (logistique).
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Perceptron multicouche
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Perceptron multicouche
Dans la suite, on va considérer que tous les fonctions
d'activation des neurones du réseau sont de type sigmoïde
h(x ) = 1+exp(−
1
x)
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Perceptron multicouche
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Apprentissage du réseau
Soit le couple (X (t ), y (t )) désignant la t i me donnée
d'entraînement du réseau.
X (t ) = {x1 (t ) , x2 (t ) , ..., xp (t )} y (t ) = {y1 (t ) , y2 (t ) , ..., yq (t )}
p est le nombre d'éléments de la couche d'entrée ou
nombre de caractéristiques.
q est le nombre de neurones de la couche de sortie, ex:
nombre de classes.
le vecteur de sortie observée est notée
s (t ) = {s1 (t ) , s2 (t ) , ..., sq (t )}.
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Etape 1: propagation avant
consiste à présenter un stimulus (X (t ) à l'entrée du réseau et
le laisser propager jusqu'à la sortie, on obtient la sortie
observée s (t ) d'ici on peut calculer l'erreur observée e (t ).
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Etape 2: rétro-propagation du gradient
(back-propagation)
L'algorithme procède à l'adaptation des poids neurone par
neurone en commençant par la couche de sortie.
soit ej (t ) l'erreur observé pour le neurone de sortie j et la
donnée d'entraînement de l'instant t .
ej (t ) = yj (t ) − sj (t )
Dans ce qui suit
l'indice j représente un neurone de la couche actuelle.
l'indice i représente un neurone de la couche précédente.
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Etape 2 : rétro-propagation du gradient
(back-propagation)
L'erreur globale de la sortie du réseau est donnée par
q
1X 2
E (t ) = e (t )
2 j =1 j
La sortie sj (t ) du neurone j est dénie par
r
!
sj (t ) = h wij (t ) si (t )
X
i =0
ou h est la fonction d'activation sigmoïde / logistique.
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Etape 2: rétro-propagation du gradient
(back-propagation)
soit r
vj (t ) = wij (t ) si (t )
X
i =0
la somme pondérée des entrée du neurone j .
On suppose que la couche précédente contient r neurone.
Pour corriger l'erreur observée, il faut modier les poids wij
t)
dans le sens opposé du gradient de l'erreur ∂∂E(
w (t )
, ainsi on
ij
applique l'algorithme de descente du gradient pour minimiser
l'erreur globale du réseau.
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation:Cas de la couche de sortie
La règle de descente du gradient est alors la suivante; pour
chaque poids wij de la couche de sortie;
∂E
∆wij = −α.
∂ wij
, ou 0 < α < 1 est le taux d'apprentissage. Puisque
q
1X 2
E (t ) = e (t )
2 j =1 j
Et en utilisant la règle de dérivation en chaîne pour chaque
neurone j de la couche de sortie, on obtient
∂E (t ) ∂E (t ) ∂ ej (t )
= .
∂ wij (t ) ∂ ej (t ) ∂ wij (t )
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas de la couche de sortie
Sachant que
ej (t ) = yj (t ) − sj (t )
et
sj (t ) = h (vj (t ))
et r
vj (t ) = wij (t ) si (t )
X
i =0
On peut utiliser encore la règle de dérivation par chaîne
comme suit
∂E (t ) ∂E (t ) ∂ ej (t ) ∂ sj (t ) ∂ vj (t )
= . . . (*)
∂ wij (t ) ∂ ej (t ) ∂ sj (t ) ∂ vj (t ) ∂ wij (t )
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas de la couche de sortie
Évaluons les termes du gradient;
∂E (t ) ∂ 12 qk =1 ek2 (t )
P
=
∂ ej (t ) ∂ ej ( t )
∂ 2 ej (t )
1 2
=
∂ e j (t )
2
= ej (t )
2
= ej (t ) (1)
∂ ej ( t ) ∂ (y (t ) − sj (t ))
=
∂ sj (t ) ∂ sj (t )
= −1 (2)
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas de la couche de sortie
∂ sj (t ) ∂ h (vj (t ))
=
∂ vj (t ) ∂ vj (t )
1
∂ 1+exp −v (t )
( )j
=
∂ vj (t )
− exp (−vj (t ))
=
− (1 + exp (−vj (t )))2
exp (−vj (t ))
=
(1 + exp (−vj (t )))2
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas de la couche de sortie
∂ sj (t ) exp (−vj (t )) 1
= .
∂ v j (t ) 1 + exp (−vj (t )) 1 + exp (−vj (t ))
exp (−vj (t )) + 1 − 1
= .sj (t )
1 + exp (−vj (t ))
1
= 1− .sj (t )
1 + exp (−vj (t ))
= sj (t ) (1 − sj (t )) (3)
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas de la couche de sortie
et le quatrième terme
Pr
∂ vj (t ) ∂ l =0 wlj (t ) .sl (t )
=
∂ wij (t ) ∂ wij (t )
∂ (w1j (t ) .s1 (t ) + · · · + wij (t ) .si (t ) + · · · wrj (t ) .sr (t ))
=
∂ wij (t )
= si (t ) (4)
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas de la couche de sortie
En résultat
∂E (t )
= ej (t ) (−1) (sj (t )) (1 − sj (t )) (si (t )) (5)
∂ wij (t )
= −ej (t ) (sj (t )) (1 − sj (t )) (si (t )) (6)
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas de la couche de sortie
par conséquent
∂E (t )
∆wij (t ) = −α
∂ wij (t )
= −α [−ej (t ) (sj (t )) (1 − sj (t ))] (si (t ))
= α.δj (t ) .si (t )
où [α.δj (t ) .si (t )] est appelé la règle du delta pour la couche
de sortie, et
[δj (t ) = ej (t ) (sj (t )) (1 − sj (t ))] est appelé le gradient local.
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas d'une couche cachée
Il faut faire le même travail que pour la couche de sortie, mais
le problème est que nous n'avons pas de sorties désirées pour
les neurones des couches cachées, par conséquent, nous
n'avons pas d'erreur observée e .
On commence par la dernière couche cachée, les autres
couches cachées suivront le même traitement.
par la suite on considère;
j est l'indice d'un neurone de la couche actuelle.
i est l'indice d'un neurone de la couche précédente.
k est l'indice d'un neurone de la couche suivante.
On reprend la même formule du gradient de l'erreur totale (*),
mais sans utiliser ej (t ).
∂E (t ) ∂E (t ) ∂ sj (t ) ∂ vj (t )
= . . (**)
∂ wij (t ) ∂ sj (t ) ∂ vj (t ) ∂ wij (t )
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas d'une couche cachée
Les deux derniers termes donnent le même résultat que (3) et
t)
(4). Il reste à évaluer le premier terme ∂∂E(
s (t )
j
.
E est toujours l'erreur globale de la couche de sortie;
q
1X 2
E (t ) = e (t )
2 k =1 k
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas d'une couche cachée
Par la suite,
∂E (t ) ek2 (t )
1
Pq
∂ 2 k =1
=
∂ sj (t ) ∂ sj (t )
Dans le cas des couches cachées, contrairement au cas des
neurones de la couche de sortie, tous les erreurs des neurones
de sortie ek (t ) dépendent de la sortie sj (t ) du neurone j en
question de la couche cachée, ceci implique qu'il n'y aura pas
de constantes à éliminer pendant le processus de dérivation de
la somme. On peut alors écrire,
.............
.............
.............
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas d'une couche cachée
Après calcul nous avons trouvé
∂E (t )
q
ek (t ) [sk (t ) (1 − sk (t ))] .wjk (t ) (7)
X
=−
∂ sj (t )
k =1
| {z }
gradient local k
En résultat,
∂E (t )
q
δk (t ) .wjk (t ) (8)
X
=−
∂ sj (t )
k =1
Finalement nous aurons
" q
#
∂E (t ) X
= − ek (t ) [sk (t ) (1 − sk (t ))] wjk (t ) sj (t ) (1 − sj (t )) si (t )
∂ w (t )
=1
ij
k
q
!
X
= − (s (t )) (1 − s (t ))
j j δ (t ) w (t ) s (t )
k jk i (9)
k =1
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Rétro-propagation : Cas d'une couche cachée
Donc
∂E (t )
∆wij (t ) = −α = +αδj (t ) si (t ) (10)
∂ wij (t )
Avec le gradient local
q
δj (t ) = sj (t ) (1 − sj (t )) δk (t ) .wjk (t ) (11)
X
k =1
Les équations (10) et (11) sont valides pour toutes les
couches cachées.
Dans la première couche cachée, les si (t ) sont remplacées
par les xi (t ).
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Algorithme
1 Initialiser tous les poids par de petites valeurs aléatoires
dans l'intervalle [-0.5, 0.5];
2 Préparer les données d'entraînement;
3 Permuter aléatoirement les données d'entraînement ;
4 Pour chaque donnée d'entraînement t :
a Calculer les sorties observées en propageant
les entrées vers l'avant;
b Ajuster les poids en rétro-propageant l'erreur
observée
wij (t ) = wij (t − 1) + 4wij (t )
= wij (t − 1) + αδj (t ) .si (t )
5 Répéter les étapes 3 et 4 jusqu'à un nombre maximum
d'itérations ou jusqu'à ce que la racine de l'erreur
quadratique moyenne (EQM) soit inférieure à un certain
seuil.
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient
Algorithme
où le "gradient local" est déni par:
ej (t ) .sj (t ) . (1 − sj(t )) si j ∈ couche de sortie
δj ( t ) =
sj (t ) . (1 − sj (t )) . δk (t ) .wjk (t ) si j ∈ couche cach
P
k
avec si (t )la sortie du neurone i sur la couche précédente ou
xi (t ) en cas de la première couche cachée.
Zoulikha KOUDAD Perceptron multicouche et Retro-propagation du gradient