KI in der Softwareentwicklung – Wie funktionieren Tools wie GPT-3?

Anwendungen aus dem Bereich der Künstlichen Intelligenz (KI) werden in den kommenden Jahrzehnten viele Bereiche unserer Arbeitswelt durch Automatisierung revolutionieren. Diese These wird heutzutage kaum noch bestritten. In dieser Studie wird untersucht, wann KI menschliche Fähigkeiten in unterschiedlichen Bereichen übertreffen wird, und in vielen Bereichen scheint dies kurz bevorzustehen. Die KI schafft also ein riesiges Potential im Bereich der Entwicklung smarter Software. Doch auch der Softwareentwicklung selbst steht unbestritten ein großer Wandel bevor. KI-basierte Tools werden auch hier viele Automatismen ermöglichen, die eine Programmierung wie sie heute stattfindet grundlegend verändern wird.

Pete Warden beispielsweise, einer der Chefentwickler von Tensorflow (einem der relevantesten Deep Learning Frameworks), prophezeit in seinem Blog, dass in einem Zeithorizont von zehn Jahren die Mehrzahl der Jobs im Bereich der Softwareentwicklung kein Programmieren an sich mehr erfordern wird.  Schon jetzt nutzen viele Entwickler KI-gestützte Tools wie Codota und IntelliCode, welche auf Basis von Syntax-Bäumen, Rankings und Assoziationen Code-Analysen durchführen und so die klassische Auto-Completion sehr mächtig machen. Einen sehr interessanten Beitrag zu diesem Thema lieferte unser Trivadis Kollege Dr. Martin Luckow in seinem Sparx-Talk, den man hier anschauen kann.

Letztendlich zeigen diese Tools aus der Softwareentwicklung also bereits, wie effektiv KI die Produktivität eines Entwicklers steigern kann. Codota spricht von einer möglichen Produktivitätssteigerung von bis zu 25%. Um dieses Tool aber zu nutzen, ist weiterhin ein tiefes Verständnis der jeweiligen Programmiersprache und verwendeten Algorithmik notwendig. Jedoch könnten auch diese Kenntnisse in Zukunft nahezu obsolet werden. Dies zeigte zuletzt das von OpenAI entwickelte Tool Generative Pre-trained-Transformer 3 (GPT-3). OpenAI ist ein von einer Non-Profit-Organisation kontrolliertes Unternehmen, welches sich mit der Erforschung künstlicher Intelligenz beschäftigt. Eigentlich ist GPT-3 ein autoregressives Sprachmodell. GTP-3 erzeugt aus einem ihm gegebenen Thema oder Anforderungen einen passenden Text. Einfach gesagt, wird auf Basis einer Eingabe ein Wort oder meist eher ein ganzer Text erzeugt, welches am wahrscheinlichsten die beschriebenen Anforderungen erfüllt. Trainiert wurde das Modell auf verschiedenen Datensätzen, bestehend aus umfangreichen Inhalten des heutigen englischsprachigen Internets. Wie hoch die Qualität der generierten Texte ist, zeigt dieses virale Essay aus dem Guardian, in dem GPT-3 sich selbst thematisiert.

GPT-3 und seine Modifikationen

Letztendlich kann auch Code selbst als interpretierter Text betrachtet werden. Und so haben Entwickler Modifikationen an der offenen Version von GPT-3 vorgenommen und das Modell auf öffentlich verfügbarem Code trainiert. debuild.co von Sharif Shameem zeigt, wie Entwickler JSX (JavaScript XML) Code generieren können. Mit Jordan Singers Figma Plugin können sogar Mock-up Websites gestaltet werden.

Wer hierzu im Internet recherchiert, findet auch viele weitere ähnliche Beispiele, in denen GPT unter anderem auch Python-Funktionen generiert. Alles in allem macht dies die Utopie zulässig, dass Software-Lösungen aus einer einfachen Anforderungsbeschreibung generiert werden. Eine KI also eine Lösung anhand eines Textes selbstständig modelliert, erzeugt, testet und ausführt.

Die Algorithmik hinter GPT-3

OpenAI hat mit GPT-3 den Versuch gewagt, ein möglichst leistungsstarkes Modell zu schaffen, das nur ein sehr geringes Finetuning und wenige neue Daten benötigt, um Aufgaben zu verstehen und auszuführen. GPT-3 hat mit 175 Milliarden Parameter 10-mal mehr Parameter als Microsofts leistungsstarkes Turing NLG Language Model und 100-mal mehr Parameter als GPT-2.

Doch auf welcher Methodik basiert GPT-3? Wie viele Anwendungen im Bereich des Natural Language Processing (NLP) verwendet GPT-3 Deep Learning. Spezieller wird ein sogenannter Transformer verwendet. Ähnlich wie Long-Short-Term-Memory Netzwerke (LSTM), welche im Bereich des NLP bereits vielfach erfolgreich angewandt werden, haben Transformer eine Sequence-to-Sequence (Seq2Seq) Architektur:

Seq2Seq-Modell

Diese spezielle Form der künstlichen neuronalen Netze (KNN), bestehend aus einem Encoder und einem Decoder, sind in der Lage, eine Sequenz von Eingabewerten, wie zum Beispiel Wörter, in eine andere Sequenz umzuwandeln. Der Encoder nimmt hierbei Eingangssequenz auf und bildet diese in einem n-dimensionalen Vektor ab. Dieser Vektor ist wiederum die Eingabe für den Decoder, der daraus die Ausgabesequenz erzeugt. Besonders erfolgreich eingesetzt werden diese Modelle beispielsweise in der Übersetzung.

Long-Short-Term-Memory

Ein „Vorgänger“ der Transformer sind die im vorherigen Abschnitt genannten LSTM. Diese wurden 1997 von Hochreiter und Schmidhuber eingeführt und in der Folgezeit von vielen Personen weiterentwickelt. Sie funktionieren hervorragend bei einer Vielzahl von Problemen und sind heutzutage weit verbreitet. LSTM sind eine Form der Recurrent Neural Networks (RNN), welche sich von traditionellen neuronalen Netzen einfach gesagt durch die Implementierung einer Rückkopplung unterscheiden. Die untenstehende Abbildung betrachtet eine solche Rückkopplung:

Rückkopplung exemplarisch

Der Knoten K nimmt die eine Eingabe x auf und gibt einen Wert y aus. Die Schleife ermöglicht es dem Netzwerk zudem Informationen bis zu einem späteren Verarbeitungsschritt zu speichern.

In der Theorie können RNN Informationen über einen längeren Zeitraum speichern. In der Praxis haben RNN aber bereits bei längeren Sätzen große Probleme, den Kontext von Wörtern zu speichern, welche eine gewisse Entfernung zum gerade verarbeiteten Wort aufweisen. Dieser Problematik widmen sich die LSTM. Sie haben die Fähigkeit bestimmte Informationen aus Sequenzen besonders zu gewichten und diese sozusagen zu „vergessen“ oder auch zu „erinnern“. Ein Beispiel hierfür ist die Reihenfolge von Wörtern in einem Satz, welche für das Verständnis seiner Bedeutung grundlegend ist.

Attention

Möglich macht dies der Attention Algorithmus, der auch für Transformer von großer Bedeutung ist. Kurz gesagt ist der Attention-Algorithmus Teil des Encoders und gewichtet die unterschiedlichen Teile der Eingaben nach ihrer Relevanz. Der Decoder erhält daraufhin den um die Gewichte ergänzten kodierten Vektor. Wenn wir im Kontext der Übersetzung bleiben, erlaubt Attention also, die Gesamtheit und den Kontext eines Satzes zu betrachten, um Verbindungen zwischen jedem einzelnen Wort und seinem relevanten Kontext herzustellen. Wer einen detaillierten Einblick in die Funktionsweise von Attention-Algorithmen gewinnen will, findet in diesem Blog Post eine hervorragende Quelle.

Attention-Algorithmen wurden zunächst ausschließlich in Verbindung mit neuronalen Netzen wie RNNs oder Convolutional Neural Networks (CNN) verwendet. Mittlerweile konnte allerdings gezeigt werden, dass Attention-Algorithmen auch sehr gut alleinstehend funktionieren und in Verbindung mit einfachen Feed-Forward-Netzen geschichtet werden könnten.

Das Problem der LSTM

Ab einem gewissen Punkt weisen aber auch die LSTM Schwächen bei der Speicherung kontextualer Informationen auf. Letztlich nimmt die Wahrscheinlichkeit, den Kontext von einem Wort zu behalten, das weit von dem aktuell verarbeiteten Wort entfernt ist, exponentiell mit dem Abstand zu diesem Wort ab. Das bedeutet, dass das Modell bei langen Sätzen oft den Inhalt von weit entfernten Positionen in der Sequenz vergisst. Sprich, wenn die zu verarbeiteten Sätze zu lang werden, schneiden LSTMs immer noch nicht allzu gut ab. Ein weiteres Problem bei RNNs und LSTMs ist, dass es schwierig ist, die Arbeit für die Verarbeitung von Sätzen zu parallelisieren, da sie Wort für Wort verarbeitet werden müssen.

Transformer

Um dem bei den LSTM auftretenden Problem der Parallelisierung zu begegnen, verwenden Transformer anstelle von RNN Module von CNN, welche vorrangig im Bereich der Bildverarbeitung gute Resultate erzielen. Bei CNN kann jedes Wort im Input gleichzeitig verarbeitet werden und hängt nicht unbedingt von den vorhergehenden zu verarbeitenden Wörtern ab. In einem Transformer wird dies mit den Attention-Algorithmen kombiniert, um den Kontext einer Eingabe zu speichern.

Bei einer detaillierten Betrachtung von Transformern erkennt man die klassische Seq2Seq-Architektur bestehend aus Encoder und Decoder. Ein Transformer besteht aus einer Mehrzahl von Encodern und Decodern. Im Paper werden jeweils sechs vorgeschlagen:

Schematische Darstellung eines Transformers

Die Architektur der Encoder in einem Transformer ist sehr ähnlich. Sie bestehen aus zwei Schichten: Der Attention-Schicht und der Feed-Forward-Schicht, welche die Ausgabe der Attention-Schicht verarbeitet:

Encoder

Der Decoder hat eine sehr ähnliche Architektur. Zwischen der ersten Attention-Schicht und der Feed-Forward-Schicht ist jedoch zusätzlich eine Attention-Schicht implementiert, die dem Decoder eine weitere Fokussierung auf die relevanten kontextualen Informationen des Eingabesatzes ermöglichen:

Decoder

Der Trainingsprozess von GPT

Einen enorm wichtigen Bestandteil bei der Arbeit mit KNN stellt der Trainingsprozess dar. Deshalb möchte ich auch hierzu einen kurzen Einblick geben. Für spezielle Aufgaben entwickelte Sprachmodelle vor GPT wurden in der Regel durch Supervised Learning trainiert. Beim Supervised Learning gibt es durch annotierte Daten im Trainingsprozess eine konkrete Vorgabe des zu Lernenden an das System. Aus dieser Vorgehensweise ergeben sich zwei elementare Probleme:

  • Systeme, die durch Supervised Learning trainiert werden, benötigen eine Vielzahl an annotierten Daten zum Erlernen einer Aufgabe, welche oftmals nicht oder schwer verfügbar sind.
  • Eine Generalisierung des Systems für Aufgaben, auf die es nicht trainiert wurde, ist nicht möglich.

Um diesen Problematiken zu entgehen, verwendet GPT den Ansatz des Semisupervised Learning, bei dem das System zunächst mit nicht-annotierten Daten trainiert wird und selbst Muster entwickeln und daraus Schlüsse ziehen muss. Daran anschließend wird ein sogenanntes fine-tuning mit annotierten Daten vorgenommen, welches die Leistungsfähigkeit des Systems steigert. Der Ansatz des Semisupervised Learning bietet den großen Vorteil, dass eine weitaus größere Menge an Daten im Trainingsprozess verwendet werden können und bietet dem Modell die Möglichkeit zur Generalisierung.

Schlussbemerkung

GPT-3 ist eine derart fähige KI, dass viele Menschen dazu neigen, auch ein wenig Angst und Ablehnung vor einer Zukunft mit hohem Einfluss solcher Anwendungen zu entwickeln. Gerade in Bezug auf die Sicherheit des eigenen Arbeitsplatzes mag man ein Fortschreiten der Automatisierung fürchten. GPT-3 ist aber durchaus noch recht weit davon entfernt, professionell und skaliert eingesetzt werden zu können. Eine Entwicklung von tatsächlich produktionsfertiger Software ohne jegliche Vorkenntnisse ist hiermit nicht möglich. Vielmehr ist es momentan eine Möglichkeit für Entwickler, sich mit Tools dieser Art bekannt zu machen, das Arbeiten mit ihnen zu lernen und von ihnen zu lernen.

Man kann diese Entwicklung also durchaus auch von seiner positiven Seite betrachten und diese als weitere Technologie sehen, welche unser Arbeitsleben effizienter und besser macht. In der Softwareentwicklung konkret gibt es viele Stimmen, die eher eine Symbiose von KI-Tools und Entwicklern vorhersagen, welche die Entwicklung von besserem Code und besseren Software-Lösungen ermöglicht.

Short URL for this post: https://blog.oio.de/FjRsv

About Christian Albers

Master's graduate in engineering. Passionate about everthing related to Machine Learning!
This entry was posted in Did you know? and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *