Sobes.tech
Middle — Senior

Hoe is een transformator opgebouwd en welke grote blokken heeft hij?

sobes.tech AI

Antwoord van AI

Een transformer is een neurale netwerkarchitectuur die veel wordt gebruikt voor het verwerken van sequenties, zoals tekst. Het belangrijkste idee van de transformer is het gebruik van een aandachtmechanisme (attention) om de belangrijkheid van verschillende delen van de invoergegevens te wegen, zonder recursieve of convolutionele lagen.

De hoofdblokken van de transformer:

  1. Invoerpresentatie (Embedding) — zet invoer tokens om in vectorrepresentaties.

  2. Positional Encoding — voegt informatie toe over de positie van tokens in de sequentie, omdat het aandachtmechanisme de volgorde niet in overweging neemt.

  3. Aandachtmechanisme (Self-Attention) — berekent gewichtscoëfficiënten voor elke token ten opzichte van alle andere, waardoor het model zich kan richten op relevante delen van de invoer.

  4. Multi-Head Attention — past meerdere aandachtmechanismen parallel toe om verschillende aspecten van afhankelijkheid te vangen.

  5. Normalisatie en Residuele Verbindingen (Layer Normalization en Residual Connections) — helpen het trainen te stabiliseren en de gradiëntstroom te verbeteren.

  6. Feed-Forward Netwerken — worden op elk element van de sequentie afzonderlijk toegepast voor niet-lineaire transformaties.

  7. Uitgangslaag — voor generatie- of classificatietaken.

Voorbeeld van een vereenvoudigde structuur van een transformerlaag:

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

Op deze manier wordt de transformer opgebouwd uit herhaalde lagen, waardoor afhankelijkheden in de gegevens efficiënt kunnen worden gemodelleerd.