Table of Contents

SOM

Articles / tuto utilisés :

Principe

  1. Initialiser les noeuds avec des poids aléatoires (les coordonées des noeuds dans ce cas)
  2. Sélectionner une position dans l'espace à discrétiser
  3. Chercher le noeud le plus près de cette position (neurone gagnant)
  4. Mettre son poids à jour (le rapprocher de la donnée d'entrée)
  5. Mettre les poids de ses voisins à jour (un peu moins que le gagnant)
  6. Réduire petit à petit l'intensité de la mise à jour
  7. Réduire petit à petit la portée du voisinage
  8. Répeter 2 à 7 pour un nombre d'itérations

Selon les ressources choisies sur internet, les algorithmes n'ont pas la même manière de mettre à jour les neurones voisins du gagnant.

Equations utilisées

pluspres.png

majgagnant.png

Avec Θ(t) la fonction de voisinage et L(t) le taux d'apprentissage :

Θ(t) = exp( -dist² / 2σ²(t))
et
L(t) = L0 * exp(-t / λ)

Expérience

J'ai testé l'algorithme décrit au dessus sur un espace vide en deux dimensions. Les données sont choisies aléatoirement en tirant un x et un y tel que x, y [0, 100[ ∈ N.

vide.png

Les noeuds (25 ici) sont placés aléatoirement dans cet espace comme décrit à l'étape 1 de l'algorithme.

debut.png

Résultat

Après 50 000 itérations de boucle les noeuds sont collés.
Possiblement le calcul des poids des neurones voisins qui permet à ces neuroens de coller le neurone gagnant.

fin.png

Comment résoudre le problème :