Wie funktionieren Transformer? Definition und Praxis
Spätestens seit der Einführung von ChatGPT sind Transformer zu einer der bekanntesten Architekturen im Deep Learning geworden. Die Transformer-Architektur wurde zum ersten Mal im Jahr 2017 vorgestellt [1]. Seitdem hat sie das Natural Language Processing (NLP) revolutioniert.
Im Prinzip sind Transformer Machine-Learning-Modelle, die insbesondere für die Verarbeitung von natürlicher Sprache verwendet werden. Um die Transformer-Architektur besser erfassen zu können, ist es ratsam zu verstehen, wie Computer die menschliche Sprache verarbeiten.
Sprachverarbeitung
Sprachverarbeitung ist um einiges schwieriger als Verarbeitung tabellarischer Daten. Sprachbasierte Daten unterscheiden sich in vieler Hinsicht grundlegend von numerischen Daten.
Einer der größten Unterschiede besteht in der Erfassung der Bedeutung der Reihenfolge der Wörter in einem Satz. Als Beispiel nehmen wir die Inversion. Diese ist ein sprachliches Stilmittel. Indem die Wortfolge vertauscht wird, verändert sich der Sinn bzw. Kontext einer Aussage: "Wir kochen die Tomatensuppe besser." oder "Besser, wir kochen die Tomatensuppe." Im Prinzip haben wir hier nur die Position des Wortes "besser" verändert. Trotzdem haben die beiden Sätze dadurch eine unterschiedliche Bedeutung.
Ein weiteres sprachspezifisches Problem ist die unterschiedliche Bedeutung von Wörtern je nach Sinnzusammenhang. Zum Beispiel: "Wir fliegen heute nach Las Vegas." und "Der Raum ist voller Fliegen!" In beiden Sätzen kommt das Wort "fliegen" vor. Jedoch haben die Wörter je nach Kontext verschiedene Bedeutungen. Im bereinigten Text sieht der Rechner die Wörter auch ohne Großschreibung, kann also die doppelte Bedeutung von "Fliegen" als Plural einer Insektenspezies und einer Art der Fortbewegung nicht erfassen.
Um die sprachlichen Besonderheiten berücksichtigen zu können, müssen Machine-Learning-Algorithmen auf besondere Art und Weise aufgebaut werden. Die Algorithmen sollen unter anderem die Reihenfolge der Wörter sowie deren Kontext beachten. Sie sollen diese Daten aber auch schnell und effizient prozessieren. Dies ist keine leichte Aufgabe.
Recurrent Neural Networks
Eine lange Zeit wurden hierfür verschiedene Versionen von Recurrent Neural Networks (RNNs, Rekurrente Neuronale Netze) genutzt. Die RNNs verarbeiten die Textdaten sequentiell (sog. Sequence-to-Sequence-Modellierung). Sie verfügen über eine Art Gedächtnis: Ein Teil des Outputs wird einbehalten und wieder als Input in die Netze eingespeist. Es handelt sich um eine Art Rückkopplungsmechanismus. Somit eignen sich RNNs für sequentielle Datenverarbeitung recht gut.
Allerdings haben sie auch einige Nachteile, die die Sprachverarbeitung nicht besonders effizient machen:
- Begrenzte Textlänge: RNNs sind nicht in der Lage, sich größere Mengen an Text zu merken.
- Keine Parallelisierung möglich: Aufgrund der sequenziellen Datenverarbeitung ist es nicht möglich, die Daten mit Hilfe von RNNs parallel zu verarbeiten. Dadurch dauert das Training sehr lang.
Aufgrund dieser Einschränkungen lassen sich sehr große Datenmengen nur schwer mit RNNs trainieren. Dies ist aber notwendig, wenn wir zum Beispiel einen Bot wie ChatGPT trainieren möchten.
Transformer
Diese Probleme mit RNNs wurden zum großen Teil durch die Transformer-Architektur behoben. Mit ihrer Einführung im Jahr 2017 kam es zu einigen Neuerungen, die die maschinelle Sprachverarbeitung deutlich effizienter machten.
Die wichtigsten Verbesserungen im Vergleich zu RNNs waren Positional Encodings und Self-Attention:
Positional Encodings
Generell müssen textbasierte Daten in eine numerische Form gebracht werden, bevor sie durch Machine-Learning-Modelle verarbeitet werden können. Für diesen Schritt gibt es verschiedene Methoden. Im Fall von Transformern sind es sog. Input Embeddings in Verbindung mit Positional Encodings. Positional Encodings markieren dabei die Wortposition in einem Satz durch entsprechende numerische Werte. Damit kann der Kontext jedes Wortes besser erfasst werden. Vereinfacht gesagt verwandeln Positional Encodings zusammen mit Input Embeddings Wörter in mehrdimensionale Vektoren, die im nächsten Schritt mathematisch bearbeitet werden können. Diese Methode ist sehr effizient und ermöglicht schnelleres Trainieren der Modelle.
Self-Attention
Die zweite Neuerung ist etwas komplexer. Transformer nutzen eine besondere Version des Attention-Mechanismus (Aufmerksamkeitsmechanismus), und zwar Self-Attention. Insbesondere den Typ Multi-Head Attention.
Der Self-Attention-Mechanismus ermöglicht es dem Transformer, vereinfacht ausgedrückt, schon während der Textverarbeitung alle Wörter in einer Sequenz zu sehen und somit den Kontext dieser Wörter zu erkennen. Der Algorithmus lernt dabei, welche Teile der eingespeisten Daten am relevantesten für einen bestimmten Output sind, indem er die Beziehungen zwischen den verschiedenen Elementen der Inputdaten berechnet. Auf diese Weise kann der Transformer erkennen, welche Bedeutung das Wort "Fliegen" in einem Satz hat. Die Methodik ist noch etwas komplexer und es gibt mehrere Arten der Self-Attention, aber das Prinzip und das Ziel ist hierbei stets gleich: den Kontext der Wörter zu erkennen. Im Vergleich zu RNNs verfügen Transformer also über eine besondere Form des Attention-Mechanismus.
Die Struktur der Transformer
Diese Neuerungen sind in eine komplexe Struktur innerhalb der Transformer eingebettet. Die genaue Funktionsweise der Transformer-Architektur ist sehr aufwändig und wurde auch bereits häufig beschrieben und diskutiert [2]. An dieser Stelle werden wir uns deshalb darauf konzentrieren, einen Überblick über die Funktionsweise von Transformern in der Praxis verschaffen. Abb. 2 zeigt die ursprüngliche Transformer-Architektur aus dem Artikel "Attention is all you need".
Insgesamt bestehen Transformer aus mehreren Schichten neuronaler Netze. In der klassischen Variante sind diese Netze in zwei separaten Teilen enthalten: Encoder und Decoder. Der Daten-Input wird zunächst in die Encoder-Schicht eingespeist und im zweiten Schritt durch die Decoder-Schicht verarbeitet. In der Praxis wird oft nur einer der zwei Teile genutzt, d. h. entweder der Encoder oder der Decoder. Dazu etwas später mehr.
Noch bevor die Inputdaten in die Transformer eingespeist werden, müssen sie zunächst entsprechend bereinigt und in eine für Transformer lesbare Form gebracht werden. Dazu sind verschiedene Schritte notwendig, die je nach Art des genutzten Transformers variieren können. In der Regel müssen wir uns für eine Transformervariante, die unsere Daten optimal bearbeitet, entscheiden und im zweiten Schritt unsere Textdaten entsprechend anpassen.
Nach der Datenbereinigung werden im zweiten Schritt die Daten (Input) in die Encoder-Schicht des Transformers eingespeist. Hier kommen die bereits erwähnten Input Embeddings und Positional Encodings ins Spiel. Sie überführen die Daten in eine mehrdimensionale numerische Vektorrepräsentation.
Weiter wird der Input durch folgende Schichten (sog. Sub-Layers) geleitet: Multi-Head-Self-Attention-Mechanismus und Fully Connected Feed-Forward Network.
Feed-Forward-Netze sind die Standardnetze im Deep Learning. Deswegen soll ihre Funktionsweise hier nicht weiter erklärt werden. Im Prinzip wandeln sie den Input in weitere Zahlenwerte um und leiten diese Ausgaben an die weiteren Schichten im Encoder- oder Decoder-Block weiter.
Für einige Transformer kann das Training bereits hier vom Ursprungstransformer divergieren, denn nicht alle Transformer-Modelle nutzen auch die Decoder-Schicht. Wenn das Training bereits nach den Encoder-Schichten endet, werden die Daten im Regelfall noch mit einem weiteren Standardmodell (je nach Zielsetzung) trainiert. Zum Beispiel kann für die Textklassifikation etwa eine logistische Regression angewandt werden.
Im originalen Transformer-Paper geht es mit dem Input weiter in die Decoder-Schicht. Die Decoder-Schichten sehen vom Prinzip her ähnlich wie die Encoder-Schichten aus. Sie haben aber eine zusätzliche Self-Attention-Schicht. Dazu nutzen sie eine weitere Form des Self-Attention-Mechanismus – die sog. Masked-Attention –, die vereinfacht gesagt Teile der Input-Sequenzen maskiert. Durch die Maskierung soll eine bessere Effizienz des Algorithmus erreicht werden.
In den letzten Schritten ("linear") wird der Output zunächst in einen weiteren mehrdimensionalen Vektor transformiert und mittels einer Softmax-Funktion normalisiert.
Im Ursprungspaper steht als Ergebnis dieser Transformationen eine Übersetzung Englisch-Deutsch und Englisch-Französisch. In der Praxis wird die Transformer-Architektur je nach Bedarf angepasst. Es gibt Transformer-Varianten, die nur eine der beiden Schichten (Encoder oder Decoder) verwenden oder aber den Masked-Attention-Mechanismus in den Encoder-Schichten verwenden usw.
Einer der bekanntesten Transformer ist BERT (Bidirectional Encoder Representations from Transformers). BERT wurde vom Google-Team entworfen und gehört derzeit zu den populärsten Varianten der Transformer weltweit [3]. BERT ist ein encoder-basiertes Modell, welches aber den Masked-Self-Attention-Mechanismus nutzt.
Ein derzeit sehr beachtetes transformer-basiertes Sprachmodell ist ChatGPT. Gebaut von OpenAI basiert der Chat (laut eigenen Angaben) auf der GPT-3-Architektur (Generative Pre-trained Transformer). Diese wurde auf der Decoder-Schicht des Transformers trainiert. Seit Kurzem ist eine neue Version vom Chat auf dem Markt, die mit GPT-4 trainiert wurde [4]. Hier ist es wichtig zu erwähnen, dass ChatGPT nicht nur auf Transformern basiert, sondern auch auf dem sog. Reinforcement Learning from Human Feedback (RLHF)[5]. Die genaue Variante der Trainigsmethode ist bei ChatGPT nicht bekannt. OpenAI schreibt dazu: "We’ve trained language models that are much better at following user intentions than GPT-3 while also making them more truthful and less toxic, using techniques developed through our alignment research. These InstructGPT models, which are trained with humans in the loop, are now deployed as the default language models on our API." [6]
Wie trainieren wir die Transformer in der Praxis?
Transformer sind recht komplexe Strukturen, die oft aufgrund der benötigten Datenmengen und Rechenkapazitäten schwer zu trainieren sind. Zum Glück müssen wir im Regelfall die Transformer nicht selbst trainieren. Ähnlich wie im Fall von Computer Vision können wir auf das sogenannte Transfer Learning zugreifen.
Transfer Learning
Transfer Learning ist eine Methode, die es uns erleichtert, Machine-Learning-Modelle zu trainieren. Vereinfacht gesagt ermöglicht sie uns, bereits vortrainierte Modelle herunterzuladen und für eigene Zwecke anzupassen und mit unseren Datensätzen weiter zu trainieren. Somit müssen die Modelle nicht vollständig "von vorne" trainiert werden. Die Leistung der heruntergeladenen Modelle bleibt gut, obwohl sie an anderen Daten trainiert wurden. Dieses Verfahren spart Zeit und Rechenpower.
Wo kann man vortrainierte Transformer-Modelle finden? Hier kommt das Hugging-Face-Ökosystem ins Spiel.
Hugging-Face-Ökosystem
Hugging Face ist eine Community, welche von einer privaten Firma betrieben wird. Vom Prinzip sind die Modelle und andere Ressourcen, die auf Hugging Face verfügbar sind, Open Source und können kostenfrei heruntergeladen werden. Manche Features, wie u. a. zusätzliche Infrastruktur oder Rechenkapazitäten, können dazugekauft werden.
Die Community besteht aus mehreren Bereichen:
- Hugging Face Hub (Models)
Im Hub sind verschiedene vortrainierte Modelle verfügbar und suchbar. Sie sind nach unterschiedlichen Kriterien sortiert und können zum weiteren Training heruntergeladen werden. Die Modelle sind auch in verschiedenen Sprachen verfügbar. - Hugging Face Tokenizers
Hier werden verschiedene Strategien für Tokenisierung der Texte bereitgestellt und erklärt. - Hugging Face Datasets
Hier finden wir verschiedene Datensätze, an denen wir unsere Modelle trainieren können.
Dazu kommen weitere Features wie Forum und Discord Community. Im Forum können wir Lösungen für unsere Problem erfragen. Die Community ist sehr engagiert.
Transformer Training (Schritte)
Jetzt nehmen wir uns vor, ein Modell für Textklassifikation zu trainieren. Dazu soll ein Transformer-Modell genutzt werden. Die Vorgehensweise beim Trainieren könnte in der Praxis wie folgt aussehen. Im ersten Schritt gehen wir auf die Hugging-Face-Webseite und suchen uns ein entsprechendes Modell aus [7]. Je nach Zielsetzung und Sprache gibt es auf Hugging Face eine große Auswahl. Die Modelle sind in verschiedene Kategorien unterteilt. Für Klassifikationen eignen sich unterschiedliche Varianten des BERT-Modells am besten.
Wenn die Textdaten, die wir auswerten und klassifizieren, auf deutsch vorliegen, wäre ein Modell wie zum Beispiel German BERT geeignet [8]. Es gibt aber auch Modelle, die speziell auf eine Aufgabe fokussiert sind. Eine Option ist, per neutraler Suchmaschine nach speziellen Keywords zu suchen. Die Suchmaske bei Hugging Face selbst zeigt leider nicht unbedingt die besten Ergebnisse an.
In einem weiteren Schritt laden wir die Gewichtungen des Modells herunter. Die genaue Vorgehensweise beim Transfer Learning kann variieren und ist auch von der Rechenkapazität abhängig. Verschiedene Möglichkeiten, wie man einen Transformer weiter mit eigenen Daten trainieren kann, wurden sehr gut im Buch "Natural Language Processing with Transformers" erklärt [9]. Das Buch zeigt verschiedene Methoden von Transfer Learning mit Transformern und ist deswegen sehr empfehlenswert für alle, die hier ihr Wissen vertiefen möchten.
Im nächsten Schritt trainieren wir den Transformer mit unseren Daten weiter (Feintuning) und werten ihn aus (Evaluation). Generell können Hugging Face Transformer sowohl in PyTorch als auch in TensorFlow oder Keras trainiert werden. Die Anleitungen dazu sind vom jeweiligen Framework abhängig. Auf Hugging Face gibt es viele Anleitungen, wie man einen Transformer mit PyTorch oder TensorFlow feintunen kann [10].
Zusammenfassung
Transformer haben Natural Language Processing als Disziplin revolutioniert. Dank der neuesten Generation der Transformer ist es möglich geworden, große Textmengen effizient zu verarbeiten und zu generieren. Auf Basis der Transformer arbeiten die neuesten Generative-KI-Modelle von OpenAI (ChatGPT) und Google (Bard) sowie viele andere.
Zwar dominieren derzeit Transformer diesen Bereich, doch das letzte Wort ist noch nicht gesprochen. Vor kurzem wurde eine neue Variante von Rekurrenten Neuralen Netzen (RNNs) vorgestellt, die wahrscheinlich noch effizienter arbeitet als die Transformer [11]. Eventuell werden in Zukunft weitere Varianten von RNNs als Trainingsalternative zur Verfügung stehen.
Es lohnt sich, diesen Bereich von Machine Learning intensiv zu verfolgen, da dort gerade sehr viel im Hinblick auf innovative Anwendungsmethoden und Firmengründungen passiert.
- Cornell University: Attention is all you need
- E. Muñoz: Attention is all you need: Discovering the Transformer paper
J. Alammar: The Illustrated Transformer - Wikipedia: BERT
- GPT-4
- Wikipedia: Reinforcement Learning from Human Feedback (RLHF)
- OpenAI: Aligning language models to follow instructions
- Hugging-Face
- Hugging-Face: German BERT
- L. Tunstall, L. von Werra, T. Wolf: Natural Language Processing with Transformers
- Hugging-Face: Fine-tune a pretrained model
- Twitter: BlinkDL