Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Como Gerar Codificação Posicional Senoidal | Compreendendo os Fundamentos dos Transformers
Transformers para Processamento de Linguagem Natural

bookComo Gerar Codificação Posicional Senoidal

Deslize para mostrar o menu

A codificação posicional senoidal permite que o modelo transformer perceba a ordem e a posição das palavras, mesmo sem utilizar recorrência ou camadas sensíveis à sequência. Cada posição é representada por um padrão distinto de valores de seno e cosseno distribuídos entre as dimensões do embedding.

Veja o código a seguir.

1234567891011121314151617
import numpy as np def get_sinusoidal_positional_encoding(seq_length, embed_dim): position = np.arange(seq_length)[:, np.newaxis] div_term = np.exp( np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim) ) pe = np.zeros((seq_length, embed_dim)) pe[:, 0::2] = np.sin(position * div_term) pe[:, 1::2] = np.cos(position * div_term) return pe # Example usage: seq_length = 6 embed_dim = 8 encoding = get_sinusoidal_positional_encoding(seq_length, embed_dim) print(encoding)
copy

O código para gerar a codificação posicional senoidal pode ser compreendido passo a passo:

1. Criar o array de posições

position = np.arange(seq_length)[:, np.newaxis]
  • Cria um vetor coluna onde cada linha representa uma posição na sequência de entrada, começando do 0.
  • Se a sequência tiver seis tokens, esse array será semelhante a [0, 1, 2, 3, 4, 5] como uma coluna.

2. Calcular o termo de escala de frequência

div_term = np.exp(
    np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim)
)
  • Calcula um fator de escala para cada dimensão par do embedding.
  • A escala garante que cada dimensão tenha uma frequência diferente, permitindo que a codificação capture padrões de posição de curto e longo alcance.
  • O uso de 10000.0 espalha as frequências, de modo que mudanças na posição afetam cada dimensão de forma diferente.

3. Inicializar a matriz de codificação posicional

pe = np.zeros((seq_length, embed_dim))
  • Cria uma matriz preenchida com zeros, com uma linha para cada posição e uma coluna para cada dimensão do embedding.

4. Preencher a matriz com valores de seno e cosseno

pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
  • Para as colunas pares, preenche com o seno de position * div_term.
  • Para as colunas ímpares, preenche com o cosseno de position * div_term.
  • Essa alternância faz com que cada posição receba uma combinação única de valores, e o padrão muda suavemente entre posições e dimensões.

5. Retornar a codificação posicional

return pe
  • A matriz resultante fornece uma codificação única para cada posição na sequência.
  • Essa codificação pode ser somada aos embeddings das palavras para que o modelo transformer reconheça a ordem dos tokens.
question mark

Quais das seguintes afirmações sobre a codificação posicional senoidal são verdadeiras?

Selecione todas as respostas corretas

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

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

Seção 1. Capítulo 7
some-alt