Hoe Transformerblokken te Stapelen
Veeg om het menu te tonen
123456789101112131415161718192021222324252627282930313233343536373839404142434445import torch import torch.nn as nn class EncoderBlock(nn.Module): def __init__(self, embed_dim, num_heads, ff_dim): super().__init__() self.attn = nn.MultiheadAttention(embed_dim, num_heads, batch_first=True) self.norm1 = nn.LayerNorm(embed_dim) self.ff = nn.Sequential( nn.Linear(embed_dim, ff_dim), nn.ReLU(), nn.Linear(ff_dim, embed_dim) ) self.norm2 = nn.LayerNorm(embed_dim) def forward(self, x): attn_output, _ = self.attn(x, x, x) x = self.norm1(x + attn_output) ff_output = self.ff(x) x = self.norm2(x + ff_output) return x class StackedEncoder(nn.Module): def __init__(self, num_layers, embed_dim, num_heads, ff_dim): super().__init__() self.layers = nn.ModuleList([ EncoderBlock(embed_dim, num_heads, ff_dim) for _ in range(num_layers) ]) def forward(self, x): for layer in self.layers: x = layer(x) return x # Example usage: stack 4 encoder blocks for input text embeddings embed_dim = 64 num_heads = 4 ff_dim = 256 num_layers = 4 stacked_encoder = StackedEncoder(num_layers, embed_dim, num_heads, ff_dim) input_tensor = torch.rand(2, 10, embed_dim) # batch_size=2, seq_len=10 output = stacked_encoder(input_tensor) print("Stacked encoder output shape:", output.shape)
Bij het verwerken van tekst met een Transformer worden vaak meerdere encoder- of decoderblokken boven op elkaar gestapeld. In de bovenstaande code zie je hoe je een stapel encoderblokken maakt met PyTorch. Elke EncoderBlock bevat multi-head self-attention, een feed-forward netwerk en laagnormalisatie. De klasse StackedEncoder bouwt een reeks van deze blokken, waarbij de uitvoer van het ene blok als invoer voor het volgende dient. Door deze stapeling kan het model steeds complexere representaties van de tekst leren op elke laag. Voor NLP-taken, zoals tekstclassificatie of vertaling, helpt het stapelen van blokken om diepere relaties en context in de data vast te leggen. De initiële invoer - tekst omgezet naar embeddings - stroomt door elk encoderblok, waarbij elk blok de representatie verfijnt op basis van zowel de invoer als de context die in eerdere lagen is geleerd.
Transformer-architecturen kunnen worden onderverdeeld in drie hoofdtypen, elk geschikt voor verschillende NLP-taken:
Alleen-Encoder Modellen
- Structuur: Bestaat uit een stapel encoderblokken.
- Typische toepassingen: Deze modellen zijn ideaal voor het begrijpen of analyseren van tekst. Veelvoorkomende toepassingen zijn tekstclassificatie, sentimentanalyse en named entity recognition. Een bekend voorbeeld van dit type is BERT.
Alleen-Decoder Modellen
- Structuur: Bestaat uit een stapel decoderblokken.
- Typische toepassingen: Deze modellen zijn ontworpen voor het genereren van tekst, zoals bij taalmodellering en code-aanvultaken. GPT is een prominent voorbeeld van een alleen-decoder model.
Encoder-Decoder Modellen
- Structuur: Combineren encoderblokken die de invoer verwerken en decoderblokken die de uitvoer genereren, waarbij informatie van de encoder naar de decoder stroomt.
- Typische toepassingen: Deze worden gebruikt voor sequence-to-sequence taken waarbij zowel de invoer als de uitvoer reeksen zijn. Toepassingen zijn onder andere machinevertaling, samenvatting en vraagbeantwoording. T5 en de originele Transformer zijn voorbeelden van encoder-decoder architecturen.
Samengevat bepaalt de keuze van architectuur welke soorten NLP-problemen je kunt oplossen: alleen-encoder modellen voor analyse, alleen-decoder modellen voor generatie, en encoder-decoder modellen voor taken waarbij één reeks naar een andere moet worden omgezet.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.