Transformers decodificadores

Modelos Transformer com PyTorch

James Chapman

Curriculum Manager, DataCamp

Do original ao transformer só com decodificador

Arquitetura original do transformer

Modelos Transformer com PyTorch

Do original ao transformer só com decodificador

Arquitetura do transformer só com decodificador

Geração autoregressiva de sequência: geração e completamento de texto

Modelos Transformer com PyTorch

Do original ao transformer só com decodificador

Arquitetura do transformer só com decodificador

Geração autoregressiva de sequência: geração e completamento de texto

Self-attention multihead mascarada

  • Oculta tokens posteriores na sequência
Modelos Transformer com PyTorch

Do original ao transformer só com decodificador

Arquitetura do transformer só com decodificador

Geração autoregressiva de sequência: geração e completamento de texto

Self-attention multihead mascarada

  • Oculta tokens posteriores na sequência

Cabeça do transformer só com decodificador

  • Linear + Softmax sobre o vocabulário
  • Prediz os próximos tokens mais prováveis
Modelos Transformer com PyTorch

Self-attention mascarada/atenção causal

Self-attention mascarada

  • Essencial para comportamento autoregressivo ou causal
  • Máscara de atenção triangular (causal)
Modelos Transformer com PyTorch

Self-attention mascarada/atenção causal

Self-attention mascarada

  • Essencial para comportamento autoregressivo ou causal
  • Máscara de atenção triangular (causal)
  • Token só presta atenção aos tokens anteriores na sequência
Modelos Transformer com PyTorch

Self-attention mascarada/atenção causal

Self-attention mascarada

tgt_mask = (1 - torch.triu(
  torch.ones(1, seq_len, seq_len), diagonal=1)
).bool()
  • Essencial para comportamento autoregressivo ou causal
  • Máscara de atenção triangular (causal)
  • Token só presta atenção aos tokens anteriores na sequência

    • "favorite": "orange", "is", "my", "favorite"
  • Atenção causal aplicada: prever a próxima palavra a gerar, por ex., "fruit"

Modelos Transformer com PyTorch

Camada do decodificador

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
Modelos Transformer com PyTorch

Corpo e cabeça do transformer decodificador

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: camada linear de saída com vocab_size neurônios
  • Adicione self.fc e ativação softmax no forward
Modelos Transformer com PyTorch

Instanciando o transformer só com decodificador

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>)
Modelos Transformer com PyTorch

Vamos praticar!

Modelos Transformer com PyTorch

Preparing Video For Download...