Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Cómo Generar Codificación Posicional Sinusoidal | Fundamentos de Comprensión de Transformers
Transformers para Procesamiento de Lenguaje Natural

bookCó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.

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

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.0 dispersa 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.
question mark

¿Cuáles de las siguientes afirmaciones sobre la codificación posicional sinusoidal son verdaderas?

Selecciona todas las respuestas correctas

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 7

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 1. Capítulo 7
some-alt