Je présente à votre attention une série d'articles sur les réseaux de neurones, conceptuellement proches d'une série d'articles d' Alexei Redozubov . Pour comprendre le matériel, il est recommandé de vous familiariser avec l'ensemble du cycle de ses articles. Le lien ne contient qu'un seul article du cycle, utile pour ce texte.
Les modèles décrits de réseaux de neurones (ci-après dénommés NS) seront d'un niveau légèrement supérieur à celui d'Aleksei. Cela nous permet de simplifier la présentation et la compréhension des processus se produisant dans la NS, ce qui nous permettra ensuite de passer à un réglage plus fin de la NS de niveau inférieur. De plus, le travail sur ces NS permet de les utiliser plus rapidement. En particulier, je les ai utilisés pour analyser des textes, simuler la marche d'une souris dans un labyrinthe et interpréter un langage lisp, il peut y avoir de nombreuses autres applications. Nous aborderons ce comportement complexe en douceur vers la fin du cycle.Commençons par illustrer une telle approche de niveau supérieur. L'article d'Alexey sur l'hippocampe contient une phrase: «l'hippocampe forme des identifiants uniques pour les souvenirs». Commençons par un code simple qui effectuera ces actions - créez un identifiant unique et connectez-le aux événements décrits. Code C ++. Je ne télécharge pas encore le code source - sans explications préparatoires, ils ont encore peu d’utilité.NC & hippocampNewId = newNC ();
Au lieu de neurones individuels, l'unité de programme principale est un cluster / colonne de neurones. Le nom de classe est NC (abréviation de NeuroCluster). Puisqu'un grand nombre de neuroclusters sont créés dans le NS (dans mes expériences, des centaines de milliers), il n'est pas souhaitable d'utiliser l'opérateur new pour isoler de nouveaux neuroclusters - il fonctionne lentement et a une grande surcharge de mémoire. Par conséquent, la fonction newNC est utilisée, qui utilise le pool de neuroclusters et les alloue à partir de là. Au lieu d'un pointeur, cette fonction renvoie une référence à NC, ce qui rend le code plus pratique et plus sûr.Conceptuellement, ce code correspond approximativement à cette approche: à l'Assemblée nationale il y a beaucoup de colonnes neuronales, il faut allouer la prochaine colonne faiblement utilisée, et elle sera responsable du nouvel identifiant. Détailler la manière dont cet isolement se produira est une tâche de niveau inférieur pour les spécialistes de l'hippocampe. C'est également intéressant, j'ai des réflexions sur la façon de le résoudre, mais une telle tâche est trop faible, nous allons donc continuer.Écrivons un cycle de passage à travers tous les neuroclusters:pour (NC & nc: _listNC) {
if (nc.isActive ())
// ici, nous devons en quelque sorte connecter ce neurocluster avec hippocampNewId
}
Un neurocluster actif est par exemple toute sensation de courant, signe du cortex sensoriel, action en cours, etc.Dans le modèle d'Alexey, une telle connexion sera créée par le réglage - le cluster apprendra à reconnaître une nouvelle vague d'identification. Pour créer une telle connexion indirecte, vous avez besoin de beaucoup de ressources informatiques - vous avez besoin de beaucoup de neurones et de connexions (cent ou deux neurones par neurocluster), de nombreux calculs, vous devez simuler le passage d'une onde d'identification à travers tout le cortex, ce passage prendra beaucoup de temps. Nous le ferons plus facilement - créez directement une connexion logicielle:pour (NC & nc: _listNC) {
if (nc.isActive ())
hippocampNewId.createLinkTo (nc);
}
Après cela, le nouveau label hippocampe doit être lié dans le temps avec les souvenirs du passé: hippocampNewId.createTimeLinkTo (_prevHippocampId);
Et enfin, pour le prochain cycle, nous remplacerons: _prevHippocampId = hippocampNewId;
Bien sûr, il s'agit toujours d'un pseudo-code. Il est entendu qu'il s'agit d'un code de la classe ANN. Par conséquent, la fonction newNC est une fonction membre de la classe HC. Si une variable commence par un trait de soulignement, cette variable est membre de la classe (quelque chose comme le préfixe m_, il suffit de ne pas prononcer la lettre m, ce qui rend la programmation plus pratique).Le mérite d'Alexei est que sa découverte vous permet d'écrire du code comme createLinkTo. Avant ses articles, on ne pouvait que deviner comment lier rapidement les deux souvenirs. Après tout, le cerveau ne peut pas faire germer instantanément une connexion de l'axone d'un neurone à l'autre hémisphère, et donc cent fois par seconde. La technologie d'Alexey transforme le cerveau entier avec l'hippocampe en un commutateur qui peut très rapidement créer des associations arbitraires. Il y a une quinzaine d'années, j'ai accepté l'existence d'un tel mécanisme comme une évidence, et j'ai travaillé dessus, en espérant qu'un jour il serait ouvert. Il ne restait plus qu'à écrire le code avec quelques doutes - mais combien tout cela est-il biologiquement plausible? Divers faits ont souligné l'existence d'un tel mécanisme et, finalement, des détails ont été révélés.Eh bien, nous avons en quelque sorte connecté les mémoires actuelles les plus actives et la nouvelle étiquette d'hippocampe. Qu'est-ce que cela nous donne? Faisons en sorte qu'à la réception d'une série d'événements similaires à celui dont on se souvenait plus tôt, les horodatages mémorisés puissent reconnaître ces nouvelles séries comme quelque chose de déjà rencontré. Ensuite, il sera possible de faire différentes choses - par exemple, pour commencer des prévisions basées sur l'expérience.Pour ce faire, passez temporairement à une autre tâche. Laissez le cortex capteur de ANN (NS artificiel) percevoir les lettres. Par exemple, les lit dans un fichier. La tâche consiste à créer des chaînes neuronales qui reconnaîtront le mot - par exemple, le mot «reconnu». De plus, cette reconnaissance devrait provenir de plusieurs composantes - de trois chaînes distinctes de «races», «poses», «espèces»., , , Hierarchical Temporal Memory . ( ):

1) , (
), 3 , , 4. , — , .
2) Cette fenêtre - l'onglet «Chaîne 2D» - crée une visualisation pratique d'une partie du réseau neuronal. Il est inconfortable de regarder le réseau de neurones à quoi il ressemble dans la toute première image de l'article. Et cette fenêtre vous permet de spécifier un neurocluster distinct, analyse ses connexions et affiche uniquement les clusters qui sont accessibles par les connexions de celui sélectionné. Il organise les grappes dans une rangée, montre les signes filles ci-dessous, a des connexions temporelles horizontalement. Il est maintenant plus facile de voir que cette chaîne analyse le mot «reconnu».3) On peut voir que différents clusters ont différents types, différents types sont peints de différentes couleurs. La photo montre les neuroclusters habituels (si) et sensoriels (capteur) - ils correspondent au cortex sensoriel. Les communications du cluster de capteurs au capteur réel ne sont pas modélisées par manque de besoin. Dans ce cas, un type de cluster distinct n'est nécessaire que pour faciliter le débogage - par exemple, pour ne pas penser, "pourquoi ce cluster ne reconnaît-il aucun signe, est-il inutile?" Non, ce n'est pas inutile, il reconnaît la lettre indiquée dans le commentaire.4) Dans l'infobulle verte contextuelle (au survol de la souris), différents champs sont affichés. Tout en bas de l'info-bulle, un schéma de visualisation de cluster est affiché. Différents modèles ANN peuvent visualiser les clusters de différentes manières., car ils peuvent avoir des contenus très différents (toutes sortes de variables numériques, le nombre de neurones internes, etc.), et pour que ce soit clair ce que sont ces nombres, j'ai décidé de donner l'image avec un indice.5) Analysons la reconnaissance des «races» de la première syllabe. Il comprend les neurones sensoriels 6, 7 et 9, ils sont reconnus dans la séquence souhaitée en raison des neurones 8 et 10. S'ils fonctionnent dans un ordre différent, ou au moins avec un retard d'un cycle d'horloge, le signal n'atteindra pas le neurone 10.6) , , 10 «» 20 , , . « », , , . , , . .
7) , , «» «». . , , «». , , .
8) , , , — ,
9) Un format d'heure complexe (heure de création d'un neurone de type 0: 0,0-0) sera décrit ultérieurement. Puisque ce NS est généré à titre d'illustration, le temps de création de tous les neurones est le même ici. Dans les circuits réels, cette heure affichera l'horloge dans laquelle une colonne neuronale donnée s'accordera pour reconnaître un attribut particulier. Il s'agit de l'heure à laquelle la fonction newNC est appelée. Ces informations peuvent ensuite être utilisées pour le débogage et plus encore.10) , , ( ). , . , , . . , — , , , , . lisp, car/cdr . lisp — cell , cell , . — = cell, , lisp .
La partie suivante traite de certains algorithmes pour mettre en évidence les réflexes conditionnés.