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

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 abarbeiten. Diese Methoden wurden später durch einen Aufmerksamkeitsmechanismus (engl. attention) erweitert. Transformer bauen auf dem Aufmerksamkeitsmechanismus auf und verzichten auf die rekurrente Struktur. Sie erzielen bei geringerem Rechenaufwand ähnliche oder bessere Ergebnisse bei der Transformation von Sequenzen als rekurrente Modelle. Beispiele für Transformermodelle sind Bidirectional Encoder Representations from Transformers (BERT)[1] und Generative Pretrained Transformer (GPT). Auch in AlphaFold2 sind Transformer als Evoformer in der Architektur enthalten.

Architektur

Transformer-Modellarchitektur mit originaler Position der Layer-Normalisierung. 2020 wurde eine verbesserte Positionierung der Layer-Normalisierung vor der Multi-Head Attention gefunden.

Ein Transformer besteht im Wesentlichen aus in Serie geschalteten Kodierern (Encoder) und in Serie geschalteten Dekodierern (Decoder).[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]

Transformer versuchen, das Problem der Parallelisierung durch die Verwendung von Kodierern und Dekodierer zusammen mit Attention-Modul zu lösen. Attention-Module steigern die Geschwindigkeit, mit der das Modell von einer Sequenz in eine andere übersetzen kann. Alle Kodierer haben die gleiche Architektur. Dekodierer sind einander auch sehr ähnlich. Jeder Kodierer besteht aus zwei Schichten: Self-Attention und einem Feedforward neural network. Die Eingaben des Kodierers durchlaufen zunächst einen Self-Attention Layer. Der Dekodierer verfügt über beide Ebenen, aber zwischen ihnen befindet sich ein Attention Layer, das dem Dekodierer hilft, sich auf relevante Teile der Eingabemenge zu konzentrieren.[5]

Außerdem sind in der Architektur mehrere Residualverbindungen und Layer-Normalisierungen[6] enthalten.

Kodierer

Der Kodierer besteht aus einem Stapel von 6 identischen Schichten, wobei jede Schicht aus zwei Teilschichten besteht.

Die erste Teilschicht implementiert einen Mechanismus mit Multi-Head Self-Attention. Dieser Mechanismus implementiert Heads, die eine linear projizierte Version der Abfragen, Schlüssel und Werte empfangen, um jeweils die gleiche Anzahl Ausgaben parallel zu erzeugen, die dann zum Generieren eines Endergebnisses verwendet werden.

Die zweite Teilschicht ist ein vollständig verbundenes Feedforward neural network, das aus zwei linearen Transformationen mit dazwischen liegender Aktivierung der Rectified linear unit (ReLU) besteht.

Alle 6 Schichten des Koderieres wenden die gleichen linearen Transformationen auf alle Wörter in der Eingabesequenz an, aber jede Schicht verwendet dazu unterschiedliche Parameter. Auf jede Teilschicht folgt eine Normalisierungsschicht, die die berechnete Summe zwischen der Eingabe der Teilschicht und der von der Teilschicht generierten Ausgabe normalisiert.

Die Transformer-Architektur kann grundsätzlich keine Informationen über die relativen Positionen der Wörter in der Sequenz erfassen, weil sie keine Wiederholung nutzt. Diese Informationen müssen durch die Kodierung der Positionen in die Eingabeeinbettungen eingefügt werden. Die Vektoren für die Kodierung der Positionen haben die gleiche Dimension wie die Eingabeeinbettungen und werden mithilfe von Sinus und Kosinus unterschiedlicher Frequenz generiert. Anschließend werden sie zu den Eingabeeinbettungen summiert, um die Positionsinformationen einzufügen.[7]

Dekodierer

Während der Inferenz kann ein Dekodierer zur autoregressiven Erzeugung von Sequenzen verwendet werden: Der Dekodierer wird mit einer Startsequenz abgefragt und sagt dann das nächste wahrscheinlichste Token vorher, welches im nächsten Schritt Teil der Eingabe wird (und so weiter). Während des Trainings des Dekodierers wird dieser Prozess durch Teacher Forcing und Maskierung im Dekodierer ersetzt, womit das Training stark beschleunigt wird.

Attention-Modul

Die Aufgabe des Attention-Moduls besteht darin, die Korrelation eines Eingabesymbols (Token) zu den anderen Eingabesymbolen zu berechnen. Gegeben sei die Worteinbettung (engl. embedding) des i-ten Token einer Sequenz. Diese Einbettung ist ein als Vektor kodiertes Eingabesymbol. Aus jeder Einbettung werden unabhängig voneinander drei Vektoren berechnet, indem die Einbettung mit einer jeweils erlernten Matrix , oder multipliziert wird:

, der Abfragevektor (engl. query)
, der Schlüsselvektor (engl. key)
, der Wertevektor (engl. value)

Hieraus wird das Aufmerksamkeitsgewicht (attention score) zwischen token i und token j der Sequenz durch das Skalarprodukt berechnet berechnet

und schließlich durch die Quadratwurzel der Länge der Schlüsselvektoren geteilt, um stabilere Gradienten zu erhalten (da die Softmax-Funktion bei großen absoluten Funktionsargumenten stark abflacht und der Gradient somit sehr klein wird):

Hierauf wird die Softmax-Funktion entlang der letzten Dimension angewandt angewendet:

Dieser skalare Wert wird nun mit dem Wertevektor multipliziert, was dazu führt, dass der Wertevektor mit einem Aufmerksamkeitsfaktor vergrößert oder verkleinert wird:

wobei der Vektor die berechnete Ausgabe des Attention-Moduls für Token i darstellt.

Unterschiede zwischen Attention im Encoder und Decoder

Der Unterschied zwischen dem Self-Attention-Modul (im Encoder) und dem Kodierer-Dekodierer-Attention-Modul (im Decoder mit Encoder) 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 Abfragevektor aus dem vorgelagerten Attention-Modul, während die Vektoren und aus dem Kodierer (Encoder) bezogen werden.

Masked Attention

Die Maskierung der Attention (welche insbesondere im Decoder während dem Training notwendig ist, um nur vergangene Tokens zu beachten) ist durch folgende Modifikation gegeben:

wobei M die Maskierungsmatrix ist, welche den Wert 0 bei unmaskierten Werten annimmt und den wert bei maskierten Werten. Stark negative Werte in der Maskierungsmatrix resultieren durch die softmax-Funktion in einer maskierten Attention von Null.

Multi-Head-Attention

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.

Scaled Dot-Product Attention

Der Transformer implementiert ein Scaled Dot-Product Attention, das dem Verfahren des allgemeinen Aufmerksamkeitsmechanismus folgt. Scaled Dot-Product Attention berechnet zunächst ein Skalarprodukt für jede Abfrage mit allen Schlüsseln . Anschließend dividiert es jedes Ergebnis durch den Skalierungsfaktor und wendet dann die Softmax-Funktion an. Dabei erhält es die Gewichte, mit denen die Werte skaliert werden. In der Praxis können die Berechnungen effizient auf der gesamten Menge von Abfragen gleichzeitig angewendet werden. Zu diesem Zweck werden die Matrizen , und als Eingaben für die Aufmerksamkeitsfunktion attention bereitgestellt. Diese kann so dargestellt werden:

Dieser Skalierungsfaktor wurde eingeführt, um dem Effekt entgegenzuwirken, dass die Skalarprodukte bei großen Werten stark ansteigen, wobei die Anwendung der Softmax-Funktion dann extrem kleine Gradienten zurückgeben würde, was zum Problem verschwindender Gradienten führen würde. Der Skalierungsfaktor dient dazu, die durch das Skalarprodukt berechneten Ergebnisse nach unten zu ziehen und dieses Problem zu vermeiden.

Das Verfahren zur Berechnung von ist wie folgt.

  • Die Ausrichtungswerte werden berechnet, indem die in der Matrix gespeicherte Menge von Abfragen mit den Schlüsseln in der Matrix multipliziert werden. Wenn eine -Matrix und eine -Matrix ist, dann ist die resultierende Matrix eine -Matrix:
  • Jeder der Ausrichtungswert wird mit skaliert:
  • Es wird die Softmax-Funktion angewendet, um eine Menge von Gewichten zu erhalten.
  • Die resultierenden Gewichte werden mithilfe der Matrixmultiplikation auf die Elemente der -Matrix angewendet:[8]

Weblinks

Einzelnachweise

  1. Rainald Menge-Sonnentag: Wer, wie, was: Textanalyse über Natural Language Processing mit BERT. In: Heise Online. 12. August 2019, abgerufen am 13. August 2020.
  2. 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).
  3. a b c d Alexander Rush: The Annotated Transformer. Harvard NLP, abgerufen am 19. Juni 2020 (englisch).
  4. a b c d Jay Alammar: The Illustrated Transformer. Abgerufen am 19. Juni 2020 (englisch).
  5. Giuliano Giacaglia, Towards Data Science: How Transformers Work
  6. Xiong, Ruibin, et al. "On layer normalization in the transformer architecture." International Conference on Machine Learning. PMLR, 2020. https://proceedings.mlr.press/v119/xiong20b
  7. Stefania Cristina, Machine Learning Mastery: The Transformer Model
  8. Stefania Cristina, Machine Learning Mastery: The Transformer Attention Mechanism

Auf dieser Seite verwendete Medien

The-Transformer-model-architecture.png
Autor/Urheber: Yuening Jia, Lizenz: CC BY-SA 3.0
The Transformer model architecture