Decoder transformer’lar

PyTorch ile Transformer Modelleri

James Chapman

Curriculum Manager, DataCamp

Özgünden yalnızca decoder’a geçiş

Özgün transformer mimarisi

PyTorch ile Transformer Modelleri

Özgünden yalnızca decoder’a geçiş

Yalnızca decoder transformer mimarisi

Oto-regresif dizi üretimi: metin üretimi ve tamamlama

PyTorch ile Transformer Modelleri

Özgünden yalnızca decoder’a geçiş

Yalnızca decoder transformer mimarisi

Oto-regresif dizi üretimi: metin üretimi ve tamamlama

Maskeli çok başlı öz-dikkat

  • Dizideki sonraki belirteçleri gizleyin
PyTorch ile Transformer Modelleri

Özgünden yalnızca decoder’a geçiş

Yalnızca decoder transformer mimarisi

Oto-regresif dizi üretimi: metin üretimi ve tamamlama

Maskeli çok başlı öz-dikkat

  • Dizideki sonraki belirteçleri gizleyin

Yalnızca decoder transformer başı

  • Sözlük üzerinde Lineer + Softmax
  • En olası sonraki belirteçleri tahmin eder
PyTorch ile Transformer Modelleri

Maskeli öz-dikkat/nedensel dikkat

Maskeli öz-dikkat

  • Oto-regresif ya da nedensel davranışın anahtarı
  • Üçgensel (nedensel) dikkat maskesi
PyTorch ile Transformer Modelleri

Maskeli öz-dikkat/nedensel dikkat

Maskeli öz-dikkat

  • Oto-regresif ya da nedensel davranışın anahtarı
  • Üçgensel (nedensel) dikkat maskesi
  • Belirteç yalnızca dizideki önceki belirteçlere dikkat eder
PyTorch ile Transformer Modelleri

Maskeli öz-dikkat/nedensel dikkat

Maskeli öz-dikkat

tgt_mask = (1 - torch.triu(
  torch.ones(1, seq_len, seq_len), diagonal=1)
).bool()
  • Oto-regresif ya da nedensel davranışın anahtarı
  • Üçgensel (nedensel) dikkat maskesi
  • Belirteç yalnızca dizideki önceki belirteçlere dikkat eder

    • "favorite": "orange", "is", "my", "favorite"
  • Zorunlu nedensel dikkat: bir sonraki sözcüğü tahmin et, ör. "fruit"

PyTorch ile Transformer Modelleri

Decoder katmanı

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
PyTorch ile Transformer Modelleri

Decoder transformer gövdesi ve başı

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: çıkışta vocab_size nöronlu doğrusal katman
  • İleri geçişte self.fc ve softmax aktivasyonu ekleyin
PyTorch ile Transformer Modelleri

Yalnızca decoder transformer’ı başlatma

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>)
PyTorch ile Transformer Modelleri

Ayo berlatih!

PyTorch ile Transformer Modelleri

Preparing Video For Download...