
Im Bereich des maschinellen Lernens und der Verarbeitung natürlicher Sprache ist Sequenz-zu-Sequenz (kurz seq2seq) eine Familie von Ansätzen, die auf Sequenztransformation basieren, d. h., sie wandeln eine Eingabesequenz in eine Ausgabesequenz um. Ursprünglich von Lê Viết Quốc, einem vietnamesischen Informatiker und Pionier des maschinellen Lernens bei Google Brain, entwickelt, ist dieses Framework mittlerweile zu einer Grundlage vieler moderner KI-Systeme geworden. Zu den Anwendungsbereichen zählen Sprachübersetzung, Bildbeschriftung, Dialogmodelle, Spracherkennung und Textzusammenfassung.
“One naturally wonders if the problem of translation could conceivably be treated as a problem in cryptography. When I look at an article in Russian, I say: 'This is really written in English, but it has been coded in some strange symbols. I will now proceed to decode.”
„Man fragt sich natürlich, ob das Problem der Übersetzung möglicherweise als ein Problem der Kryptografie betrachtet werden könnte. Wenn ich mir einen Artikel auf Russisch anschaue, sage ich mir: ‚Das ist eigentlich auf Englisch geschrieben, wurde aber in irgendwelche seltsamen Symbole verschlüsselt. Ich werde nun mit der Entschlüsselung beginnen.‘“

Seq2seq ist ein Ansatz für die maschinelle Übersetzung (oder allgemeiner gesagt für die Sequenztransduktion), der seine Wurzeln in der Informationstheorie hat, in der Kommunikation als ein Prozess aus Kodierung, Übertragung und Dekodierung verstanden wird und die maschinelle Übersetzung als Sonderfall der Kommunikation betrachtet werden kann. Diese Sichtweise wurde beispielsweise im Modell der maschinellen Übersetzung mit verrauschtem Kanal näher ausgeführt.
In der Praxis bildet seq2seq eine Eingabesequenz mithilfe eines neuronalen Netzes (des Encoders) in einen reellen Vektor ab und bildet sie anschließend mithilfe eines anderen neuronalen Netzes (des Decoders) wieder in eine Ausgabesequenz zurück.
Das Konzept der Encoder-Decoder-Sequenztransduktion wurde Anfang der 2010er Jahre entwickelt. Als wegweisende Arbeiten, aus denen seq2seq hervorging, werden am häufigsten zwei Artikel aus dem Jahr 2014 zitiert.
In dem von ihnen vorgeschlagenen seq2seq-Modell waren sowohl der Encoder als auch der Decoder LSTMs. Dies führte zu einem „Engpass“-Problem, da der Kodierungsvektor eine feste Größe hat. Bei langen Eingabesequenzen gingen daher tendenziell Informationen verloren, da diese nur schwer in den Kodierungsvektor mit fester Länge passten. Der 2014 vorgeschlagene Attention-Mechanismus löste das Engpassproblem. Sie nannten ihr Modell RNNsearch, da es „das Durchsuchen eines Quellsatzes während der Dekodierung einer Übersetzung nachahmt“.
Ein Problem bei seq2seq-Modellen bestand zu diesem Zeitpunkt darin, dass rekurrente neuronale Netze (RNN) schwer zu parallelisieren sind. Die Veröffentlichung von Transformers im Jahr 2017 löste das Problem, indem das kodierende RNN durch Self-Attention-Transformer-Blöcke („Encoder-Blöcke“) und das dekodierende RNN durch Cross-Attention-Transformer-Blöcke mit kausaler Maskierung („Decoder-Blöcke“) ersetzt wurde.
Eine der Arbeiten, die als Ursprung von seq2seq angeführt wird, ist (Sutskever et al. 2014), die bei Google Brain veröffentlicht wurde, während die Autoren am maschinellen Übersetzungsprojekt von Google arbeiteten. Diese Forschungsarbeit ermöglichte es Google, Google Translate im Jahr 2016 zu Google Neural Machine Translation umzugestalten. Tomáš Mikolov behauptet, bereits vor seinem Eintritt bei Google Brain die Idee entwickelt zu haben, ein „neuronales Sprachmodell auf Satzpaare anzuwenden … und anschließend [die Übersetzung zu generieren], nachdem der erste Satz gesehen wurde“ – was er mit der seq2seq-Maschinenübersetzung gleichsetzt – und diese Idee Ilya Sutskever und Quoc Le (während seiner Zeit bei Google Brain) gegenüber erwähnt zu haben, die ihn in ihrer Arbeit jedoch nicht als Mitverfasser nannten. Mikolov hatte für seine Doktorarbeit an RNNLM (unter Verwendung von RNN für die Sprachmodellierung) gearbeitet und ist vor allem für die Entwicklung von word2vec bekannt.
Die wichtigste Quelle für diesen Abschnitt ist Zhang et al.

Der Encoder ist dafür zuständig, die Eingabesequenz zu verarbeiten und deren wesentliche Informationen zu erfassen, die als versteckter Zustand des Netzwerks und, in einem Modell mit Aufmerksamkeitsmechanismus, als Kontextvektor gespeichert werden. Der Kontextvektor ist die gewichtete Summe der versteckten Zustände der Eingabe und wird für jeden Zeitpunkt in den Ausgabesequenzen generiert.

Der Decoder übernimmt den Kontextvektor und die versteckten Zustände vom Encoder und generiert die endgültige Ausgabesequenz. Der Decoder arbeitet autoregressiv und erzeugt jeweils ein Element der Ausgabesequenz. Bei jedem Schritt berücksichtigt er die zuvor generierten Elemente, den Kontextvektor und die Informationen der Eingabesequenz, um Vorhersagen für das nächste Element der Ausgabesequenz zu treffen. Insbesondere werden in einem Modell mit Aufmerksamkeitsmechanismus der Kontextvektor und der verborgene Zustand zu einem verborgenen Aufmerksamkeitsvektor verkettet, der als Eingabe für den Decoder dient.
Die Anfang der 2010er Jahre entwickelte seq2seq-Methode nutzt zwei neuronale Netze: Ein Encoder-Netz wandelt einen Eingabesatz in numerische Vektoren um und ein Decoder-Netz wandelt diese Vektoren in Sätze in der Zielsprache um. Der Attention-Mechanismus wurde 2014 in diese Struktur integriert und ist unten dargestellt. Später wurde er zur Encoder-Decoder-Transformer-Architektur von 2017 weiterentwickelt.


Es gibt einen feinen Unterschied zwischen Training und Vorhersage. Während des Trainings sind sowohl die Eingabe- als auch die Ausgabesequenz bekannt. Bei der Vorhersage ist nur die Eingabesequenz bekannt, und die Ausgabesequenz muss vom Netzwerk selbst decodiert werden.
Betrachten wir konkret eine Eingabe- und eine Ausgabesequenz . Der Encoder würde die Eingabe Schritt für Schritt verarbeiten. Danach würde der Decoder die Ausgabe des Encoders sowie das <bos> als Eingabe nehmen und eine Vorhersage erzeugen. Nun stellt sich die Frage: Was soll dem Decoder im nächsten Schritt als Eingabe zugeführt werden?
Eine gängige Trainingsmethode ist das „Teacher Forcing“. Beim Teacher Forcing ist die nächste Eingabe für den Decoder immer die Referenz, unabhängig davon, was der Decoder ausgibt. Das heißt, selbst wenn , ist die nächste Eingabe für den Decoder immer noch , und so weiter.
Während der Vorhersagephase wäre der „Teacher“ nicht verfügbar. Daher muss die Eingabe für den Decoder lauten , dann und so weiter.


Es hat sich gezeigt, dass sich die Leistung eines Modells, das ausschließlich durch Teacher Forcing trainiert wurde, während der Vorhersagephase verschlechtert, da sich die auf der eigenen Ausgabe des Modells basierende Generierung von der auf der Ausgabe des Teachers basierenden Generierung unterscheidet. Dies wird als Exposure Bias oder als Verschiebung der Trainings- und Testverteilung bezeichnet. Eine Veröffentlichung aus dem Jahr 2015 empfiehlt, während des Trainings zufällig zwischen Teacher Forcing und dem Verzicht darauf zu wechseln.
Der Attention-Mechanismus ist eine Erweiterung, die 2014 von Bahdanau et al. eingeführt wurde, um Einschränkungen der grundlegenden Seq2Seq-Architektur zu beheben, bei der eine längere Eingabesequenz dazu führt, dass der vom Encoder ausgegebene versteckte Zustand für den Decoder irrelevant wird. Er ermöglicht es dem Modell, sich während des Dekodierungsprozesses selektiv auf verschiedene Teile der Eingabesequenz zu konzentrieren. Bei jedem Decoder-Schritt berechnet ein Alignment-Modell den Attention-Score unter Verwendung des aktuellen Decoder-Zustands und aller versteckten Attention-Vektoren als Eingabe. Ein Alignment-Modell ist ein weiteres neuronales Netzwerkmodell, das gemeinsam mit dem seq2seq-Modell trainiert wird und dazu dient, zu berechnen, wie gut eine Eingabe, dargestellt durch den verborgenen Zustand, mit der vorherigen Ausgabe, dargestellt durch den verborgenen Attention-Zustand, übereinstimmt. Anschließend wird eine Softmax-Funktion auf den Attention-Score angewendet, um das Attention-Gewicht zu erhalten.

Bei einigen Modellen werden die Encoder-Zustände direkt in eine Aktivierungsfunktion eingespeist, wodurch kein Alignment-Modell mehr erforderlich ist. Eine Aktivierungsfunktion nimmt einen Decoder-Zustand und einen Encoder-Zustand entgegen und gibt einen Skalarwert zurück, der deren Relevanz angibt.

Betrachten wir die seq2seq-Übersetzungsaufgabe vom Englischen ins Französische. Konkret betrachten wir die Übersetzung von „the zone of international control <end>“, die zu „la zone de contrôle international <end>“ übersetzt werden soll. Hier verwenden wir das spezielle Token <end> als Steuerzeichen, um das Ende der Eingabe sowohl für den Encoder als auch für den Decoder zu markieren.
Eine Text-Eingabesequenz wird von einem neuronalen Netzwerk (beispielsweise einem LSTM, einem Transformer-Encoder oder einem anderen Netzwerk) zu einer Folge von reellen Vektoren verarbeitet, wobei für „versteckter Vektor“ steht.
Nachdem der Encoder die Verarbeitung abgeschlossen hat, beginnt der Decoder mit der Verarbeitung der versteckten Vektoren, um autoregressiv eine Ausgabesequenz zu erzeugen. Das heißt, er nimmt stets sowohl die vom Encoder erzeugten versteckten Vektoren als auch das, was der Decoder selbst zuvor erzeugt hat, als Eingabe, um das nächste Ausgabewort zu erzeugen:
Hier verwenden wir das spezielle Token <start> als Steuerzeichen, um den Beginn der Eingabe für den Decoder abzugrenzen. Die Dekodierung wird beendet, sobald „<end>“ in der Ausgabe des Decoders erscheint.

Da die manuelle Festlegung von Gewichten dem Zweck des maschinellen Lernens zuwiderläuft, muss das Modell die Attention-Gewichte selbst berechnen. In Anlehnung an die Sprache von Datenbankabfragen lassen wir das Modell ein Vektor-Tripel bilden: Schlüssel, Abfrage und Wert. Die grobe Idee besteht darin, dass wir eine „Datenbasis“ in Form einer Liste von Schlüssel-Wert-Paaren haben. Der Decoder sendet eine Abfrage und erhält eine Antwort in Form einer gewichteten Summe der Werte, wobei das Gewicht proportional dazu ist, wie stark die Abfrage jedem Schlüssel ähnelt.
Der Decoder verarbeitet zunächst die Eingabe „<start>“ teilweise, um einen Zwischenvektor zu erhalten , den 0. versteckten Vektor des Decoders. Anschließend wird der Zwischenvektor durch eine lineare Abbildung in einen Abfragevektor umgewandelt. Gleichzeitig werden die vom Encoder ausgegebenen versteckten Vektoren durch eine weitere lineare Abbildung in Schlüsselvektoren umgewandelt. Die linearen Abbildungen sind nützlich, um dem Modell genügend Freiheit zu geben, den besten Weg zur Darstellung der Daten zu finden.
Nun werden die Abfrage und die Schlüssel durch Berechnung der Skalarprodukte verglichen: . Im Idealfall sollte das Modell gelernt haben, die Schlüssel und Werte so zu berechnen, dass groß ist, klein ist und die übrigen Werte sehr klein sind. Dies lässt sich so interpretieren, dass das Attention-Gewicht größtenteils auf den 0. versteckten Vektor des Encoders, ein wenig auf den 1. Vektor und im Wesentlichen gar nicht auf die übrigen angewendet werden sollte.
Um eine korrekt gewichtete Summe zu erhalten, müssen wir diese Liste von Skalarprodukten in eine Wahrscheinlichkeitsverteilung über umwandeln. Dies lässt sich mithilfe der Softmax-Funktion bewerkstelligen, wodurch wir die Attention-Gewichte erhalten:
Dies wird dann zur Berechnung des Kontextvektors verwendet:
wobei die Wertvektoren sind, die durch eine weitere Matrix linear transformiert werden, um dem Modell die Freiheit zu geben, die beste Art der Darstellung der Werte zu finden. Ohne die Matrizen wäre das Modell gezwungen, denselben versteckten Vektor sowohl für den Schlüssel als auch für den Wert zu verwenden, was möglicherweise nicht angemessen wäre, da diese beiden Aufgaben nicht identisch sind.

Dies ist der Dot-Attention-Mechanismus. Die in diesem Abschnitt beschriebene Variante ist die „Decoder-Cross-Attention“, da der Ausgabekontextvektor vom Decoder verwendet wird und die Eingabeschlüssel sowie -werte vom Encoder stammen, die Abfrage jedoch vom Decoder, daher der Begriff „Cross-Attention“.
Einfacher ausgedrückt lässt sich dies wie folgt schreiben:
wobei die Matrix die Matrix ist, deren Zeilen aus bestehen. Beachte, dass der Abfragevektor, , nicht unbedingt mit dem Schlüssel-Wert-Vektor übereinstimmen muss. Tatsächlich ist es theoretisch möglich, dass Abfrage-, Schlüssel- und Wertvektor alle unterschiedlich sind, obwohl dies in der Praxis selten vorkommt.