Aufmerksamkeit reicht
So funktionieren Sprach-KIs vom Typ „Transformer“
Nicht jede KI wird schlauer, wenn man sie auf gigantische Ausmaße aufbläst – der Textgenerator GPT-3 hingegen schon. Wir zeigen, wie die dahinter liegende Transformer-Technik funktioniert.
Transformieren meint ganz allgemein das Umwandeln von einem in etwas anderes. Im Kontext von KI bedeutet „Transformer“ eine ganz bestimmte Architektur für neuronale Netze, die in den letzten Jahren ganz groß herauskam, sowohl bezogen auf den Umfang als auch auf die Verbreitung der Sprachmodelle. Diese neuronalen Netze transformieren Sätze in Bedeutungssequenzen. Aus denen können Netze mit der gleichen Struktur auch wieder Sätze berechnen.
Die 2017 von Google-Forschern vorgestellten Transformer lernen in ihrer Trainingsphase nicht nur, wie sie die Daten verarbeiten, sondern auch, worauf sie ihre Aufmerksamkeit richten müssen. Aufmerksamkeit und Datenverarbeitung stecken zusammen in Blöcken, die sich leicht zu tiefen Netzen stapeln lassen. Deswegen gelingt es, Transformer massiv zu skalieren, beispielsweise zu riesigen Sprachmodellen wie GPT-3 von OpenAI mit 175 Milliarden Parametern. Den Konkurrenten BERT mit 110 Millionen Parametern kann man noch daheim auf einer dicken Grafikkarte trainieren, für GPT-3 braucht man ein Rechenzentrum und gute Nerven, wenn die Stromrechnung kommt.
Was GPT-3 kann und wie Sie es selbst nutzen, haben wir in [1] und [2] beschrieben. Dieser Artikel beleuchtet die Details, die Transformer zu so raffinierten Schreibern machen. Machen Sie sich allerdings auf einen wilden Ritt gefasst, denn Transformer nutzen nicht nur alle Tricks bekannter neuronaler Netze [3], sondern satteln noch mehrschichtig und mehrköpfig Aufmerksamkeit drauf. Wir versuchen dabei alle mathematischen Tricks zu nennen, um es Ihnen leichter zu machen, wenn Sie das Forschungspaper mit allen Formeln lesen wollen. Für die Einordnung am Ende des Artikels müssen Sie aber nicht jedes Detail komplett durchschaut haben, es reicht, wenn Sie hie und da ein Gefühl dafür bekommen, wie das System funktioniert. Denn auch die Erfinder der Transformer wissen nicht genau, welche Parameter an welcher Stelle was genau bewirken.
Sequenzen
Sätze bestehen aus Wörtern, Wortteilen oder Satzzeichen, die aneinandergereiht eine Kette bilden. Behördendeutsch zeigt, dass diese Ketten ganz schön lang werden können. Alle Sprachmodelle müssen solche Ketten mit variabler Länge einlesen. Wenn die KIs schreiben sollen, müssen sie auch Ketten erzeugen.
Die Bedeutung von Wörtern ist aber kontextabhängig. Je nachdem, ob der Satz „Ich möchte die Bank“ mit „streichen“ oder mit „überfallen“ endet, hat er eine komplett andere Bedeutung. Sprach-KIs verarbeiten daher schon seit vielen Jahren die komplette Sequenz an Eingaben, stellen sie intern als sogenannten „Latent Vector“ dar und berechnen aus diesem Vektor wieder die Ausgaben. OpenAI nennt diesen Vektor bei GPT-3 „Embedding“.
Embedding-Vektoren
Statt mit ganzen Wörtern arbeiten Sprach-KIs meist mit „Tokens“. Die repräsentieren ganze Wörter oder auch nur Wortteile, Satzzeichen sowie die Spezialsymbole „Ende“ und „Auslassung“. Jede Sprach-KI nutzt ihre eigene Liste aus einigen Tausend Tokens und bringt sie in ein einheitliches Format. Damit muss sich die KI schon mal nicht mehr mit Buchstaben herumschlagen.
Neuronale Netze funktionieren am besten mit Eingabevektoren, wenn deren Werte zwischen 0 und 1 liegen. Zu solchen Vektoren kommt man mit einer Tabelle, die sich effizient als Matrix darstellen lässt. Die Werte in der Matrix initialisieren die Forscher mit Zufallszahlen, sodass jedes Wort einen anderen Vektor bekommt. Zufällige Vektoren sind aber nicht gut darin, die Bedeutung von Wörtern darzustellen. Deswegen lassen die Forscher die Werte in kleinen Schritten mit dem gleichen Gradientenabstiegsalgorithmus anpassen, der auch die Parameter der neuronalen Netze trainiert. In vielen Trainingsschritten bilden sich dann bedeutungsvolle Vektoren heraus. Man kann Embedding-Vektoren und die Synapsengewichte (auch „Parameter“ genannt, siehe [3]) des neuronalen Netzes sogar gemeinsam trainieren.
Die gelernten Vektoren für jedes Wort bezeichnet man normalerweise als „Word Embeddings“. Achtung, es besteht Verwechslungsgefahr mit OpenAIs „Embedding“ zwischen Encoder und Decoder (dazu später mehr). Das sind zwar auch Vektoren, aber an anderer Stelle im Netzwerk. Word Embeddings können Sie selbst recht schnell trainieren (siehe [4]) und sie kodieren schon einen guten Teil der Bedeutung der Wörter.
Nach dem Multiplizieren der Tokens mit der großen Embedding-Matrix besteht die Herausforderung für Sprachmodelle also darin, die Bedeutung der Wörter an den Kontext des Satzes anzupassen und im Latent-Vektor so zu kodieren, dass sich aus dem wieder ein sinnvoller Satz erzeugen lässt.
Langes Kurzzeitgedächtnis
Über viele Jahre waren rekurrente neuronale Netze das Mittel der Wahl, um Sequenzdaten zu verarbeiten. Diese Netze verarbeiten jedes Token einzeln, heben sich aber Informationen zum Kontext auf, die sie beim nächsten Token benutzen können.
Implementiert man das genau so wie im vorherigen Absatz beschrieben, bekommt man das Vanishing-Gradient-Problem, das verhindert, dass simple rekurrente Netze Informationen verarbeiten können, die mehr als drei oder vier Tokens zurückliegen. Abhilfe schafft das Long-Short-Term-Memory (LSTM), ein Netz, das für jedes Neuron entscheiden kann, ob es Kontextinformationen behält oder überschreibt. Mit dieser Architektur lassen sich schon nützliche Sprachmodelle trainieren [5]; die Technik steckt bis heute in Google Translate.
LSTMs haben aber zwei Probleme: Zum einen vergessen sie immer noch zu oft Informationen, die sie gebraucht hätten. Beispielsweise haben sie typische Probleme mit deutschen Sätzen, bei denen Subjekt und Verb weit auseinanderliegen. Zum anderen bauen die Berechnungen aufeinander auf, weshalb sich die Netze nur schlecht parallelisieren lassen. Wegen des großen Erfolgs von Convolutional Networks bei der Bilderkennung gibt es zwar jede Menge hochparallele KI-Chips und GPU-Architekturen, doch LSTMs nutzen diese nur ungenügend aus.
Convolutional Networks
Stapelt man Convolutional Layer raffiniert übereinander, lassen sich damit auch Sprachsequenzen mit fester Länge verarbeiten. Die Convolutional Networks nutzen hochparallele Hardware viel besser aus, weshalb sie sich leichter skalieren lassen. Und da viele simulierte Neuronen meist helfen, bessere Ergebnisse zu erzielen, konnten die Netze teilweise bessere Ergebnisse als LSTMs liefern. Die Übersetzungs-KI von DeepL [6] nutzt diese Technik.
Wie weit Informationen in so einem Convolutional Network fließen müssen, um zwei Wörter zueinander in einen Kontext zu setzen, ist aber stark von der Architektur abhängig. Ist der Abstand zweier Wörter im Satz größer, ist meist auch der Informationsfluss im Netzwerk länger. Deswegen tut sich das Netzwerk bei manchen Sätzen im Training viel schwerer als bei Sätzen mit kurzen Wortabständen. Das verlängert nicht nur die Trainingszeit, es kann auch dazu führen, dass mehrere Neuronen an unterschiedlichen Stellen die gleiche Aufgabe übernehmen müssen.
Aufmerksamkeit
Für die 2017 entwickelten Transformer [7] kombinierten Google-Forscher die beiden Ideen: Damit das Netz parallel rechnen kann, nutzten sie eine feste Länge der Token-Sequenz. Statt die Beziehung der Wörter zueinander mehr oder weniger fest in die Struktur des Netzwerks zu gießen, ließen sie dem Netz aber ähnlich wie beim LSTM die Wahl, welche Informationen zu anderen Wörtern im Satz es nutzen möchte.
Das Zauberwort lautet bei Transformern „Attention“, also Aufmerksamkeit. Die Idee ist, dass das Netz für jedes Token entscheiden kann, wie stark es sich durch alle anderen Tokens beeinflussen lässt. Beeinflussen heißt hier, dass der Transformer für jedes andere Token einen Faktor zwischen 0 und 1 berechnet. Den Vektor des Tokens multipliziert er mit diesem Faktor und addiert das Ergebnis zum bisherigen Wert. Zu Beginn des Trainings liegt die Aufmerksamkeit ein bisschen auf allen Tokens, allerdings mit zufälligen Unterschieden an verschiedenen Stellen im Netz. Mit fortschreitendem Training lernt das Netz seine Aufmerksamkeit gezielter auszurichten.
Dabei kommen Vektoren heraus, die gegenüber den Word-Embedding-Vektoren in Richtung der Bedeutung der restlichen Tokens verschoben sind. Diese Vektoren lassen sich nicht direkt mit den ursprünglichen Word-Embedding-Vektoren vergleichen, weshalb jede Transformer-Schicht ein kleines neuronales Netz aus einer simplen, voll verbundenen Schicht enthält. Die übersetzt die verschobenen Vektoren in neue Vektoren, wie sie hinter der Transformer-Schicht gebraucht werden.
Mehrköpfige Aufmerksamkeit
Googles Transformer-Erfinder beschreiben die skalierte Vektorprodukt-Aufmerksamkeit („Scaled Dot-Product Attention“) der Transformer als ein Verfahren, um für eine Suchanfrage (Query) und einen Schlüssel (Key) einen Aufmerksamkeitsfaktor in einer Tabelle nachzuschauen. Da die Tabelle aus gelernten Faktoren besteht, kann man sich den Mechanismus aber auch als einschichtiges neuronales Netz ohne Aktivierungsfunktion vorstellen. Danach werden die Aktivierungen von K aber mit den Aktivierungen von Q multipliziert, sodass ein Wert pro Token herauskommt und nicht nur eine Summe (für die Details siehe [6]).
Genau wie einzelne Neuronen in neuronalen Netzen einzelne Aufgaben übernehmen, lenkt eine Attention-Matrix die Aufmerksamkeit einer Scaled Dot-Product Attention auf einen einzelnen Aspekt. Um gleichzeitig mehrere Aspekte berücksichtigen zu können, haben die Google-Forscher den Aufmerksamkeitsblock mehrfach kopiert (acht Mal laut Original-Paper) und die Ausgaben zu einem langen Vektor hintereinander gehängt. Da hinter diesem mehrköpfigen Aufmerksamkeitsblock ohnehin noch ein einlagiges neuronales Netz hängt, kann das die verschiedenen Aspekte in einen Vektor mit der gleichen Breite wie die Eingaben zusammenfassen.
Stapelbare Transformer-Schichten
Durch die Kombination aus mehrköpfigem Aufmerksamkeitssystem („Attention Heads“) und einem Mininetz zur Zusammenfassung entstehen Blöcke, die gleich breite Vektoren für Ein- und Ausgabe benutzen. Solche Blöcke lassen sich wie die Schichten eines ganz normalen neuronalen Netzes übereinanderstapeln. Die Idee solcher Stapel ist immer, dass jede Schicht die Informationen ein bisschen mehr abstrahiert. In Bezug auf Sprache würden die Vektoren hinter den Schichten immer weniger die Worte und immer mehr die Bedeutung im Zusammenhang des Satzes wiedergeben.
Auch wenn die Vektoren vor und hinter einer Transformer-Schicht gleich breit sind, lassen sie sich nicht direkt vergleichen. Jede Schicht nutzt gewissermaßen ihre eigene „Sprache“, eine eigene Struktur, welche Regionen ähnlicher Vektoren für eine ähnliche Bedeutung stehen. Der Vektorraum der Ausgaben einer Schicht wird oft als „Latent Space“ bezeichnet und er folgt jeweils eigenen Regeln, die sich während des Trainings ergeben. In erster Linie übersetzt eine Schicht von einem Latent Space in einen anderen. Dabei kann die Schicht im Idealfall auch Bedeutung abstrahieren, ob das wirklich passiert, erkennt man aber erst daran, wie gut das Netz insgesamt funktioniert.
Der Original-Transformer nutzt sechs Schichten, um die Bedeutung des Eingabesatzes zu kodieren. Hinter der sechsten Schicht fällt ein Latent Vector für jedes Wort aus dem Netz. Der Transformer-Stapel modifiziert und übersetzt also die Embedding-Vektoren, es kommt dabei aber eine gleich große Matrix heraus. Es gibt weiter einen Vektor pro Token.
Schreiben lernen
Zum Schreiben nutzen Transformer im Prinzip die gleichen Bausteine, das Aufmerksamkeitssystem wird aber zweimal hintereinander benutzt. Zuerst wenden die Transformer-Blöcke im Decoder die Aufmerksamkeit auf die bereits geschriebenen Tokens an. Dabei sorgt eine hartkodierte Maske (ohne lernbare Parameter) dafür, dass sich die Aufmerksamkeit nur auf schon existierende Tokens richten kann. Zu Beginn kommt automatisch ein Vektor aus Nullen heraus. Danach benutzen die schreibenden Transformer-Blöcke das Aufmerksamkeitssystem ein zweites Mal, um die Latent-Vektoren aus dem Encoder gewichtet zu addieren. Wie bei den Encoder-Blöcken übersetzt ein Mininetz die Ausgaben der Attention Heads in Vektoren für den nächsten Latent Space.
Beim Original-Transformer-Netz stapeln sich wieder sechs Schichten aus Ausgabe-Transformern. Die Vektoren im allerletzten Latent Space dienen dann einer einzelnen, voll verbundenen Neuronen-Schicht als Eingabe. Diese Schicht hat ein Neuron für jedes mögliche Token, das trainiert wird, und die Aufgabe umso stärker zu feuern, je besser das Token an diese Stelle passt. Dahinter normalisiert nur noch ein Softmax-Layer die Aktivierungen, damit sich mit dem Ergebnis wie mit einer Wahrscheinlichkeitsverteilung rechnen lässt.
Zum Schreiben wählt man entweder das wahrscheinlichste Wort aus der Verteilung oder man sampelt anhand der Wahrscheinlichkeiten – gern auch modifiziert um einen Temperatur-Wert –, um die unwahrscheinlichen Tokens besonders selten zu wählen.
Warum so und nicht anders?
Diese Transformer-Struktur erweist sich bei Sprachmodellen, aber auch bei anderen sequenziellen Datensätzen und für die Kombination zwischen Bilderkennung und Sprachverarbeitung als sehr erfolgreich. Der Erfolg bei der Sprachverarbeitung ist vermutlich vor allem auf die Flexibilität des Aufmerksamkeitssystems zurückzuführen. LSTMs und Convolutional Networks hatten Probleme mit dem Informationsfluss zwischen den Wörtern, weshalb sie die Bedeutung des Kontexts nicht so direkt erlernen konnten wie die Transformer.
Transformer wenden auch mit jeder Schicht den Aufmerksamkeitsmechanismus auf sich selbst an. Dabei können sie auf jeder Schicht einen eigenen Satz an Kriterien erlernen, die die Attention Heads herauspicken. Wenn das Training funktioniert, steht jeweils ein Bereich in den Vektorräumen für eine Bedeutung und die Aufmerksamkeit stellt nur die relevanten Verbindungen dazwischen her. Das macht die Architektur sehr wandlungsfähig. Da Transformer Ende-zu-Ende-trainiert werden, können sie diese Wandlungsfähigkeit auch nutzen, um sich ganz an den Datensatz anzupassen. Ob sie funktionieren, entscheidet sich aber auch erst beim Training. Beispielsweise sind sie wie viele andere Architekturen anfällig für Overfitting, weshalb schon das Original-Paper auf große Datensätze und Dropout (Nullen eines Teils der Daten und Neuronenaktivierungen während des Trainings) setzen musste.
Aufmerksamkeit und besonders „Self Attention“ (interne Aufmerksamkeit) scheinen sehr effektive Strategien zu sein, um den Informationsfluss im Netz so zu steuern, dass er zum Problem passt. Es sind aber durchaus andere Architekturen denkbar, die ihre Aufmerksamkeit vergleichbar effektiv ausrichten. Aufmerksamkeit gleich mehrköpfig auszurichten, ähnelt auch Ideen aus neuronalen Netzen, die Objekte separieren. Möglicherweise ist der in Transformern umgesetzte Ansatz also nur der erste, bereits nützliche Schritt in Richtung eines noch umfassenderen Systems für intelligente Informationsverarbeitung [9].
Die Architektur von GPT-3
Die Idee hinter Generative Pretrained Transformer (GPT) ist, dass sich Transformer auch mit der einfachen Aufgabe trainieren lassen, beliebige Texte weiter zu schreiben. Für diese Aufgabe kann man die Netze nämlich einfach mit beliebigen Texten aus dem Internet trainieren. Es steht also ein gigantischer Datensatz zur Verfügung, dessen schiere Größe gegen Overfitting hilft. Außerdem ist die Wahrscheinlichkeit gering, dass ein Eingabetext keinem Text aus den Trainingsdaten ähnelt. Ein Netzwerk, das alles schon einmal gesehen hat, muss nicht von sich aus verallgemeinern können.
Das Training auf beliebigen Texten ist das Pretraining, also das P aus dem Namen. Das so vortrainierte Netz wird nämlich danach noch einmal für kurze Zeit mit einem kuratierten Datensatz nachtrainiert. Dafür reichen meist drei Epochen an Training, eine Sparsamkeit, die angesichts der Größe der Netze bitternötig ist. Beim Nachtrainieren werden die Netze zu Spezialisten für ein bestimmtes Problem wie Übersetzung, Beantworten von Fragen, Hate-Speech-Erkennung et cetera.
An der Architektur der Original-Transformer hat OpenAI nur wenig geändert. Die Gaussian Error Linear Unit GELU ersetzt die Rectified Linear Unit ReLU als Aktivierungsfunktion (eine unwesentliche Änderung, die vermutlich das Training mit sehr kleinen Gradienten erleichtert, wie sie bei seltenen Beispielen in den Trainingsdaten vorkommen). Ursprünglich haben die Entwickler in ihr erstes Modell GPT-1 einen Decoder aus zwölf Schichten eingebaut, die Latent-Vektoren haben 3072 Dimensionen, die Sequenzen bestehen aus maximal 512 Tokens. GPT-2 skaliert auf maximal 48 Schichten und Sequenzen aus 1024 Tokens. GPT-3 schließlich hat insgesamt 96 Schichten, 12.288-dimensionale Latent-Vektoren, 96 Attention Heads mit je 128 Dimensionen und verarbeitet Sequenzen aus 2048 Tokens. Das läuft auf ein Netzwerk mit insgesamt 175 Milliarden Parameter hinaus. Im Prinzip hat OpenAI Transformer nur mit minimalen Anpassungen skaliert, in der Hoffnung, allein durch Größe bessere Ergebnisse zu erzielen.
Seine enorme Größe kann GPT-3 nur durch den gigantischen Datensatz beim Pretraining ausnutzen. Wäre der Datensatz normal groß, käme es zu Overfitting und der größte Teil des Netzes würde keinen positiven Beitrag mehr leisten. Ein Datensatz dieser Größe lässt sich aber nicht mehr auf Biases prüfen. Deswegen finden sich bestehende gesellschaftliche Vorurteile in den von GPT-3 geschriebenen Texten wieder, die sich auch leicht herauskitzeln lassen. Beginnt man einen Text im passenden Stil, lässt sich GPT-3 zu Hassrede gegen Muslime hinreißen, es ergänzt sexistische Aussagen und wiederholt Verschwörungsmythen. Diese Effekte lassen sich nicht allein durchs Nachtrainieren mit einem ausgewogenen Datensatz ausgleichen.
Was versteht GPT-3?
GPT-3 und andere Transformer haben keinen Mechanismus, der ein Verständnis von Text im menschlichen Sinne sicherstellen würde. Die vielen Schichten und trainierten Aufmerksamkeitsköpfe lassen aber zu, dass sich etwas Ähnliches wie Verständnis während des Trainings ergibt. Ob das bei GPT-3 geklappt hat, ist Gegenstand hitziger Diskussionen unter KI-Forschern.
Transformer lernen eindeutig syntaktische Strukturen menschlicher Sprache, da sie ab einer gewissen Größe grammatikalisch einwandfreie Sätze produzieren. Thematisch ähnliche Texte haben auch im Latent Space zwischen Encoder und Decoder nah beieinanderliegende Vektoren. Das zeigt, dass Transformer auch den Satzinhalt kodieren können.
Zum Teil lassen sich die guten Ergebnisse aber auch auf den umfassenden Datensatz zurückführen. Mit oberflächlich statistischem Zuordnen zwischen kodierten Beispielen aus den Daten lassen sich viele scheinbar intelligente Transformer-Schriften erklären.
Letztlich berührt die Diskussion ein philosophisches Thema: Bei der Kritik, dass neuronale Netze statt zu denken nur automatische Statistiken berechnen, stellt sich nämlich die Frage, ob das, was Menschen als „Denken“ bezeichnen, wirklich fundamental anders ist. (pmk@ct.de)
Paper und Blogs mit mehr Details: ct.de/yxbt