NEUROMUSE3

Work in progress …

code source


Documentation

Introduction

Neuromuse est un concept créé par Frédéric Voisin1) en 2003 et, est essentiellement consacré à la création musicale. Neuromuse intégre de façon dynamique la relation homme/machine par l'intermédiaire de réseaux neuromimétiques.

Neuromuse3 propose un développement holistique en termes de clique et de tournoi, inspiré par le livre de Claude Berrou et Vincent Gripon intitulé Petite mathématique du cerveau2). Cela se traduit par la création d'une mémoire associative capable de stocker et de reconstituer des séquences musicales apprises et de créer des séquences inédites par des processus algorithmiques.
Le projet consiste à configurer un réseau de cartes auto-adaptative, tel qu'il puisse être utilisé en temps réel dans un contexte d'interactivité, qui se traduira par l'acquisition d'un apprentissage ciblé et par un processus de remémoration circonstantiel.

Reprenant les travaux de Frédéric Voisin – notamment à partir du code source de Neuromuse13) écrit en LISP intégrant CLOS4) – la formalisation de Neuromuse3 se réduira à la création de trois classes. Celles-ci seront respectivement appelés NEURON, MLT superclasse de SOM, elle-même superclasse de RNA et AREA.

Le mode de fonctionnement global de Neuromuse3 consiste à stimuler un ou des SOM afin de faire réagir une région définit par l'AREA et d'en interpréter la réponse, que l'on peut résumer par le schéma suivant.

Illustration 1 – Schéma synoptique de la gestion I/O. OSC listen et OSC send utilise le mode de transmission UDP.

Self Organizing Map

Les classes SOM, RNA et NEURON sont une adaptation minimaliste de Neuromuse1 dont le but est de permettre une flexibilité dans la gestion des paramètres. Cela se résume à créer une carte auto-adaptative en termes d’apprentissage et d’activation que l'on peut décrire de la façon suivante.

Concept développé par Teuvo Kohonen dans les années 1980, la carte auto-adaptative (Self Organizing Map) est un modèle de Réseaux de Neurones Artificiels qui fonctionne par compétition pour un ensemble de stimuli donné. Cela permet de créer une topologie permettant la classification, l’interpolation ou la visualisation de données multidimensionnelles.

The map consists of a regular grid of processing units, « neurons ». A model of some multidimensional observation, eventually a vector consisting of features, is associated with each unit. The map attempts to represent all the available observations with optimal accuracy using a restricted set of models. At the same time the models become ordered on the grid so that similar models are close to each other and dissimilar models far from each other. Fitting of the model vectors is usually carried out by a sequential regression process, where t = 1,2,… is the step index. For each sample x(t), first the winner index c (best match) is identified by the condition :
∀i, || x(t) − mc(t) || ≤ || x(t) − mi(t) ||
After that, all model vectors or a subset of them that belong to nodes centered around node c = c(x) are updated as :
mi(t + 1) = mi(t) + hc(x),i(x(t) − mi(t))
Here hc(x),i is the « neighborhood function », a decreasing function of the distance between the ith and cth nodes on the map grid. This regression is usually reiterated over the available samples.5)

La documentation se révèle à la lecture du code. Cependant, il convient de préciser les stratégies fonctionnelles et la gestion des paramètres utiles. Dans les grandes lignes, les fonctions se présentent par un nombre d’argument(s) défini(s) (documenté dans le code) et un argument optionnel ne retenant que le cdr du slot considéré (les slots sollicitant une fonction se présente toujours sous forme de liste dont le car est la fonction elle-même, et le cdr les arguments optionnels, lesquels sont accessibles avec les fonctions LISP telles que car, cadr, nth, …).

Fonctions accessibles depuis les slots de la class SOM :

  • la carte qui définit le type de coordonnées des neurones (à n dimensions) instaurant un nombre déterminé de stimuli [même si ces caractéristiques peuvent évoluer dans le temps, la fonction n'est valide que lors de l'initialisation du SOM];
  • le voisinage qui définit le type d’influence qu’aura le neurone « gagnant » sur ses « voisins » (par défaut cette relation est de type distance euclidienne définit par la fonction du slot distance-in) permettant la mise à jour du réseau lors de l'apprentissage;
  • la proximité qui définit le type de relation (toujours en terme de distance, bien que celle-ci puisse être autre, par exemple en terme d’écart moyen arithmétique) entre un ensemble de stimuli et sa réponse lors de l'activation du SOM (définit par la fonction du slot distance-out) et qui participe au calcul de l'erreur dans le but de définir le neurone « gagnant ».

L'initialisation du SOM est réalisé avec le defmethod init-som6), qui prend pour argument le nom du SOM, le nombre de stimuli, le nombre de neurones de la carte. Ainsi, il est possible de créer un environnement « neuronal » en jouant sur la fonction définit par le slot carte (clef :carte), le nombre de dimension définit par le slot topologie (clef :topology) et selon un « ambitus » de coordonnées à l'origine définit par le slot field (clef :field). Dans le même temps, le réseau synaptique est définit soit par une valeur aléatoire attribuée à chaque synapse (par défaut cette valeur est définit par le slot temperature et est comprise entre - temperature et + temperature), soit par l'affectation d'un vecteur tiré au hasard dans la base de données définit par la clef :data.

L’activation consiste à estimer pour chaque neurone l'erreur définit par || x(t) − mi(t) || + bruit. Le « bruit » est définit par le slot temperature dans l'intervalle compris entre - temperature et + temperature, et permet de simuler une activité de biais propre à la complexité biologique des réseaux de neurones.

L’apprentissage se fait alors autour d’un corpus de données qui sont présentées au SOM, avec les paramètres de la classe RNA suivant :

  • le taux d’apprentissage (learning-rate);
  • l’influence du neurone gagnant sur ses « voisins » (radius).

Les procédures d'apprentissage consistent à « mapper » la carte à partir de stimuli, en faisant décroitre le radius d'une valeur initial donnée jusqu'à un selon un nombre d'itération donné (cf. decreasing function dans le fichier USER.lisp):

  • exp-decay – se définit par ∂(t) = ∂0 e(—t / T) avec ∂0 = valeur initial et T = nombre d'itérations (noté n) divisé par la valeur absolue de ln(n / ∂0) lorsque ∂n ≠ ∂0 (∂n est la valeur final et est égal à 1 par defaut).

Application

Voir page N3_color pour une illustration du comportement du SOM précédemment décrit.

Cliques

Définition

Dans la théorie des graphes, la clique est un ensemble de sommets tel que chaque sommet est adjacent à tous les autres. Cela se traduit dans le contexte présent par un ensemble (appelé macrocolonne) constitué de neurones ou groupe de neurones (appelé microcolonnes) interconnectés selon le type d’information concerné (voir illustrations 2, 3 et 4).

Illustration 2Microcolonne: neurone ou groupe de neurones porteur d’information en termes de potentiel d’action (par exemple une valeur d’intensité d’un son).

Illustration 3Colonne: région de microcolonnes porteur d’un même type d’information (par exemple l’intensité d’un son).

Illustration 4Macrocolonne: région de colonnes porteur d’une information « complète » – appelée infon – (par exemple les caractèristique d'un son définit par sa hauteur, son intensité, sa durée et son timbre) en l’occurrence sous forme de cliques.

Concernant l'illustration 4, nous pouvons observer deux cliques, dont l’une en gris foncé se superpose partiellement sur la seconde en gris clair.

Écriture

Les microcolonnes de chaque SOM sont listées et indexées selon leur représentation symbolique – soit le type d'information véhiculé, provoqué par les stimuli – dans le slot fanaux-list composées de neurones.

La fanaux-list est initiée par l'utilisateur selon ses propres critères, lesquels peuvent se traduire par le recours à des procédure de type k-means, Self Organized Map (SOM), Classification Ascendante Hiérarchique (CAH), … voire sous forme d'apprentissage « supervisée » consistant à définir un fanal en fonction de l'input.

Neuromuse3 permet le cas échéant de mettre à jour la fanaux-list. Cette mise à jour est réalisée par le defmethod update-fanaux assurant la surjection7) de la nouvelle liste de fanaux avec la fanaux-list du SOM. Cela aura pour conséquence la modification des arcs (au niveau du SOM) et des arêtes (au niveau de l'AREA) impliqués. Il faut garder à l'esprit que cela engendrera inévitablement une altération – plus ou moins significative en fonction du degré de changement – de ce qui a été appris jusqu'ici.

La colonne est le SOM réduit à la « fanaux-list » (FL).

La macrocolonne est gérée par la classe AREA, établissant ainsi les connexions de chaque clique à partir de chaque fanal identifié impliquant de la sorte des relations d'arcs entrant et sortant pour chaque fanal. Ainsi, chaque arc sera associé à un poids et sera la clef de la table de hachage de l'AREA.

Lecture

Le lecture consiste à reconstituer une clique à partir de données partielles. Ceci n'est qu'une étape – qui sera relié à la lecture des tournois – à la reconstitution d'une séquence qui sera réalisée par consensus et itération. Le defmethod locate-clique permet une première estimation de clique(s) possible de la façon suivante:

  • Deux entrées possibles:
    1. node(s) isolé(s): ((microcolonne_indice colonne_indice) ...),
    2. node(s) ordonné(s): liste d'indice(s) de microcolonne(s) et/ou wild-card – symbolisé par un point d'interrogation – ordonnées selon la soms-list.
  • Toutes les microcolonnes connectées aux éléments connus sont listées.
    [ C'est ce que l'on observe sur l'exemple de l'illustration 5 pour les nodes (4 0) et (1 3), respectivement le cinquième fanal du SOM 1 et le second fanal du SOM 4. ]
  • Toutes les microcolonnes dont le nombre de connexion est égal au nombre d'éléments connus sont collectées.
    [ Ces connexions sont représentés en trait plein sur l'exemple de l'illustration 5. ]

Illustration 5 – Exemple d'un réseau (vue partielle) composé de quatre SOM de cinq fanaux.

Ainsi, nous obtenons une liste dont l'indexation est calqué sur la soms-list. Ainsi, suivant l'exemple de l'illustration 5, nous obtenons: (4 (2 1) (2 3 0) 1). Les éléments de cette liste constituent la (ou les) clique(s) possible(s) à partir des sommets proposés, lesquelles vont être listées afin d'être ordonnées selon les poids de leur liens.

Tournois

Définition

Dans la théorie des graphes, le tournoi est une clique orientée. Cela – dans le contexte qui nous intéresse – inscrit une séquence dans une configuration temporelle, où les infons – par nature intemporelle – vont alors se créer des liens orientés sous forme de cliques, autrement dit des tournois.

Voici un exemple d’application des tournois (voir illustration 6), dans lequel nous cherchons à rétablir le chemin A-B-C-F-G-H-C-D-E sans ambiguïté – représenté avec des flèches pleines. Chaque nœud symbolise un infon. À priori, le problème se situe au nœud C, où deux options sont possible, à savoir F ou D. Un tournoi d’ordre8) 3 permet de résoudre ce problème, en recouvrant 2 nœuds successifs – représenté par des flèches en pointillées –, anticipant ainsi le parcours de C vers F signalé par le fléchage de B vers F lorsque l'on vient de B.

Illustration 6 – Cet exemple de tournois est issue du livre de Claude Berrou et al., op. cit. (cf. Introduction), page 117.

Ainsi, le recouvrement temporel dépendra de l’ordre du tournoi, soit n−1 et déterminera la capacité d’anticipation du réseau.

Écriture

Les tournois s'inscrivent pour chaque colonne au niveau de la classe MLT, dont l'ordre sera définit par le slot cover-value. Les tournois (remanence true) et les arcs constituant les tournois (remanence nil) seront retenus dans une table de hachage distinct associée à chaque SOM.

Note: cover-value doit impérativement être un nombre entier et supérieur ou égal à 3 (étant donné qu'un tournoi ne se définit qu'à partir de 3 nœuds).

Lecture

La lecture consiste donc à reconstituer un (ou des) tournoi(s) à partir d'une sequence partielle ordonnée temporellement. Le defmethod locate-tournoi donne pour résultat une liste de tournois potentiels ordonnée selon leur poids, qui par recoupement avec les tournois des autres colonnes corrélées en termes de cliques permettra le reconstruction d'une séquence selon les conditions de l'utilisateur.

Note: Ces conditions sont évoquées à la page Discussion de ce wiki (voir chapitre Reconstruction et construction d'une séquence), impliquant l'utilisateur avec son propre code.

Long-term memory

La mémoire à long terme est en quelque sorte le propos même de Neuromuse3. Cela consiste à créer des connexions entre chaque région neuronale (ou microcolonnes – cf. Illustration 2) formant cliques et tournois. Toutes ces connexions seront prises en compte par la superclasse MLT de la classe SOM et gérées par la classe AREA.

Instantiation

create-mltcreate-area – Pour créer une AREA, il nous faut dans un premier temps créer toutes les colonnes nécessaires à l'infon, avec la fonction create-mlt.
Chaque fanal est identifié par sa position dans la fanaux-list.

Concernant le nom de chaque instance, il est préférable de privilégier des noms ne contenant que des caractères alphabétiques ou alphanumériques (en commençant de préférence par une lettre), et sans accents. Une dénomination succincte et explicite du type d'information porté par l'instance est recommandée.

Apprentissage

La procédure d'apprentissage consiste à créer des cartes auto-adaptatives connectées ensemble afin de réaliser une mémoire associative dynamique.

Sauvegarde

  • save – Concernant la sauvegarde du réseau neuronal, le defmethod save prend en charge l'instance AREA, permettant la sauvegarde de chaque SOM de la soms-list. La sauvegarde inclut le « formatage » de chaque fichier (avec le script shell update-saved-net.sh), ainsi que l'attribution d'un logo (avec la ligne de commande SetCustomIcon).
  • load-neural-network – La « récupération » des réseaux neuronaux sauvegardés est assurée par la fonction load-neural-network selon le schéma de l'illustration 7.

Illustration 7 – Schéma synoptique de la fonction load-neural-network.

OSC/UDP

Perspective

Bien entendu, l'interprétation d'une remémoration peut induire des comportements annexes …

Index

Liste des fonctions et des variables du package Neuromuse3.

  • * –
    • [ Variable ]
      *AVAILABLE-AREA*
      Liste des macrocolonnes instantiées et disponibles.
    • [ Variable ]
      *AVAILABLE-SOM*
      Liste des colonnes instantiées et disponibles.
    • [ Variable ]
      *N3-BACKUP-DIRECTORY*
      Chemin absolu du dossier de sauvegarde du réseau. Ne pas oublier le slash à la fin signifiant qu'il s'agit d'un répertoire.
  • C
    • [ Fonction ]
      CREATE-AREA name soms-list
      Instantiation d'une macrocolonne au nom de name. soms-list est la liste des colonnes constituant la macrocolonne; les éléments de soms-list sont des colonnes instanciées par CREATE-MLT (voir *AVAILABLE-SOM*).
    • [ Fonction ]
      CREATE-MLT name n-input n-neurons &key data carte topology field n-fanaux
      Instantiation d'une colonne au nom de name, dont n-input est le nombre de stimuli et n-neurons est le nombre de neurones de la carte. The key data permet d'inititialiser le SOM avec une base de donnée à priori. The key n-fanaux initialise la fanaux-list par classification ascendante hiérarchique avec la méthode de Ward.
  • L
    • [ Fonction ]
      LEARN self
      Apprentissage du réseau au nom de self.
    • [ Fonction ]
      LOAD-NEURAL-NETWORK nn
      Chargement d'un réseau soit par son full pathname, soit par son nom (sans extension) depuis le répertoire de sauvegarde *N3-BACKUP-DIRECTORY*. Dans les deux cas nn est une string.
    • [ Fonction ]
      LOCATE-CLIQUE self nodes &key remanence test
      Liste des potentielles microcolonnes constituant une clique mémorisée à partir d'une liste partielle de sommet(s).
    • [ Fonction ]
      LOCATE-TOURNOI self tournoi &key remanence test
      Liste des potentiels tournois – sous la forme d'une liste de coordonnées unidimensionnelle de position des microcolonnes de la fanaux-list de self ordonnées temporellement – dont l'ordre est définit par le cardinal du tournoi et où chaque inconnue est représentée par une wild card de type ?. La remanence, lorsqu'elle est effective, tient compte de la cover-value lors de l'apprentissage.
  • S
    • [ Fonction ]
      SAVE self
      Sauvegarde d'un réseau au nom de self dans le répertoire *N3-BACKUP-DIRECTORY*.
  • U
    • [ Fonction ]
      UPDATE-FANAUX self new-fanaux-list
      Permet la (ré)initialisation de la fanaux-list de self en mettant à jour toutes les connexions liées à la old-fanaux-list par surjection.
4) Partie du langage LISP traitant de la programmation objet (Common Lisp Object System).
6) Neuromuse3 propose la fonction générique create-mlt permettant d'instancier et d'initier un SOM au niveau de la classe MLT. Cette fonction présente les mêmes arguments et les mêmes clefs que le defmethod init-som.
7) Pour mémoire, l'algorithme de surjection consiste à explorer la matrice des distances de la new-fanaux-list par rapport à la old-fanaux-list de telle sorte à ne retenir que les neurones ayant la distance la plus petite par rangée et par colonne. La conjonction des deux derniers est listée selon l'indexation de la old-fanaux-list, en ajoutant le cas échéant les distances intermédiaires.
8) Pour mémoire, l’ordre dans la théorie des graphes est le nombre de sommets d’un graphe. Dans le cas d'une clique ou d'un tournoi, l'ordre – appelé n – permet de determiner le nombre de connexions nécessaires afin de former un graphe complet tel que n = n(n−1)/2.
Imprimer/exporter
QR Code
QR Code wiki:documentation (generated for current page)