Transformers codificador-decodificador

Modelos Transformer con PyTorch

James Chapman

Curriculum Manager, DataCamp

El codificador se encuentra con el decodificador

Arquitectura original del transformer

Modelos Transformer con PyTorch

El codificador se encuentra con el decodificador

Codificador y decodificador juntos

Modelos Transformer con PyTorch

Mecanismo de atención cruzada

 

  1. Información procesada a lo largo del decodificador
  2. Estados ocultos finales del bloque codificador

 

Ejemplo de atención cruzada

Decodificador con atención cruzada

Modelos Transformer con PyTorch

Modificando DecoderLayer

 

  1. Información procesada a lo largo del decodificador
  2. Estados ocultos finales del bloque codificador

 

  • x: flujo de información del decodificador, pasa a ser la consulta de la atención cruzada
  • y: salida del codificador, pasa a ser la clave y los valores de la atención cruzada
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)) ...
Modelos Transformer con PyTorch

Modificando DecoderTransformer

 

Solo decodificador
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)

 

Codificador-decodificador
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)
Modelos Transformer con PyTorch

El codificador se encuentra con el decodificador

Codificador y decodificador juntos

Modelos Transformer con PyTorch

Cabeza del transformer

 

Ejemplo de salidas para traducción

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

Para otras tareas, pueden requerirse activaciones diferentes

Decodificador con cabeza transformer

Modelos Transformer con PyTorch

¡Todo junto!

Transformer codificador-decodificador completo

Modelos Transformer con PyTorch

¡Todo junto!

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

¡Vamos a practicar!

Modelos Transformer con PyTorch

Preparing Video For Download...