Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Challenge: Het Implementeren van Feed-Forward Netwerken | Transformercomponenten Bouwen
Transformers voor Natuurlijke Taalverwerking
Sectie 2. Hoofdstuk 3
single

single

bookChallenge: Het Implementeren van Feed-Forward Netwerken

Veeg om het menu te tonen

Tijdens het verkennen van de Transformer-architectuur voor natuurlijke taalverwerking kom je een cruciaal onderdeel tegen binnen elk Transformer-blok: het positiegewijze feed-forward netwerk (FFN). Nadat het self-attention-mechanisme de inputrepresentaties heeft verwerkt, transformeert het FFN deze representaties verder op elke positie in de sequentie, onafhankelijk van andere posities. Dit betekent dat voor elk token in een zin hetzelfde kleine neurale netwerk wordt toegepast, waardoor het model extra niet-lineariteit kan introduceren en complexere patronen uit de tekst kan leren. Het FFN is essentieel voor het vastleggen van relaties en het verfijnen van de informatie die door self-attention is gecodeerd, vooral bij het omgaan met de subtiliteiten en ambiguïteiten van menselijke taal.

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

In de bovenstaande code zie je een eenvoudige implementatie van een positiegewijs feed-forward netwerk met behulp van numpy. Het netwerk bestaat uit twee lineaire transformaties (matrixvermenigvuldigingen), gescheiden door een ReLU-activeringsfunctie.

Note
Definitie

ReLU-activeringsfunctie: De ReLU (Rectified Linear Unit) activering wordt gedefinieerd als relu(x) = max(0, x). Hierbij worden alle negatieve waarden op nul gezet en blijven positieve waarden onveranderd. ReLU wordt in het feed-forward netwerk gebruikt om niet-lineariteit toe te voegen, waardoor het netwerk complexere patronen uit de data kan leren.

De eerste lineaire laag projecteert de invoer van d_model dimensies (de grootte van de embedding van elk token) naar een hoger-dimensionale ruimte d_ff, waardoor het model meer complexe kenmerken kan vastleggen. De tweede lineaire laag projecteert het resultaat terug naar de oorspronkelijke d_model grootte. Merk op dat dit netwerk onafhankelijk op elke positie in de reeks wordt toegepast, wat betekent dat de transformatie voor één token anderen niet direct beïnvloedt. Deze onafhankelijkheid helpt het model om de representatie van elk token parallel te verwerken, waardoor Transformers zeer efficiënt zijn voor tekstdata.

Taak

Veeg om te beginnen met coderen

Implementeer een positioneel feed-forward netwerkfunctie met behulp van numpy.

Definieer een functie position_wise_ffn(x, W1, b1, W2, b2) die het volgende ontvangt:

  • x: een numpy array met vorm (batch_size, seq_len, d_model);
  • W1: een numpy array met vorm (d_model, d_ff);
  • b1: een numpy array met vorm (1, d_ff);
  • W2: een numpy array met vorm (d_ff, d_model);
  • b2: een numpy array met vorm (1, d_model).

Voor elke positie in de sequentie wordt het volgende toegepast:

  • Een lineaire transformatie: out1 = x @ W1 + b1;
  • Een ReLU-activatie: out1 = relu(out1);
  • Een tweede lineaire transformatie: out2 = out1 @ W2 + b2.

Geef de uitvoerarray out2 terug met vorm (batch_size, seq_len, d_model).

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 3
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

some-alt