Réseau de Hopfield

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 :

Pour plus de détails, vous pouvez jeter un coup d'oeil à ces indications.

Premier exercice: 4x4 neurones

  1. 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.
  2. Quel est le nombre maximal théorique de classes aléatoires que le réseau peut mémoriser ?
  3. 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.
  4. 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 ?
  5. 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.
  6. Les résultats expérimentaux sont-ils en accord avec la théorie ?

Second exercice: 10x10 nodes

  1. Quel est le nombre maximum théorique de classes aléatoires que le réseau peut mémoriser ?
  2. Quel est le nombre maximum expérimental de classes aléatoires que le réseau peut mémoriser ?
  3. Les résultats expérimentaux sont-ils en accord avec la théorie ?
  4. 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 ?
  5. Essayez de stoquer des caractères (A, B, C, etc.) comme motifs. La restitution est elle bonne ? Expliquez.