Come è costruito un trasformatore e quali sono i suoi blocchi principali?
sobes.tech AI
Risposta dell'AI
Un trasformatore è un'architettura di rete neurale ampiamente utilizzata per elaborare sequenze, come il testo. L'idea principale del trasformatore è utilizzare un meccanismo di attenzione per pesare l'importanza delle diverse parti dei dati di input senza strati ricorrenti o convoluzionali.
I blocchi principali del trasformatore:
-
Rappresentazione di input (Embedding) — trasforma i token di input in rappresentazioni vettoriali.
-
Codifica posizionale (Positional Encoding) — aggiunge informazioni sulla posizione dei token nella sequenza, poiché il meccanismo di attenzione non considera l'ordine.
-
Meccanismo di attenzione (Self-Attention) — calcola coefficienti di peso per ogni token rispetto a tutti gli altri, permettendo al modello di concentrarsi sulle parti rilevanti dell'input.
-
Attenzione multi-testa (Multi-Head Attention) — applica più meccanismi di attenzione in parallelo per catturare diversi aspetti della dipendenza.
-
Normalizzazione e connessioni residue (Layer Normalization e Residual Connections) — aiutano a stabilizzare l'apprendimento e migliorare il flusso di gradiente.
-
Strati completamente connessi (Feed-Forward Network) — vengono applicati a ogni elemento della sequenza separatamente per una trasformazione non lineare.
-
Strato di output — per compiti di generazione o classificazione.
Esempio di struttura semplificata di uno strato di trasformatore:
class TransformerLayer(nn.Module):
def __init__(self, d_model, nhead):
super().__init__()
self.self_attn = nn.MultiheadAttention(d_model, nhead)
self.linear1 = nn.Linear(d_model, d_model*4)
self.linear2 = nn.Linear(d_model*4, d_model)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
def forward(self, x):
attn_output, _ = self.self_attn(x, x, x)
x = self.norm1(x + attn_output)
ff_output = self.linear2(F.relu(self.linear1(x)))
x = self.norm2(x + ff_output)
return x
In questo modo, il trasformatore è costruito da strati ripetuti, che consentono di modellare efficacemente le dipendenze nei dati.