-
règle de Hebb
Bonjour,
Je cherche à comprendre l'algorithme le plus simple d'apprentissage des poids synaptiques dans un réseau de Hopfield.
J'ai trouvé une description de la règle de Hebb ici : règle de Hebb (paragraphe 5-3).
Il est dit que les poids entre deux neurones sont renforcés s'ils sont actifs en même temps. Mais je ne vois pas bien concrètement comment se déroule le calcul.
On initialise d'abord les poids aléatoirement, ensuite place les neurones dans l'état de la première configuration que l'on veut mémoriser comme point fixe ? Et après, comment modifie t-on les poids, et à quel moment on fait intervenir les autres configurations qui doivent aussi être des points fixes ?
Par avance merci pour votre aide.
-
La règle de Hebb est une règle simple basée sur la plasticité synaptique, le fait que la "force communication" de communication entre deux neurones peut changer, être renforcer ou diminuer.
De façon simple, si l’activité post-synaptique d'un neurone est proche dans le temps de l’activité pré-synaptique d'un neurone, alors l’activité de ces deux neurones est corrélée, la connexion entre les ces deux neurones doit donc être renforcée. A l'inverse, si l’activité d'un neurone post-synatique et loin (dans le temps) de l’activité d'un neurone pre-synaptique, alors leur activité n'est pas liée, leur connexion peut être "dépressiée" (diminuée).
La modification des poids est inversement proportionnelles au temps qui sépare l’activité post-synaptique de l’activité pré-synaptique.
Il existe de nombreux raffinement a la réglé de Hebb, surtout en ce qui concerne la stabilisation des poids.
La règle de Hebb est largement utilisée dans les "Spiking Neural Network", pour lesquels la littérature est relativement large.
-
Merci de m'avoir répondu.
Ce que je n'arrive pas à comprendre, c'est à quel moment on observe si l'activité des deux neurones est corrélée. Est-ce que l'état des neurones est initialisé avec la configuration à mémoriser en point fixe ? Ensuite, on fait évoluer le réseau avec des poids initialisés aléatoirement ? Et on modifie ces poids à chaque itération (synchrone) en regardant les neurones qui sont actifs en même temps ?
En bref, je ne vois pas du tout comment faire le calcul.
-
J'ai trouvé : pour connaître le poids du neurone A vers le neurone B, il suffit de compter le nombre de configurations à mémoriser dans lesquelles ils sont actifs tous les deux.
Par exemple, s'il faut mémoriser 5 images, on regarde pour la première image si les pixels A et B sont allumés tous les deux. S'ils sont allumés, on met leurs poids à 1, sinon on laisse le poids à 0. Ensuite on regarde la deuxième image : si les pixels A et B sont allumés tous les deux, on augmente le poids de 1, sinon on n'y touche pas. On fait pareil pour les images trois, quatre et cinq. Et donc à la fin, le poids de A vers B est compris entre 0 et 5.
Ceci est valable uniquement pour les réseaux neuronaux bouclés.
-
C'est un façon de faire très spécifique en effet.
Il y a bien entendu des similarités avec l’utilisation de la règle de Hebb en "spiking neuron", mais j'avoue que je ne l'aurais jamais formulé de cette manière ;).
Content que tu es trouvé la solution a ton probleme.
-
Petite rectification :
on augmente de 1 le poids entre deux neurones s'ils sont dans le même état dans la même image (exemple : les deux actifs, ou les deux inactifs)
on diminue de 1 le poids entre deux neurones s'ils sont dans un état différent dans la même image (exemple : l'un inactif, l'autre actif)
pour les seuils d'activation, ils sont tous à zéro