One Network: JAX und Virtual Eyes
Loading...
The app: one network in Python and JAX

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.

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
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:

  1. Python-Pakete installieren python3 -m pip install jax numpy pillow
  2. GTK4 und die Python-Bindings installieren sudo apt install python3-gi gir1.2-gtk-4.0
  3. 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
—
Python für JAX
JavaScript, hier ausgeführt

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.

    Was das Auge sieht Ecken in Blau, Bewegung in Orange
    Kanten Sobel-Gradienten
    Bewegung Lucas-Kanade-Fluss
    Der rekonstruierte Raum zum Drehen ziehen
    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.