Sobre MíQué hagoProyectosContacto
Blog·Modelado·04/07/2026·2 min

Lo que aprendí implementando un transformer desde cero

Atención multi-cabeza, máscara causal y un tokenizador BPE escritos a mano en PyTorch, sin torch.nn.Transformer. Tres lecciones que ningún curso me había dado, incluida una sorpresa en las ablaciones.

Lo que aprendí implementando un transformer desde cero

Llevaba meses usando transformers a través de librerías y sabiendo explicar la atención de memoria: queries, keys, values, softmax, listo. Entonces intenté escribir uno desde cero en PyTorch — sin torch.nn.Transformer, sin tokenizador externo — y descubrí cuánto de esa explicación era memoria y cuánto era comprensión. Spoiler: el reshape de las cabezas me salió mal tres veces.

Lección 1: las dimensiones son el examen de verdad. La atención multi-cabeza es conceptualmente simple y mecánicamente traicionera: proyectar, partir en cabezas, transponer, atender, volver a juntar. Cada paso es un reshape donde puedes equivocarte en silencio — el código corre, las shapes cuadran de casualidad, y el modelo simplemente aprende peor. Escribir los tests de forma (y de contenido: que la máscara causal de verdad impida mirar al futuro) me enseñó más atención que releer el paper.

Lección 2: el tokenizador es la mitad del modelo. Escribir byte-pair encoding a mano — contar pares, fusionar el más frecuente, repetir — desmitifica por qué los LLMs parten las palabras donde las parten, por qué los números se tokenizan raro y por qué cambiar de tokenizador rompe un modelo entrenado. Ahora, cuando un conteo de tokens no me cuadra, sé exactamente qué está pasando debajo.

Lección 3: romper cosas a propósito enseña más que entrenarlas. El estudio de ablaciones dio el mejor momento del proyecto. Quitar los embeddings posicionales subió la perplejidad de validación de 6,89 a 8,04 — esperado: sin posiciones, la atención no distingue el orden. La sorpresa fue la otra: con una sola cabeza de atención el modelo dio 6,76, ligeramente mejor que con varias. A este tamaño de modelo y de datos, las cabezas extra eran capacidad desaprovechada. Leer eso en un paper es una cosa; verlo en tu propia tabla de resultados, otra.

Lo que me llevo. No es el modelo — un GPT de juguete sobre texto de dominio público no le sirve a nadie. Es el modelo mental: cuando algo no converge, cuando el sampling degenera, cuando un fine-tuning hace cosas raras, ahora tengo una imagen concreta de qué pieza puede estar fallando y cómo comprobarlo. Esa intuición no venía en ningún curso de los que hice; salió de implementar cada tensor y verlo fallar.

¿Conectamos?

Hablemos: feedback, colaboración o una oportunidad.

Puedes escribirme por un proyecto, una duda técnica, para darme feedback o por unas prácticas o un primer puesto junior. Respondo siempre.

Escríbeme

Sigue leyendo:

hola@jmwebsoluciones.com