Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Challenge: Implementierung von Feed-Forward-Netzwerken | Building Transformer Components
Transformer für Natural Language Processing
Abschnitt 2. Kapitel 3
single

single

bookChallenge: Implementierung von Feed-Forward-Netzwerken

Swipe um das Menü anzuzeigen

Beim Erkunden der Transformer-Architektur für die Verarbeitung natürlicher Sprache stößt man auf eine entscheidende Komponente in jedem Transformer-Block: das positionsweise Feed-Forward-Netzwerk (FFN). Nachdem der Self-Attention-Mechanismus die Eingaberepräsentationen verarbeitet hat, transformiert das FFN diese Repräsentationen an jeder Position in der Sequenz weiter, unabhängig von anderen Positionen. Das bedeutet, dass für jedes Token in einem Satz dasselbe kleine neuronale Netzwerk angewendet wird, wodurch das Modell zusätzliche Nichtlinearität einführen und komplexere Muster aus dem Text erlernen kann. Das FFN ist unerlässlich, um Beziehungen zu erfassen und die durch Self-Attention kodierten Informationen zu verfeinern, insbesondere beim Umgang mit den Feinheiten und Mehrdeutigkeiten menschlicher Sprache.

123456789101112131415161718192021222324252627282930313233
import numpy as np def relu(x): return np.maximum(0, x) class PositionWiseFeedForward: def __init__(self, d_model, d_ff): # Initialize weights and biases for two linear layers self.W1 = np.random.randn(d_model, d_ff) * 0.01 self.b1 = np.zeros((1, d_ff)) self.W2 = np.random.randn(d_ff, d_model) * 0.01 self.b2 = np.zeros((1, d_model)) def __call__(self, x): # x shape: (batch_size, seq_len, d_model) # Apply first linear layer and ReLU activation out1 = relu(np.matmul(x, self.W1) + self.b1) # Apply second linear layer out2 = np.matmul(out1, self.W2) + self.b2 return out2 # Example usage: batch_size = 2 seq_len = 4 d_model = 8 d_ff = 16 # Example input: random tensor simulating text representations x = np.random.randn(batch_size, seq_len, d_model) ffn = PositionWiseFeedForward(d_model, d_ff) output = ffn(x) print("Output shape:", output.shape)
copy

Im obigen Code sieht man eine einfache Implementierung eines positionsweisen Feed-Forward-Netzwerks mit numpy. Das Netzwerk besteht aus zwei linearen Transformationen (Matrixmultiplikationen), getrennt durch eine ReLU-Aktivierungsfunktion.

Note
Definition

ReLU-Aktivierungsfunktion: Die ReLU (Rectified Linear Unit) Aktivierung ist definiert als relu(x) = max(0, x). Sie setzt alle negativen Werte auf Null und lässt positive Werte unverändert. ReLU wird im Feed-Forward-Netzwerk verwendet, um Nichtlinearität einzuführen, sodass das Netzwerk komplexere Muster aus den Daten lernen kann.

Die erste lineare Schicht projiziert die Eingabe von d_model Dimensionen (die Größe der Einbettung jedes Tokens) in einen höherdimensionalen Raum d_ff, wodurch das Modell komplexere Merkmale erfassen kann. Die zweite lineare Schicht projiziert das Ergebnis zurück auf die ursprüngliche Größe von d_model. Beachte, dass dieses Netzwerk unabhängig auf jede Position in der Sequenz angewendet wird, was bedeutet, dass die Transformation eines Tokens andere nicht direkt beeinflusst. Diese Unabhängigkeit ermöglicht es dem Modell, die Repräsentation jedes Tokens parallel zu verarbeiten, was Transformer-Modelle besonders effizient für Textdaten macht.

Aufgabe

Wischen, um mit dem Codieren zu beginnen

Implementierung einer positionsweisen Feed-Forward-Netzwerkfunktion mit numpy.

Definition einer Funktion position_wise_ffn(x, W1, b1, W2, b2), die folgende Parameter erhält:

  • x: ein numpy-Array der Form (batch_size, seq_len, d_model);
  • W1: ein numpy-Array der Form (d_model, d_ff);
  • b1: ein numpy-Array der Form (1, d_ff);
  • W2: ein numpy-Array der Form (d_ff, d_model);
  • b2: ein numpy-Array der Form (1, d_model).

Für jede Position in der Sequenz wird angewendet:

  • Lineare Transformation: out1 = x @ W1 + b1;
  • ReLU-Aktivierung: out1 = relu(out1);
  • Zweite lineare Transformation: out2 = out1 @ W2 + b2.

Rückgabe des Ausgabearrays out2 mit der Form (batch_size, seq_len, d_model).

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

some-alt