Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Desafio: Estruturando Blocos de Codificador e Decodificador | Construindo Componentes de Transformers
Transformers para Processamento de Linguagem Natural
Seção 2. Capítulo 5
single

single

bookDesafio: Estruturando Blocos de Codificador e Decodificador

Deslize para mostrar o menu

Compreender a estrutura dos blocos codificadores e blocos decodificadores é fundamental para dominar como os Transformers processam e geram texto. Cada bloco codificador em um Transformer é projetado para transformar sequências de entrada em representações ricas em contexto, enquanto cada bloco decodificador gera sequências de saída ao considerar tanto as saídas anteriores quanto as representações do codificador. Em tarefas de texto do tipo sequência para sequência, como tradução ou sumarização, o codificador recebe o texto de entrada e o codifica em uma série de estados ocultos. O decodificador então utiliza esses estados ocultos, juntamente com sua própria autoatenção, para gerar a sequência alvo passo a passo. Essa interação entre blocos codificadores e decodificadores permite ao modelo capturar dependências complexas no texto, tornando os Transformers altamente eficazes para uma ampla variedade de tarefas de processamento de linguagem natural.

A tabela a seguir resume a sequência de operações em um bloco codificador de Transformer e destaca sua importância para dados textuais:

StepOperationPurpose for Text Data
1Multi-head self-attentionCaptures relationships between all tokens in the input.
2Add & NormalizeStabilizes training and preserves information.
3Feed-forward networkApplies non-linear transformations to each token.
4Add & NormalizeFurther stabilizes and enables deep stacking.

Each operation ensures that the encoder builds increasingly abstract and context-aware representations of the input text, which are essential for downstream sequence-to-sequence tasks.

Tarefa

Deslize para começar a programar

Sua tarefa é completar as partes ausentes da classe TransformerEncoderBlock, inicializando corretamente seus principais componentes e garantindo que sejam utilizados no cálculo do forward.

A classe TransformerEncoderBlock modela um único bloco codificador em uma arquitetura Transformer. Você deve inicializar adequadamente dois componentes principais no construtor da classe (método __init__):

  • A camada de self-attention utilizando MultiHeadAttention(hidden_dim). Esta camada permite que cada token na entrada atenda a todos os outros tokens, capturando relações contextuais;
  • A rede feed-forward utilizando FeedForward(hidden_dim). Esta camada aplica transformações não lineares individualmente a cada representação de token, processando ainda mais a saída da camada de self-attention;
  • No método forward, aplique essas duas camadas sequencialmente:
    • primeiro, passe a entrada x pela camada de self-attention;
    • em seguida, passe a saída da camada de self-attention pela rede feed-forward;
    • retorne a saída final.

Certifique-se de instanciar tanto MultiHeadAttention quanto FeedForward com o parâmetro hidden_dim fornecido à classe. Esses componentes representam a estrutura central de um bloco codificador e devem ser aplicados na ordem correta para o funcionamento adequado do bloco.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 5
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

some-alt