Encoder-decoder transformers

Transformer Models ด้วย PyTorch

James Chapman

Curriculum Manager, DataCamp

Encoder พบ Decoder

สถาปัตยกรรม transformer ดั้งเดิม

Transformer Models ด้วย PyTorch

Encoder พบ Decoder

Encoder และ decoder รวมกัน

Transformer Models ด้วย PyTorch

กลไก Cross-attention

 

  1. ข้อมูลที่ประมวลผลตลอดทั้ง decoder
  2. Hidden states สุดท้ายจากบล็อก encoder

 

ตัวอย่าง cross-attention

Decoder พร้อม cross-attention

Transformer Models ด้วย PyTorch

ปรับแต่ง DecoderLayer

 

  1. ข้อมูลที่ประมวลผลตลอดทั้ง decoder
  2. Hidden states สุดท้ายจากบล็อก encoder

 

  • x: การไหลของข้อมูลใน decoder กลายเป็น query ของ cross-attention
  • y: เอาต์พุตของ encoder กลายเป็น key และ values ของ cross-attention
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)) ...
Transformer Models ด้วย PyTorch

ปรับแต่ง DecoderTransformer

 

Decoder-only
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)
Transformer Models ด้วย PyTorch

Encoder พบ Decoder

Encoder และ decoder รวมกัน

Transformer Models ด้วย PyTorch

Transformer head

 

ตัวอย่างเอาต์พุตสำหรับการแปลภาษา

  • jugar (to play): 0.03
  • viajar (to travel): 0.96
  • dormir (to sleep): 0.01

สำหรับงานอื่น อาจต้องใช้ activations ที่แตกต่างออกไป

Decoder พร้อม transformer head

Transformer Models ด้วย PyTorch

รวมทุกส่วนเข้าด้วยกัน!

ภาพรวม encoder-decoder transformer

Transformer Models ด้วย PyTorch

รวมทุกส่วนเข้าด้วยกัน!

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
Transformer Models ด้วย PyTorch

มาฝึกกันเถอะ!

Transformer Models ด้วย PyTorch

Preparing Video For Download...