Neuronales Netzwerk DeepCoder lernt das Programmieren, indem er Code von anderen Programmen ausleiht


Die bedingte Matrix von Ungenauigkeiten für ein neuronales Netzwerk und einen Testsatz von 500 Programmen mit einer Länge von 3 Zeilen. Jede Zelle enthält die durchschnittliche Wahrscheinlichkeit eines falsch positiven Ergebnisses (im Großdruck) und die Anzahl der Testprogramme, von denen dieser Wert abgeleitet wird (im Kleindruck, in Klammern). Die Farbsättigung korreliert mit der Wahrscheinlichkeit eines falsch positiven Ergebnisses

Programmierer werden bald einen guten Helfer haben: ein intelligentes neuronales Netzwerk, das Routineaufgaben ausführen kann. Darüber hinaus können Menschen mit Hilfe eines solchen neuronalen Netzwerks Programme erstellen, ohne die Syntax einer bestimmten Sprache zu kennen und ohne tatsächlich programmieren zu können. Es ist notwendig, einen Algorithmus zu erstellen und Aufgaben festzulegen - und das neuronale Netzwerk schreibt Code, um diese zu lösen.

Infolgedessen wird die gesamte Arbeit viel produktiver: „Die Menschen werden in der Lage sein, Systeme zu erstellen, die zuvor nicht zu erstellen waren“, sagte ein unabhängiger Experte, Armando Solar-Lezama vom Massachusetts Institute of Technology, in einem Kommentar für New Scientist .

Forscher von Microsoft und der Universität Cambridge haben ein System namens DeepCoder entwickelt , das jetzt einfache Probleme aus Schulprogrammierwettbewerben korrekt löst. DeepCoder verwendet eine Technik namens Induktive Programmsynthese, die vielen Entwicklern bekannt ist. Sie nimmt Codezeilen aus anderen Programmen - und erstellt ihr eigenes einzigartiges Programm. Es ist wichtig zu beachten, dass DeepCoder wie andere Softwaresynthesesysteme eine domänenspezifische Sprache (DSL) verwendet, die auf eine bestimmte Anwendung spezialisiert ist. Es kann als "Mini-Sprache" oder "abgeschnittene Programmiersprache" bezeichnet werden. Es enthält nur neun Funktionen erster Ordnung:

KOPF, LETZT, NEHMEN, TROPFEN, ZUGRIFF, MINDESTENS, MAXIMAL, RÜCKWÄRTS, SORTIEREN, SUM

und fünf Funktionen höherer Ordnung:

KARTE, FILTER, COUNT, ZIPWITH, SCANL1

Der Umfang einer domänenspezifischen Sprache ist im Vergleich zu allgemeinen Programmiersprachen begrenzt.

Die Auswahl der Zeilen zum Kompilieren des Programms erfolgt nach Analyse der Eingabe- und Ausgabewerte jedes Codefragments. In wissenschaftlichen Arbeiten können Sie neun Beispiele für 5-Zeilen-Programme untersuchen, die vom neuronalen Netzwerk DeepCoder geschrieben wurden. Hier ist zum Beispiel eine Lösung für das Süßigkeitenproblem (links) mit einer Textbeschreibung (rechts) und Eingabewerten (in der Mitte):



Bei der Suche nach geeigneten Codezeilen übertrifft DeepCoder den Menschen: Er kann viel mehr Quellcode indizieren und analysieren, als der Mensch kann. Das maschinelle Lernsystem lernt zu verstehen, wie diese Muster verwendet werden - und bildet im Voraus die Grundlage. Darüber hinaus verbindet das neuronale Netzwerk die gefundenen Leitungen so, dass es niemals vorkommt, sie mit einer lebenden Person zu verbinden. Durch Versuch und Irrtum lernt das neuronale Netzwerk allmählich, sein Ziel zu erreichen. Diese Implementierung der Softwaresynthese im DeepCoder-System wird als Learning Inductive Program Synthesis (LIPS) bezeichnet.


Schematische Darstellung eines direkt gekoppelten Encoders und eines DeepCoder-Decoders

Die folgende Abbildung zeigt, wie das neuronale DeepCoder-Netzwerk die Wahrscheinlichkeit vorhersagt, mit der jede Funktion im Quellcode erscheint.



All diese Vorteile ermöglichen es DeepCoder, Programme viel schneller als seine Vorgänger zu schreiben. Sie schreibt ein Programm mit drei Zeilen in Sekundenbruchteilen, während frühere Systeme mehrmals oder zehnmal mehr Zeit benötigten, um alle möglichen Optionen auszuprobieren. Die Tabelle zeigt beispielsweise die Geschwindigkeit beim Generieren von Programmen aus drei Codezeilen mit verschiedenen Aufgaben.



Programme aus fünf Codezeilen werden um eine Größenordnung langsamer generiert. Die Grafik rechts zeigt die Abhängigkeit der Geschwindigkeit von der Programmlänge.



Wie Sie lernen, versteht das System, welche Codekombinationen funktionieren und welche nicht. Sie verbessert die Programmierung mit jeder neuen Aufgabe.

Die Technologie kann möglicherweise verwendet werden, um Fehler in Programmen umzugestalten und zu suchen. Sie findet die falschen Zeilen und ersetzt sie durch die richtigen Zeilen aus anderen Programmen. Die Autoren glauben, dass es mit seiner Hilfe einfach ist, Routineprogramme im Stil des berühmten IFTTT zu erstellen - um die grundlegenden Interaktionen zwischen verschiedenen Webdiensten zu automatisieren. Selbst ein Nicht-Programmierer kann einfache Anweisungen wie das Auswählen von Fotos von Facebook und das Sortieren nach festgelegten Kriterien geben. Solche einfachen Programme können in wenigen Minuten ohne Programmierkenntnisse erstellt werden.

Natürlich können solche Tools einen echten Programmierer noch nicht ersetzen. Sie werden nur als Hilfsmittel betrachtet. DeepCoder-Entwickler selbst werden in Zukunft sehr nützlich sein: Sie entlasten sich von der Routine und ermöglichen es Ihnen, sich auf komplexere und wichtigere Aufgaben zu konzentrieren.

Derzeit ist DeepCoder in der Lage, Programmierprobleme mit etwa fünf Codezeilen zu lösen. Natürlich können Sie in fortgeschrittenen Programmiersprachen mit fünf Codezeilen ein sehr nützliches Programm schreiben, aber es sind immer noch recht einfache, grundlegende Dinge. Experten glauben, dass es unmöglich ist, ein komplexes Programm mit einer großen Menge Code mithilfe der Softwaresynthese zu generieren. Andererseits ist dies mit menschlicher Hilfe möglich. Schließlich bestehen große Programme aus einer großen Anzahl kleiner Fragmente.

Zumindest in den nächsten Jahren sind die meisten Programmierer aufgrund der Codierungsautomatisierung nicht mit einem Arbeitsplatzverlust konfrontiert. Die Methoden des maschinellen Lernens verbessern sich jedoch sehr schnell. Es ist erstaunlich, wie viel in letzter Zeit in diesem Bereich getan wurde.

Source: https://habr.com/ru/post/de401859/


All Articles