[PYTHON] Von der Aufmerksamkeit von Zero Tsuku 2 zum Transformator

1. Zuallererst

** Ich habe Deep Learning2 Natural Language Processing ** von Grund auf studiert. Es gibt ** Aufmerksamkeit ** in Kapitel 8, aber nur 4 Seiten waren ** Transformer ** gewidmet, der Grundlage von ** BERT **, das derzeit Mainstream ist.

Tatsächlich ist dies nicht unangemessen, da Zero Tsuku 2 im Juli 2018, Transformer im Dezember 2017 und BERT im Oktober 2018 veröffentlicht wurden.

Dieses Mal möchte ich von ** Zero Tsuku 2 Attention ** zu ** Transformer ** 's Paper ** Attention Is All You Need ** übergehen, was als Grundlage für die aktuelle Verarbeitung natürlicher Sprache angesehen werden kann.

2. Was ist Zero Tsukuri 2 Achtung?

スクリーンショット 2020-09-04 19.00.17.png Um die Leistung des ** Seq2Seq-Übersetzungsmodells ** zu verbessern, achten Sie in Kapitel 8 Achtung von Zero Tsuku 2 auf das "I" von Encoder, wenn Sie "I" mit Decoder ** übersetzen. Aufmerksamkeit implementieren **.

スクリーンショット 2020-09-05 11.59.10.png

Berechnen Sie zunächst mit Attention Weight das ** innere Produkt **, um die Ähnlichkeit zwischen dem I-Vektor des Decoders und jedem Wortvektor des Encoders zu ermitteln, und multiplizieren Sie das Ergebnis mit ** Softmax **, um das ** Gewicht a zu erhalten. ** Fragen. Unter Berücksichtigung des leichteren Verständnisses wird das innere Produkt jedoch durch ** Multiplikation + H-Achsensumme ** berechnet.

Dann wird in der Aufmerksamkeitssumme die ** gewichtete Summe ** jedes Wortvektors von Encoder aus dem Gewicht a berechnet und der ** Kontextvektor ** erhalten. Dieser Kontextvektor spiegelt den Wortvektor von "I" stark wider und zeigt an, dass "I" auf "I" achten sollte.

3. Von der Aufmerksamkeit von Zero Tsuku 2 zum Transformator

Der Prozess des Nullsetzens 2 gibt dem leichteren Verständnis Vorrang und wird absichtlich durch ** Multiplikation + Achsensumme ** ohne Verwendung des ** inneren Produkts ** berechnet. Was passiert dann, wenn Sie mit dem inneren Produkt richtig rechnen?

スクリーンショット 2020-09-04 19.28.16.png

Sowohl die Gewichtsberechnung als auch die Gewichtssummenberechnung werden auf diese Weise aktualisiert, wenn sie in Form eines inneren Produkts vorliegen. Das ist rationaler, nicht wahr?

Übrigens ist in Achtung im Allgemeinen das zu berechnende Ziel ** Abfrage **, der für die Ähnlichkeitsberechnung verwendete Satz von Wortvektoren ist ** Schlüssel ** und der für die Berechnung der gewichteten Summe verwendete Satz von Vektoren ist ** Wert **. sagen. Wenn Sie die Abbildung überprüfen, um diese wiederzugeben,

スクリーンショット 2020-09-04 19.33.57.png

Das zu berechnende Ziel ** "I" ist Abfrage **, die Menge der für die Ähnlichkeitsberechnung verwendeten Wortvektoren ** hs ist Schlüssel ** und die Menge der für die Berechnung der gewichteten Summe verwendeten Vektoren ** hs ist Wert **. In Zero Tsuku 2 sind Schlüssel und Wert gleich, aber wenn Sie beide unabhängig machen, wird die Ausdruckskraft verbessert.

Eine andere Sache ist im Allgemeinen, dass die Aufmerksamkeit danach aufgeteilt wird, woher die Eingabe kommt.

スクリーンショット 2020-09-04 19.51.27.png Wenn Qurery und Key / Value von verschiedenen Orten kommen, heißt es ** Sorce Taget Attention **, und wenn Quety, Key und Value alle vom selben Ort (Self) kommen, heißt es ** Self Attention **. .. Aufmerksamkeit mit Null heißt Sorce Taget Aufmerksamkeit.

Lassen Sie uns nun den Schreibstil ein wenig ändern und einen Begriff im Format ** Self Attention ** hinzufügen.

スクリーンショット 2020-09-04 19.54.55.png

Ich habe den Abschnitt ** hinzugefügt, der durch das Root-dk ** geteilt wird. Der Grund für die Division durch die Wurzel dk ist, dass bei einem Wert, der in der Berechnung des inneren Produkts zu groß ist, beim Multiplizieren mit ** Softmax ** die anderen Werte 0 sind und ** der Gradient verschwindet **. Verhindern Sie dies. Machen. dk ist die Anzahl der Dimensionen des wortverteilten Ausdrucks, die im Papier 512 beträgt.

Übrigens verwendet Transformer keine RNN, die eine sequentielle Verarbeitung erfordert, und besteht nur aus Attention, die eine parallele Verarbeitung ermöglicht. Daher ist es nicht erforderlich, jede Abfrage einzeln zu berechnen, und ** alle Abfragen können gleichzeitig berechnet werden **, sodass sie wie folgt ausgedrückt werden können.

![Screenshot 2020-09-04 23.07.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/ebf59620-7432-2f75-6714- 4e37375c7af9.png)

Im Papier "Aufmerksamkeit ist alles, was Sie brauchen" wird dies als "Skalierte Punktprodukt-Aufmerksamkeit" bezeichnet und durch die folgende Formel ausgedrückt. Dies ist das Herz von Transformer.

スクリーンショット 2020-09-05 12.06.29.png

4.Attention Is All You Need Um das im Dezember 2017 veröffentlichte Papier ** Achtung ist alles, was Sie brauchen ** zu verstehen, werde ich nun die Zahlen erläutern, die in dem Papier erscheinen. スクリーンショット 2020-09-05 12.13.10.png

Zunächst das Aufmerksamkeitsdiagramm für skalierte Punktprodukte. ** Matmul ** ist das innere Produkt und ** Scale ** ist die Wurzel dk. ** Mask (opt) ** bedeutet, dass der aufgefüllte Teil maskiert wird, wenn die Anzahl der einzugebenden Wörter kürzer als die Sequenzlänge ist. Sie können sehen, dass es als Aufmerksamkeitsgleichung (Q, K, V) codiert ist.

スクリーンショット 2020-09-05 12.17.11.png

Es handelt sich um ** Multi-Head Attention **, einschließlich der bereits erwähnten Scaled Dot-Produkt Attention. Ein Ausgang der vorherigen Stufe wird als Q, K, V über drei ** lineare (vollständig verbundene Schichten) ** eingegeben. Mit anderen Worten sind Q, K und V die Ausgänge der vorherigen Stufe multipliziert mit den Gewichten Wq, Wk bzw. Wv, und diese Gewichte werden durch Lernen erhalten.

Eine Reihe von Abfragen, Schlüsseln und Werten heißt ** Kopf **. Es ist besser, mehrere kleine Köpfe zu haben, den latenten Ausdruck für jeden zu berechnen und sich am Ende zu konzentrieren, als einen großen Kopf zu haben. Deshalb verwenden wir Multi-Head. In dem Papier beträgt die Ausgabe der vorherigen Stufe 512 Dimensionen und wird durch den Kopf mit 64 Dimensionen in 8 unterteilt.

スクリーンショット 2020-09-05 12.29.03.png

Die Gesamtkonfiguration ist ** Encoder-Decoder-Übersetzungsmodell **. Ziel ist es, die RNN der sequentiellen Berechnung zu stoppen und nur Attention zu konfigurieren, die eine parallele Berechnung durchführen kann, um die Verarbeitung zu beschleunigen. Nx bedeutet, dass dieselbe Konfiguration N-mal wiederholt wird und N = 6 im Papier.

① Input Embedding Eingaben sind (Anzahl der Stapel, Anzahl der Wort-ID-Spalten). Gibt den konvertierten Vektor unter Verwendung der vorab trainierten Wortverteilungsdarstellung aus (Anzahl der Stapel, Anzahl der Wort-ID-Spalten, Anzahl der Dimensionen). Die Anzahl der Abmessungen des Papiers beträgt 512.

② Positional Encoding Bei der Berechnung der Gewichtssumme gehen ** Wortordnungsinformationen verloren ** ("Ich mag sie" und "Sie mag mich" können nicht unterschieden werden), so dass die Positionsinformationen von Wörtern (Sündenfunktion) im verteilten Ausdruck Und das Muster der cos-Funktion) werden hinzugefügt, um das Lernen von ** relativen Wortpositionen ** zu erleichtern. Mit anderen Worten, dasselbe Wort hat unterschiedliche Vektoren, wenn es sich an unterschiedlichen Stellen befindet. Die Formel für die Positionsinformationen im Papier lautet wie folgt. スクリーンショット 2020-09-05 12.39.28.png

③ Add & Norm Verwenden Sie ** Verbindung überspringen **, um eine Normalisierung durch ** Ebenennormalisierung ** und eine Regularisierung durch Dropout durchzuführen. Die Ebenennormalisierung normalisiert jede Dateneinheit (Satz) im Stapel, nicht in Stapeleinheiten.

④ Feed Foward Die Ausgabe der Aufmerksamkeitsebene wird in Features mit zwei vollständig verbundenen Ebenen konvertiert.

⑤ Masked Multi-Head Attention スクリーンショット 2020-09-05 11.48.38.png Wenn Sie bei der Berechnung der Aufmerksamkeit von "I" "am", "a" und "cat" angeben, können Sie das vorherzusagende Wort abbrechen, um das vorherige Wort in Key unsichtbar zu machen Setzen Sie die Maske auf.

5.Transformer Beyond

Transformer wurde als Übersetzungsmodell vorgeschlagen, aber im Verlauf der Forschung wurde klar, dass ** die Fähigkeit von Self Attention, die Bedeutung von Sätzen zu extrahieren **, ziemlich mächtig war und verschiedene Entwicklungen vorgenommen wurden, so dass es einfach ist. Ich werde darauf eingehen. スクリーンショット 2020-09-04 23.23.34.png

Juni 2018. Wenn nur die Encoder-Seite von Transformer verwendet wird, wurde die Leistung durch zweistufiges Lernen von ** Vorlernen + Feinabstimmung ** verbessert. Vor dem Lernen wird ** erraten, was das nächste Wort ist **, und es ist nicht gut, zukünftige Informationen zu kennen, daher sind die folgenden Sätze maskiert.

Es ist eine bekannte Tatsache, dass es strukturell einen Nachteil gibt, dass der hintere Kontext nicht verwendet werden kann, und wenn der hintere Kontext verwendet werden kann, kann eine weitere Leistungsverbesserung erreicht werden.

スクリーンショット 2020-09-04 23.24.25.png

Februar 2018. Um den Back-Kontext irgendwie zu verwenden, habe ich den Vorteil der Parallelverarbeitung durch Attention aufgegeben und versucht, den Back-Kontext mit dem mehrschichtigen bidirektionalen LSTM zu verwenden. Es stellt sich heraus, dass dies die Leistung verbessert.

スクリーンショット 2020-09-04 23.25.04.png

Oktober 2018. Eine revolutionäre Methode in der Verarbeitung natürlicher Sprache ** BERT ** wurde angekündigt. Kurz gesagt, indem wir das GPT-Vorlernen durch die folgenden zwei Aufgaben ersetzt haben, haben wir eine parallele Verarbeitung unter Verwendung des Kontextes des Kontexts realisiert. Sozusagen die Geburt eines bidirektionalen Transformators.

** ① Maskiertes Sprachmodell **: Lösen Sie das Problem beim Ausfüllen der Lücke. Wählen Sie 15% der Wörter, maskieren Sie 80%, ersetzen Sie 10% durch andere Wörter und lassen Sie 10% unverändert. ** ② Vorhersage des nächsten Satzes **: Bestimmen Sie, ob die Kontexte der beiden Sätze miteinander verbunden sind.

Recommended Posts

Von der Aufmerksamkeit von Zero Tsuku 2 zum Transformator
Verbessertes Lernen, um von null bis tief zu lernen
Zusammenfassung von vtkThreshold (von Zeit zu Zeit aktualisiert)
Einführung in Scapy ① (Von der Installation bis zur Ausführung von Scapy)
Lassen Sie Code Day6 ab Null beginnen "1342. Anzahl der Schritte, um eine Zahl auf Null zu reduzieren"
Zusammenfassung der gcc-Optionen (von Zeit zu Zeit aktualisiert)
[Ansible Installationsverfahren] Von der Installation bis zur Ausführung des Playbooks
Summe von 1 bis 10
Lassen Sie die Codetabelle von Null beginnen
Ändern Sie den Dezimalpunkt der Protokollierung von, nach.
Von der Einführung von Pyethapp bis zur Vertragsabwicklung
Die Geschichte vom Umzug von Pipenv zur Poesie
Ich möchte Bilder von Katzen von Instagram erkennen
Lassen Sie Code Day74 ab Null "12. Integer to Roman"
[Von Zeit zu Zeit aktualisiert] Überprüfung von Let Code NumPy
DataNitro, Implementierung einer Funktion zum Lesen von Daten aus dem Blatt
Konvertieren Sie Elemente des Numpy-Arrays von float in int
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Übergang von WSL1 zu WSL2
Von null Python-Kenntnissen bis hin zur KI in der ersten Klasse der Junior High School
Von der Bearbeitung bis zur Ausführung
"Durchschnitt der Summen von 1 bis 10" und seine Ausführungsgeschwindigkeit
SIGNATE Quest ② Von der gezielten Modellerstellung bis zur Erstellung von Übermittlungsdaten
Verwenden Sie Codewars Kata Lambda, um bei Null zu beginnen und die Funktion zurückzugeben? !!
[Von Zeit zu Zeit aktualisiert] Zusammenfassung der Entwurfsmuster in Java
Ich möchte viele Prozesse von Python aus starten
Berechnen des aus ABC134-D gelernten Rechenaufwands
Vorgehensweise für die Ajax-Kommunikation von HTML zu JSON auf dem API-Server
Bereitstellen von Django + Reagieren Sie von Grund auf auf GKE: Inhaltsverzeichnis
Die Geschichte des Kopierens von Daten von S3 auf Googles TeamDrive
Immerhin die Geschichte der Rückkehr von Linux zu Windows
So erhalten Sie eine Liste mit Links von einer Seite aus Wikipedia
Lassen Sie Code Day87 ab Null "1512. Anzahl der guten Paare"