Ein Netzwerk
Ein Netzwerk für das Gemälde und den gesamten Thread
Ein echtes Netzwerk, hier aufgebaut und hier trainiert: die Partien des Gemäldes, die von der Farbe suggerierte Tiefe und jeder Buchstabe dieser Konversation, in einem gemeinsamen Raum. Nichts ist vortrainiert.
Das Gemälde, Ausschnitt für Ausschnitt
Das Netzwerk betrachtet das Gemälde in kleinen Ausschnitten, jeder mit eigenem Licht, Farbe und Ort, und lernt diese Wörter. Dieselben Gewichte lesen die Buchstaben des Fadens.
- Trainierte Schritte
- 0
- Bildfehler
- —
- Buchstabenfehler
- —
- Tiefenfehler
- —
- Flecken, die ihre Wörter finden
- —
- Farbflecken
- 0
- Wörter in seinem Raum
- 0
- Gelernte Buchstaben
- 0
- Bekannte Zeichen
- 0
Die Wörter, die es lernt, sind diejenigen, die die Farbe lehren kann: wie hell ein Ausschnitt ist, welche Farbe er hat, wo er liegt. Die Textverarbeitung lernt die Reihenfolge der Buchstaben, nicht die Bedeutung. Nichts hier ist vortrainiert; die Gradienten laufen in diesem Tab.
Training, live
Es startet automatisch beim Öffnen der Seite und lernt direkt hier in diesem Tab. Alle hundert Schritte wird der aktuelle Messwert notiert.
Warte auf den Aufbau des Netzwerks…
Die gesamte App, in Python und JAX
Diese Seite und das untenstehende Programm sind ein Netzwerk. Das Programm ist die gesamte Anwendung: ein GTK4-Fenster, JAX-Gradienten, das Gemälde, der Thread, die vorhergesagte Tiefe und der gemeinsame Raum. Kopieren oder speichern Sie es und führen Sie es dann auf Ihrem eigenen Rechner aus.
- Farbflecken
- —
- Wörter, die es lernt
- —
- Buchstaben, die es liest
- —
- Zusammenzuhaltende Dateien
- net_gtk.py
Was das Fenster macht
- Trainieren Sie 300 oder 2.000 Schritte oder stoppen Sie mittendrin; das Lernen läuft in einem Thread, sodass das Fenster aktiv bleibt.
- Klicken Sie auf einen beliebigen Patch des Gemäldes, und es zeigt Ihnen die Wörter an, die es für diesen Patch hat.
- Fragen Sie in Worten – warmes Gold, Dunkelblau – und es beleuchtet die Patches, auf die die Frage trifft.
- Geben Sie ein paar Buchstaben ein, und es listet die Buchstaben auf, die es als nächstes erwartet, inklusive Prozentangaben.
- Fügen Sie Ihren eigenen Text ein und drücken Sie „Lerne stattdessen dies“: Neue Buchstaben erhalten neue Zeilen in derselben Tabelle, nichts von dem bereits Gelernten wird gelöscht.
- Zwei Zeichnungen unter dem Gemälde: die vorhergesagte Tiefe und der eine Raum, in dem Punkte Farbe und Quadrate Wörter sind.
- Speichern Sie die Gewichte in net_weights.json und laden Sie sie beim nächsten Mal wieder.
Wie man es ausführt
Ein Ordner, eine Datei und ein Gemälde namens painting.jpg, falls vorhanden. Unter Linux in diesem Ordner:
-
Python-Pakete installieren
python3 -m pip install jax numpy pillow -
GTK4 und die Python-Bindings installieren
sudo apt install python3-gi gir1.2-gtk-4.0 -
Das Fenster öffnen
python3 net_gtk.py
Unter Windows ist der schnellste Weg MSYS2: pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4, dann python -m pip install jax numpy pillow, dann python net_gtk.py im selben MSYS2-Terminal.
Auf macOS: brew install pygobject3 gtk4, dann python3 -m pip install jax numpy pillow, dann python3 net_gtk.py.
Kein Display? python3 net_gtk.py --selftest trainiert im Terminal und gibt dieselben Zahlen aus.
Gemessen durch Ausführen dieser Datei in einem Terminal mit JAX, bei diesem Gemälde und diesem Thread: 400 Schritte → 67 % der Patches finden ihre eigenen Wörter (Bildfehler 0,68), 2.000 Schritte → 95 % (0,53), 5.000 Schritte → 97 % (0,45). Der Tiefenfehler endet bei 0,0003 und der Buchstabenfehler sinkt von 3,05 auf 2,90.
Ein Browser kann kein Python ausführen, daher zeigt dieser Tab die Datei anstelle des Fensters – dasselbe Netzwerk läuft live darüber. Die Wörter, die es lernt, sind diejenigen, die die Farbe lehren kann: Dieses Gemälde enthält kein Blau, daher landet eine Frage nach Blau stattdessen auf goldenen Stellen. Der Buchstabenkopf kennt die Reihenfolge der Buchstaben, nicht die Bedeutung.
Ein Compiler für das obige Python und JAX
Das Feld enthält den Forward-Pass des einen Netzwerks. Der Compiler liest ihn, prüft ihn und schreibt ihn zweimal aus: Python für JAX und JavaScript, das in diesem Tab läuft. Ein Baum, zwei Backends.
- Tokens
- —
- Knoten im Baum
- —
- Funktionen
- —
Was es berechnet
Die Prüfung vergleicht diese Zahlen mit demselben Programm, das in numpy und JAX mit denselben initialisierten Gewichten ausgeführt wurde – gemessen, bevor diese Karte existierte, nicht geschätzt.
Was die Sprache erlaubt
- def name(a, b): mit einem eingerückten Körper, name = ..., und return ...
- Zahlen, Namen, Klammern, Unär-Minus sowie + - * / @ für ein Matrixprodukt.
- .T für eine Transponierung sowie die Aufrufe tanh, sqrt, exp, log, sum, mean, maximum.
- Alles andere stoppt den Compiler mit Angabe von Zeile und Spalte, anstatt zu raten.
Dies ist ein echter Compiler für eine kleine Sprache, keine Python-Runtime: keine Schleifen, keine Klassen, keine Importe. Der Forward-Pass des einen Netzwerks passt hinein, weshalb derselbe Text auf deinem Rechner zu JAX und in diesem Tab zu JavaScript werden kann.
Virtuelle Augen: Sie sehen nur Pixel
Ein Auge, das auf einen Monitor gerichtet ist: Es erhält das Bild und sonst nichts – keine Seite, keine Daten, kein Netzwerk. Allein aus diesen Pixeln findet es Kanten, Ecken und wie jeder Punkt gleitet, wenn das Auge sich seitlich bewegt, und daraus rekonstruiert es, wo alles im Raum steht.
- Gesehene Frames
- 0
- Ecken
- 0
- Getrackt
- 0
- Medianbewegung
- —
- Tiefe gefunden
- —
- Punkte im Raum
- 0
- Ein Frame
- —
Die Tiefe ist reale Geometrie, aber nur bis zur Größe des Augenschritts und nur dort, wo das Bild Textur hat – flache Farbe bietet keinen Halt. Zu sehen, wo eine Wand steht, bedeutet nicht zu wissen, dass es eine Wand ist, und nichts hier erfindet eine Welt: Der Raum darüber sind die gemessenen Pixel.
Ihre Idee und was sie noch benötigen würde
- Augen auf dem Monitor sind eine echte Schnittstelle: Ein Modell, das den Bildschirm so liest wie ein Mensch, benötigt kein Plugin für jedes Programm – alles Sichtbare ist bereits Input.
- Aus zwei Frames eines sich bewegenden Auges erhält man Geometrie, mit der ein Weltmodell übereinstimmen muss; diesen Teil erledigt diese Karte tatsächlich.
- Eine in Echtzeit generierte Welt benötigt zudem ein Modell, das erfindet, was niemand gesehen hat, dies beim Umdrehen konsistent hält und in Millisekunden läuft – das ist in diesem Tab nicht enthalten, und eine Seite kann dies nicht trainieren.
- Die ehrliche Grenze: Dieses Auge stellt wieder her, wo sich Dinge befinden, nicht was sie bedeuten. Die Geschwindigkeit des Sehens ist kein Verstehen, und das eine ist viel einfacher als das andere.
Bild: gemeinfreier Scan von Leonardo da Vincis Abendmahl, Wikimedia Commons.
