5 Punkte von GN⁺ 2024-01-04 | 1 Kommentare | Auf WhatsApp teilen

Encoder

  • Es wird erklärt, wie Text in Vektoren umgewandelt wird und wie den daraus gewonnenen Embeddings Positionsinformationen hinzugefügt werden.
  • Ziel ist es, Embeddings zu erzeugen, die semantische Informationen des Eingabetexts erfassen.

1. Text-Embedding

  • "Hello World" wird in Vektoren umgewandelt, um Embeddings zu erzeugen.
  • Jedem Token werden beliebige Werte zugewiesen, um einen Vektor zu erzeugen.

2. Positionskodierung

  • Um den Embeddings Positionsinformationen der Wörter hinzuzufügen, wird eine Positionskodierung addiert.
  • Mit festen Vektoren werden jeder Position eindeutige und konsistente Zahlenmuster zugewiesen.

3. Kombination von Positionskodierung und Embeddings

  • Positionskodierung und Embeddings werden addiert, um eine neue Matrix zu erzeugen, die als Eingabe für den Encoder verwendet wird.

Self-Attention

  • Es wird Attention als Mechanismus erklärt, der es dem Modell ermöglicht, sich auf bestimmte Teile der Eingabe zu konzentrieren.
  • Mit Multi-Head-Attention kann gleichzeitig in verschiedenen Repräsentationsräumen auf Informationen fokussiert werden.

4.1 Definition der Matrizen

  • Für jeden Attention-Head werden die Matrizen K, V und Q definiert.

4.2 Berechnung von Keys, Queries und Values

  • Durch Multiplikation der Eingabe-Embeddings mit Gewichtungsmatrizen werden die Matrizen für Keys, Queries und Values berechnet.

4.3 Berechnung der Attention

  • Das Skalarprodukt aus Query und jedem Key-Vektor wird berechnet und das Ergebnis durch die Quadratwurzel der Dimension des Key-Vektors geteilt.
  • Anschließend wird die Softmax-Funktion angewendet, um die Attention-Gewichte zu erhalten.
  • Jeder Value-Vektor wird mit den Attention-Gewichten multipliziert.

Feed-forward-Layer

  • Im Encoder gibt es nach der Self-Attention-Schicht ein Feed-forward-Neuronales-Netz.
  • Dieses Netzwerk verwendet zwei lineare Transformationen und die ReLU-Aktivierungsfunktion.

5.1 Grundlegender Feed-forward-Layer

  • Die erste lineare Schicht erweitert die Dimension der Eingabe; nach Anwendung der ReLU-Aktivierungsfunktion reduziert die zweite lineare Schicht die Dimension wieder auf die ursprüngliche Größe.

5.2 Kombination aller Prozesse im Encoder

  • Ein Encoder-Block, der Multi-Head-Attention und den Feed-forward-Layer enthält, wird in Code umgesetzt.

5.3 Residualverbindungen und Layer-Normalisierung

  • Residualverbindungen bedeuten, dass die Eingabe einer Schicht zur Ausgabe addiert wird, und Layer-Normalisierung ist eine Technik zur Normalisierung der Eingabe einer Schicht.

Meinung von GN⁺

  • Dieser Artikel vereinfacht komplexe Mathematik, um das mathematische Verständnis von Transformer-Modellen zu fördern.
  • Er hilft insbesondere dabei, die Funktionsweise des Self-Attention-Mechanismus und des Feed-forward-Neuronalen-Netzes zu verstehen.
  • Indem gezeigt wird, wie Techniken wie Residualverbindungen und Layer-Normalisierung zur Stabilität und Leistung neuronaler Netze beitragen, liefert er Einblicke darin, wie Lernprobleme tiefer neuronaler Netze gelöst werden können.

1 Kommentare

 
GN⁺ 2024-01-04
Hacker-News-Kommentare
  • Das „Mysterium“ der Transformer besteht darin, dass sie in jeder Schicht statt statischer Gewichte und einer linearen Folge von Werten 3 verschiedene Matrizen verwenden, die aus demselben Input über die Multiplikation mit gelernten Gewichten gewonnen werden, und diese Matrizen dann miteinander multiplizieren. Das ermöglicht mehr Parallelverarbeitung, aber die Attention-Formel ist sehr statisch und daher stark eingeschränkt.

    • Weitere Fortschritte wird es wohl erst geben, wenn es eine Möglichkeit gibt, Rechengraphen auf lernbare Parameter zu verallgemeinern.
    • Mit den bestehenden Gradientenverfahren ist nicht sicher, ob das im traditionellen Sinn möglich ist, wegen eines Chaoseffekts, bei dem kleine Änderungen große Leistungsschwankungen verursachen.
    • Wahrscheinlich müsste intern so etwas wie ein genetischer Algorithmus oder PSO stattfinden.
  • Wer einen trockeneren, formelleren und knapperen Ansatz möchte, sollte John Thickstuns „The Transformer Model in Equations“ lesen. Der gesamte Inhalt passt unter Verwendung mathematischer Standardnotation auf nur eine Seite.

  • Beim Lesen des Artikels kommen Fragen auf.

    • Die Vektoren, die „Hello“ und „World“ entsprechen, sehen zufällig aus, scheinen aber doch Muster zu haben.
    • Ich frage mich, ob es eine Bedeutung hat, dass in den Vektoren die 2 doppelt vorkommt, oder ob das gesamte Set eindeutig ist.
  • Ich würde gern ein Paper oder einen Artikel dazu finden, warum Transformer, obwohl sie einfach als „Next-Token-Predictor“ funktionieren, trotzdem mit Wörtern oder Subwords/Tokens umgehen können, die nicht im Trainingsdatensatz vorkamen.

    • Zum Beispiel, wenn ich in pandas eine Tabelle mit den Spalten „sdsfs_ff“ und „fsdf_value“ erzeuge, oder wenn ich ein Beispiel konstruiere, das nicht im Trainingsdatensatz vorkam, und ein LLM um eine ähnliche Ausgabe bitte.
    • Ein Link zu einer Diskussion über Positions-Embeddings wäre ebenfalls hilfreich. Ich habe noch keine zufriedenstellende Antwort auf die Verwendung von Sinus/Cosinus und auf (Multiplikation vs. Vergleich) gefunden.
  • Transformer-Tutorials könnten die neuen Monad-Tutorials sein. Es ist ein schwer verständliches Konzept, aber wie bei vielen Teilen der Informatik muss man sich abmühen und Beispiele üben, um es zu verstehen.

  • Ich kenne einige der Wörter.

  • Als jemand, der schon einmal ein ANN von Grund auf ohne TensorFlow geschrieben hat, finde ich diese Erklärung immer noch verwirrend.

    • Als ich ChatGPT bat zu erklären, wie man ein grundlegendes ANN so anpasst, dass es Self-Attention implementiert, ohne die Begriffe Matrix oder Vektor zu verwenden, gab es tatsächlich eine sehr einfache Erklärung.
    • Ich denke lieber in Knoten, Gewichten und Schichten. Matrizen und Vektoren machen es schwieriger, nachzuvollziehen, was in einem ANN passiert.
    • Die Art, wie ich es gewohnt bin, ein ANN zu schreiben, ist so, dass jeder Eingabeknoten ein Skalar ist, aber der Feed-Forward-Algorithmus wie eine Vektor-Matrix-Multiplikation aussieht, weil dabei alle Eingabeknoten mit Gewichten multipliziert und dann aufsummiert werden.
  • Die Quarto-Website gefällt mir. Ich sehe, dass mehr Python-Nutzer Quarto zum Publizieren verwenden.

  • Ich frage mich, ob es in Schritt 7 des Decoders statt Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z) nicht Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z_self_attention) heißen sollte und ob in Schritt 8 des Decoders layer_norm fehlt.

  • Ich frage mich, ob LLMs neuronale Netze verwenden und was genau ein „Neuron“ ausmacht. Also ob es eine Code-Struktur gibt, die ein Neuron abbildet, oder ob es „einfach nur“ komplexe Mathematik ist.