Kodlayıcı-çözücü transformer’lar

PyTorch ile Transformer Modelleri

James Chapman

Curriculum Manager, DataCamp

Encoder decoder ile buluşuyor

Özgün transformer mimarisi

PyTorch ile Transformer Modelleri

Encoder decoder ile buluşuyor

Encoder ve decoder birlikte

PyTorch ile Transformer Modelleri

Çapraz dikkat (cross-attention) mekanizması

 

  1. Bilgi decoder boyunca işlenir
  2. Encoder bloktan son gizli durumlar

 

Çapraz dikkat örneği

Çapraz dikkatli decoder

PyTorch ile Transformer Modelleri

DecoderLayer’ı değiştirme

 

  1. Bilgi decoder boyunca işlenir
  2. Encoder bloktan son gizli durumlar

 

  • x: decoder bilgi akışı, çapraz dikkatte sorgu (query) olur
  • y: encoder çıktısı, çapraz dikkatte anahtar (key) ve değer (value) olur
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.cross_attn = MultiHeadAttention(
                          d_model, num_heads)
        ...


def forward(self, x, y, tgt_mask, cross_mask): self_attn_output = self.self_attn(x, x, x, tgt_mask) x = self.norm1(x + self.dropout(self_attn_output)) cross_attn_output = self.cross_attn(x, y, y, cross_mask) x = self.norm2(x + self.dropout(cross_attn_output)) ...
PyTorch ile Transformer Modelleri

DecoderTransformer’ı değiştirme

 

Yalnızca decoder
class TransformerDecoder(nn.Module):
...
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)

 

Encoder-decoder
class TransformerDecoder(nn.Module):
...

def forward(self, x, y, tgt_mask, cross_mask): x = self.embedding(x) x = self.positional_encoding(x) for layer in self.layers: x = layer(x, y, tgt_mask, cross_mask) x = self.fc(x) return F.log_softmax(x, dim=-1)
PyTorch ile Transformer Modelleri

Encoder decoder ile buluşuyor

Encoder ve decoder birlikte

PyTorch ile Transformer Modelleri

Transformer başlığı

 

Çeviri için çıktı örneği

  • jugar (oynamak): 0.03
  • viajar (seyahat etmek): 0.96
  • dormir (uyumak): 0.01

Diğer görevlerde farklı aktivasyonlar gerekebilir

Transformer başlıklı decoder

PyTorch ile Transformer Modelleri

Hepsi bir araya!

Genel encoder-decoder transformer

PyTorch ile Transformer Modelleri

Hepsi bir arada!

class InputEmbeddings(nn.Module):
  ...  
class PositionalEncoding(nn.Module):
  ...  
class MultiHeadAttention(nn.Module):
  ...
class FeedForwardSubLayer(nn.Module):
  ...  
class EncoderLayer(nn.Module):
  ...
class DecoderLayer(nn.Module):
  ...
class TransformerEncoder(nn.Module):
  ...
class TransformerDecoder(nn.Module):
  ...
class ClassificationHead(nn.Module):
  ...
class Transformer(nn.Module):
    def __init__(self, vocab_size, d_model, num_heads, 
                 num_layers, d_ff, max_seq_len, dropout):
        super().__init__()


self.encoder = TransformerEncoder(vocab_size, d_model, num_heads, num_layers, d_ff, dropout, max_seq_len) self.decoder = TransformerDecoder(vocab_size, d_model, num_heads, num_layers, d_ff, dropout, max_seq_len)
def forward(self, x, src_mask, tgt_mask, cross_mask): encoder_output = self.encoder(x, src_mask) decoder_output = self.decoder(x, encoder_output, tgt_mask, cross_mask) return decoder_output
PyTorch ile Transformer Modelleri

Hadi pratik yapalım!

PyTorch ile Transformer Modelleri

Preparing Video For Download...