Como 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.
1234567891011121314151617import 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)
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.0espalha 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.
Tudo estava claro?
Obrigado pelo seu feedback!
Seção 1. Capítulo 7
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Seção 1. Capítulo 7