La description suivante essaie d'expliquer un probleme de reconnaissance de pattern, sachant que c'est la matiere de predilection du BPN. Cependant, vous pouvez utiliser aussi la technique de retropropagation pour beaucoup d'autres problemes, comme la compression, la prediction et le traitement numerique du signal.
Quand vous presentez a votre neurone des donnees en entre et que la
sortie n'est pas celle attendue, qu'allez vous faire ?
Une bonne reponse pourrait etre: nous allons modifier quelque poids de
connection. Puisque les poids de connection ont ete initialement initialises
au hasard, vous avez toute les chances de trouver une sortie qui est tres
loin de celle reellement attendue.
Ce qui conduit a la question: Quelles poids de connection doit on changer,
et de combien? en reformulant la question, comment savez-vous quelle
connection est responsable en plus grande partie de l'erreur?
Vraiment, nous devons utiliser un algorithme qui modifie de facon efficace
les differents poids de connections en vue de diminuer au maximum l'erreur a
la sortie. C'est un probleme courant d'ingenieurie; c'est ce qu'on appelle
de l'optimisation.
L'algorithme celebre LMS a ete developpe pour resoudre ce genre de probleme,
cependant le rn est un systeme plus generique et a besoin d'un algorithme plus
complexe pour ajuster les differents parametres du rn.
Un algorithme qui a grandement contribue a la celebrite du rn est l'algorithme a retropropagation, qui consiste dans les etapes suivantes:
Un rn est inutile s'il ne voit qu'un seul exemple de donnees correctes. Il ne
peut pas reconnaitre les caracteristiques propres des donnees introduites
s'il n'y a qu'un seul exemple.
C'est analogue a un enfant en train d'apprendre la difference entre
plusieurs types d'animaux - L'enfant va devoir voir plusieurs exemples de
chaque type avant de pouvoir classifier un type precis d'animal.
Si ils ont par exemple a classifier les oiseaux (comme different des poissons, reptiles
etc) ils ont besoin de voir plusieurs exemple de rapaces, canards, pelicans
et de bien d'autres pour faire la distinction entre ce type d'animal et
d'autres types. De plus, c'est improbable que l'enfant puisse faire la difference
entre ces differences en ne les voyant qu'une seule fois - plusieurs
repetitions sont necessaire avant que l'information `ne rentre'.
C'est le meme probleme avec les rn. La meilleure procedure d'apprentissage
est de preparer un grand nombre d'exemples types (plus les problemes sont
complexes et plus le nombre d'exemples devra etre important) qui montrent
toutes les differentes caracteristiques qui nous interesse. Il est important
de selectionner les exemples qui meme s'il ne vous interesse pas
particulierement, sont assez communs dans le genres de donnees que vous
rentrer au rn.
Un celebre exemple est celui de la classification de tanks par la partie
`Intelligence Artificiel' de l'US Army.
Il a ete montre des exemples de tanks sovietiques a des distances variables
et a differents angles sous un temps ensoleille, puis sous un temps nuageux.
Inutile de dire que cela etait bien pour classifier les differentes meteo,
mais pas si bien pour detecter des tanks enemis.
Si possible, avant de faire l'apprentissage du rn, ajoutez du buit ou autre parametre faisant intervenir le hasard (comme un agrandissement au hasard par exemple). Cela aide a prendre en compte le cote changeant des donnees pouvant apparaitre en pratique, et cela aide a realiser un rn plus stable.
Si vous utiliser notre fonction sigmoid, notez que votre sortie ne doit
jamais etre egale a 0 ou 1! La raison est simple: Queque soit l'entree, les
sorties dans la couche cachee sont restreintes strictement entre 0 et 1 (ces
valeurs sont les asymptotes de la fonction). Approcher ces valeurs
necessiterait des poids de connections enormes et/ou des valeurs d'entrees
ennormes.
Cependant, mettre une sortie (par exemple) a 0.9 permet au rn d'approcher et
d'ultimement atteindre cette valeur de chaque cote.
Cela ne peut pas etre neglige: Un rn n'est pas meilleur que les donnees d'apprentissage que vous lui fournisser. Des donnees d'apprentissage mal choisies et pauvres en nombre vont donner un rn peut efficace et impredictible.
Apres avoir selectionne un exemple, on le presente aux rn, qui genere un resultat correspondant.
Dans notre probleme de rn, on prend les resultats provenant des sorties de notre rn et on calcul la difference entre ces valeurs et les valeurs qui etaient attendues, par exemple dans l'exemple suivant nous obtenons en sortie 0.1 et 0.9 et les valeurs desirees etaient 0.2 et 0.85. Donc, l'erreur trouvee va etre de 0.1 et -0.05. Mais une seule mesure de l'erreur est necessaire (donc nous devons etre capable de dire si l'ensemble des resultats sont acceptable ou pas), le minimum de la somme des valeurs pris au carre est utilise. Dans ce cas le MSC ou MSE (mean square error) en anlais est 0.00625.
| Sortie obtenue | Sortie desiree | MSE |
|---|---|---|
| 0.1 | 0.2 | (0.2 - 0.1)^2 + (0.85 - 0.9)^2 = 0.00625 |
| 0.9 | 0.85 |
Pour minimiser ce parametre, nous devons considerer l'erreur de la sortie
(pour une entree et pour la sortie desiree associee) comme une fonction des
poids de connections.
Considerez maintenant la couche de sortie.
Pour une entre donnee et pour la sortie associee de la couche consideree,
la sortie actuelle est simplement une fonction compliquee de poids de
connections. C'est clairement une fonction avec un nombre tres important de
variables, si nous avons N neurones dans la couche considere et M neurones dans
la couche precedente, il y a un totale de MN poids assurant la connection
des deux couches.
L'erreur comme une fonction de tout ces poids du reseau peut etre prise
comme une surface a MN dimensions.
Ainsi, nous voulons trouver le minimum de cette surface a partir des points
que l'on a deja (situe un peut partout sur cette surface). Le moyen le plus
simple d'y arriver est d'utiliser le gradient de la surface au point ou l'on
est actuellement, et de faire un petit pas dans le cote oppose. Ce qui va
nous amener un peu plus bas sur la courbe et plus pres du minimum
recherche. Heureusement, si nous utilisons une fonction de transfert simple
pour chaque neurone (comme la fonction sigmoid), le gradient pourra etre
calcule simplement, en fait il sera lui meme fonction de la fonction sigmoid
. C'est utile car cela reduit le nombre de calculs a effectuer -
les sorties du rn peuvent ainsi etre recyclees lors du calcul du gradient.

Les nouvelles valeurs des poids de connections du rn sont calculees en multipliant l'inverse du gradient par un petit parametre (appelle le taux d'apprentissage) et en additionnant au vecteur resultant le vecteur des poids de connection attaches a la couche courante. Ce changement par contre ne s'effectue pas tant que les poids de la couche du milieu ne sont mis a jour, car cela nuirait a la bonne procedure de mis a jours de ces derniers
En fait, l'erreur de sortie va aussi etre affectee par les poids de la couche du milieu. Cependant, la relation est plus compliquee. Une nouvelle fonction d'erreur est derivee, mais cette fois les poids de la sortie sont traites comme etant constant, les entrees sont constantes, et la sortie desiree est constante. Maintenant, la sortie actuelle est un fonction des poids attaches a la couche du milieu seulement. Heureusement, c'est toujours une expression relativement simple. Les poids du milieu sont mis a jour en utilisant la meme procedure que pour la couche de sortie, et les poids de la couche de sortie sont mis a jours a leur tour. C'est un cycle complet pour un seul echantillon de donnee d'apprentissage.
Il doit etre note que la couche d'entree est seulement un buffer dans laquelle on stocke le vecteur d'entre. Donc, elle n'a pas de poids qui ont besoin d'etre modifies.
Ce processus est analogue au processus biologique d'apprentissage - la force d'une connection entre deux neurones croit et decroit en fonction de son `importance'.

Puisque nous ne nous somme deplacer que d'un petit pas vers la solution desire (ie une erreur mimimale), la procedure que nous venons de voir doit etre repetee jusqu'a ce que le MSE soit inferieur a une certaine valeur. Quand cela arrive, le rn marche convenablement, et la phase d'apprentissage est maintenant terminee.
Quand cela arrive, choisissez au hasard un autre exemple, et repetez la procedure. Continuez jusqu'a ce que vous avez utiliser vos exemple beaucoup de fois (`beaucoup' peut etre quelque chose comme 20 ou moins ou aussi bien 10000 ou plus, cela depend de votre application, de la complexite de vos donnees, de votre probleme, et de vos parametres).
Enfin, le rn est pret pour etre utilise. Bien qu'il soit possible de tester le rn avec les donnees utilisees pendant son apprentissage, cela ne vous dit rien de tres interessant. A la place, prenez des donnees reelles que le rn n'a encore jamais vu et presentez lui. Gageons qu'il va correctement les classifier, compresser ou autre (selon ce que vous lui avez demander de faire) les nouvelles donnees que vous lui avez fournis.
Un defaut de l'algorithme de retropropagation est qu'il peut facilement
etre blocke. Pensez par exemple a une route en pente douce truffe de nid de
poules.
Les nids de poules sont des `minimum locaux' - Ils peuvent pieger
l'algorithme et l'empecher de continer de descendre plus loin.
Si cela arrive, essayez de redimensionner le rn (ajoutez ou supprimez quelques neurones
dans la couche du milieu) ou bien essayer de demarrer d'un autre point
(refait l'initialisation au hasard).
Quelques ameliorations de l'algorithme de retropropagation ont ete faite
pour corriger ce genre de problemes mais ce ne sont que quelques bricolage
comme l'afinage de la fonction d'erreur pour eviter les petits mimimum
locaux, ou encore la prise en compte d'une autre fonction d'erreur que la MSE.
| Precedent | Sommaire | Suivant |