LES RÉSEAUX NEURONAUX: PERCEPTRON


Définition
Apprentissage
Exemple
Perceptron probabiliste

















































Définition

         On a vu précédemment le fonctionnement d´un neurone artificiel. Un réseau neuronal s´obtient en branchant des sorties de certains neurones sur les entrées d´autres neurones.
         Le perceptron est le premier réseau neuronal conçu par Rosenblatt (1958), il vise à associer des réponses à des patterns présentés en entrée (problèmes de reconnaissance). Il se compose de deux couches de neurones:
         1) La première couche, ou rétine est composée de cellules binaires perceptives (OUT = 0 ou 1).
         2) La deuxième couche fournit la réponse.
         Par exemple la rétine peut comporter 5 * 6 cellules et la sortie 10 cellules. Le problème est de reconnaître un chiffre (parmi 0,1,2,3,4,5,6,7,8,9) impressionant la rétine. Si le chiffre 4 est présentée, la cinquième cellule de sortie doit être active et toutes les autres doivent être passives.
         Toutes les cellules de la rétine sont reliées à chacune des cellules de la sortie par des poids variables. Si les cellules de la rétine sont indexées par i (variant de 0 a 29) et celles de la sortie sont indexées par j (variant de 0 a 9), l´entrée aj d´une cellule de sortie j est la somme pondérée de toutes les sorties des cellules de la rétine (voir figure 4-1):



             aj = entrée de la cellule j de sortie.
             xi = sortie (0 ou 1) de la cellule i de la rétine.
             wi,j = poids de la liaison i-> j.
         Une fonction seuil permet alors de déterminer la sortie de la cellule j:
             xj = (aj <= T) ? 0 : 1
         On peut remplacer le seuil T par un seuil nul a condition d´ajouter une cellule de la rétine toujours active et de poids -T.


Figure 4-1

Apprentissage


       Règle d´apprentissage

       Théorème de convergence du perceptron

       Ajustement de la constante d´apprentissage

Règle d´apprentissage

         La règle la plus connue est celle dite de Widrow-Hoff (1960) ou règle du delta. Ell est locale, c´est à dire que chaque cellule de sortie apprend indépendamment des autres.
         Une cellule de sortie ne modifie les poids des liaisons qui aboutissent à elle que si elle se trompe:
         Si elle est active alors qu´elle devrait être passive alors elle diminue les poids correspondant aux cellules actives de la rétine.
         Si elle est passive alors qu´elle devrait être active alors elle augmente les poids correspondant aux cellules actives de la rétine.
         L´algorithme de l´apprentissage se déroule de la façon suivante:
         1) On présente au perceptron (dans un ordre arbitraire) les couples (image sur la rétine, réponse).
         2) S´il y a des erreurs alors les poids sont corrigés selon la règle du delta et on retourne en 1, sinon le perceptron a appris.
         La règle de Widrow-Hoff peut s´écrire:
         wi,j(t + 1) = wi,j(t) + n * (tj - oj) * xi = wi,j(t) + dwi,j
             wi,j(t + 1) = poids de la liaison i -> j au temps t + 1
             wi,j(t) = poids de la liaison i -> j au temps t
             xi = sortie (0 ou 1) de la cellule i de la rétine
             oj = réponse de la cellule j de sortie
             tj = réponse théorique (souhaitée) de la cellule j de sortie
             n = constante positive (entre 0.0 et 1.0): Une bonne valeur est 0.75, mais il est préférable de faire évoluer n au cours du temps: D´abord grande (0.9) puis décroissante au cours de l´apprentissage.

Théorème de convergence du perceptron

         On démontre que si une solution au problème existe alors le perceptron, la trouvera en un nombre fini de cycles d´apprentissages.
         Mais on montre que, comme pour un neurone artificiel, le perceptron ne peut résoudre que des problèmes linéairement séparables.
         Pour traiter des problèmes non linéairement séparable on complexifie le perceptron en lui ajoutant une couche (dite couche cachée) de neurones, en faisant un réseau neuronal plus général. C´est ce que fit Rosenblatt en 1962 pour résoudre le probleme du XOR. Mais la correction des poids devient problématique puisqu´elle modifie les entrées de la couche cachée et donc ses sorties...
         La technique, dite de rétro-propagation de l´erreur fut trouvée en 1969 par Bryson et Ho, puis redécouverte en 1986 en particulier par Rumelhart.

Ajustement de la constante d´apprentissage

         perceptron P v
         Prend par défaut n = 0.1 constant
         perceptron P v e=0.9 c=0.6
         Prend n = 0.9 multiplié par 0.6 à chaque itération (donc n décroît au cours de l´apprentissage).
         La figure 4-2 montre les variations du nombre d´erreurs au cours de l´apprentissage dans ces deux cas. On remarque que lorsque n est d´abord grand puis diminue le perceptron converge plus rapidement: En effet de grandes corrections au début permettent de discriminer rapidement des patterns très différents, puis de petites corrections à la fin permettent des ajustements ne détruisant pas les reconnaisances dejà acquises.


Figure 4-2
         A titre d´exercice, faire tourner le programme perceptron en faisant varier les constantes eta et c_eta.

Exemple

Le programme perceptron

         Voici la déscription d´un perceptron élémentaire reconnaissant des patterns parmi un vocabulaire donné (voir le source perceptron.c):
         Lancement: perceptron P v
         perceptron est le nom du programme
         P est un fichier contenant la déscription de Np patterns sous la forme de matrices Nx * Ny contenant des 0 et des 1.
         v indique une exécution en verbose.
         Il y a 1000 passes d´apprentissage au maximum par defaut, pour augmenter ce nombre:
         perceptron P v n=2000
         Par exemple, pour les chiffres, le fichier P est de la forme:
    11111   00100   11111   11111   01000   11111   11111   11110   11111   11111
    10001   00100   00001   00001   01000   10000   10000   00010   10001   10001
    10001   00100   11111   11111   01010   10000   10000   00010   11111   11111
    10001   00100   10000   00001   01010   11111   11111   00111   10001   00001
    10001   00100   10000   00001   01111   00001   10001   00010   10001   00001
    11111   00100   11111   11111   00010   11111   11111   00010   11111   11111
         Définit Np = 10 patterns avec Nx = 5 et Ny = 6
         lire_fic(argv[1]); Lit ce fichier dans Np tableaux de Nx * Ny éléments dont les adresses sont stockées dans Patterns.
         init_poids(); Initialise aléatoirement les poids dans Np tableaux de Nx * Ny float dont les adresses sont stockées dans Poids. Le tableau numéro num est la liste des poids joignant la rétine à la sortie de même numéro.
         verifier(); Imprime les données.
         apprentissage(eta, c_eta); est la boucle d´apprentissage qui présente successivement sur la rétine les patterns dans un ordre aléatoire: chainer() chaine circulairement les Np patterns, suivant(num, np) retourne un suivant aleatoire parmi np et le retire de la liste.
         evaluer_perceptron(num) calcule les Np sorties pour le pattern num.
         Il y a des erreurs dans 2 cas:
         1) Une cellule est activée alors qu´elle ne devrait pas l´être (par exemple si le pattern 3 est présenté et que la cellule 4 réagit).
         2) Une cellule n´est pas activée alors qu´elle devrait l´être (par exemple si le pattern 3 est présenté et que la cellule 3 ne réagit pas).
         Dans ce cas il faut corriger les poids: On diminue les poids joignant les cellules actives de la rétine à la sortie dans le premier cas, et on augmente ces poids dans le deuxième cas. La formule de Widrow-Hoff
         wi,j(t+1) = wi,j(t+1) + n * (tj - oj) * xi
devient dans le premier cas:
         wi,j(t+1) = wi,j(t+1) + n * (0 - 1) * 1 = wi,j(t+1) - n
et dans le deuxieme cas:
         wi,j(t+1) = wi,j(t+1) + n * (1 - 0) * 1 = wi,j(t+1) + n
         S´il n´y a plus d´erreur, un break fait sortir de la boucle d´apprentissage.
         Le programme demande alors des noms de fichiers (contenant des patterns de mêmes dimensions que ceux ayant servi à l´apprentissage).
         Si ce pattern appartient à ceux-la, il est reconnu.
         Sinon, soit il n´est pas non reconnu, soit un ou plusieurs patterns proches sont proposés.
         A titre d´exercice, ecrire un fichier codant les lettres de l´alphabet (par exemple les majuscules A B ... Z), ecrire plusieurs fichiers contenant quelques unes de ces lettres, certaines étant bruitées.
         Est-il possible de trouver un alphabet que le perceptron ne reconnait pas ?

Perceptron probabiliste


       Distribution de Boltzmann

       Variation de la température

Distribution de Boltzmann

         Le perceptron decrit ci-dessus est déterministe, c´est à dire que le même apprentissage donnera chaque fois la même matrice des poids. Si on décide de remplacer la condition:
         xj = (aj <= T) ? 0 : 1
         par:
         xj = (aj <= T) ? 0 : 1 avec la probabilité p augmentant avec xj
         Plus l´activation du neurone est élevée, plus celui-ci aura tendance à repondre 1.
         Un tel neurone s´approche plus de la réalite biologique, les êtres vivants ayant rarement un comportement strictement déterministe. D´autre part, lors d´un apprentissage, si le perceptron est déterministe il cesse d´apprendre dès qu´il ne se trompe plus, et sa stratégie, parfaitement adaptée à l´échantillon d´apprentissage, ne convient plus pour d´autres échantillons, provenant de la même population statistique, mais non appris (il a placé sa fonction discriminante trop proche des bords de cet échantillon): Le perceptron généralise alors mal son apprentissage.
         Pratiquement on convertit d´abord l´activation aj d´un neurone (aj pouvant prendre n´importe quelle valeur rélle) en une probabilité p (entre 0 et 1), puis on convertit p en une valeur d´activation effective.
         Si on utilise la distribution de Boltzmann, la probabilité de trouver une valeur inférieure ou egale à x est :


         S est le seuil, et T est la "température"
         Soit p un aléatoire de l´intervalle [0,1], si x est l´activation d´un neurone, sa réponse est:
         o = (x <= p) ? 0 : 1
         Par exemple soit x=0.8 l´entrée du neurone, on a B(x,T)=0.69, si on tire le nombre aléatoire p=0.312, comme x>p la réponse est o=1.
         La figure 4-3 montre une distribution de Boltzmann et sa dérivée. Celle-ci ressemble a la courbe en cloche d´une loi normale et s´exprime par:
         B´(x,T) = B(x,T) * [1 - B(x,T)]
        


Figure 4-3

Variation de la température

         Le paramètre T de température correspond à l´incertitude sur le comportement du système. La figure 4-4 montre les aspects de la distribution de Boltzmann pour différentes températures. Lorsque T tend vers zéro la distribution se rapproche d´une fonction seuil (en escalier), le perceptron redevient déterministe. Pour un T infini la probabilité d´avoir o=1 vaut 0.5 quelque soit l´entrée du neurone dont le comportement devient imprévisible. Pour des températures non nulles ni infinies, plus T est petit plus le perceptron est prévisible et plus T est grand plus il est imprévisible.


Figure 4-4
         Pour T grand le perceptron explore l´espace des valeurs possibles des connexions, mais il ne restera pas dans une région optimale. On commence donc l´apprentissage avec de grandes valeurs de T, puis on diminue T. Cette technique s´appelle le recuit simulé (simulated annealing) qui ressemble à la détrempe d´un métal:
         Pour fabriquer une pièce métallique on fait fondre un cristal (arrangement régulier de molécules) dans un moule puis on le rend solide à nouveau en le refroidissant. Augmenter la température revient à augmenter le rayon des déplacements aléatoires des atomes. Refroidir revient à diminuer ce rayon. Mais certains atomes, qui se sont déplacés plus loin que d´autres, peuvent être empéchés de retrouver leur position initiale par d´autres atomes qui, s´étant moins éloignés, la retrouvent plus vite (voir figure 4-5): Il apparait une impureté. La technique du recuit simulé consiste alors à réchaufer très lentement le métal, les rayons de déplacements aléatoires augmentent alors un peu et les atomes s´écartent suffisamment pour que les atomes piégés puissent regagner leur position d´équilibre. On refroidit alors doucement le cristal pour qu´aucun autre atome ne se laisse piéger.


Figure 4-5