Decoder-Transformer

Transformer-Modelle mit PyTorch

James Chapman

Curriculum Manager, DataCamp

Vom Original zum reinen Decoder-Transformer

Ursprüngliche Transformer-Architektur

Transformer-Modelle mit PyTorch

Vom Original zum reinen Decoder-Transformer

Reine Decoder-Transformer-Architektur

Autoregressive Sequenzgenerierung: Text erzeugen und vervollständigen

Transformer-Modelle mit PyTorch

Vom Original zum reinen Decoder-Transformer

Reine Decoder-Transformer-Architektur

Autoregressive Sequenzgenerierung: Text erzeugen und vervollständigen

Maskierte Multi-Head-Self-Attention

  • Spätere Token in der Sequenz ausblenden
Transformer-Modelle mit PyTorch

Vom Original zum reinen Decoder-Transformer

Reine Decoder-Transformer-Architektur

Autoregressive Sequenzgenerierung: Text erzeugen und vervollständigen

Maskierte Multi-Head-Self-Attention

  • Spätere Token in der Sequenz ausblenden

Reiner Decoder-Transformer-Head

  • Linear + Softmax über dem Vokabular
  • Wahrscheinlichste nächste Token vorhersagen
Transformer-Modelle mit PyTorch

Maskierte Self-Attention/kausale Attention

Maskierte Self-Attention

  • Schlüssel für autoregressives bzw. kausales Verhalten
  • Dreieckige (kausale) Attention-Maske
Transformer-Modelle mit PyTorch

Maskierte Self-Attention/kausale Attention

Maskierte Self-Attention

  • Schlüssel für autoregressives bzw. kausales Verhalten
  • Dreieckige (kausale) Attention-Maske
  • Token beachtet nur vorherige Token in der Sequenz
Transformer-Modelle mit PyTorch

Maskierte Self-Attention/kausale Attention

Maskierte Self-Attention

tgt_mask = (1 - torch.triu(
  torch.ones(1, seq_len, seq_len), diagonal=1)
).bool()
  • Schlüssel für autoregressives bzw. kausales Verhalten
  • Dreieckige (kausale) Attention-Maske
  • Token beachtet nur vorherige Token in der Sequenz

    • favorite": „orange", „is", „my", „favorite"
  • Erzwingt kausale Attention: nächstes Wort zur Generierung vorhersagen, z. B. „fruit"

Transformer-Modelle mit PyTorch

Decoder-Layer

class DecoderLayer(nn.Module):
    def __init__(self, d_model, num_heads, d_ff, dropout):
        super().__init__()
        self.self_attn = MultiHeadAttention(d_model, num_heads)
        self.ff_sublayer = FeedForwardSubLayer(d_model, d_ff)
        self.norm1 = nn.LayerNorm(d_model)
        self.norm2 = nn.LayerNorm(d_model)
        self.dropout = nn.Dropout(dropout)

    def forward(self, x, tgt_mask):
        attn_output = self.self_attn(x, x, x, tgt_mask)
        x = self.norm1(x + self.dropout(attn_output))
        ff_output = self.ff_sublayer(x)
        x = self.norm2(x + self.dropout(ff_output))
        return x
Transformer-Modelle mit PyTorch

Decoder-Transformer: Body und Head

class TransformerDecoder(nn.Module):
    def __init__(self, vocab_size, d_model, num_layers, num_heads, d_ff, dropout, max_seq_length):
        super(TransformerDecoder, self).__init__()
        self.embedding = InputEmbeddings(vocab_size, d_model)
        self.positional_encoding = PositionalEncoding(d_model, max_seq_length)
        self.layers = nn.ModuleList([DecoderLayer(d_model, num_heads, d_ff, dropout) for _ in range(num_layers)])

self.fc = nn.Linear(d_model, vocab_size)
def forward(self, x, tgt_mask): x = self.embedding(x) x = self.positional_encoding(x) for layer in self.layers: x = layer(x, tgt_mask)
x = self.fc(x) return F.log_softmax(x, dim=-1)
  • self.fc: Output-Linear-Layer mit vocab_size Neuronen
  • self.fc und Softmax-Aktivierung im Forward-Pass hinzufügen
Transformer-Modelle mit PyTorch

Den reinen Decoder-Transformer instanziieren

decoder = TransformerDecoder(vocab_size, d_model, num_layers, num_heads, d_ff, dropout, max_seq_length=seq_length)

output = decoder(input_sequence, tgt_mask)
tensor([[[ -9.4692,  -9.8429,  -9.3077,  ...,  -9.9523, -10.2669,  -9.7084],
         [ -9.1556,  -9.6133, -10.0923,  ...,  -9.3810,  -9.0420,  -9.1780],
         ...,
         [ -9.5327, -10.3534,  -9.8443,  ...,  -9.8170,  -8.8491,  -8.8322],
         [ -9.6086,  -9.6336, -10.1595,  ...,  -9.8550,  -9.9955,  -8.7121]],

        [[ -9.5865,  -8.0360,  -8.5056,  ...,  -9.9855,  -9.5677,  -9.0352],
         [ -9.7213,  -8.6451,  -8.3779,  ...,  -9.2994,  -9.2601,  -9.8509],
         ...,
         [ -9.0471,  -9.7410, -10.0160,  ..., -10.0195,  -9.4651,  -8.9605],
         [ -9.5767, -10.2692,  -8.8394,  ...,  -8.3458,  -9.1479, -10.0650]]],
       grad_fn=<LogSoftmaxBackward0>)
Transformer-Modelle mit PyTorch

Lass uns üben!

Transformer-Modelle mit PyTorch

Preparing Video For Download...