Un Embedding Es una Consulta, No una Función
Una Primera Capa Después de un Tokenizador
Un tokenizador entrega al modelo IDs enteros: [256, 1842, 7301, ...]. Lo primero que hace un transformer: convertir cada ID en un vector de d_model flotantes. Ese vector vive en un espacio de d_model dimensiones (768 dimensiones para ANDREA-120M).
Una capa de embedding es una tabla de consulta, no una función. Imagina una matriz gigante:
shape: (V, d_model)
[BLOCK_TYPE SECTION/STEP]
fila 0: [e_0_0, e_0_1, ..., e_0_767]
[BLOCK_TYPE SECTION/STEP]
fila 1: [e_1_0, e_1_1, ..., e_1_767]
[BLOCK_TYPE SECTION/STEP]
...
[BLOCK_TYPE SECTION/STEP]
fila 8448: [e_8448_0, e_8448_1, ..., e_8448_767]
[BLOCK_TYPE SECTION/STEP]
El ID de token i selecciona la fila i. Acceso directo al arreglo. Sin aritmética, sin activación. Solo un índice.
Flotantes entrenables
Cada entrada en esa tabla comienza como un pequeño número flotante aleatorio (normalmente extraído de una distribución normal escalada por 1/sqrt(d_model)). La retropropagación actualiza cada fila cada vez que su ID de token aparece en un lote. Después del entrenamiento, tokens similares (cat, dog, pet) terminan con vectores parecidos; tokens no relacionados (cat, Tuesday, xylophone) quedan muy separados en el espacio vectorial.
ANDREA-120M Costo de Embedding de Tokens
| Cantidad | Valor |
|---|---|
| V | 8,449 |
| d_model | 768 |
| Parámetros | 6,488,832 |
Aproximadamente 6.5M parámetros viven solo en una tabla de incrustación de tokens, cerca del 5.4% del total de ANDREA-120M. Cada ranura del vocabulario obtiene estos 768 flotantes.
Dimensionamiento de Tablas de Incrustación
Los Productos Punto Miden Similitud
Vectores como Flechas
Un vector de 768 dimensiones vive en un espacio que los humanos no pueden visualizar, pero la misma álgebra funciona en cualquier dimensión. Dos operaciones clave importan para los transformers:
Magnitud (longitud de una flecha):
||v|| = sqrt(v_0² + v_1² + ... + v_767²)
Producto punto (alineación entre dos flechas):
u · v = u_0 × v_0 + u_1 × v_1 + ... + u_767 × v_767
Qué te dice un producto punto
Dos hechos que se cumplen en cualquier dimensión:
- u · v = ||u|| × ||v|| × cos(theta), donde theta es el ángulo entre ellos.
- Los vectores que apuntan en la misma dirección dan productos punto grandes y positivos.
- Los vectores que apuntan en direcciones opuestas dan productos punto grandes y negativos.
- Los vectores en ángulo recto dan un producto punto de cero.
Producto punto = similitud no normalizada. Dos embeddings entrenados de tokens para cat y dog terminan con un producto punto alto porque la retropropagación los acercó (ambos predicen contextos relacionados con mascotas). cat y Tuesday terminan casi ortogonales porque predicen contextos diferentes.
Por qué a un Transformer le importa
La Actividad 5 (grow_a_language_model_attention) construye la atención a partir de productos punto: un vector de consulta multiplicado por producto punto con vectores clave produce puntuaciones que indican qué tokens pasados importan para predecir el siguiente. Los embeddings y los productos punto juntos transportan toda interacción dentro de un transformer.
Predecir Similitud
ANDREA Utiliza Incrustaciones de Posición Aprendidas
Un problema
Una incrustación de token le indica al modelo qué palabra se encuentra en esta posición. No le indica al modelo dónde se sitúa esa palabra. Sin información de posición, un transformer trata the cat sat on a mat y mat a on sat cat the de forma idéntica: el mismo conjunto de tokens, sin señal de orden.
Existen tres soluciones en la literatura de transformers:
Sinusoidal (Vaswani 2017). Una fórmula matemática fija basada en senos y cosenos. La posición 0 recibe un vector específico de 768 dimensiones; la posición 1 recibe otro; nunca se entrena, nunca se actualiza. Generaliza a cualquier posición mediante la fórmula.
RoPE (Rotary Position Embedding). Rota los vectores de consulta y clave según la posición. Usado por LLaMA, Qwen. Sin parámetros adicionales; la rotación está integrada en la atención.
Aprendido. Una tabla de embeddings separada con forma (T, d_model) donde T es la longitud del contexto. Cada fila se entrena mediante retropropagación, igual que los embeddings de tokens.
Elección de ANDREA: Aprendido
ANDREA hereda un enfoque de posiciones aprendidas de microGPT, que lo heredó de nanoGPT, que lo heredó de GPT-2. Un razonamiento:
- Simplicidad. No se requiere matemáticas especiales en atención. Una tabla de posiciones se ve como una tabla de tokens.
- Compatibilidad con CUDA personalizado. El motor microgpt_cuda.cu de ANDREA maneja dos búsquedas de embeddings de forma idéntica; no se necesitan kernels de sin/cos.
- Suficiente para contexto fijo. ANDREA limita T a 1024. Una tabla aprendida funciona bien para secuencias de longitud fija.
Costo de Embedding de Posición ANDREA-120M
| Cantidad | Valor |
|---|---|
| T (contexto) | 1,024 |
| d_model | 768 |
| Parámetros | 786,432 |
0.79M parámetros para posición. Combinados con embeddings de tokens: 6.49M + 0.79M = 7.27M parámetros de embedding en total para ANDREA-120M.
Cómo se combinan
En cada posición t de una secuencia de entrada:
x_t = token_embedding[token_id_t] + position_embedding[t]
Dos vectores de 768 dimensiones, sumados elemento a elemento. El resultado, x_t, fluye hacia el primer bloque transformer. El modelo nunca los separa de nuevo; aprende a usar la señal combinada.
Aprendida Versus Sinusoidal
Dónde Viven los Parámetros de Embedding
Una Capa de Embedding Completa ANDREA-120M
| Componente | Forma | Parámetros |
|---|---|---|
| Tabla de embeddings de tokens | 8,449 × 768 | 6,488,832 |
| Tabla de embeddings de posición | 1,024 × 768 | 786,432 |
| Total | 7,275,264 |
Aproximadamente 7.3M parámetros. El recuento total de parámetros de ANDREA-120M: ~120M. La capa de embeddings sola: 6%. El 94% restante se encuentra en los bloques del transformador (atención + MLP, cubiertos en las actividades 5-7).
Embeddings no vinculados vs vinculados
Muchos diseños de transformers (incluido GPT-2) vinculan un embedding de token a una proyección de salida final: la misma matriz V × d_model se utiliza en la entrada y en la salida (logits sobre el vocabulario). Vincular ahorra parámetros V × d_model y a menudo mejora la calidad.
ANDREA utiliza embeddings no vinculados: el embedding de entrada y la proyección de salida se entrenan como matrices separadas. La Actividad 7 (grow_a_language_model_transformer_block) cubre una capa final.
Un Pase Hacia Adelante Hasta Ahora
Entrada: IDs de tokens [256, 1842, 7301, ...] (1024 de ellos). Cada ID busca un vector de 768. Cada posición busca un vector de 768. Suma elemento a elemento. Resultado: una matriz (1024, 768) x de vectores token+posición. x fluye al bloque transformer 1.
La Actividad 5 (grow_a_language_model_attention) cubre lo que hace el bloque 1: atención de producto punto escalado con máscara causal y softmax.