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

Voila le résultat après environ 20 000 itérations. Il est meilleur que ceux obtenus précedemment, les noeuds sont répartis dans l'espace, cependant le maillage n'apparait pas.

fin.png

Comment résoudre le problème :