ComeçarComece de graça

Adicionando métodos à classe MultiHeadAttention

Neste exercício, você vai construir o restante da classe MultiHeadAttention do zero, definindo quatro métodos:

  • .split_heads(): divide e transforma os embeddings de entrada entre as cabeças de atenção
  • .compute_attention(): calcula a atenção por produto escalar escalonado, multiplicando pelos valores (value)
  • .combine_heads(): transforma os pesos de atenção de volta para o mesmo formato dos embeddings de entrada, x
  • .forward(): chama os outros métodos para passar os embeddings de entrada por cada etapa

torch.nn foi importado como nn, torch.nn.functional está disponível como F, e torch também está disponível.

Este exercício faz parte do curso

Modelos Transformer com PyTorch

Ver curso

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

class MultiHeadAttention(nn.Module):
    def __init__(self, d_model, num_heads):
        super().__init__()
        self.num_heads = num_heads
        self.d_model = d_model
        self.head_dim = d_model // num_heads
        self.query_linear = nn.Linear(d_model, d_model, bias=False)
        self.key_linear = nn.Linear(d_model, d_model, bias=False)
        self.value_linear = nn.Linear(d_model, d_model, bias=False)
        self.output_linear = nn.Linear(d_model, d_model)

    def split_heads(self, x, batch_size):
        seq_length = x.size(1)
        # Split the input embeddings and permute
        x = x.____
        return x.permute(0, 2, 1, 3)
Editar e executar o código