Manchmal möchten wir (einen Teil) von GPT als vorab trainierten Latentvariablendecoder verwenden. Was sollen wir tun? Ich habe kürzlich einen Artikel gelesen und drei Methoden zur Injektion versteckter Variablen (Code-Injektion) zusammengefasst.
1. Cheng X, Xu W, Wang T, et al. Variationale halbüberwachte Aspekt-Term-Stimmungsanalyse über Transformer[C]// Tagungsband der 23. Konferenz zum rechnergestützten Lernen natürlicher Sprachen (CoNLL). 2019.
Die in diesem Artikel verwendete Methode besteht darin, jedem Eingabetoken latente Variablen hinzuzufügen. Der Originaltext stellt jedes Token als Summe latenter Variablen und ursprünglicher Einbettungen dar und verwendet dann die Rekonstruktionsaufgabe zur Feinabstimmung des Decoders.
2. Ziegler ZM, Melas-Kyriazi L, Gehrmann S, et al. Encoder-agnostische Anpassung für die bedingte Sprachgenerierung[J]. 2019.
In diesem Artikel werden Möglichkeiten untersucht, vorab trainierte Sprachmodelle in natürlicher Sprache an beliebige bedingte Eingaben anzupassen. Die Autoren stellten fest, dass vorab trainierte Transformatormodelle während der Feinabstimmung sehr empfindlich auf große Parameteränderungen reagieren. Daher wird eine Anpassungsmethode vorgeschlagen, die willkürliche Konditionierung direkt in die Selbstaufmerksamkeit einfügt und als Pseudo-Selbstaufmerksamkeit bezeichnet wird. Die Hauptidee besteht darin, latente Variablen schichtweise einzufügen. Der Unterschied zu mehreren anderen Injektionsstrukturen ist wie folgt:
a hat einen neuen Transformatordecoder trainiert; b hat eine neue Kontextaufmerksamkeitsschicht trainiert; Pseudo-Selbstaufmerksamkeit hat nur einen Teil der Selbstaufmerksamkeitsschicht geändert (grün in der Abbildung zeigt an, dass nur vorab trainierte Gewichte für die Initialisierung verwendet werden, grau zeigt Training von an Kratzer und Rot. Der Vektor stellt die Zielaktivierung jeder Ebene dar, und der blaue Vektor stellt die vom Encoder ausgegebene Quellfunktion dar.)
Insbesondere projiziert der Autor die latente Variable durch eine lineare Schicht , sodass sie in L Vektoren aufgeteilt werden kann . Was an den Selbstaufmerksamkeitsblock gesendet wird . Wie nachfolgend dargestellt:
Hellrot ist der Schlüssel und Wert der versteckten Variablen
Pseudo-Selbstaufmerksamkeit kann latente Variablen auf folgende Weise in die vorab trainierte GPT2-Selbstaufmerksamkeitsstruktur absorbieren. Für jede Selbstaufmerksamkeitsschicht gibt es:
Der Einfachheit halber bezieht sich z hier auf (Zeilenvektor). Wo ist die ursprüngliche Eingabeeinbettung? und sind erweiterte Schlüssel und Werte mit projizierten latenten Variablensummen ( aus der ersten Zeile von z (d. h. ) Auffüllung?). Stellt die Verkettung nach Zeile dar.
3. Wang T., Wan X. T-CVAE: Transformer-basierter konditionierter Variations-Autoencoder für die Story-Vervollständigung[C]// Achtundzwanzigste internationale gemeinsame Konferenz über künstliche Intelligenz (IJCAI-19). 2019.
Die in diesem Artikel verwendete Methode wird auf der letzten Ebene injiziert. Die Modellstruktur des Artikels ist wie folgt:
Im ursprünglichen GPT2 werden die Einbettungsvektoren aus der letzten Aufmerksamkeitsschicht über einen linearen Kopf (V ist die Vokabulargröße) auf Logit-Vektoren vor Softmax projiziert . Wenn Sie zu diesem Zeitpunkt latente Variablen injizieren möchten, müssen Sie einen neuen gemeinsam genutzten linearen Kopf erlernen, auf den projiziert werden soll . Schließlich wird es an Softmax gesendet. Der spezifische Prozess im Originalartikel ist:
Dabei ist D die Decoder-Ausgabe, die Parametermatrix und die Ausgabe der kombinierten Schicht, die z und den Decoder-Zustand zum Zeitpunkt t zusammenführt. Und weiter an Linear Head und Softmax weitergeleitet, um eine Wahrscheinlichkeitsverteilung zu erhalten.
Erweiterte Lektüre: Ein Überblick über die Forschung zur Textgenerierung basierend auf vorab trainierten Sprachmodellen_zenRRans Blog-CSDN-Blog Abschnitt 5, gängige Feinabstimmungsstrategien für die Textgenerierung unter Verwendung vorab trainierter Sprachmodelle_3As Strange and Strange Holy Land-CSDN-Blog