banner
Nachrichtenzentrum
Inklusive Firma

Die KI von Deepmind lernt etwas über die Kunst des Programmierens

Sep 03, 2023

Gregory Barber

Im Bereich der Informatik gibt es vielleicht keine grundlegendere Aufgabe als das Sortieren. Blase, Haufen, Zusammenführung – treffen Sie Ihre Wahl. Die Methoden zur Neuordnung von Daten in einem Computer wurden zu Tode theoretisiert, dienten Millionen von Anfängern als Übungsübungen und wurden jahrzehntelang von erfahrenen Entwicklern optimiert. Geben Sie eine sort()-Funktion in einer beliebigen Programmiersprache ein und Sie können sich auf den Code verlassen, auf den Sie sich verlassen können. Fass es nicht an. Es funktioniert schon super.

Aber letztes Jahr hat sich ein von Ingenieuren von Googles Deepmind entwickeltes KI-System gerade so weit verbessert, dass es von Bedeutung ist. Das System, das Deepmind AlphaDev nennt, hatte die Aufgabe, eine neue Methode zum Sortieren kurzer Sequenzen in Zahlen in C++, der beliebten Programmiersprache, zu entwickeln. Es bedeutete, unter die Haube zu gehen und die KI neue Algorithmen in Assembler-Code erstellen zu lassen – die Anweisungen, die die Lücke zwischen Programmiersprachen wie C++ und Computerhardware schließen. Wenn ein C++-Entwickler dem Computer sagt, er solle „sortieren“, werden diese Befehle in maschinenlesbaren Code umgewandelt, der dem Arbeitsspeicher und dem Prozessor eines Computers genau sagt, was zu tun ist: wohin Daten verschoben und wie sie geändert werden sollen. Hier treffen Teile auf Metall.

Das Experiment hat funktioniert. Seit April letzten Jahres läuft C++ dank eines neuen Satzes KI-basierter Sortieralgorithmen etwas schneller. Aber laut den Ingenieuren von AlphaDev, die die Arbeit heute in Nature beschrieben haben, ist das nur der erste Schritt. „Wir wollen den gesamten Computerstapel optimieren“, sagt Daniel Mankowitz, wissenschaftlicher Mitarbeiter bei Deepmind, der das Sortierprojekt leitete. Mankowitz sagt, dass AlphaDev bereits Algorithmen nicht nur für die Sortierung, sondern auch für andere grundlegende Aufgaben wie Hashing verbessert hat.

„Ich finde diese Arbeit unglaublich spannend“, sagt Armando Solar-Lezama, Experte für Programmsynthese am MIT, der nicht an der Forschung beteiligt war. Es ist nützlich, wenn die KI einen neuen Sortieralgorithmus entwickelt. Es sei eine viel größere Sache, eine KI aufzubauen, die lernen kann, hochmodernen Code für eine Vielzahl von Aufgaben zu schreiben, sagt er. Das bedeutet, dass AlphaDev begonnen hat, etwas Grundlegenderes über die Kunst des Codierens selbst zu lernen.

Das bringt natürlich erhebliche Einschränkungen mit sich. „Das sind winzig kleine Programme“, fügt er hinzu – insgesamt nicht mehr als ein paar Dutzend Anweisungen im Assembler-Code. Aber diese winzigen Programme stellen oft große Engpässe für die Computerleistung dar, da sie so weit optimiert wurden, wie es den Menschen möglich ist. Insgesamt sind die neuen C++-Sortieralgorithmen von AlphaDev beim Sortieren langer Zahlenfolgen 1,7 Prozent effizienter als die vorherigen Methoden und bei Folgen mit fünf Elementen bis zu 70 Prozent schneller. Im Maßstab summieren sich diese Verbesserungen, sagt Mankowitz. Seitdem der KI-geschriebene Code an Libc++, eine große Open-Source-Bibliothek für C++, übermittelt wurde, wurden die Algorithmen seiner Schätzung nach Billionen Mal am Tag verwendet.

Diese Verbesserungen sind einer Technik namens „Reinforcement Learning“ zu verdanken, bei der es sich um denselben Ansatz handelt, der Deepminds KI dabei hilft, Spiele wie Schach und Go zu meistern. Diese Art von KI lernt durch Handeln. Es funktioniert, indem es eine bestimmte Aufgabe – wie das Schreiben eines Assemblerprogramms – als ein Spiel behandelt, bei dem die KI Belohnungen für kluge Bewegungen erhält, die die Effizienz des Programms steigern. Im Laufe der Zeit arbeitet das System daran, diese Belohnung zu maximieren, was zu einer erfolgreichen Go-Strategie oder einem schnelleren Montageprogramm führt. Dies unterscheidet sich von der Art von KI, die in großen Sprachmodellen wie GPT-4 zu finden ist, die auf riesigen Datenmengen basieren, um zu lernen, wie man Wörter oder Code schreibt. Das eignet sich hervorragend für die Erstellung von Texten, die den Ton des Internets widerspiegeln, oder für die Erstellung allgemeiner Codesegmente. Aber es ist nicht so gut darin, neuartige, hochmoderne Lösungen für Codierungsherausforderungen zu entwickeln, die die KI noch nie zuvor gesehen hat.

Jeremy White

Emily Mullin

WIRED-Mitarbeiter

Will Knight

Wie Schach oder Go ist das Schreiben von Assembler-Code eine knifflige Aufgabe mit offenem Ende, mit vielen möglichen Zügen und vielen Möglichkeiten, Fehler zu machen. Moderne Programmiersprachen wie C++ oder Python verschleiern die Feinheiten des Verschiebens von Daten mit kurzen Befehlen, die die menschliche Sprache widerspiegeln. Als in den 1950er Jahren solche „Hochsprachen“ auf den Markt kamen, glaubten einige, das Problem der Programmierung sei im Grunde gelöst. Bis dahin bestand die Programmierung im Wesentlichen nur darin, in Assembler herumzuspielen – so sehr, dass Fortran, eine der ersten Hochsprachen, zunächst als „automatisches Fortran-Codierungssystem“ vermarktet wurde, weil seine Befehle immer in funktionierenden Assembler-Code übersetzt wurden. „Fortran wollte Code besser schreiben als Menschen und ohne Fehler“, sagt Solar-Lezama. „Heute klingt das lächerlich. Aber es war wahr.“

Um eine Sprache wie C++ oder Fortran zu verbessern, muss man oft noch an der zugrunde liegenden Assembly herumbasteln und Wege finden, sie schneller arbeiten zu lassen, meist durch das Weglassen überflüssiger Schritte. Da es der Assembly an formalen Strukturen und Abstraktionen einer übergeordneten Programmierung mangelt und ein einziger Fehler dazu führen kann, dass der Algorithmus kaputt geht, macht das Spiel, das die KI spielen muss, keinen Spaß. „Es wird immer und immer wieder scheitern“, erklärt Solar-Lezama.

Die Innovation von AlphaDev besteht darin, dass es die Darstellung der Struktur eines funktionierenden Assemblerprogramms im KI-Code verbessert. Dadurch kann das Belohnungssystem die Möglichkeiten besser eingrenzen. Die KI wird besser und schneller.

Auf hoher Ebene kommt mir die Sortierlösung der KI bekannt vor. Es gibt nur begrenzte Möglichkeiten, eine Handvoll Zahlen in aufsteigender Reihenfolge anzuordnen. Es schafft es, mithilfe einiger unkonventioneller Anweisungen einige Anweisungen in der Montagesequenz einzusparen – solche, an die ein menschlicher Programmierer wahrscheinlich nicht denken würde. Mankowitz vergleicht diese Aktionen mit Zug 37, der berüchtigten Hand, die AlphaGo in seinem Freundschaftsspiel 2016 gegen Großmeister Lee Sedol spielte. Der Schachzug war so seltsam, dass Beobachter zunächst dachten, der Computer hätte das Spiel verpfuscht. Aber es war ausschlaggebend für den Sieg des Computers und hat seitdem die Art und Weise, wie das Spiel gespielt wird, verändert.

Der resultierende Code sieht daher etwas seltsam aus, teilweise weil er den Computer dazu zwingen muss, Daten auf ganz bestimmte Weise zu verschieben. „Es ist definitiv keine wirtschaftliche Art, Code zu schreiben“, sagt Nikolas Klauser, ein Libc++-Mitarbeiter, der den Vorschlag von Deepmind im vergangenen Frühjahr überprüft hat. Dies erhöhte den Einsatz für die tatsächliche Produktion des Codes, sagt er. Es ist riskant, grundlegende Algorithmen wie die Sortierung zu aktualisieren, die jahrelang einwandfrei funktioniert haben, um die Effizienz möglicherweise nur geringfügig zu verbessern. Aber am Ende hat alles gepasst. Das Code-Update wurde durchgeführt.

Mankowitz räumt ein, dass die aktuellen Programme, die AlphaDev produzieren kann, klein sind und dass es wahrscheinlich neuer Durchbrüche in der KI-Entwicklung bedarf, um größere, komplexere Algorithmen zu generieren, die die besten menschlichen Versuche schlagen. Aber für Code-Generierungsexperten wie Solar-Lezama ist die Forschung ein wichtiger Schritt in Richtung einer allgemeineren KI-Codierung – einer, der ihn dazu bringt, über Fortran und sein System der „automatisierten Programmierung“ nachzudenken. Hat es Programmierer aus dem Geschäft gedrängt? Nicht im Geringsten. Hat es verändert, was es bedeutet, Programmierer zu sein? Vollständig.