DreamCoder: Aufbau von generalisierbarem, interpretierbarem Wissen durch Wach-Schlaf-Bayesianisches Programmlernen

Bild

Die Problemlösung von Experten basiert auf mächtigen Denkweisen – also Sprachsystemen, um über Probleme und deren Lösungen nachzudenken. Fachwissen zu erwerben bedeutet, diese Sprachen zu lernen – sowohl das Konzeptsystem als auch die Fähigkeiten zu deren Anwendung. Wir stellen DreamCoder vor, ein Lernsystem, das Probleme durch das Schreiben von Programmen löst. Es baut schrittweise Fachwissen auf, indem es Programmiersprachen zur Ausdruck von Domänenkonzepten erstellt und neuronale Netze einbindet, die den Suchprozess nach Programmen in diesen Sprachen leiten. Ein „Wach-Schlaf“-Lernalgorithmus erweitert abwechselnd die Sprache, fügt neue symbolische Abstraktionen hinzu und trainiert das neuronale Netz an vorgestellten und wiedergegebenen Problemen. DreamCoder ist in der Lage, klassische induktive Programmieraufgaben sowie kreative Aufgaben wie das Zeichnen von Bildern und das Erstellen von Szenen zu lösen. Es entdeckt die grundlegenden Prinzipien der modernen funktionalen Programmierung, Vektoralgebra und der klassischen Physik, einschließlich Newtons Gesetzen und dem Coulombschen Gesetz, neu. Konzepte werden kompositorisch aus zuvor Gelerntem aufgebaut und bilden vielschichtige, interpretierbare symbolische Darstellungen, die auf neue Aufgaben übertragen werden können und gleichzeitig flexibel und effizient mit zunehmender Erfahrung skalieren.

Ein langjähriger Traum der Künstlichen Intelligenz (KI) ist es, Maschinen zu bauen, die wie Kinder lernen (1) – also mit geringem Wissen beginnen und allmählich zu dem vollen Wissen heranwachsen, das erwachsene Menschen besitzen. Dieses Ziel ist jedoch noch weit entfernt, da menschliche Intelligenz von vielen Lernfähigkeiten abhängt, die von künstlichen Systemen noch nicht beherrscht werden. Während aktuelle Maschinen typischerweise für einzelne Aufgabenkategorien entwickelt werden, lernen Menschen, eine Vielzahl von Problemen zu lösen, vom Kochen über die Infinitesimalrechnung bis hin zum Grafikdesign. Darüber hinaus, während maschinelles Lernen oft große Datenmengen erfordert und schlecht generalisiert, erreichen Menschen oft eine starke Generalisierung aus geringer Erfahrung. Der vielleicht auffälligste Unterschied besteht darin, dass Menschen Fachwissen aufbauen – wir erwerben Wissen, das kommuniziert und erweitert werden kann, generieren ständig neue Konzepte auf der Grundlage bestehender und werden so besser und schneller lernend, sobald wir ein Gebiet beherrschen.

Dieser Artikel stellt DreamCoder vor, ein maschinelles Lernsystem, das darauf abzielt, den menschlichen Fähigkeiten näherzukommen – um in einem breiten Spektrum von Domänen effizient interpretierbares, wiederverwendbares und generalisierbares Wissen zu entdecken. DreamCoder verkörpert einen Ansatz, den wir „Wach-Schlaf-Bayesianische Programminduktion“ nennen. Der Rest dieses Abschnitts erklärt die Kernideen dahinter: Was es bedeutet, Lernen als Programminduktion zu betrachten; warum es wertvoll ist, Programminduktion als Inferenz in einem Bayes'schen Modell zu betrachten; und wie ein „Wach-Schlaf“-Algorithmus das Modell dazu bringt, mit Erfahrung zu wachsen, um effizienter zu lernen, wodurch dieser Ansatz praktisch und skalierbar wird.

Unsere Formulierung des Lernens als Programminduktion reicht bis in die Anfänge der KI zurück (2): Wir betrachten das Lernen einer neuen Aufgabe als die Suche in einem Programmraum nach einem Programm, das die Aufgabe löst oder das gewünschte Verhalten aufweist. Abbildung 1 zeigt Beispiele für Programminduktionsaufgaben in acht verschiedenen Domänen, in denen DreamCoder angewendet wurde (Abbildung 1A), und eine detaillierte Illustration einer Aufgabe im klassischen Listverarbeitungsbereich: das Lernen eines Programms, das eine Liste von Zahlen sortiert, wenn nur wenige Ein-Ausgabe-Beispiele gegeben sind (Abbildung 1B). Das Betrachten des Lernens als Programminduktion bietet bestimmte Vorteile gegenüber rein statistischen Methoden.

BildBild

Symbolische Programme zeigen starke Generalisierungsfähigkeiten – intuitiv neigen sie dazu, zu extrapolieren statt nur zu interpolieren. Dies macht den Lernprozess auch sehr dateneffizient: Oft genügen nur wenige Beispiele, um eine zu lernende Funktion zu spezifizieren. Programme sind von Natur aus hochgradig menschlich interpretierbar: Sie umfassen die Standard-Modellierungssprachen in unserer Wissenschaft und Technik und offenbaren Wissen, das wiederverwendet und kombiniert werden kann, um immer komplexere Aufgaben zu lösen. Schließlich sind Programme universell: Prinzipiell kann jede Turing-vollständige Sprache alle Rechenprobleme darstellen, die Intelligenz lösen kann.

Trotz dieser Vorteile und erfolgreicher Anwendungen in mehreren Domänen (3–9) hatte die Programminduktion bisher nur begrenzte Auswirkungen in der KI. Der Bayes'sche Rahmen hilft, die Herausforderungen zu klären und zeigt gleichzeitig Wege zur Bewältigung auf. Die von uns zur Suche verwendete Programmiersprache definiert den Hypothesenraum und die A-priori-Wahrscheinlichkeit des Lernens; kürzere Programme in dieser Sprache haben höhere A-priori-Wahrscheinlichkeiten. Obwohl jede universelle Programmiersprache die Programminduktion unterstützt, haben frühere Systeme oft festgestellt, dass sie mit einer sorgfältig entworfenen domänenspezifischen Sprache (DSL) beginnen mussten, die starke, handgesteuerte induktive Vorurteile oder A-priori-Wissen lieferte. Ohne eine DSL wären die zu entdeckenden Programme zu lang (niedrige A-priori-Wahrscheinlichkeit) und daher innerhalb einer angemessenen Zeit schwer zu finden. Selbst mit sorgfältig entworfenen Priors ist die Suche nach dem optimalen Programm aufgrund der kombinatorischen Natur des Suchraums für allgemeine Algorithmen fast immer unlösbar. Daher erfordern die meisten praktischen Programminduktionsanwendungen nicht nur handentworfene DSLs, sondern auch speziell entworfene Suchalgorithmen, um diese DSL für eine schnelle Inferenz zu nutzen. Diese beiden Anforderungen begrenzen die Skalierbarkeit und breite Anwendbarkeit der Programminduktion.

DreamCoder löst diese beiden Engpässe, indem es lernt, Programme in einem gegebenen Bereich kompakt darzustellen und effizient zu induzieren. Das System erreicht „Lernen zu lernen“ – bessere Programme zu schreiben und diese effizienter zu durchsuchen – indem es gemeinsam zwei verschiedene Arten von Domänenexpertise aufbaut: (1) explizites deklaratives Wissen, das sich als gelernte domänenspezifische Sprache manifestiert und konzeptuelle Abstraktionen erfasst, die Aufgaben übergreifend sind; und (2) implizites prozedurales Wissen, das sich als neuronales Netz manifestiert und anleitet, wie die gelernte Sprache zur Lösung neuer Aufgaben verwendet wird, was eine gelernte domänenspezifische Suchstrategie verkörpert. Aus Bayes'scher Sicht lernt das System gleichzeitig die A-priori-Verteilung von Programmen und einen durch ein neuronales Netz parametrisierten Inferenzalgorithmus zur effizienten Annäherung der A-posteriori-Verteilung von Programmen unter Berücksichtigung der beobachteten Aufgabendaten.

DreamCoder lernt beide Aspekte auf eine selbstüberwachte, selbstgesteuerte Weise, indem es sie schrittweise über mehrere Begegnungen mit einer Reihe von Trainingsaufgaben aufbaut. Dies ermöglicht es dem Lernen, auf neue Domänen zu skalieren und sich, bei ausreichend vielfältigen Trainingsaufgaben, innerhalb einer Domäne zu erweitern. Typischerweise ist eine moderate Anzahl von Aufgaben ausreichend, um den Lernprozess in einer neuen Domäne zu initiieren. Zum Beispiel repräsentiert die in Abbildung 1B gezeigte Listen-Sortierfunktion eine von 109 Aufgaben, die vom System verarbeitet wurden, welches während des Lernens schrittweise eine Bibliothek von etwa 20 grundlegenden Operationen zur Verarbeitung von Zahlenlisten aufbaute, und diese Operationen wiederum wurden zu grundlegenden Komponenten zur Lösung zukünftiger Aufgaben.

Die von DreamCoder gelernte Sprache nimmt die Form einer mehrschichtigen, hierarchischen Abstraktionsstruktur an (Abbildungen 1B und 7A, B). Diese Hierarchien ähneln internen Darstellungen in tiefen neuronalen Netzen, aber hier baut jede Schicht auf symbolischem Code auf, der von früheren Code-Schichten definiert wurde, wodurch diese Darstellungen natürlich menschenlesbar und interpretierbar werden. Das Abstraktionsnetzwerk wächst mit der Zeit, wobei jede Konzeptschicht auf zuvor erworbenen Konzepten aufbaut, inspiriert davon, wie Menschen konzeptuelle Systeme aufbauen: Wir lernen Algebra vor der Analysis und Arithmetik vor der Algebra; wir lernen, einfache Formen zu zeichnen, bevor wir komplexe Muster zeichnen. Im Beispiel der Listenverarbeitung (Abbildung 1B) implementiert unser Modell das Sortieren einer Zahlenfolge, indem es eine vier Schichten tiefe Bibliothekskomponente aufruft – „n-tes größtes Element nehmen“ –, die wiederum niedrigere, gelernte Konzepte aufruft: Maximum und Filter. Theoretisch könnten äquivalente Programme auch in der Ausgangssprache geschrieben werden, aber die letztlich gelernte Sprache generiert Programme, die leichter verständlich und kürzer sind. Wenn sie nur mit den ursprünglichen Primitiven ausgedrückt würden, wären diese Programme zu komplex, als dass ein Lerner sie innerhalb einer angemessenen Zeit finden könnte. Die meisten Probleme werden erst praktisch lösbar, nachdem domänenspezifisches Fachwissen erworben wurde.

BildBild

Der Name DreamCoder leitet sich von seinem iterativen Wachstum des Domänenwissens über einen „Wach-Schlaf“-Zyklus ab, einem Mechanismus, der grob von den Gedächtniskonsolidierungsprozessen inspiriert ist, die während verschiedener Schlafphasen ablaufen (10, 11). Im Allgemeinen wechselt das „Wach-Schlaf“-Bayes'sche Lernen (12) zwischen dem Training eines generativen Modells, das die A-priori-Verteilung des Lernenden definiert, und einem neuronalen Erkennungsmodell, das lernt, dieses generative Modell angesichts neuer Daten zu invertieren. In der „Wach“-Phase wird das generative Modell zur Erklärung neuer Daten verwendet, geleitet vom Erkennungsmodell; in der „Schlaf“-Phase wird das Erkennungsmodell offline mithilfe von imaginären Datensätzen (als „Träume“ oder „Fantasien“ bezeichnet), die aus dem generativen Modell gesampelt werden, trainiert.

DreamCoder entwickelte den „Wach-Schlaf“-Ansatz für das Programmlernen: Die gelernte Sprache definiert ein generatives Modell über Programme und Aufgaben, wobei jedes Programm eine bestimmte hypothetische Aufgabe löst; das neuronale Netz lernt, Muster zwischen Aufgaben zu erkennen, um Programmkomponenten am besten vorherzusagen, die eine gegebene neue Aufgabe lösen könnten. In der „Wach“-Phase empfängt das System Daten von mehreren Aufgaben und versucht, Programme zu synthetisieren, die diese Aufgaben lösen, während es das neuronale Erkennungsmodell nutzt, um Kandidatenprogramme vorzuschlagen. Das Lernen findet in zwei unterschiedlichen, aber miteinander verknüpften „Schlaf“-Phasen statt: Eine erweitert die gelernte Sprache (d.h. das generative Modell), indem sie neue Abstraktionen integriert, die in Programmen aus der „Wach“-Phase gefunden wurden; die andere optimiert das neuronale Netz (d.h. das Erkennungsmodell) durch Training an „Fantasy“-Programmen, die aus dem generativen Modell gesampelt wurden.

Diese „Wach-Schlaf“-Architektur baut auf zwei bestehenden Ideen auf und integriert sie weiter: Bayes'sches Multi-Task-Programmlernen (5, 13, 14) und neuronal geführtes Programm-Synthese (15, 16). Diese beiden Richtungen haben in der jüngsten Literatur jeweils einen wichtigen Einfluss gehabt, werden aber in unserer Arbeit, beginnend mit dem EC2-Algorithmus (17), zum ersten Mal kombiniert und nun in DreamCoder in größerem Maßstab erweitert (siehe Abschnitt S3 für weitere Diskussionen über frühere Arbeiten).

Das resultierende System hat ein breites Anwendungspotenzial. Wir beschreiben seine Anwendung in acht Domänen (Abbildung 1A): klassische Programmsynthese-Herausforderungen, kreativere visuelle Zeichen- und Konstruktionsprobleme und letztlich das Lernen von Bibliotheken für rekursive Programmierung, Vektoralgebra und grundlegende physikalische Sprachen. Alle unsere Aufgaben beinhalten die Induktion von Programmen aus sehr geringen Datenmengen, z. B. fünf bis zehn Beispielen eines neuen Konzepts oder einer Funktion oder einem Bild oder einer Szene, die ein neues Objekt darstellt. Die gelernten Sprachen umfassen sowohl deterministische als auch probabilistische Programme sowie Programme, die sowohl generativ (z. B. Bilder oder Pläne generieren) als auch bedingt (z. B. Eingaben Ausgaben zuordnen) ausgeführt werden können.

Zusammenfassend hoffen wir, dass diese Anwendungen das Potenzial der Programminduktion als praktische, allgemeine und dateneffiziente Methode zum Aufbau von interpretierbarem und wiederverwendbarem Wissen in KI-Systemen verdeutlichen.

Wach-/Schlaf-Programmlernen

Wir beschreiben nun die spezifischen Details des Lernens in DreamCoder, beginnend mit einem Überblick über den Algorithmus und seine mathematische Formalisierung, gefolgt von einem tieferen Einblick in seine drei Phasen. Der Lernprozess ist iterativ; jede Iteration (Gleichung 1, Abbildung 2) durchläuft einen Zyklus aus einer „Wach“-Phase und zwei „Schlaf“-Phasen: In der „Wach“-Phase wird versucht, Aufgaben zu lösen, gefolgt von zwei „Schlaf“-Phasen, in denen gelernt wird, wie neue Aufgaben gelöst werden können.

In der Wachphase (Abbildung 2 oben) sampelt das System Aufgaben aus einem zufälligen Minibatch des Trainingsdatensatzes (oder je nach Domänengröße und Komplexität möglicherweise auch den gesamten Trainingsdatensatz) und versucht, Programme zu finden, die diese Aufgaben lösen. Das neuronale Erkennungsmodell sortiert dabei die Kandidatenprogramme nach absteigender Wahrscheinlichkeit unter dem Erkennungsmodell Q(ρ|x) und prüft, ob ein Programm ρ der Lösung dieser Aufgabe eine positive Wahrscheinlichkeit (d.h. P[x|ρ] > 0) zuweist.

Da das Modell viele Programme finden kann, die eine bestimmte Aufgabe lösen, behalten wir nur eine kleine Untermenge (k = 5 bei der Beam-Suche) der Programme mit der höchsten A-posteriori-Wahrscheinlichkeit P[ρ|x, L] und marginalisieren über diese Menge von Kandidatenprogrammen in der Schlaf-Aktualisierung von Gl. 1.

Wir stellen Programme als polymorph typisierte λ-Kalkül-Ausdrücke dar, ein sehr ausdrucksstarkes formales System, das Konditionale, Variablen, höhere Funktionen und die Möglichkeit zur Definition neuer Funktionen enthält.

Abstraktionsphase

In der Abstraktions-Schlafphase erweitert das Modell sein Wissenssystem, indem es seine Konzeptbibliothek ausbaut. Ziel ist es, spezialisierte abstrakte Strukturen zu entdecken, die es ihm ermöglichen, die Lösungen für aktuelle Aufgaben leichter auszudrücken. Diese „Ausdrucksleichtigkeit“ äußert sich in einer Präferenz für Bibliotheken, die die in der Wachphase gefundenen Programme am besten komprimieren. Das Ziel der Abstraktions-Schlafphase (Gleichung 1) entspricht der Minimierung der Beschreibungslänge der Bibliothek (−log P[D]) plus der Beschreibungslänge der in der Wachphase gefundenen Programme nach deren RekonstruktionBild.

Intuitiv maximieren wir ein Bayes'sches Kriterium, indem wir „wiederverwendeten Code komprimieren“; aber im Gegensatz zur Komprimierung wiederholter syntaktischer Strukturen offenbaren wir wiederkehrende semantische Muster, indem wir Programme rekonstruieren.

Code kann auf unendlich viele Arten rekonstruiert werden. Daher begrenzen wir die Anzahl der λ-Kalkül-Evaluierungsschritte zwischen einem Programm und seiner Rekonstruktion, wodurch wir eine endliche, aber oft extrem große Menge an Rekonstruktionen erhalten. Abbildung 3 zeigt ein Beispiel: Aus einer Menge allgemeiner Primitive (einschließlich Rekursion, die über den Y-Kombinator implementiert ist) entdeckt das Modell schrittweise einen der grundlegendsten Bausteine der modernen funktionalen Programmierung – die höhere Funktion map. In diesem Beispiel gibt es ungefähr 10¹⁴ mögliche Rekonstruktionen – eine Zahl, die exponentiell mit der Programmgröße und der maximal erlaubten Evaluierungsschritte wächst.

Bild

Um dieses exponentielle Explosionsproblem zu lösen, führen wir eine neue Datenstruktur zur Darstellung und Manipulation dieser Rekonstruktionsmengen ein, die Ideen aus Versionsraumalgebren und Äquivalenzgraphen kombiniert, und leiten einen dynamischen Programmieralgorithmus für ihre Konstruktion ab (siehe Anhang S4.5). Das Wachstum dieser Datenstruktur ist polynomial bezüglich der Programmgröße, was auf die faktorisierte Darstellung gemeinsamer Unterbäume zurückzuführen ist; sie bleibt jedoch exponentiell bezüglich der Grenze der maximalen Evaluationsschritte. Wir können die Größenordnung dieses exponentiellen Terms steuern, indem wir eine kleine Grenze (z. B. 3) setzen, ohne die Leistung zu beeinträchtigen. Das Ergebnis ist eine signifikante Effizienzsteigerung: Ein Versionsraum mit 10⁶ Knoten kann in Minuten berechnet werden und stellt 10¹⁴ Rekonstruktionen aus Abbildung 3 dar, deren explizite Aufzählung und Suche sonst Jahrhunderte dauern würde.

Traumphase

In der Traum-Schlafphase trainiert das System sein Erkennungsmodell, um die Programmsuche während der nachfolgenden Wachphasen bei der Problemlösung zu beschleunigen. Wir implementieren das Erkennungsmodell als neuronales Netz und injizieren Domänenwissen über die Netzarchitektur: Wenn wir beispielsweise Grafikprogramme aus Bildern induzieren, verwenden wir ein Convolutional Network, um es auf das Erlernen nützlicher Bildmerkmale zu voreinstellen.

Wir trainieren das Erkennungsnetzwerk an zwei Arten von selbstüberwachten Datenquellen: wiedergegebenen Daten von Programmen, die während der Wachphase entdeckt wurden, und „Fantasie“-Daten, d.h. Programme, die zufällig aus der Bibliothek L gesampelt wurden. Wiedergegebene Daten stellen sicher, dass das Erkennungsmodell an tatsächlich zu lösenden Aufgaben trainiert werden kann und nicht vergisst, wie man sie löst; „Fantasien“ liefern eine große und hochdiverse Trainingsdatenquelle, was für die Dateneffizienz entscheidend ist: Ein Experte in einer Domäne zu werden, ist weder ein Wenig-Schuss-Lernproblem noch ein Big-Data-Problem. Wir trainieren DreamCoder typischerweise an 100–200 Aufgaben, was für ein leistungsfähiges neuronales Netz eine zu geringe Stichprobengröße ist. Sobald das Modell jedoch eine angepasste Domänenbibliothek gelernt hat, können wir daraus unendlich viele „Träume“ sampeln oder generieren, um das Erkennungsnetzwerk zu trainieren.

Unsere Traumphase unterscheidet sich von der Traumphase in traditionellen „Wach-Schlaf“-Methoden. Klassische „Wach-Schlaf“-Methoden sampeln ein zufälliges Programm aus dem generativen Modell, führen es aus, um eine Aufgabe zu generieren, und trainieren das Erkennungsnetzwerk, um das gesampelte Programm aus dieser Aufgabe vorherzusagen. Wir hingegen betrachten das „Träumen“ als den Prozess der Generierung einer Reihe zufälliger Probleme und deren Lösung während des Schlafes auf aktive Weise, wobei derselbe Programmsuchprozess wie in der Wachphase verwendet wird. Anschließend trainieren wir das Erkennungsnetzwerk, damit es die gefundenen Lösungen basierend auf diesen Problemen vorhersagen kann.

Konkret trainieren wir das Erkennungsmodell Q, um die maximale A-posteriori-Inferenz (MAP) durch Maximierung des folgenden Erwartungswerts auszuführen:

Bild

wobei der Erwartungswert über alle Aufgaben gebildet wird. Wenn dieser Erwartungswert relativ zur empirischen Verteilung der Aufgaben berechnet wird, sind die Trainingsdaten Replay-Daten; wird er relativ zu Samples aus dem generativen Modell berechnet, sind die Trainingsdaten Fantasy-Daten. Wir trainieren mit einer 50/50-Mischung aus Replay- und Fantasy-Daten; für Fantasy-Aufgaben, die Eingaben auf Ausgaben abbilden, sampeln wir Eingaben aus den Trainingsaufgaben. Während Q theoretisch für die vollständige A-posteriori-Inferenz trainiert werden könnte, hat unser MAP-Ziel einen Vorteil: Es lehrt das Erkennungsnetzwerk, für jedes Problem die einfachste, kanonische Lösung zu finden. Technischer ausgedrückt, unser MAP-Ziel bricht die syntaktische Symmetrie im Programmraum, indem es das Netzwerk zwingt, die gesamte Wahrscheinlichkeitsmasse auf ein einziges Element innerhalb einer Menge semantisch äquivalenter, aber syntaktisch unterschiedlicher Ausdrücke zu konzentrieren. Handgeschriebene Symmetrie-Breaking-Mechanismen haben sich für viele Programmsynthesizer als entscheidend erwiesen (22, 23); für die theoretische und empirische Analyse der von DreamCoder gelernten Symmetrie-Breaking-Mechanismen siehe Anhang S4.6.

Ergebnisse

Wir haben DreamCoder zuerst in zwei klassischen Benchmark-Domänen experimentell untersucht: der Listenverarbeitung und der Textbearbeitung. In beiden Fällen wurden die Aufgaben durch bedingte Abbildungen (d.h. Ein-Ausgabe-Beispiele) definiert, und das Training begann mit einer allgemeinen funktionalen Programmiergrundlage, einschließlich grundlegender Routinen wie map, fold, cons, car, cdr usw.

Unsere Aufgaben zur Listenverarbeitung umfassten 218 Probleme aus (17), die zu gleichen Teilen (50/50) in Test- und Trainingssätze aufgeteilt wurden, wobei für jede Aufgabe 15 Ein-/Ausgabe-Beispiele bereitgestellt wurden. Bei der Lösung dieser Probleme synthetisierte DreamCoder etwa 20 neue Bibliotheksroutinen (siehe Anhang S1.1) und entdeckte höhere Funktionen wie filter neu. Jeder Abstraktionszyklus baute auf Konzepten auf, die in früheren Schlafzyklen entdeckt wurden – zum Beispiel lernte das Modell zuerst filter, dann nutzte es dies, um das größte Element aus einer Liste zu extrahieren, dann nutzte es diese Routine, um eine neue Bibliotheksroutine zum Extrahieren des n-ten größten Elements aus einer Liste zu lernen, und schließlich nutzte es diese neue Routine, um Listen von Zahlen zu sortieren (siehe Abbildung 1B).

Die Synthese von Programmen, die Text bearbeiten können, ist ein klassisches Problem in der Programmiersprachen- und Künstlichen-Intelligenz-Literatur (18), und Algorithmen zur Synthese von Textbearbeitungsprogrammen wurden in Microsoft Excel (7) angewendet. Solche Systeme können beispielsweise Abbildungen wie „Alan Turing“ → „A.T.“ beobachten und ein Programm ableiten, das „Grace Hopper“ in „G.H.“ umwandelt. Frühere Textbearbeitungsprogramm-Synthesizer verließen sich auf handentworfene Bibliotheken grundlegender Operationen und handentworfene Suchstrategien. Hier lernen wir diese beiden Elemente gemeinsam und erzielen eine Leistung, die der der derzeit fortschrittlichsten allgemeinen Domänenprogramm-Synthesizer vergleichbar ist.

Wir trainierten das System an 128 automatisch generierten Textbearbeitungsaufgaben und testeten es an 108 Textbearbeitungsproblemen aus dem SyGuS (24) Programmsynthese-Wettbewerb von 2017. Vor dem Lernen löste DreamCoder 3,7% der Probleme innerhalb von 10 Minuten, mit einer durchschnittlichen Suchzeit von 235 Sekunden; nach dem Lernen löste es 79,6% der Probleme und das viel schneller, mit einer durchschnittlichen Lösungszeit von nur 40 Sekunden. Der leistungsstärkste Synthesizer in diesem Wettbewerb, CVC4, löste 82,4% der Probleme – aber die Wettbewerbsbedingungen sahen 1 Stunde pro Problem und 8 CPU-Kerne vor; unter diesen lockereren Rechenressourcenbedingungen lösten wir 84,3% der Probleme.

Darüber hinaus wurden in SyGuS jedem Textbearbeitungsproblem eigene, handentworfene Bibliotheken von Grundoperationen bereitgestellt. Wir hingegen lernten nur eine einheitliche Bibliothek von Textbearbeitungskonzepten, die auf alle Bearbeitungsaufgaben anwendbar ist, was eine notwendige Voraussetzung für praktische Anwendungen darstellt.

Als Nächstes betrachten wir kreativere Aufgaben: das Generieren von Bildern, Plänen und Text. Programmatische oder generative visuelle Konzepte – von Bongard-Problemen (25), handgeschriebenen Zeichen (5, 26) bis hin zu Raven’s Progressive Matrices (27) – werden in der KI und Kognitionswissenschaft ausführlich untersucht, da sie die Verbindung zwischen niederer Wahrnehmung und höherer Schlussfolgerung herstellen.

Hier ließen wir uns von der LOGO-Turtle-Grafik (28) inspirieren und das Modell einen „Stift“ steuern, der über imperativer Flusskontrolle sowie arithmetische Operationen für Winkel und Entfernungen verfügt. Die Aufgabe bestand darin, ein Korpus von 160 Bildern zu zeichnen (50/50 in Test- und Trainingssätze aufgeteilt; siehe Abbildung 4A). Nachdem DreamCoder 20 „Wach-Schlaf“-Zyklen trainiert wurde, untersuchten wir die gelernte Bibliothek (siehe Anhang S1.1) und fanden interpretierbare parametrisierte Zeichenroutinen, die den Kategorien visueller Objekte in ihren Trainingsdaten entsprechen, wie Polygone, Kreise und Spiralen (Abbildung 4B) – das System lernte die grundlegenden Objekttypen in seiner visuellen Welt unbeaufsichtigt.

Bild

Zusätzlich lernte es abstraktere visuelle Beziehungen, wie die radiale Symmetrie, und fügte diese als neue höhere Funktion zur Bibliothek hinzu (Abbildung 4C).

Die Visualisierung der „Träume“ des Systems während seines Lernprozesses kann aufzeigen, wie das generative Modell das Training des Erkennungsmodells leitet: Wenn die Bibliothek wächst und sich immer besser an die aktuelle Domäne anpasst, erhält das neuronale Netz reichere und vielfältigere Trainingsdaten. In den frühen Lernphasen sind zufällige Programme, die mit der Bibliothek geschrieben wurden, einfach und lose strukturiert (Abbildung 4D), was für das Erkennungsmodell von begrenztem Trainingswert ist; nach dem Lernen werden die „Träume“ des Systems jedoch reich strukturiert (Abbildung 4E), indem sie zugrunde liegende Bausteine und Muster, die aus Trainingsdaten gewonnen wurden, auf kreative Weise kombinieren, die in seiner Wach-Erfahrung nie vorhanden waren, aber sehr gut geeignet sind, um ein Erkennungsmodell mit breiten Generalisierungsfähigkeiten zu trainieren (29).

Inspiriert von der klassischen KI-Aufgabe „copy demo“ – bei der ein Agent einen aus Blöcken gebauten Turm beobachtet und dann versucht, ihn nachzubauen (30) – gaben wir DreamCoder als Nächstes 107 „copy tower“-Aufgaben (50/50 in Test- und Trainingssätze aufgeteilt, siehe Abbildung 5A). Dabei musste das System gleichzeitig ein Bild eines Turms und die Position jedes seiner Blöcke beobachten und ein Programm schreiben, das plant, wie ein simulierter Roboterarm diesen Turm bauen würde. Die vom System verwendeten Steuerungsfluss-Primitive waren die gleichen wie bei LOGO-Grafiken. In seiner gelernten Bibliothek fanden wir parametrisierte „Optionen“ (31) zum Bau von Blocktürmen, einschließlich Konzepte wie Bögen, Treppen und Brücken, die auch in den Träumen des Modells auftauchten (Abbildungen 5C-D).

Bild

Als Nächstes betrachten wir die Fähigkeit, probabilistische generative Konzepte mit wenigen Beispielen zu lernen, eine natürliche menschliche Fähigkeit, wie z. B. das Erlernen neuer Regeln in der natürlichen Sprache (32), das Erlernen regelmäßiger Muster von Symbolen und Zeichen (5) oder das Erlernen neuer motorischer Programme zur Wortproduktion (33). Wir ließen DreamCoder zunächst ein probabilistisches reguläres Ausdruck (Regex, siehe Beispiel in Abbildung 1A) aus einer kleinen Anzahl von Strings ableiten, wobei diese Strings aus 256 CSV-Spalten stammten, die von Webseiten gescrapt wurden (Datenquelle: (34), Aufgaben 50/50 in Test- und Trainingssätze aufgeteilt, 5 String-Beispiele für jedes Konzept bereitgestellt). Das System lernte, reguläre Ausdrücke zu lernen, die typische Textkonzeptstrukturen beschreiben, wie Telefonnummern, Daten, Zeiten oder Geldbeträge (siehe Abbildung S5). Es kann viele reale Textmuster interpretieren und sie als probabilistische generative Modelle interpretieren, um neue Instanzen dieser Konzepte zu imaginieren.

Zum Beispiel, obwohl DreamCoder das Konzept eines Dollarbetrags nicht versteht, kann es aus Beispielen wie $5.70, $2.80, $7.60 ein zugrunde liegendes abstraktes Muster ableiten und andere Beispiele wie $2.40 und $3.30 generieren. Bei Mustern mit Ausnahmen, wie -4.26, -1.69, -1.622, ..., -1, leitet es ein probabilistisches Modell ab, das typischerweise Strings wie -9.9 generiert, aber gelegentlich auch Anomalien wie -2. Es kann auch einige obskurere Konzepte lernen – Konzepte, die Menschen möglicherweise nicht kennen, aber die es mit nur wenigen Beispielen schnell lernen und generalisieren kann: Zum Beispiel, nachdem Beispiele wie -00:16:05.9, -00:19:52.9, -00:33:24.7 gegeben wurden, leitet es ein generatives Konzept ab, das -00:93:53.2 und auch vernünftige Näherungen wie -00:23=43.3 erzeugen kann.

Zuletzt betrachten wir die Inferenz von reellwertigen parametrisierten Gleichungen, die glatte Trajektorien erzeugen (siehe Anhang S2.1.6 und Abbildung 1A, „Symbolische Regression“). Das Ziel jeder Aufgabe ist es, Daten, die von einer bestimmten Kurve erzeugt wurden – entweder einer rationalen Funktion oder einem Polynom bis zum vierten Grad –, anzupassen. Wir initialisierten DreamCoder mit Addition, Multiplikation, Division sowie wichtigen beliebigen reellwertigen Parametern und optimierten diese Parameter mittels Gradientenabstieg im inneren Schleifendurchlauf. Wir modellierten jedes parametrisierte Programm so, dass es probabilistisch eine Menge von Kurven generiert, und bestraften die Verwendung dieser kontinuierlichen Parameter mit dem Bayes'schen Informationskriterium (BIC) (35). Unser Bayes'scher Mechanismus lernte, sich auf Programme zu konzentrieren, die sowohl die Daten erklären als auch die Verwendung überschüssiger kontinuierlicher Parameter minimieren. Zum Beispiel, wenn reellwertige Daten für 1.7x² − 2.1x + 1.8 gegeben wurden, leitete es ein Programm mit drei kontinuierlichen Parametern ab; während es bei Daten für x−2.2/3.8 ein Programm mit nur zwei kontinuierlichen Parametern ableitete.

Quantitative Analyse von DreamCoder über Domänen hinweg

Um besser zu verstehen, wie DreamCoder lernt, haben wir das vollständige System mit mehreren Varianten verglichen, denen Schlüsselkomponenten fehlten: entweder das neuronale Erkennungsmodell (d.h. die „Traum“-Schlafphase) oder die Fähigkeit, neue Bibliotheksroutinen zu bilden (d.h. die „Abstraktions“-Schlafphase). Wir haben es auch mit den folgenden Baseline-Methoden verglichen:

- Exploration-Compression (13): wechselt zwischen der Suche nach Programmen und dem Komprimieren wiederverwendeter Komponenten, um eine gelernte Bibliothek zu bilden, verwendet aber unseren Rekonstruktionsalgorithmus nicht;

- Neuronale Programmsynthese: trainiert ein RobustFill (16) Modell an Proben aus der Initialbibliothek;

- Enumeration: führt für jede Aufgabe 24 Stunden lang eine typgesteuerte Enumeration (23) durch, wobei bis zu 400 Millionen Programme generiert und getestet werden.

Um die Rolle des Kompressionsmechanismus beim Erlernen guter Bibliotheken zu isolieren, konstruierten wir auch zwei „Memorize“-Baselines. Diese Varianten erweitern die Bibliothek, indem sie Aufgabenlösungen als neue Primitive vollständig in die Bibliothek aufnehmen; sie versuchen nicht zu komprimieren, sondern speichern einfach die in der Wachphase gefundenen Lösungen, um sie bei neuen Problemen wiederzuverwenden (siehe (36)). Wir bewerteten „Memorize“-Varianten mit und ohne neuronalem Erkennungsmodell.

In mehreren Domänen löste unser Modell durchweg die meisten verbleibenden Testaufgaben (Abbildung 6A; siehe Abbildung S13 für Memorize-Baselines) und schloss sie in der Regel in kürzester Zeit ab (Mittelwert 54,1 Sekunden; Median 15,0 Sekunden; Abbildung S11). Diese Ergebnisse zeigen, dass die Kernkomponenten von DreamCoder – das Bibliothekslernen durch Rekonstruktion und Komprimierung in der „Schlaf-Abstraktions“-Phase und das Lernen des Erkennungsmodells in der „Schlaf-Traum“-Phase – beide wesentlich zu seiner Gesamtleistung beitragen.

Bild

Die Synergie zwischen diesen Komponenten zeigt sich besonders deutlich in kreativeren und generativeren Bereichen des strukturierten Bauens (wie LOGO-Grafiken und Turmkonstruktionen): In diesen Bereichen konnte kein alternatives Modell mehr als 60 % der zurückgehaltenen Aufgaben lösen, während DreamCoder lernte, nahezu 100 % der Aufgaben zu lösen. Die in Abbildung 6A dargestellte Zeit, die DreamCoder zum Trainieren bis zur Konvergenz benötigte, variierte je nach Domäne, betrug aber bei moderaten Rechenressourcen (20–100 CPUs) typischerweise etwa einen Tag.

Durch die Beobachtung des Wachstums der gelernten Bibliothek über die Zeit (unabhängig davon, ob ein gelerntes Erkennungsmodell enthalten war oder nicht) fanden wir signifikante funktionale Unterschiede in ihrer Tiefe und ihrem Umfang. Über Domänen hinweg korrelierten tiefere Bibliotheken stark mit höheren Aufgabenlösungsraten (Korrelationskoeffizient r = 0,79), und Systeme mit einem gelernten Erkennungsmodell zeigten bei allen Tiefen eine bessere Leistung. Darüber hinaus führte das Erkennungsmodell auch zu einer tieferen, letztlich gelernten Bibliothek, wodurch höhere asymptotische Leistungsniveaus erreicht wurden (Abbildung 6B, Abbildung S1). Eine ähnliche, aber schwächere Beziehung bestand auch zwischen der Größe der gelernten Bibliothek und der Leistung. Daher scheint das Erkennungsmodell das Lernen „besserer“ Bibliotheken zu leiten, wobei „besser“ sowohl mit der Tiefe als auch mit der Breite der gelernten symbolischen Darstellungen zusammenhängt.

Aus der Perspektive, wie DreamCoders Erkennungsmodell das Bibliothek-Lernen anleitet, haben wir analysiert, wie diese Darstellungen gemeinsam die Ähnlichkeitsstruktur der zu lösenden Probleme einbetten. DreamCoder kodiert zunächst eine Aufgabe in den Aktivierungen seines Erkennungsnetzwerks und stellt diese Aufgabe dann mit einem symbolischen Programm, das sie löst, neu dar. Mit fortschreitendem Lernen passen sich diese impliziten Anfangsdarstellungen allmählich der expliziten Struktur der endgültigen Programmlösungen an, was sich in einer zunehmenden Korrelation zwischen der Problemähnlichkeit im Aktivierungsraum des Erkennungsnetzwerks und der Ähnlichkeit der zur Problemlösung verwendeten Codekomponenten äußert (siehe Abbildung S4; unter Verwendung des χ²-Tests, p < 10⁻⁴ vor und nach dem Lernen). Die Visualisierung dieser gelernten Aufgabenähnlichkeiten durch t-SNE-Einbettungen zeigte, dass das Modell mit dem Erwerb eines reicheren konzeptuellen Vokabulars seine Darstellungen Aufgaben mit höherer abstrakter Gemeinsamkeit schrittweise gruppiert (Abbildung S3) – was möglicherweise ähnlich ist, wie menschliche Domänenexperten lernen, Probleme anhand zugrunde liegender Prinzipien statt oberflächlicher Ähnlichkeiten zu kategorisieren (37, 38).

Vom Lernbibliotheken zum Sprachenlernen

Unsere bisherigen Experimente untersuchten, wie DreamCoder von einem „Anfänger“-Zustand wächst, wobei ihm anfangs einige grundlegende domänenspezifische Prozeduren gegeben werden, sodass nur die einfachsten Probleme kurze, direkte Lösungen haben; während das System allmählich zu einem „Experten“-Zustand wächst, beherrscht es verschiedene Konzepte, die es ermöglichen, selbst die schwierigsten Probleme mit kurzen, bedeutungsvollen Programmen zu lösen. Jetzt stellen wir eine Frage: Kann das Lernen von einem noch schlankeren Ausgangspunkt aus erfolgen, sogar ohne jegliches grundlegendes Domänenwissen zu Beginn? Kann DreamCoder nur von hochgenerischen Programmier- und Arithmetikprimitiven ausgehend schrittweise eine domänenspezifische Sprache entwickeln, die sowohl grundlegende als auch fortgeschrittene Domänenkonzepte enthält, um so alle Probleme in einem bestimmten Bereich lösen zu können?

Inspiriert von der Forschung in der klassischen Physik zur Ableitung physikalischer Gesetze aus experimentellen Daten (39–41), ließen wir DreamCoder zunächst 60 verschiedene physikalische Gesetze und mathematische Identitäten lernen, die aus den „Spickzetteln“ der AP- und MCAT-Physikprüfungen stammen, basierend auf numerischen Beispieldaten, die jeder Formel entsprechen. Der vollständige Datensatz umfasste viele bekannte Gesetze aus Mechanik und Elektromagnetismus, die natürlich mit Konzepten wie Vektoren, Kräften und Verhältnissen ausgedrückt werden. Aber anstatt diese mathematischen Abstraktionen direkt bereitzustellen, initialisierten wir DreamCoder nur mit einer allgemeineren Grundlage – einigen rekursiven Sequenzoperationsprimitiven (z.B. map und fold) und grundlegenden arithmetischen Operationen – und testeten, ob es selbstständig eine mathematische Sprache lernen könnte, die auf die Physik anwendbar ist.

Tatsächlich lernte DreamCoder nach 8 „Wach-Schlaf“-Zyklen erfolgreich 93% der Gesetze und Identitäten im Datensatz. Es lernte zunächst die grundlegenden Bausteine der Vektoralgebra, wie Skalarprodukt, Vektorsumme und Norm (Abbildung 7A). Anschließend nutzte es dieses mathematische Vokabular, um Konzepte zu konstruieren, die mehreren physikalischen Gesetzen zugrunde liegen, wie das Muster des „Inversquadratgesetzes“, was es ihm ermöglichte, Newtonsches Gravitationsgesetz und Coulombs Gesetz der elektrostatischen Kraft zu lernen, wodurch effektiv eine „Basistransformation“ von seiner ursprünglichen rekursiven Sequenzverarbeitungssprache zu einer physikähnlichen Sprache vollzogen wurde.

Könnte DreamCoder also auch diese rekursive Sequenzverarbeitungssprache selbst lernen? Wir initialisierten das System mit nur der minimalen Menge von Primitiven aus dem Lisp von 1959 (car, cdr, cons, ...) und forderten es auf, 20 grundlegende Programmieraufgaben zu lösen – Aufgaben, die den gängigen Übungen in Einführungskursen der Informatik ähneln. Entscheidend ist, dass die Ausgangssprache die ursprünglichen Rekursionsmechanismen (Y-Kombinator) enthielt, die es dem Lernenden theoretisch erlaubten, beliebige rekursive Funktionen auszudrücken, aber ansonsten keine fertigen rekursiven Funktionen bereitstellte; in früheren Einstellungen kapselten wir die Rekursion in höhere Funktionen (z.B. map, fold usw.), die dem Lernenden als Primitive zur Verfügung gestellt wurden. Mit ausreichend Rechenzeit (etwa fünf Tage auf 64 CPUs) lernte DreamCoder alle 20 Probleme zu lösen und baute dabei eine Bibliothek auf, die modernen funktionalen Programmieridiomen entspricht, einschließlich map, fold, zip, length und arithmetische Operationen wie das Generieren von Listen natürlicher Zahlen innerhalb eines Intervalls (siehe Abbildung 7B).

Alle diese Bibliotheksfunktionen können mit der höheren Funktion fold und ihrem Dual unfold ausgedrückt werden. Diese beiden Operationen sind formal die beiden grundlegendsten Operationen auf rekursiven Datentypen, eine Entdeckung, die als „Origami-Programmierung“ (42) bekannt ist. DreamCoder reproduzierte diesen Entdeckungsprozess: Es erfand zuerst fold, dann unfold und definierte anschließend alle anderen rekursiven Funktionen als Kombinationen von fold und unfold.

Diskussion

Unsere Forschung zeigt, dass der Aufbau eines allgemeinen Programminduktionssystems möglich und praktikabel ist: Es ist in der Lage, das erforderliche Fachwissen zu erlernen, um neue Lernaufgaben in vielen grundlegend unterschiedlichen Bereichen darzustellen und zu lösen, und seine Fachkenntnisse mit zunehmender Erfahrung kontinuierlich zu verbessern. Das optimale Fachwissen in DreamCoder basiert auf dem gemeinsamen Lernen von explizitem deklarativem Wissen und impliziten prozeduralen Fähigkeiten.

Im weiteren Sinne zeigt DreamCoders Fähigkeit, tiefe explizite Darstellungen der Domänenkonzeptstrukturen zu lernen, die starke Fähigkeit, Symbolik, probabilistische Methoden und neuronales Netzwerklernen zu kombinieren: Hierarchische Repräsentationslernalgorithmen können menschlich verständliches Wissen schaffen, anders als traditionelle tiefe neuronale Netze; die daraus resultierenden symbolischen Fachkenntnisdarstellungen sind flexibel, passen sich mit der Erfahrung an und erweitern sich, anders als traditionelle KI-Expertensysteme.

In den von uns hier betrachteten Problemen lässt sich der Lösungsraum durch klare symbolische Formen genau erfassen, selbst in Domänen, die andere Komplexitäten aufweisen, wie z. B. Bildeingaben auf Pixelebene, Ausnahmen und Unregelmäßigkeiten in generativen Textmustern oder die kontinuierlichen Parameter, die wir im symbolischen Regressionsbeispiel verwendet haben. Ein Großteil der realen Daten ist jedoch weitaus unordentlicher. Eine zentrale Herausforderung für die zukünftige Programminduktion besteht darin, wie besser mit allgegenwärtigem Rauschen und Unsicherheit umgegangen werden kann, was eine stärkere Abhängigkeit von probabilistischen und neuronalen KI-Methoden erfordert (5, 43, 44).

Jüngste Forschungen haben verschiedene hybride neuronal-symbolische Darstellungen für die Programminduktion untersucht (45–49), und die Kombination dieser Methoden mit DreamCoders Bibliothekslernen und selbstgesteuerten Fähigkeiten könnte eine wichtige Richtung für zukünftige Entwicklungen sein.

Die Ausweitung der Programminduktion auf das gesamte KI-Feld – wie Common Sense Reasoning, natürliches Sprachverständnis oder kausale Inferenz – erfordert noch erhebliche Innovationen, birgt aber auch ein enormes Potenzial. Als Lernvehikel haben Programme einzigartige Vorteile: Sie vereinen universelle Ausdruckskraft, dateneffiziente Generalisierungsfähigkeit und das Potenzial für interpretierbare, zusammensetzbare Wiederverwendbarkeit.

Heute können wir nicht nur einzelne Programme, sondern ganze domänenspezifische Sprachen lernen, was eine weitere Eigenschaft von Programmen besonders wichtig macht: Programme drücken Wissen auf eine Weise aus, die sowohl Menschen als auch Maschinen verstehen können.

In Anerkennung dessen, dass jedes KI-System im Wesentlichen ein gemeinsames Produkt menschlicher und maschineller Intelligenz ist, glauben wir, dass die hier gezeigten Werkzeuge die Grundlage für den Aufbau eines wirklich von Mensch und Maschine gemeinsam gestalteten KI-Entwicklungspfades legen.

In der folgenden Diskussion werden wir die umfassenderen Auswirkungen unserer Arbeit für den Aufbau besserer menschlicher Lernmodelle sowie menschenähnlicherer Formen des maschinellen Lernens näher beleuchten.

Schnittstelle zum biologischen Lernen

DreamCoders „Wach-Schlaf“-Mechanismus ist von der Helmholtz-Maschine inspiriert, die wiederum grob von menschlichen Lernprozessen während des Schlafs abgeleitet ist. DreamCoder führt ein Paar von ineinandergreifenden „Schlaf“-Zyklen ein, und interessanterweise ist auch der biologische Schlaf in mehrere Phasen unterteilt. Der Rapid Eye Movement (REM)-Schlaf, d.h. der „Traum“-Schlaf, ist mit den Lernprozessen verbunden, die implizite prozedurale Fähigkeiten hervorbringen (11), und beinhaltet episodische Wiederholung und Träumen, ähnlich der „Traum“-Schlafphase in unserem Modell.

Der Tiefschlaf hingegen ist mit der Bildung und Konsolidierung neuer deklarativer Abstraktionen verbunden (10), was grob der „Abstraktions“-Schlafphase in unserem Modell entspricht. Obwohl DreamCoder und die Helmholtz-Maschine nicht dazu konzipiert wurden, biologische Prozesse zu modellieren, spekulieren wir, dass unsere Methoden die „Wach-Schlaf“-Lernalgorithmen den Lernprozessen näherbringen könnten, die tatsächlich im menschlichen Schlaf ablaufen.

DreamCoders Wissen wächst schrittweise, und sein dynamischer Mechanismus ist mit früheren Entwicklungstheorien des „Curriculum Learning“ (50) und des „Starting Small“ (51) verwandt, unterscheidet sich aber von ihnen. Anders als bei Curricula, bei denen menschliche Lehrer die Schwierigkeitsreihenfolge der Aufgaben festlegen und das System sie schrittweise lösen lässt, ähnelt DreamCoders Lernweise eher der unüberwachten Exploration in der Natur: Es versucht, zufällig ausgewählte Aufgaben zu lösen, erforscht in der Wachphase die Grenzen seiner Fähigkeiten und erweitert diese Grenzen in den nachfolgenden Schlafzyklen, indem es Konzepte, die aus einfachen Aufgaben gelernt wurden, zur Lösung komplexerer Aufgaben nutzt.

Menschliches Lernen ist jedoch aktiver: Menschen können wählen, welche Aufgaben sie lösen, und sogar selbst Aufgaben generieren – entweder als Zwischenschritte zu schwierigeren Problemen oder aus Neugierde oder ästhetischen Motiven. Agenten zu bauen, die auf menschenähnliche Weise automatisch Probleme generieren können, ist ein wichtiger zukünftiger Schritt.

Unsere Unterteilung des Domänenfachwissens in explizites deklaratives Wissen und implizite prozedurale Fähigkeiten ist grob von den „Dual-Prozess-Modellen“ in der Kognitionswissenschaft (52, 53) sowie Studien an menschlichen Experten (37, 38) inspiriert. Menschliche Experten lernen nicht nur deklarative Domänenkonzepte, die in Sprache ausgedrückt werden können – zum Beispiel lernen Künstler Prinzipien von Kurven, Symmetrie und Perspektive; Physiker lernen Skalarprodukte, Vektorfelder und das Inverse-Quadrat-Gesetz –, sondern beherrschen auch prozedurale (und oft implizite) Fähigkeiten zur schnellen Anwendung dieser Konzepte zur Lösung neuer Probleme.

Diese beiden Arten von Wissen ermöglichen es Experten gemeinsam, Probleme anhand ihrer „tiefen Struktur“ genauer zu kategorisieren (37, 38) und intuitiv zu beurteilen, welche Konzepte nützlich sein könnten, noch bevor sie mit der Suche nach einer Lösung beginnen. Wir glauben, dass beide Arten von Fachwissen wesentliche Bestandteile für biologische und künstliche Lernsysteme sind, wobei neuronale Netze und symbolische Methoden hier eine komplementäre Rolle spielen.

Was sollte eingebaut, was gelernt werden?

Das Ziel, wie Menschen zu lernen – insbesondere wie Kinder –, wird von Forschern oft mit dem Ziel des „Lernens von Grund auf“ gleichgesetzt. Sie nehmen an, wie Turing vorschlug, dass Kinder fast als „leere Tafeln“ beginnen: „wie ein Notizbuch, das man im Schreibwarengeschäft kauft: sehr wenig Mechanismus und viele leere Seiten.“ (1)

Die Programminduktion als Ansatz zur allgemeinen KI hat ihre Wurzeln ebenfalls in dieser Vision, angetrieben durch frühe Forschungsergebnisse, die zeigten, dass es prinzipiell möglich ist, Programme, die jedes berechenbare Problem lösen können, aus einer minimalen Turing-vollständigen Sprache zu induzieren (2, 54–56). DreamCoders Fähigkeit, die grundlegenden Vokabulare der funktionalen Programmierung, Vektoralgebra und Physik von Grund auf zu entdecken, kann als ein weiterer Schritt in diese Richtung betrachtet werden.

Könnte diese Methode also weiter ausgebaut werden, nicht nur ein Bereich nach dem anderen, sondern ausgehend von einer minimalen Basis gleichzeitig Fachkenntnisse in mehreren verschiedenen Problemtypen entwickeln? Solch ein Fortschritt könnte auf domänenübergreifendem Metlernen beruhen – d.h. dem Aufbau einer domänenübergreifenden Bibliothek oder „Sprache des Denkens“ (57, 58), so wie sie die Menschheit durch biologische und kulturelle Evolution kollektiv aufgebaut hat, und die sich dann in unendlich viele Darstellungen für neue Problembereiche aufspalten kann.

Obwohl diese Richtungen faszinierend sind, ist es nicht unbedingt unser bester Weg zur Künstlichen Intelligenz, so viel aus einer so minimalen Grundlage zu lernen – insbesondere heute, wo wir auf den Schultern vieler Giganten stehen können. Selbst wenn „von Grund auf“ theoretisch möglich ist, stoßen solche Methoden oft auf das bekannte Problem des Datenhungers (z. B. bei neuronalen Netzen) oder erfordern, wenn sie nicht datenabhängig sind, enorme Rechenressourcen: DreamCoder verbrauchte etwa ein CPU-Jahr allein, um „origami-ähnliche“ funktionale Programmierfähigkeiten aufzubauen.

Stattdessen lassen wir uns von den „Sketching“-Ansätzen der Programmsynthese inspirieren (22). Sketching-Methoden behandeln typischerweise einzelne Syntheseprobleme unabhängig voneinander und erwarten, dass menschliche Ingenieure das Skelett der Lösung skizzieren. Ähnlich rüsten wir unser System mit grundlegenden Elementen aus, die unserer Meinung nach für die Lösung von Problemen in mehreren verschiedenen Domänen entscheidend sind – eine relativ prägnante, aber universell leistungsstarke Reihe von Kontrollflussoperatoren, höheren Funktionen und einem Typsystem. Anschließend nutzen wir Lernmechanismen, um auf diesen Grundlagen spezialisierte Sprachen aufzubauen.

Die Zukunft des Lernens in der Programmsynthese könnte in Systemen liegen, die mit reichhaltigeren, aber dennoch weit anwendbaren Ressourcen initialisiert werden, wie sie beispielsweise Simulations-Engines oder moderne Standardbibliotheken von Programmiersprachen verkörpern.

Diese Vision prägt auch unsere Sichtweise, wie die Programminduktion am besten zum Aufbau menschlicherer KI beitragen kann: nicht durch das Streben nach „Whiteboard“-Lernen, sondern durch das Lernen auf der Grundlage eines reichen Bestandes an eingebettetem Wissen. Bevor menschliche Kinder die verschiedenen Domänen lernen, die wir hier diskutieren, verfügen sie von Natur aus über „Kernwissen“: Konzeptsysteme zum Darstellen und Schlussfolgern über Objekte, Agenten, Raum und andere Konzepte des gesunden Menschenverstandes (59–61).

Wir unterstützen nachdrücklich einen KI-Ansatz, der von den bereits vorhandenen menschlichen Konzeptressourcen ausgeht und ein menschenlesbares Wissenssystem aufbaut. Dies könnte unser bester Weg zu einem KI-System sein, das in der menschlichen Welt existiert und mit menschlicher Intelligenz koexistiert.

Original-Link: https://arxiv.org/pdf/2006.08381

Hauptkategorie:Künstliche Intelligenz

Unterkategorien:ProgrammsyntheseErklärbare KIBayessches LernenWach-Schlaf-Lernen


Vorheriger:GitHub Copilot's Agent-Modus und MCP-Unterstützung offiziell in JetBrains, Eclipse und Xcode verfügbar!

Nächster:Weiß KI, wann sie "denken" soll? Thinkless bringt großen Sprachmodellen bei, wann sie nachdenken müssen

Kurz-URL teilen