Cómo Generar Codificación Posicional Sinusoidal
Desliza para mostrar el menú
La codificación posicional sinusoidal permite que el modelo transformer perciba el orden y la posición de las palabras, aunque no utilice recurrencia ni capas sensibles a la secuencia. Cada posición se representa mediante un patrón distintivo de valores de seno y coseno distribuidos a lo largo de las dimensiones del embedding.
A continuación, revisemos el siguiente código.
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)
El código para generar la codificación posicional sinusoidal se puede entender paso a paso:
1. Crear el arreglo de posiciones
position = np.arange(seq_length)[:, np.newaxis]
- Esto crea un vector columna donde cada fila representa una posición en la secuencia de entrada, comenzando desde 0.
- Si la secuencia tiene seis tokens, este arreglo se verá como
[0, 1, 2, 3, 4, 5]en forma de columna.
2. Calcular el término de escalado de frecuencia
div_term = np.exp(
np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim)
)
- Esto calcula un factor de escalado para cada dimensión par del embedding.
- El escalado asegura que cada dimensión tenga una frecuencia diferente, permitiendo que la codificación capture patrones de posición tanto de corto como de largo alcance.
- El uso de
10000.0dispersa las frecuencias, de modo que los cambios en la posición afectan de manera diferente a cada dimensión.
3. Inicializar la matriz de codificación posicional
pe = np.zeros((seq_length, embed_dim))
- Esto crea una matriz llena de ceros, con una fila para cada posición y una columna para cada dimensión del embedding.
4. Llenar la matriz con valores de seno y coseno
pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
- Para las columnas pares, se llena con el seno de
position * div_term. - Para las columnas impares, se llena con el coseno de
position * div_term. - Esta alternancia significa que cada posición obtiene una combinación única de valores, y el patrón cambia suavemente a través de posiciones y dimensiones.
5. Devolver la codificación posicional
return pe
- La matriz resultante proporciona una codificación única para cada posición en la secuencia.
- Esta codificación se puede sumar a los embeddings de palabras para que el modelo transformer conozca el orden de los tokens.
¿Todo estuvo claro?
¡Gracias por tus comentarios!
Sección 1. Capítulo 7
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Sección 1. Capítulo 7