Transformer (Maschinelles Lernen)
Ein Transformer ist eine Methode, mit der ein Computer eine Folge von Zeichen in eine andere Folge von Zeichen übersetzen kann. Dies kann z. B. benutzt werden, um Text von einer Sprache in eine andere zu übersetzen. Dazu wird ein Transformer mittels maschinellem Lernen auf einer (großen) Menge von Beispiel-Daten trainiert, bevor das trainierte Modell dann zur Übersetzung verwendet werden kann.
Transformer gehören zu den Deep-Learning-Architekturen. Transformer wurden 2017 im Rahmen der Neural-Information-Processing-Systems-Konferenz veröffentlicht.
Weitere Beispielanwendungen von Transformern sind die Textgenerierung oder die Zusammenfassung längerer Texte. Transformer weisen hierbei eine bessere Effizienz gegenüber Long-short-term-memory-Architekturen (LSTM) auf und sind die Grundarchitektur vieler vortrainierter Machine-Learning-Modelle wie Bidirectional Encoder Representations from Transformers (BERT)[1] und Generative Pretrained Transformer (GPT).
Hintergrund
Vor der Einführung des Transformers wurden in der Verarbeitung natürlicher Sprache (NLP) rekurrente Modelle wie LSTM, GRU und Seq2Seq eingesetzt, welche eine Eingangssequenz sequenziell abgearbeitet haben. Diese Methoden wurden später durch einen Aufmerksamkeits-Mechanismus (engl. Attention) erweitert. Transformer bauen auf dem Aufmerksamkeits-Mechanismus auf und verzichten auf die rekurrente Struktur. Hierbei werden bei geringerem Rechenaufwand ähnliche oder bessere Ergebnisse bei der Transformation von Sequenzen erzielt, als mit den rekurrenten Modellen.
Architektur
Ein Transformer besteht im Wesentlichen aus in Serie geschalteten Kodierern und in Serie geschalteten Dekodierern.[2][3][4] Die Eingabesequenz wird durch eine sogenannte Embedding-Schicht in eine Vektorrepräsentation überführt. Die Gewichte der Embedding-Schicht werden während des Trainings angepasst. Im Falle des Transformers kommt zusätzlich eine Positionskodierung zum Einsatz, wodurch die sequentielle Abfolge der Wörter berücksichtigt werden kann. Ein Wort erhält somit zu Beginn eines Satzes eine andere Repräsentation als am Ende.[3]
Die Eingabesequenz wird in der Vektorrepräsentation einer Serie von Kodierern übergeben und in eine interne Repräsentation überführt. Diese interne Repräsentation bildet die Bedeutung der Eingabesequenz abstrakt ab[4] und wird durch die Dekodierer in eine Ausgabesequenz übersetzt.[4] Die Eingabesequenz wird hierbei in Batches verarbeitet, wobei die Länge der Kodierer-Dekodierer-Pipeline die maximale Länge der Eingabesequenz beschränkt.[3] Je nach Größe des Netzwerks können beispielsweise einzelne Sätze oder auch ganze Absätze verarbeitet werden. Bei Eingabesequenzen, welche kürzer sind als die Länge der Kodierer-Dekodierer-Pipeline, wird Padding genutzt, um die Eingabesequenz aufzufüllen.[3]
Ein Kodierer besteht aus einem Self-Attention-Modul und einem Feedforward-Modul, während der Dekodierer aus einem Self-Attention-Modul, einem Kodierer-Dekodierer-Attention-Modul und einem Feedforward-Modul besteht.[4]
Attention-Modul
Die Aufgabe des Attention-Moduls besteht darin, die Korrelation eines Eingabesymbols zu den anderen Eingabesymbolen zu berechnen. Etwa die Zuordnung eines Pronomens zum zugehörigen Nomen.[4] Man unterscheidet zwischen der Einbettung (engl. embedding) , wobei es sich um das als Vektor kodierte Eingabesymbol handelt, dem Abfragevektor (engl. query) , dem Schlüsselvektor (engl. key) und dem Wertevektor (engl. value) . Aus jeder Einbettung werden die anderen drei Vektoren berechnet, indem diese mit einem durch Training erlernte Matrizen , und multipliziert werden:
Hieraus wird eine Bewertung (engl. score) berechnet
und schließlich durch die Quadratwurzel der Länge der Schlüsselvektoren geteilt, um stabilere Gradienten zu erhalten:
Hierauf wird die Softmax-Funktion angewendet:
Dieser Wert wird nun mit dem Wertevektor multipliziert. Dies führt dazu, dass für die Bedeutung unwichtige Symbole mit einem kleinen Wert und für die Bedeutung wichtige Symbole mit einem hohen Wert multipliziert werden:
Wobei der Vektor die berechnete Ausgabe des Attention-Moduls darstellt. Der Vektor repräsentiert die Wahrscheinlichkeitsverteilung über das Vokabular der möglichen Ausgabesymbole.
Der Unterschied zwischen dem Self-Attention-Modul und dem Kodierer-Dekodierer-Attention-Modul besteht darin, dass das Self-Attention-Modul ausschließlich die Werte des vorhergehenden Kodierers bzw. Dekodierers verwendet und die Vektoren , und berechnet. Das Kodierer-Dekodierer-Attention-Modul hingegen berechnet nur den Vektor aus dem vorgelagerten Attention-Modul, während die Vektoren und aus dem Kodierer bezogen werden.
In der Praxis wird die sogenannte Multi-Head-Attention eingesetzt. Jeder Head besteht hierbei aus einer eigenen Version der Matrizen , und . Jedes Attention-Modul besitzt mehrere Heads. Wenn ein Head für eine bestimmte Eingabe nicht relevant ist, wird ein niedriger Wert berechnet, während ein für eine Eingabe relevanter Head einen hohen Ausgabewert berechnet.
Quellen
- Rainald Menge-Sonnentag: Wer, wie, was: Textanalyse über Natural Language Processing mit BERT. In: Heise Online. 12. August 2019, abgerufen am 13. August 2020.
- Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin: Attention Is All You Need. In: arxiv. Google Brain, 12. Juni 2017, abgerufen am 19. Juni 2020 (englisch).
- Alexander Rush: The Annotated Transformer. Harvard NLP, abgerufen am 19. Juni 2020 (englisch).
- Jay Alammar: The Illustrated Transformer. Abgerufen am 19. Juni 2020 (englisch).
Weblinks
- Tianyang Lin, Yuxin Wang, Xiangyang Liu, Xipeng Qiu: A Survey of Transformers. (PDF) 8. Juni 2021, abgerufen am 15. Juni 2021 (englisch, Übersicht über Transformer-Architekturen).
- Michael Phi: Illustrated Guide to Transformers - Step by Step Explanation. 1. Mai 2020, abgerufen am 15. Juni 2021 (englisch).