Vous êtes sur la page 1sur 3

Algorithme d’apprentissage du perceptron monocouche

Algorithme apprentissage_P1C
Objet : calculer les meilleures valeurs de poids possibles sur la base d’un ensemble de vecteurs d’entrées et de résultats
observés et ce, en vue d’une exploitation ultérieure du réseau afin de calculer d’autres résultats.
Principe général :
 On parcourt et (re)parcourt tout l’ensemble d’apprentissage tant que lors d’un parcours de cet ensemble, on arrive à
ajuster le vecteur de poids.
 L’ajustement du vecteur de poids se fait tant qu’il y a un écart entre une valeur cible (observée) et la valeur calculée
par le réseau. Le processus global peut donc ne pas se terminer.
 L’ajustement se fait par la méthode de l’erreur : cumul dans les poids du produit des écarts par les vecteurs d’entrée à
l’origine de ces écarts.
 Le meilleur vecteur de poids est donc le dernier vecteur ajusté une fois le processus terminé ou arrêté.
Données / variables :
• Xi : m vecteurs de n entrées chacun (x0i, x1i,…,xji, … xni) constituant un ensemble d’apprentissage
• oi : m sorties (outputs ; réponse) du réseau, une pour chaque vecteur d’entrée de l’ensemble d’apprentissage (on suppose
que le réseau calcule 1 seule sortie).
• ci : m valeurs cibles (observées ; correctes), une pour chacun des m vecteurs d’entrées exemples.
• ErrAcc : l’erreur acceptée (écart entre la valeur cible et la valeur calculée par le réseau). On considère ici que ce seuil est le
même pour tous les exemples d’apprentissage.
• W0 : vecteur des valeurs de poids initiaux servant à amorcer le calcul de valeurs de poids meilleures que les précédentes.
• W : matrice des nouveaux vecteurs de poids calculés (sauf le 1er W0 fixé initialement par nous-mêmes). Leur nombre final sera
connu à la fin de l’exécution (si l’algorithme se termine ou qu’il est arrêté).
• Wk : k éme vecteur de la matrice W, soit un vecteur de n poids {w0k, w1k,…, wjk, … wnk}, un poids pour chacune des entrées dans Xi
• f : la fonction de transfert
• a : la vitesse d’apprentissage ou coefficient d’apprentissage (a > 0).

1/3
Début
 Initialiser les poids initiaux : W0  (w00, …, wn0)
 arret  Faux
 k  0 (compteur des améliorations successives du vecteur de poids)
 a et ErrAcc  des valeurs à choisir (par l’expert)

Tant que ¬ arret On (re)parcourt l’ensemble d’apprentissage (de nouveau) tant qu’on arrive à trouver un meilleur vecteur de poids que
celui qu’on a obtenu jusque-là.

arret  Vrai La boucle principale s’arrêtera au prochain tour à moins que lors du parcours de l’ensemble d’apprentissage
(boucle Pour), on ait trouvé un vecteur de poids meilleur que celui dont on dispose (W0 initialement).

Pour i allant de 1 à m Faire Parcours de l’ensemble d’apprentissage pour tenter de trouver un meilleur vecteur
de poids que celui dont on dispose (W0 initialement)

 oi  f (Xi * Wk) ; Calcul de la réponse ri du réseau pour le vecteur d’entrée courant (Xi) en utilisant le dernier meilleur vecteur de
poids disponible Wk . Le produit vectoriel Xi*Wk correspond à la somme pondérée des entrées par les poids

 e  oi - ci Calcul de l’écart entre la valeur cible observée (correcte) et la valeur calculée par le réseau. e varie selon le
vecteur d’entrée Xi et du vecteur de poids Wk utilisés.
Si avec le vecteur de poids courant, le résultat calculé ri est trop éloigné de la valeur observée (en plus ou en moins),
Si |e| > ErrAcc Alors soit donc l’écart e en valeur absolue > à une valeur acceptée, alors il y a lieu d’ajuster ce vecteur de poids.
k k+1 Ajustement du vecteur de poids par la méthode de l’erreur intégrant le vecteur d’entrées, l’erreur
et l’ancien vecteur de poids : quand e tendra vers 0, Wk tendra vers Wk-1. Le nouveau vecteur sera
Ajuster les poids : Wk  Wk-1 + a * e * Xi soit augmenté soit diminué selon le signe de e.
Le coefficient a permet de se rapprocher plus ou moins rapidement du bon vecteur de poids. ‘a’
arret  Faux élevé veut dire potentiellement dépasser le bon meilleur de poids. Revenir en arrière (e<0) veut
dire repasser dessus dans l’autre sens (oscillation). ‘a’ faible veut dire mettre plus de temps pour
atteindre le bon vecteur de poids mais l’oscillation aura lieu de façon plus proche du bon vecteur.
FinSi
En parcourant l’ensemble d’apprentissage, il suffit que l’un des vecteurs d’entrées nous fasse modifier le vecteur de poids pour qu’on
reboucle sur tout l’ensemble d’apprentissage. On se s’arrêtera donc que si le dernier vecteur de poids est assez bon càd le résultat
FinPour calculé et la cible ne sont distants que par la valeur de l’erreur acceptée et ce pour tout l’ensemble d’apprentissage. C’est un choix
parmi d’autres possibles : Ex. se contenter d’un vecteur assez bon pour un certain pourcentage seulement de l’ensemble des exemples.

FinTanque
A la sortie de la boucle (Tant que), le meilleur vecteur de poids possible, étant donnés ErrAcc, l’ensemble d’apprentissage Xi
et la fonction de transfert f est le vecteur sauvegardé dans W0.
Fin Apprentissage_P1C
NB : l’algorithme n’est pas optimisé d’un point de vue purement calculatoire ! Ex : au lieu d’une matrice W, 1 vecteur de travail suffirait sauf si on veut garder les
Wk intermédiaires (idem pour ri, oi…). Des améliorations « fonctionnelles » sont aussi possibles : variation de a, % des exemples au lieu du Pour…
2/3
Déroulement sur un « exemple » :
Soient,

• Ensemble d’apprentissage constitué de 2 vecteurs d’entrées (les Xi) = {X1, X2}


• X1 = {x01, x11, …, xn1} & X2 = {x02, x12, …, xn2}
• Les 2 valeurs cibles c1 et c2
• ErrAcc = une valeur
• a = une valeur
• Matrice des poids successifs W
• W0={0,…,0} n fois 1

1ère itération du Tant que 2ème itération du Tant que


1ère itération du Pour (i =1) 1ère itération du Pour (i =1)
o1 = T (X1*W0) r1 = T (X1*W0)  W0 contient ici W2 de
e1 = Abs (o1-c1) l’itération Tant que précédente
Supposons e1 > ErrAcc e1 = Abs (o1-c1)
W1  W0 + a*e1*X1 Supposons e1 <= ErrAcc
W0  W1 On n’ajuste pas W0
arret  Faux On laisse arret à Vrai

2ère itération du Pour (i = 2) 2ère itération du Pour (i =2)


r2 = T (X2*W1) R2 = T (X2*W0)  W0 contient ici W2 de
e2 = Abs (o2-c2) l’itération Tant que précédente
Supposons e2 > ErrAcc e2 = Abs (o2-c2)
W2  W1 + a*e2*X2 Supposons e2 <= ErrAcc
W0  W2 On n’ajuste pas W0
arret  Faux On laisse arret à Vrai
On sort du Pour On sort du Pour
On sort de la boucle Tantque

On restitue le meilleur vecteur de poids dans W0 (contient


W2 précédent)

Evolution des vecteurs de poids :

W0 W1 W2
w00 = 0 a*e1*x01 a*e1*x01+ a*e2*x02 w01 = 0 + a*e1*x01 w02 = w01 + a*e2*x02 = a*e1*x01+ a*e2*x02
.
.
.
wn0 = 0 a*e1*xn1 a*e1* xn1+ a*e2*xn2 Wn1 = 0 + a*e1*xn1 wn2 = Wn1 + a*e2*xn2 = a*e1* xn1+ a*e2*xn2

3/3