Die Logik des Denkens - Ausgründung

Ich präsentiere Ihnen eine Reihe von Artikeln über neuronale Netze, die konzeptionell einer Reihe von Artikeln von Alexei Redozubov nahe kommen . Um das Material zu verstehen, wird empfohlen, dass Sie sich mit dem gesamten Zyklus seiner Artikel vertraut machen. Der Link enthält nur einen Artikel aus dem Zyklus, der für diesen Text nützlich ist.

KDPV
Die beschriebenen Modelle neuronaler Netze (im Folgenden als NS bezeichnet) werden etwas höher sein als die von Aleksei. Dies ermöglicht es uns, die Darstellung und das Verständnis der in der NS ablaufenden Prozesse zu vereinfachen, wodurch wir zu einer feineren Abstimmung der NS auf niedrigerer Ebene übergehen können. Die Arbeit an solchen NS ermöglicht es auch, sie schneller zu verwenden. Insbesondere habe ich sie verwendet, um Texte zu analysieren, das Gehen der Maus durch ein Labyrinth zu simulieren und eine lispelartige Sprache zu interpretieren. Es kann viele andere Anwendungen geben. Wir werden uns diesem komplexen Verhalten gegen Ende des Zyklus reibungslos nähern.
Beginnen wir mit der Veranschaulichung eines solchen übergeordneten Ansatzes. Alexeys Artikel über den Hippocampus enthält einen Satz: "Der Hippocampus bildet eindeutige Kennungen für Erinnerungen." Beginnen wir mit einem einfachen Code, der diese Aktionen ausführt. Erstellen Sie eine eindeutige Kennung und verbinden Sie sie mit den beschriebenen Ereignissen. C ++ - Code. Ich lade den Quellcode noch nicht hoch - ohne vorbereitende Erklärungen haben sie immer noch wenig Nutzen.

NC & hippocampNewId = newNC ();

Anstelle einzelner Neuronen ist die Hauptprogrammeinheit ein neuronaler Cluster / eine neuronale Spalte. Der Klassenname ist NC (kurz für NeuroCluster). Da im NS eine große Anzahl von Neuroclustern erstellt wird (in meinen Experimenten Hunderttausende), ist es unerwünscht, den Operator new zu verwenden, um neue Neurocluster zu isolieren - er arbeitet langsam und hat einen großen Speicheraufwand. Daher wird die newNC-Funktion verwendet, die den Pool von Neuroclustern verwendet und von dort aus zuweist. Anstelle eines Zeigers gibt diese Funktion einen Verweis auf NC zurück, wodurch der Code bequemer und sicherer wird.
Konzeptionell entspricht dieser Code ungefähr diesem Ansatz: In der Nationalversammlung gibt es viele neuronale Spalten, es ist notwendig, die nächste schwach verwendete Spalte zuzuweisen, und er wird für die neue Kennung verantwortlich sein. Die Art und Weise, in der eine solche Isolation stattfinden wird, genau zu beschreiben, ist eine untergeordnete Aufgabe für Hippocampus-Spezialisten. Es ist auch interessant, ich habe Gedanken darüber, wie ich es lösen kann, aber eine solche Aufgabe ist zu niedrig, also werden wir weitermachen.
Schreiben wir einen Durchgangszyklus durch alle Neurocluster:

für (NC & nc: _listNC) {
	if (nc.isActive ())
		// hier müssen wir diesen Neurocluster irgendwie mit hippocampNewId verbinden
}}


Ein aktiver Neurocluster ist beispielsweise eine aktuelle Empfindung, ein Zeichen aus dem sensorischen Kortex, eine aktuelle Aktion usw.
In Alexeys Modell wird eine solche Verbindung durch Tuning hergestellt - der Cluster lernt, eine neue Identifikationswelle zu erkennen. Um eine solche indirekte Verbindung herzustellen, benötigen Sie viele Rechenressourcen - Sie benötigen viele Neuronen und Verbindungen (hundert oder zwei Neuronen pro Neurocluster), viele Berechnungen, Sie müssen den Durchgang einer Identifikationswelle durch den gesamten Kortex simulieren, dieser Durchgang wird viel Zeit in Anspruch nehmen. Wir werden es einfacher machen - stellen Sie direkt eine Softwareverbindung her:

für (NC & nc: _listNC) {
	if (nc.isActive ())
		hippocampNewId.createLinkTo (nc);
}}


Danach muss das neue Hippocampus-Label rechtzeitig mit früheren Erinnerungen verknüpft werden:
	hippocampNewId.createTimeLinkTo (_prevHippocampId);

Und schließlich werden wir für den nächsten Zyklus Folgendes ersetzen:
	_prevHippocampId = hippocampNewId;

Dies ist natürlich immer noch Pseudocode. Es versteht sich, dass dies ein Code in der ANN-Klasse ist. Daher ist die newNC-Funktion eine Mitgliedsfunktion der HC-Klasse. Wenn eine Variable mit einem Unterstrich beginnt, ist diese Variable ein Mitglied der Klasse (so etwas wie das Präfix m_ muss nur der Buchstabe m nicht ausgesprochen werden, was das Programmieren bequemer macht).
Das Verdienst von Alexei ist, dass Sie mit seiner Entdeckung Code wie createLinkTo schreiben können. Vor seinen Artikeln konnte man nur raten, wie man die beiden Erinnerungen schnell miteinander verbindet. Schließlich kann das Gehirn nicht sofort eine Verbindung vom Axon eines Neurons zur anderen Hemisphäre herstellen, und das hundertmal pro Sekunde. Die Technologie von Alexey verwandelt das gesamte Gehirn mit dem Hippocampus in einen Schalter, der sehr schnell willkürliche Assoziationen herstellen kann. Vor ungefähr 15 Jahren akzeptierte ich die Existenz eines solchen Mechanismus als gegeben und arbeitete daran in der Hoffnung, dass er eines Tages geöffnet werden würde. Es blieb nur, den Code mit einigen Zweifeln zu schreiben - aber wie viel ist das alles biologisch plausibel? Verschiedene Tatsachen wiesen auf die Existenz eines solchen Mechanismus hin, und schließlich wurden Einzelheiten enthüllt.
Nun, wir haben irgendwie die aktivsten aktuellen Erinnerungen und das neue Hippocampus-Label miteinander verbunden. Was gibt uns das? Machen wir es so, dass die gespeicherten Zeitstempel nach Erhalt einer Reihe von Ereignissen, die denen ähneln, an die zuvor erinnert wurde, diese neue Reihe als etwas erkennen können, das bereits angetroffen wurde. Dann wird es möglich sein, verschiedene Dinge zu tun - zum Beispiel mit der Vorhersage auf der Grundlage von Erfahrungen zu beginnen.
Fahren Sie dazu vorübergehend mit einer anderen Aufgabe fort. Lassen Sie den Sensorkortex von ANN (künstliches NS) Buchstaben wahrnehmen. Liest sie beispielsweise aus einer Datei. Die Aufgabe besteht darin, neuronale Ketten zu erstellen, die das Wort erkennen - zum Beispiel das Wort "erkannt". Darüber hinaus sollte diese Anerkennung aus mehreren Komponenten stammen - aus drei getrennten Ketten von „Rennen“, „Posen“, „Bargeld“.
Das allgemeine Prinzip der Lösung ist im Allgemeinen offensichtlich und wird beispielsweise in Hawkins 'Hierarchical Temporal Memory beschrieben. Für das folgende Bild müssen Sie jedoch Erklärungen abgeben (das Bild kann von Mäusen in der Registerkartenleiste herausgezogen werden, um es in einer neuen Registerkarte zu öffnen):


1) In älteren ANN-Modellen wurden Neuronencluster verwendet, aber Neuronen (wie hier ), aber jetzt heben Sie diese alten Quellen von Neural Laboratory 3 auf und lassen Sie sie zu anstrengend werden, damit ich sie mit den Bildern veranschaulichen kann, die in der neuesten Version des Neuro Lab 4 erstellt wurden. Obwohl Abstraktionen von Neuroclustern angezeigt werden, werde ich sie daher Neuronen nennen - dies sollte aus dem Kontext klar hervorgehen Worüber reden wir?
2) Dieses Fenster - die Registerkarte "2D-Kette" - erstellt eine bequeme Visualisierung eines Teils des neuronalen Netzwerks. Es ist unangenehm, das neuronale Netzwerk so zu betrachten, wie es auf dem ersten Bild des Artikels aussieht. In diesem Fenster können Sie einen separaten Neurocluster angeben, seine Verbindungen analysieren und nur die Cluster anzeigen, die über die Verbindungen des ausgewählten erreichbar sind. Es ordnet die Cluster in einer Reihe an, zeigt die Tochterzeichen unten, hat zeitliche Verbindungen horizontal. Jetzt ist es einfacher zu erkennen, dass diese Kette das Wort "erkannt" analysiert.
3) Es ist ersichtlich, dass verschiedene Cluster unterschiedliche Typen haben, unterschiedliche Typen in unterschiedlichen Farben gemalt sind. Das Bild zeigt die üblichen (if) und sensorischen (sensorischen) Neurocluster - sie entsprechen dem sensorischen Kortex. Kommunikationen vom Sensorcluster zum realen Sensor werden nicht mangels Bedarf modelliert. In diesem Fall wird ein separater Clustertyp nur benötigt, um das Debuggen zu erleichtern. Denken Sie beispielsweise nicht daran, warum dieser Cluster keine Anzeichen erkennt, ist er nutzlos. Nein, es ist nicht nutzlos, es erkennt den im Kommentar angegebenen Buchstaben.
4) In der grünen Popup-QuickInfo (bei gedrückter Maus) werden verschiedene Felder angezeigt. Ganz unten im Tooltip wird ein Cluster-Visualisierungsschema angezeigt. Verschiedene ANN-Modelle können Cluster auf unterschiedliche Weise visualisieren .Da sie sehr unterschiedliche Inhalte haben können (alle Arten von numerischen Variablen, die Anzahl der internen Neuronen usw.) und um diese Zahlen zu verdeutlichen, habe ich beschlossen, das Bild zusammen mit einem Hinweis zu geben.
5) Analysieren wir die Erkennung der ersten Silbe „Rassen“. Es enthält sensorische Neuronen 6, 7 und 9, die aufgrund der Neuronen 8 und 10 in der gewünschten Reihenfolge erkannt werden. Wenn sie in einer anderen Reihenfolge oder zumindest mit einer Verzögerung von einem Taktzyklus arbeiten, erreicht das Signal das Neuron 10 nicht.
6) Nach dem obigen Schema könnte man denken, dass, nachdem das Neuron Nummer 10 mit dem Buchstaben "c" ein Signal von einer anderen Silbe an das Neuron Nummer 20 gesendet hat, das Signal zu früh ankommt und ausgeht, bevor die zweite Silbe erkannt wird. Zuvor habe ich zur Lösung dieses Problems „Verzögerungsneuronen“ verwendet, die ein Signal gesendet haben, damit es genau zur gleichen Zeit ankommt, zu der ein anderes Neuron es benötigt. Jetzt habe ich gelernt, wie man die richtigen Verbindungseinstellungen verwendet, die in einem separaten Artikel beschrieben werden, sodass Verzögerungsneuronen nicht benötigt werden. Daher sind sie nicht auf dem Bild.
7) Diese Schaltung mit Neuronen sendet, um ein Wort richtig zu erkennen, Signale "nach rechts" und "nach oben". Dies entspricht dem Zeitablauf und einer Erhöhung der Ebene des Attributs in der Hierarchie. Der Tooltip zeigt jedoch, dass die Anzahl der eingehenden und ausgehenden Verbindungen so hoch ist, dass die Verbindungen eher nach unten führen. Dies sind die Merkmale des Betriebs von Neuroclustern, achten Sie nicht darauf, für einen Schaltkreis mit Neuronen geht die Kommunikation nach rechts und oben.
8) In diesem Fenster werden zur Vereinfachung die Zeilen- und Spaltennummern entlang der Bildschirmränder sowie der Zeitversatz in Bezug auf den Betrieb des ausgewählten Hauptclusters gezeichnet, dh desjenigen, dessen Kennung in das Eingabefeld eingegeben wird und der durch einen dicken Rahmen oben rechts hervorgehoben wird
9) Ein komplexes Zeitformat (Zeitpunkt der Erzeugung eines Neurons vom Typ 0: 0,0-0) wird später beschrieben. Da dieses NS zur Veranschaulichung erzeugt wird, ist die Erstellungszeit aller Neuronen hier gleich. In realen Schaltungen zeigt diese Zeit die Uhr an, in der eine bestimmte neuronale Spalte eingestellt ist, um ein bestimmtes Attribut zu erkennen. Dies ist die Zeit, zu der die newNC-Funktion aufgerufen wird. Diese Informationen können dann zum Debuggen und mehr verwendet werden.
10) Solche Ketten können natürlich zu jeder Zeit mehr als ein Attribut speichern (Neuronen können eine beliebige Anzahl von Verbindungen haben). In diesem Fall haben Neuronen für jeden Zeitschritt eine Verbindung, da Buchstaben erkannt werden. Wenn es visuelle Ketten gäbe, wäre das Bild mit einer sehr großen Anzahl von Verbindungen völlig anders. Für Bildungszwecke ist es einfacher, mit Buchstaben zu arbeiten. Selbst wenn Buchstaben in einem Zeitstempel erkannt werden, können Verbindungen zu vielen Clustern gespeichert werden - durch Buchstaben, durch das Ende einer erkannten Silbe, durch das Ende eines erkannten Wortes, durch parallele Gedanken, die das Nachdenken über einen Text begleiten. Dies ist ein signifikanter Unterschied zwischen Neuroclustern und Lisp, bei denen car / cdr nur einen Zeiger enthält. Eine solche Semantik von Beziehungen in Lisp ist für AI weniger bequem - da eine einzelne Zelle nicht als vollständige Assoziation betrachtet werden kann,Dazu müssen Sie eine separate Liste von Attributen aus der Zelle extrahieren, die auf sehr unterschiedliche Weise verbunden werden können. Versuche, mit AI auf Lisp zu arbeiten, ergeben daher sofort eine offensichtliche Lösung - ein separates Zeichen = eine separate Zelle, und dies ist eine zu niedrige Ebene, um zu arbeiten. Es ist unpraktisch, AI auf Lisp zu erstellen.
Im nächsten Teil werden einige Algorithmen zum Hervorheben konditionierter Reflexe erläutert.

Source: https://habr.com/ru/post/de388719/


All Articles