Introduction
Un réseau de Hopfield est une mémoire associative implémentée
comme un réseau de neurones entièrement connectés.
Chaque neurone correspond à un pixel sur le motif et peut être
soit actif (Si = +1), soit inactif (Si =
-1). Chaque neurone tente de se fixer dans un état stable par
rapport aux entrées qu'il reçoit des neurones auquels il
est connecté. Idéalement, les états stables du réseau
(c'est-à-dire lorsque tous les neurones sont dans un état
stable) sont identiques aux motifs qui ont initialement étés
appliqués aux neurones.
La connaissance ou l'information sur ces états préférés
est distribuée de manière inhérente dans les
neurones, ainsi aucune connexion ne peut être vue comme "stoquant"
un motif. Cela induit d'assez intéressantes propriétés
de dégradation harmonieuse et de catégorisation dans un espace
surchagé.
Remerciements
L'applet originale a été écrite par Matt Hill -- mlh1@cornell.edu, puis
a été adaptée par Olivier
Michel.
Instructions
Utilisez la souris pour entrer un nouveau motif en cliquant sur les carrés
dans le rectangle. Ensuite, pour que le réseau stoque le motif,
appuyez sur la touch "i" (impose). Après avoir stoqué quelques
motifs, essayez d'entrer un nouveau motif que vous utiliserez comme un
motif de test. Ne stoquez pas ce nouveau motif, mais utilisez-le comme
état initial du réseau. Appuyez sur la barre d'espacement
plusieurs fois jusqu'à ce que le réseau atteingne un état
stoqué précédemment. Vous pouvez aussi utiliser la
touche "s" pour faire fonctionner le réseau en continu jusqu'à
ce qu'il atteigne un état stable. L'option "s" utilise la fonctionnalité
de multi-threading du langage Java en lançant un thread séparé
pour faire les calculs.
Les commandes de clavier suivantes sont reconnues :
-
c - efface le motif
-
n - efface la memoire du réseau
-
i - stoque le motif courant en mémoire
-
r - génère un nouveau motif aléatoire (qui n'est cependant
pas stoqué)
-
q - force le réaffichage
-
s - lance les itérations du réseau (on/off).
-
espace - procède à un pas (une seule itération)
-
d - debug -- affiche l'état sur stdout
Pour plus de détails, vous pouvez jeter un coup d'oeil à
ces indications.
Premier exercice: 4x4 neurones
-
Quel est le nombre maximal expérimental de classes aléatoires
que le réseau peut mémoriser ? Stoquez de nombreux motifs
et testez chacun d'entre eux immédiatement après l'avoir
stoqué. Les premiers motifs devraient être stoqués
parfaitement, mais par la suite la performance devrait diminuer.
-
Quel est le nombre maximal théorique de classes aléatoires
que le réseau peut mémoriser ?
-
Les résultats expérimentaux sont-ils en accord avec la théorie
? Pour le vérifier, répétez l'expérience 1
plusieurs fois.
-
Quel est le nombre maximum théorique de classes orthogonales que
le réseau peut mémoriser ? Indication : Combien d'états
orthogonaux (=vecteurs) peut-il y avoir dans un réseau de taille
N ?
-
QUel est le nombre maximum expérimental de classes orthogonales
que le réseau peut mémoriser ? Essayez de construire des
classes orthogonales de manière systématique.
-
Les résultats expérimentaux sont-ils en accord avec la théorie
?
Second exercice: 10x10 nodes
-
Quel est le nombre maximum théorique de classes aléatoires
que le réseau peut mémoriser ?
-
Quel est le nombre maximum expérimental de classes aléatoires
que le réseau peut mémoriser ?
-
Les résultats expérimentaux sont-ils en accord avec la théorie
?
-
Stoquez un nombre fini de motifs aléatoires (par exemple, 8). Combien
de mauvais pixels le réseau peut-il tolérer dans l'état
initial tout en convergeant toujours vers le motif correct ?
-
Essayez de stoquer des caractères (A, B, C, etc.) comme motifs.
La restitution est elle bonne ? Expliquez.