AlphaDev entdeckt schnellere Sortieralgorithmen

0
25


Neue Algorithmen werden die Grundlagen der Datenverarbeitung verändern

Die digitale Gesellschaft führt zu einem steigenden Bedarf an Rechenleistung und Energieverbrauch. In den letzten fünf Jahrzehnten haben wir uns auf Verbesserungen der {Hardware} verlassen, um Schritt zu halten. Da Mikrochips jedoch an ihre physikalischen Grenzen stoßen, ist es von entscheidender Bedeutung, den darauf ausgeführten Code zu verbessern, um die Datenverarbeitung leistungsfähiger und nachhaltiger zu machen. Dies ist besonders wichtig für die Algorithmen, aus denen der Code besteht, der Billionen Mal am Tag ausgeführt wird.

In unserer Heute veröffentlichtes Papier in Naturstellen wir AlphaDev vor, ein System für künstliche Intelligenz (KI), das Reinforcement Studying nutzt, um verbesserte Informatikalgorithmen zu entdecken – die die von Wissenschaftlern und Ingenieuren über Jahrzehnte verfeinerten Algorithmen übertreffen.

AlphaDev hat einen schnelleren Algorithmus zum Sortieren entdeckt, eine Methode zum Ordnen von Daten. Milliarden von Menschen nutzen diese Algorithmen jeden Tag, ohne es zu merken. Sie bilden die Grundlage für alles, vom Rating von On-line-Suchergebnissen und Social-Media-Beiträgen bis hin zur Artwork und Weise, wie Daten auf Computern und Telefonen verarbeitet werden. Die Generierung besserer Algorithmen mithilfe von KI wird die Artwork und Weise, wie wir Pc programmieren, verändern und alle Aspekte unserer zunehmend digitalen Gesellschaft beeinflussen.

Durch Open Sourcing unserer neuen Sortieralgorithmen in die Hauptbibliothek von C++Millionen von Entwicklern und Unternehmen auf der ganzen Welt nutzen es mittlerweile für KI-Anwendungen in allen Branchen, vom Cloud Computing über On-line-Buying bis hin zum Provide Chain Administration. Dies ist die erste Änderung an diesem Teil der Sortierbibliothek seit über einem Jahrzehnt und das erste Mal, dass dieser Bibliothek ein durch Verstärkungslernen entwickelter Algorithmus hinzugefügt wurde. Wir sehen darin ein wichtiges Sprungbrett für den Einsatz von KI zur Optimierung des weltweiten Codes, einen Algorithmus nach dem anderen.

Was ist Sortieren?

Beim Sortieren handelt es sich um eine Methode zum Organisieren einer Reihe von Elementen in einer bestimmten Reihenfolge. Beispiele hierfür sind die alphabetische Anordnung von drei Buchstaben, die Anordnung von fünf Zahlen vom größten zum kleinsten oder das Ordnen einer Datenbank mit Millionen von Datensätzen.

Diese Methode hat sich im Laufe der Geschichte weiterentwickelt. Eines der frühesten Beispiele stammt aus dem zweiten und dritten Jahrhundert, als Gelehrte in den Regalen der Großen Bibliothek von Alexandria Tausende von Büchern von Hand alphabetisch sortierten. Nach der industriellen Revolution wurden Maschinen erfunden, die beim Sortieren helfen konnten – Tabellierungsmaschinen speicherten Informationen auf Lochkarten, die zur Erfassung der Volkszählungsergebnisse von 1890 in den Vereinigten Staaten verwendet wurden.

Und mit dem Aufkommen kommerzieller Pc in den 1950er Jahren erlebten wir die Entwicklung der ersten Informatikalgorithmen zum Sortieren. Heutzutage gibt es viele verschiedene Sortiertechniken und Algorithmen, die in Codebasen auf der ganzen Welt verwendet werden, um riesige Datenmengen on-line zu organisieren.

Veranschaulichung der Funktionsweise eines Sortieralgorithmus. Eine Reihe unsortierter Zahlen wird in den Algorithmus eingegeben und sortierte Zahlen werden ausgegeben.

Die Entwicklung zeitgenössischer Algorithmen erforderte von Informatikern und Programmierern jahrzehntelange Forschung. Sie sind so effizient, dass weitere Verbesserungen eine große Herausforderung darstellen, vergleichbar mit der Suche nach einem neuen Weg zum Stromsparen oder einem effizienteren mathematischen Ansatz. Diese Algorithmen sind auch ein Grundpfeiler der Informatik und werden in Einführungskursen in die Informatik an Universitäten gelehrt.

Auf der Suche nach neuen Algorithmen

AlphaDev entdeckte schnellere Algorithmen, indem es bei Null anfing, anstatt vorhandene Algorithmen zu verfeinern, und begann dort zu suchen, wo die meisten Menschen dies nicht tun: in den Montageanweisungen des Computer systems.

Mithilfe von Montageanweisungen wird Binärcode erstellt, den Pc in die Tat umsetzen können. Während Entwickler in Codierungssprachen wie C++ schreiben, die als Hochsprachen bezeichnet werden, müssen diese in Assembleranweisungen auf niedriger Ebene übersetzt werden, damit Pc sie verstehen.

Wir glauben, dass es auf dieser niedrigeren Ebene viele Verbesserungen gibt, die in einer Programmiersprache höherer Ebene möglicherweise schwer zu entdecken sind. Computerspeicher und -betrieb sind auf dieser Ebene flexibler, was bedeutet, dass es deutlich mehr potenzielle Verbesserungen gibt, die größere Auswirkungen auf Geschwindigkeit und Energieverbrauch haben könnten.

64807d8d48e07cea39f9a58f 647dff5b5667546f1211c555 Figure1
Code wird normalerweise in einer höheren Programmiersprache wie C++ geschrieben. Diese werden dann mithilfe eines Compilers in Low-Degree-CPU-Anweisungen, sogenannte Assembleranweisungen, übersetzt. Ein Assembler wandelt dann die Montageanweisungen in ausführbaren Maschinencode um, den der Pc ausführen kann.
64807d8d451645aedcccf00e 647dff93a3272b504caaf97c Figure2%2520(1)
Abbildung A: Ein Beispiel-C++-Algorithmus, der bis zu zwei Elemente sortiert.
Abbildung B: Die entsprechende Meeting-Darstellung des Codes.

Mit einem Spiel die besten Algorithmen finden

AlphaDev basiert auf AlphaZero, unser Reinforcement-Studying-Modell, das Weltmeister in Spielen wie Go, Schach und Shogi besiegte. Mit AlphaDev zeigen wir, wie dieses Modell von Spielen auf wissenschaftliche Herausforderungen und von Simulationen auf reale Anwendungen übertragen werden kann.

Um AlphaDev darin zu trainieren, neue Algorithmen zu entdecken, haben wir das Sortieren in ein Einzelspieler-Zusammenbauspiel umgewandelt. Bei jedem Schritt beobachtet AlphaDev den von ihm generierten Algorithmus und die in der Zentraleinheit (CPU) enthaltenen Informationen. Dann spielt es einen Zug, indem es eine Anweisung auswählt, die dem Algorithmus hinzugefügt werden soll.

Das Assemblerspiel ist unglaublich schwierig, da AlphaDev eine enorme Anzahl möglicher Befehlskombinationen effizient durchsuchen muss, um einen Algorithmus zu finden, der sortieren kann und schneller als der derzeit beste ist. Die Anzahl möglicher Befehlskombinationen ähnelt der Anzahl der Teilchen im Universum oder der Anzahl möglicher Zugkombinationen bei Schachspielen (10).120 Spiele) und Go (10700 Spiele). Und ein einziger falscher Zug kann den gesamten Algorithmus ungültig machen.

64807d8d6314396f6341d128 647dffd336f848d6fa8a0f63 Figure3%2520(1)
Abbildung A: Das Montagespiel. Der Spieler, AlphaDev, erhält den Standing des Techniques st als Eingabe und spielt einen Zug, indem er eine Montageanweisung auswählt, die er dem bisher generierten Algorithmus hinzufügen möchte.
Abbildung B: Die Belohnungsberechnung. Nach jedem Zug werden dem generierten Algorithmus Testeingabesequenzen zugeführt – für sort3 entspricht dies allen Kombinationen von Sequenzen aus drei Elementen. Der Algorithmus generiert dann eine Ausgabe, die mit der erwarteten Ausgabe sortierter Sequenzen für den Sortierfall verglichen wird. Der Agent wird basierend auf der Korrektheit und Latenz des Algorithmus belohnt.

Während der Algorithmus Schritt für Schritt erstellt wird, prüft AlphaDev, ob er korrekt ist, indem er die Ausgabe des Algorithmus mit den erwarteten Ergebnissen vergleicht. Für Sortieralgorithmen bedeutet dies, dass ungeordnete Zahlen eingehen und korrekt sortierte Zahlen herauskommen. Wir belohnen AlphaDev sowohl für die korrekte Sortierung der Zahlen als auch dafür, wie schnell und effizient es dies tut. AlphaDev gewinnt das Spiel, indem es ein korrektes, schnelleres Programm entdeckt.

Entdeckung schnellerer Sortieralgorithmen

AlphaDev hat neue Sortieralgorithmen entdeckt, die zu Verbesserungen in der LLVM libc++-Sortierbibliothek führten, die bei kürzeren Sequenzen bis zu 70 % schneller und bei Sequenzen mit mehr als 250.000 Elementen etwa 1,7 % schneller waren.

Wir haben uns auf die Verbesserung der Sortieralgorithmen für kürzere Sequenzen von drei bis fünf Elementen konzentriert. Diese Algorithmen gehören zu den am weitesten verbreiteten, da sie im Rahmen größerer Sortierfunktionen häufig mehrmals aufgerufen werden. Die Verbesserung dieser Algorithmen kann zu einer Gesamtbeschleunigung beim Sortieren einer beliebigen Anzahl von Artikeln führen.

Um den neuen Sortieralgorithmus für Menschen benutzerfreundlicher zu machen, haben wir die Algorithmen rückentwickelt und in C++ übersetzt, eine der beliebtesten Programmiersprachen, die Entwickler verwenden. Diese Algorithmen sind jetzt im verfügbar LLVM libc++ Standard-Sortierbibliothekdas von Millionen von Entwicklern und Unternehmen auf der ganzen Welt verwendet wird.

Neue Ansätze finden

AlphaDev hat nicht nur schnellere Algorithmen gefunden, sondern auch neuartige Ansätze entdeckt. Seine Sortieralgorithmen enthalten neue Befehlsfolgen, die bei jeder Anwendung eine einzelne Anweisung speichern. Dies kann enorme Auswirkungen haben, da diese Algorithmen Billionen Mal am Tag verwendet werden.

Wir nennen diese „AlphaDev-Swap- und Copy-Strikes“. Dieser neuartige Ansatz erinnert an AlphaGos „Zug 37“ – ein kontraintuitives Spiel, das die Zuschauer verblüffte und zur Niederlage eines legendären Go-Spielers führte. Mit der Tausch- und Kopierbewegung überspringt AlphaDev einen Schritt, um Elemente auf eine Weise zu verbinden, die wie ein Fehler aussieht, in Wirklichkeit aber eine Abkürzung ist. Dies zeigt die Fähigkeit von AlphaDev, originelle Lösungen zu entdecken und unsere Denkweise über die Verbesserung von Informatikalgorithmen in Frage zu stellen.

64807d8e2063c9f8e5a5ecd7 647e002624fdbe74079bba76 Figure4
Hyperlinks: Die ursprüngliche Implementierung mit min(A,B,C).
Rechts: AlphaDev Swap Transfer – AlphaDev stellt fest, dass Sie nur min(A,B) benötigen.
64807d8d6314396f6341d12c 647e0045ebbf329a491497fa Figure5
Hyperlinks: Die ursprüngliche Implementierung mit max (B, min (A, C, D)) wird in einem größeren Sortieralgorithmus zum Sortieren von acht Elementen verwendet.
Rechts: AlphaDev hat herausgefunden, dass bei Verwendung der Kopierbewegung nur max (B, min (A, C)) erforderlich ist.

Von der Sortierung bis zum Hashing in Datenstrukturen

Nachdem wir schnellere Sortieralgorithmen entdeckt hatten, testeten wir, ob AlphaDev einen anderen Informatikalgorithmus verallgemeinern und verbessern könnte: Hashing.

Hashing ist ein grundlegender Algorithmus in der Informatik, der zum Abrufen, Speichern und Komprimieren von Daten verwendet wird. Wie ein Bibliothekar, der ein Klassifizierungssystem verwendet, um ein bestimmtes Buch zu finden, helfen Hashing-Algorithmen den Benutzern dabei, zu wissen, wonach sie suchen und wo sie es genau finden können. Diese Algorithmen nehmen Daten für einen bestimmten Schlüssel (z. B. Benutzername „Jane Doe“) und hashen sie – ein Prozess, bei dem Rohdaten in eine eindeutige Zeichenfolge (z. B. 1234ghfty) umgewandelt werden. Dieser Hash wird vom Pc verwendet, um die mit dem Schlüssel verbundenen Daten schnell abzurufen, anstatt alle Daten zu durchsuchen.

Wir haben AlphaDev auf einen der am häufigsten verwendeten Algorithmen zum Hashing in Datenstrukturen angewendet, um einen schnelleren Algorithmus zu finden. Und als wir es auf den 9-16-Byte-Bereich der Hashing-Funktion anwendeten, battle der von AlphaDev entdeckte Algorithmus 30 % schneller.

In diesem Jahr wurde der neue Hashing-Algorithmus von AlphaDev als Open Supply veröffentlicht Abseilbibliothekverfügbar für Millionen von Entwicklern auf der ganzen Welt, und wir schätzen, dass es mittlerweile Billionen Mal am Tag verwendet wird.

Den Code der Welt optimieren, ein Algorithmus nach dem anderen

Durch die Optimierung und Einführung verbesserter Sortier- und Hashing-Algorithmen, die von Entwicklern auf der ganzen Welt verwendet werden, hat AlphaDev seine Fähigkeit unter Beweis gestellt, neue Algorithmen mit Auswirkungen auf die Praxis zu verallgemeinern und zu entdecken. Wir sehen AlphaDev als einen Schritt zur Entwicklung universeller KI-Instruments, die dazu beitragen könnten, das gesamte Computerökosystem zu optimieren und andere Probleme zu lösen, die der Gesellschaft zugute kommen.

Während die Optimierung im Bereich von Assembleranweisungen auf niedriger Ebene sehr leistungsfähig ist, gibt es Einschränkungen, wenn der Algorithmus wächst, und wir untersuchen derzeit die Fähigkeit von AlphaDev, Algorithmen direkt in Hochsprachen wie C++ zu optimieren, was für Entwickler nützlicher wäre.

Die Entdeckungen von AlphaDev, wie etwa die Swap- und Copy-Strikes, zeigen nicht nur, dass es Algorithmen verbessern, sondern auch neue Lösungen finden kann. Wir hoffen, dass diese Entdeckungen Forscher und Entwickler gleichermaßen dazu inspirieren, Techniken und Ansätze zu entwickeln, mit denen grundlegende Algorithmen weiter optimiert werden können, um ein leistungsfähigeres und nachhaltigeres Computerökosystem zu schaffen.

Erfahren Sie mehr über die Optimierung des Computing-Ökosystems:



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here