Reseaux de Neurones 1
Reseaux de Neurones 1
Reseaux de Neurones 1
Bruno Bouzy
28 février 2017
Introduction
Cet exemple montre le fonctionnement d’un petit réseau de neurones apprenant avec
l’algorithme « backprop » (Rumelhart & al 1986). L’exemple est repris de (Tveter, chapitre
2). Le réseau est très simple. Son but est de donner la valeur de XOR(x, y) en fonction de x et
y. La fonction z = XOR(x, y) est définie par la table 1.
x 0 0 1 1
y 0 1 0 1
z 0 1 1 0
Calcul en avant :
z
Couche de sortie
-3.29 0.926
bz 1
10.9
-2.76
7.1
7.1 1
bh
x 1 y 0 Couche d’entrée
La plupart du temps, les réseaux sont organisés en couches. Les neurones d’une couche ont
des connexions venant uniquement de la couche située en dessous. Ici, ce n’est pas le cas.
Pour calculer z, supposons que x = 1.0 et y = 0.0. D’après le table 1, on doit trouver 1.
Pour calculer la valeur d’activation d’une unité x en fonction de ses connexions entrantes, on
commence par effectuer la somme, netx, sur toutes les connexions entrantes dans l’unité x, des
produits de l’unité associée à la connexion et du poids de la connexion. On a donc :
Dans les réseaux « linéaires », cette somme est égale à la valeur d’activation. Dans notre
exemple, le réseau est « non linéaire », il utilise une fonction non linéaire appelée la fonction
« sigmoïde » f.
0.5
On vérifie que f(0) = 0.5 que f(-) = 0 et que f(+) = 1. La valeur de l’activation o x d’une
unité x est ox = f(netx). Dans l’exemple, on a oh = f(4.34) = 0.987. la fonction f s’appelle la
fonction sigmoïde standard ou la fonction logistique. De manière générale, la fonction f
s’appelle la fonction de transfert, ou fonction d’activation, ou encore fonction « écrasante » ou
« aplatissante ».
Pour calculer z, on a :
0.926 est différent de 1, mais pour notre exemple, c’est une bonne approximation. Avec le
réseau de la figure 1, on obtient la table 2, proche de la table 1 :
x 0 0 1 1
y 0 1 0 1
z 0.067 0.926 0.926 0.092
On peut écrire plus rapidement le calcul de la valeur d’activation o j d’un neurone j en fonction
de ses entrées i par la formule suivante :
wij est le poids de la connexion reliant le neurone i avec le neurone j. La somme s’applique
pour toutes les connexions partant d’un neurone i et arrivant sur le neurone j.
Pour obtenir le réseau avec les poids de la figure 1, on a utilisé l’algorithme backprop. Le but
de cette partie est de montrer le fonctionnement de backprop sur l’exemple du XOR.
z
Couche de sortie
0 0.5
bz 1
0
0 h 0 Couche cachée
0.5
0
0
0 1
bh
x 1 y 0 Couche d’entrée
Le but de l’apprentissage est de trouver les poids corrects des connexions, c’est-à-dire
donnant au réseau un comportement se rapprochant le plus possible de celui de la table 1. La
figure 3 montre le réseau supposé avant le démarrage de l’apprentissage. Les poids des
connexions sont nuls pour raison de simplicité pédagogique. En pratique, les poids sont
initialisés aléatoirement.
Ici nous considérons la présentation de l’exemple (x, y) tel que x=1, y=0, on trouve : oh=0.5,
oz=0.5. La cible (target) pour z est tz=1 et l’erreur sur cette unité est donc 0.5.
Le cœur de « backprop » est le suivant :
Répéter les pas 1 à 6 pour les autres exemples à apprendre. L’ensemble de ces répétitions se
nomme une itération. Après une itération, la sortie du réseau sera un peu plus proche de la
bonne solution. L’algorithme « backprop » consiste à effectuer plusieurs itérations jusqu’à ce
que l’erreur soit suffisamment petite.
Les formules utilisées pour les pas 4, 5, et 6 sont les suivantes. Soit t k la valeur souhaitée de
l’unité k et ok sa valeur d’activation. T pour « target » et O pour « output ». On appelle dk le
« signal d’erreur » défini par la formule :
La formule pour changer le poids wjk entre l’unité de sortie k et l’unité j est:
wjk = dk oj (4)
wyz = 0 + 0.1x0.125x0 = 0
La formule pour changer le wij entre l’unité cachée j et l’unité d’entrée i est :
wij = dj oi (6)
wyh = 0 + 0.1x0.000195x0 = 0
Avec ces nouveaux poids, la valeur d’activation de z est 0.507. Si on répète la même
procédure pour les trois autres exemples, on obtient les poids de la première itération. Et on
obtient la table 3 :
x 0 0 1 1
y 0 1 0 1
z 0.49989 0.49983 0.49983 0.49977
On observe que les valeurs d’activation ont très légèrement changé. Pour aboutir à des sorties
égales à la vraie fonction XOR de la table 1, avec une erreur de 0.1, il faut 20,682 itérations,
ce qui est très grand pour un problème aussi simple. On peut augmenter le pas de
l’apprentissage . La table 4 montre que l’on peut réduire le nombre d’itérations à 480 avec
=2.0.
Lorsque le pas d’apprentissage est trop grand, la méthode ne converge pas. La table 5 montre
la valeur de z après 10,000 itérations.
x 0 0 1 1
y 0 1 0 1
z 0.009 0.994 0.994 0.999
Lors de la mise à jour avec un exemple, on a calculé et mis à jour les poids des connexions de
la couche de sortie pour calculer l’erreur de la couche cachée. On aurait pu calculer les poids
de la couche de sortie, ne pas les mettre à jour tout de suite, calculer l’erreur de la couche
cachée avec les anciens poids, puis mettre à jour les poids de la couche de sortie. De même,
on peut faire les calculs d’erreurs sans mettre à jour les poids. Puis lorsque tous les exemples
sont présentés, mettre à jour tous les poids. Une controverse existe entre les deux approches.
Reproduction de l'expérience:
La convergence dépend des valeurs initiales des poids des connexions du réseau et de la
valeur de . Le nombre d'itérations dépend du critère d'arrêt que nous avons fixé à ε = 0.01.
Avec des valeurs initiales du réseau nulles, les résultats suivants ont été obtenus:
des résultats analogues ont été obtenus. Les poids sont différents de ceux obtenus avec les
valeurs initiales nulles:
Cet exemple est montre le fonctionnement du cœur de « Backprop » avec un unique neurone
sur le problème du OR(x, y) en fonction de x et y. La fonction z = OR(x, y) est définie par la
table 10. On ne peut pas donner un exemple plus simple.
x 0 0 1 1
y 0 1 0 1
z 0 1 1 1
z
Unique neurone z
+1
bz 1
5 -3
y Unités en entrée
x
netz = 5 x - 3 y + 1 = 0 (delta)
Cette équation correspond à une droite delta. Lorsque net z est positif alors la sortie du neurone
est supérieure à ½ et on interprète la sortie du neurone comme un 1, ou un ‘+’. Lorsque net z
est négatif alors la sortie du neurone est inférieure à ½ et on interprète la sortie du neurone
comme un 0, ou un ‘-’. La figure 5 représente graphiquement la sortie du neurone.
y
delta
1 + +
- + x
1
Figure 5 : La droite delta sépare le plan en deux demi-plans.
Le demi-plan en bas à droite de delta correspond à une sortie 1 ou ‘+’. Le demi-plan en haut à
gauche de delta à une sortie 0 ou ‘-’. Autrement dit, le neurone de la figure 4 classifie
correctement les exemples (1, 0) et (1, 1) en ‘+’. Il classifie incorrectement les exemples (0, 0)
et (0, 1).
1 + +
- + x
1
Figure 6 : La droite delta s’est déplacée.
Après la présentation des 4 exemples, la droite delta s’est déplacée depuis sa position de la
figure 5 vers la position en gras de la figure 6.