Algorithme de rétropropagation
Cet algorithme permet de réaliser un apprentissage du réseau de neurones.
On cherche à obtenir du réseau une réponse préétablie comme étant correcte.
On dispose d’une base de conaissance de type entrée (p) - sortie attendue
(d). On compare ensuite la sortie (a) à la sortie attendue. On introduit une
fonction e = d−a qui est la fonction d’erreur que l’on va chercher à minimiser
en modifiant les poids du réseau.
Une fois les poids définis par cet algorithme à partir d’exemples connus
de l’utilisateur, on va chercher à extrapoler le réseau, en lui fournissant des
entrées inconnues.
0.1 Méthode du gradient
On cherche une méthode itérative permettant de minimiser une fonction f
(qui correspondra à l’erreur du réseau de neurones).
f : Rn −→ R
x 7−→ f (x)
On cherche à trouver un ∆x tel que f (x + ∆x) < f (x) .
On applique la formule de Taylor à l’ordre 1 en considérant que ∆x est
"petit" :
f (x + ∆x) − f (x) = h5x f |∆xi + o(k∆xk)
En écrivant ∆x = ηy, avec η > 0 un pas fixé arbitrairement, il nous suffit
de trouver un vecteur y qui satifasse l’équation :
ηh5x f |yi < 0
Qui équivaut à :
h5x f |yi < 0 (1)
Ainsi tout vecteur y respectant la relation 1 conviendra. On appelle ce
vecteur la direction de descente. Afin de s’assurer que le produit scalaire
est bien négatif, on choisit y = − 5x f . On obtient alors comme vecteur ∆x :
∆x = −η 5x f (2)
où η est un pas "petit", fixé arbitrairement.
1
En itérant le processus, on fait diminuer f (x).
Il a été démontré que dans le cas d’une fonction f fortement convexe et
lipschitzienne la methode du gradient conduit (au bout d’un nombre infini
d’itération) à trouver le minimum global de la fonction, quel que soit la valeur
du x initial.
Bien que les fonctions considérées ici n’entrent presque jamais dans le
cadre de ces hypothèses, on considérera qu’elles conviennent et on s’assur-
era de manière expérimentale (dans l’algorithme) que la méthode converge
effectivement.
0.2 Rétropropagation des erreurs
On va chercher à minimiser la fonction d’erreur du réseau de neurones.
Plus précisément, on va ici chercher à minimiser l’erreur de la couche k du
perceptron.
0.2.1 Expression de la direction de descente
On utilise les notations suivantes :
m : Nombre de neurones sur la couche k
p : Nombre d’entrées de la couche k
d : Sortie attendue à la dernière couche du réseau
a : Sortie de la dernière couche du réseau
ak ∈ Rm : Sortie de la couche k du réseau
W ∈ Mm,p (R) : Matrice des poids de la couche k,
b ∈ Rm : Vecteur biais de la couche k
f : Fonction d’activation de la couche k, f : R −→ R
x1 f (x1 )
Par abus, si f : R −→ R, on notera f ... = ...
xn f (xn )
D’après la construction du perceptron multicouche on a :
ak = f (nk (W, b))
avec
nk (W, b) = W ak−1 − b
2
On peut maintenant définir la fonction d’erreur que l’on va chercher à min-
imiser. On la choisit dépendant uniquement de W puisque qu’on ne s’interesse
ici qu’à modifier les poids de la couche.
F (W, b) = hd − a|d − ai
D’après la méthode du gradient (section 0.1), une itération pour minimiser
F sera de modifier (W, b) en (W, b) + (∆W, ∆b), avec (∆W, ∆b) = −η 5 FW ,
avec η > 0 choisi arbitrairement.
On va maintenant chercher à modifier séparément chaque coefficient wi,j
de la matrice W. Cela revient à modifier le poids de l’entrée j du neurone i.
On a :
∂F
∆wi,j = −η (W, b)
∂wi,j
∂F
Pour calculer ∂wi,j
on peut voir F comme une fonction de nk , et nk une
fonction de W et b. Cela se raduit par l’introduction d’une fonction C et de
l’écriture de F comme une composée :
F = C ◦ nk
nk : Mm,p (R) × Rp −→ Rp
où C : RP −→ R et
W 7−→ W ak−1 − bk
En dérivant cette composée, on a :
∂F ∂C ∂nki
(W, b) = (W, b)
∂wi,j ∂nki ∂wi,j
∂C ∂C k
où ∂nk = ∂n (n (W, b)) .
i i
On va calculer séparément les deux facteurs.
∂nki ∂
W ak−1 − bk = ak−1
(W, b) = j
∂wi,j ∂wi,j
∂C
On note le second ski = ∂nk , on le calculera dans la section 0.2.2. On a donc
i
comme expression de ∆wi,j :
∆wi,j = ηski ak−1
j (3)
En refaisant exactement les même calculs en dérivant par rapport à bi (en
s’intéressant donc à la modification du biais), on obtient :
∆bi = −ηski (4)
3
Pour résumer, en réécrivant les relations (3) et (4) sous forme matricielle,
on a obtenu notre direction de descente :
∆W = −ηsk · t ak−1
(5)
∆b = ηsk (6)
0.2.2 Calcul de la sensibilité sk
Soit N le nombre de couches du réseau.
La sensibilité de la dernière couche N est facile à exprimer :
∂C ∂
sN N 2
= −2(di − ai )f 0 (nN
i = = (di − f (n i )) i ) (7)
∂nNi ∂n N
i
On peut alors exprimer C :
C(nk ) = f N nN f N −1 · · · f k+1 (nk+1 (f k (nk ))) · · ·
0
nk+1 : Rp −→ Rp 0
Donc en posant , on a D : Rp → R
nk 7−→ W k+1 f k (nk ) − bk+1
telle que :
C = D ◦ nk+1
Donc
k+1 k+1
∂C ∂D ∂nj ∂nj
ski = k
= k+1 k
= sk+1
j
∂ni ∂nj ∂ni ∂nki
Reste à calculer le second facteur de cette expression :
" #
∂nk+1
j ∂ X k+1 k k k+1 0
= wj,l f (nl ) − bk+1
j = wj,i fk (nki )
∂nki ∂nki l
On a donc une relation de récurrence entre sk et sk+1 (d’où le terme "rétro-
propagation"), le premier terme sN étant donné par l’équation (7) :
sk = fk0 (nk ) · tW k+1 sk+1 (8)
sN = −2fN0 (nN )(d − a) (9)
0.2.3 Algorithme d’aprentissage
Les calculs précédents permettent de construire un algorithme d’aprentis-
sage du réseau de neurones. (itération des ∆ trouvés).