Benutzer:Lernmaschine/Transformer
Der Transformer (dt. Umwandler, Transformator) ist eine Deep-Learning-Netzwerkarchitektur zur Transformation von Sequenzen, also um eine Sequenz in eine andere umwandeln zu können. Ein bekanntes Anwendungsbeispiel dazu sind maschinelle Übersetzungen, bei denen eine Sequenz der Ursprungssprache in eine Sequenz der Zielsprache umgewandelt wird. Eine Besonderheit dabei ist, dass die beiden Sequenzen üblicherweise unterschiedlich lang sind. Aber auch, wenn die Sequenzen die selbe Länge aufweisen, kann der Transformer angewendet werden: z.B. für POS-Tagging oder Named Entity Recognition.
Im Gegensatz zu rekurrenten Modellen (z.B. LSTM, GRU, Seq2Seq) arbeitet der Transformer die Eingangssequenz nicht sequentiell ab, sondern “liest” die gesamte Sequenz auf einmal. Bekannte Probleme der rekurrenten Modelle (z.B. kaum Möglichkeiten zur Parallelisierung oder steigender Speicherverbrauch bei langen Sequenzen) spielen somit beim Transformer keine Rolle. Die Architektur des Transformers basiert auf dem Attention-Mechanismus, der es erlaubt, (zeitliche) Abhängigkeiten in den Sequenzen zu erkennen und zu verarbeiten.
Der Transformer wurde 2017 im Rahmen der Neural Information Processing Conference von Ashish Vaswani et al. vorgestellt[1].
Architektur
Der Transformer besteht aus zwei Teilen: Einem Kodierer, der die Ursprungssequenz in eine Kontextmatrix umwandelt und einem Dekodierer, der mit Hilfe der Kontextmatrix lernt, eine neue Sequenz zu erzeugen. Die Zielsequenz wird während des Trainings als Vergleich zur Verbesserung herangezogen.
Maskierung
Die Eingangswerte, also Ursprungssequenzen, werden in Bündeln zusammengefasst (“gebatcht”). Zur Darstellung in Matrizen müssen die Sequenzen in den Batches die selbe Länge aufweisen. Die längste Sequenz im Batch bestimmt die Länge. Kürzere Sequenzen werden mit einem bestimmten Zeichen oder einer Zeichenfolge (z.B. <pad>) aufgefüllt. Damit festgestellt werden kann, wie lange die jeweilige Sequenz tatsächlich war, wird als zusätzlicher Input eine binäre Maske bereitgestellt: Für jedes Wort in der Input-Sequenz 1, für alle aufgefüllten Stellen 0.
Die Zielsequenzen müssen so aufbereitet werden, dass während des Trainings nicht “in die Zukunft” gesehen werden kann. Dazu wird zu Beginn der Sequenz ein spezielles Zeichen (z.B. <bos>, "begin of string") eingefügt. Die zweidimensionale Maske gibt die Gültigkeit bzw. “Sichtbarkeit” der Zeichen zu jedem Schritt an. Die erste Zeile zeigt den Start der Sequenz an, die zweite Zeile enthüllt das erste Wort usw. Streng genommen gibt es also pro Zielsequenz mehrere Masken.
Positionskodierung
Da das Transformer-Netzwerk die gesamte Sequenz verarbeitet, muss die Position des Wortes in dessen Embedding gespeichert werden. So kann die Reihenfolge der Wörter in der Sequenz rekonstruiert werden. Je nach Position pos
(gerade oder ungerade) werden folgende Formeln zur Kodierung verwendet (abhängig von der Dimension der Wortembeddings dim
):
PK(pos, 2i) = sin(pos / 100002i/dim)
PK(pos, 2i+1) = cos(pos / 100002i/dim)
Kodierer
Der Kodierer besteht aus N
gleich aufgebauten Schichten (im Originalartikel sind es N=8
[2]): In jeder Schicht wird der Input zuerst normalisiert, und zwar so, dass jeder dim
-dimensionale Vektor standardnormalverteilt ist. Danach wird die Attention über die normalisierte Sequenz und die dazugehörige Maske berechnet (siehe Multi-Head Scaled Dot-Product Attention). Die Rückgabewerte werden ebenfalls normalisiert und anschließend durch eine lineare Schicht mit ReLU-Aktivierung, sowie eine weitere lineare Schicht ohne Aktivierung verarbeitet. Die Ausgabe - die Kontextmatrix - weist die Dimensionen batch_size x seq_len x dim
auf und wird als Input für den Dekodierer verwendet.
Dekodierer
Der Dekodierer besteht ebenfalls aus N gleichen Schichten, die allerdings umfangreicher sind als beim Kodierer: Es werden zwar wieder nach jedem Schritt die Vektoren normalisiert, allerdings findet zweimal eine Attention-Berechnung statt. Beim ersten Mal wird die Zielsequenz mit dazugehöriger Maske verarbeitet, beim zweiten Mal der Output der ersten Attention gemeinsam mit der Kontextmatrix. Abschließend werden zwei klassische lineare Schichten, die erste mit ReLU-Aktivierung, die zweite ohne, durchlaufen.
Um aus dem Output wieder einen Text zu generieren, wird eine weitere lineare Schicht mit softmax-Aktivierung durchlaufen, um eine Verteilung über die möglichen Werte (z.B. Wörter in der Zielsprache) zu erhalten. Aus dieser Verteilung wird der wahrscheinlichste Wert ermittelt. Eine einfache Sampling-Strategie ist es, jeweils den Output mit der höchsten Wahrscheinlichkeit zu wählen ("greedy decoding").
Multi-head Scaled Dot-product Attention
Attention kommt im Transformer in drei Varianten zum Einsatz: als Self-Attention sowohl im Kodierer als auch im Dekodierer und als kombinierte Attention im Dekodierer. Die Attention-Funktion bildet eine “Abfrage” (query, ) und ein Schlüssel-Werte-Paar (key-value pair, und ) auf eine Ausgabe ab, wobei die drei Gewichtsmatrizen , , trainiert werden[3]:
Bei der Self-Attention im Kodierer entsprechen alle drei Vektoren , und der Inputmatrix, bei der Self-Attention im Dekodierer der Zielmatrix. Bei der kombinierten Attention im Dekodierer entspricht nur der Vektor der bereits verarbeiteten Zielmatrix (= Ausgabe der Self-Attention). Die Vektoren und stammen vom Kodierer und entsprechen dessen Output der vorangegangenen Self-Attention.
“Multi-Head” bedeutet, dass mehrere Attentions (mit unterschiedlichen Gewichtsmatrizen , , ) gleichzeitig berechnet und anschließend zusammengefügt (konkateniert) werden[3].
Anwendungen
Das Transformer-Modell sowie die dort zur Anwendung gekommene Form der Attention führten zur Entwicklung von vortrainierten Netzwerken wie BERT (Bidirectional Encoder Representations from Transformers) und GPT-2. Diese Netze wurden auf großen, allgemeinen Corpora trainiert und können auf bestimmte linguistische Aufgabenstellungen angepasst ("fine-tuning") werden:
- Maschinelle Übersetzung
- Zusammenfassung von Dokumenten
- Named Entity Recognition
- Textgenerierung
Einzelnachweise
- ↑ Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin: Attention is All You Need. Advances in Neural Information Processing Systems, 2017 (nips.cc [PDF]).
- ↑ Alexander Rush: The Annotated Transformer. In: Harvard NLP. Abgerufen am 13. April 2020.
- ↑ a b Jay Alammar: The Illustrated Transformer. Abgerufen am 13. April 2020.