Maksim Sekretov ha lanzado un transformador diminuto, en JavaScript puro, que se ejecuta en Node.js y muestra cada escalar, peso y gradiente a medida que se entrena. El repositorio tiny-language-model-neuro-js permite que cualquiera comience con un modelo aleatorio, le proporcione un prompt como “can human read ?”, observe cómo falla y luego ejecute un entrenamiento con un solo comando para ver cómo la respuesta se vuelve correcta.
Por qué la mayoría de las demostraciones de LLM ocultan las matemáticas
Los tutoriales típicos de modelos de lenguaje dependen de TensorFlow o PyTorch. Esos frameworks construyen automáticamente grafos de computación y calculan gradientes tras bambalinas, por lo que los estudiantes solo ven código de alto nivel y curvas de pérdida. Las operaciones subyacentes —cómo cada token se convierte en un embedding, cómo se calculan las puntuaciones de atención, cómo los gradientes fluyen de regreso a través de cada matriz— permanecen invisibles.
Qué hace diferente el modelo de JavaScript
La implementación de Sekretov reduce todo a un único script de Node.js sin dependencias. El pipeline de entrenamiento sigue una secuencia directa:
- Tokenización
- Embeddings
- Bloques de transformador causal
- Autoatención de múltiples cabezales (Multi-head self-attention)
- Redes feed-forward (FFN)
- Cabezal del modelo de lenguaje y softmax
- Pérdida de entropía cruzada (Cross-entropy loss)
- Backpropagation
Ejecutar node src/train.js --generalize --adaptive-teach inicia el bucle de entrenamiento completo. Debido a que el código es JavaScript puro, cada tensor es un array simple, cada multiplicación de matrices es un bucle explícito y cada gradiente se encuentra junto a su peso de origen.
De conjeturas aleatorias a respuestas correctas
Cuando el modelo comienza, todos los parámetros son aleatorios. Preguntarle “can human read ?” produce galimatías. Tras una breve fase de preentrenamiento y una ronda de ajuste fino supervisado (SFT), el mismo prompt devuelve una respuesta coherente. La señal del profesor —secuencias de tokens correctas introducidas a través de la función de pérdida— se propaga de regreso a través de los embeddings, los cabezales de atención y las capas FFN, actualizando cada escalar a su vez.
Abordando el olvido catastrófico
Las primeras ejecuciones mostraron un problema clásico: aprender un nuevo dato borraba los aprendidos anteriormente. Sekretov solucionó esto con el método de ensayo (rehearsal): volver a presentar ejemplos antiguos mientras se introducen datos nuevos. El entrenamiento se detiene solo cuando cada token objetivo alcanza al menos un 95 % de probabilidad y sobrevive a diez comprobaciones consecutivas. Este bucle sencillo demuestra un desafío de investigación fundamental sin necesidad de librerías externas.
Quién se beneficia y quién podría quedar fuera
El proyecto no compite con los LLM comerciales que se ejecutan con miles de millones de parámetros y clústeres de GPU. Esa brecha de rendimiento lo hace inadecuado para cargas de trabajo de producción, pero convierte al modelo en una herramienta de enseñanza transparente. Estudiantes, aficionados e investigadores que tienen dificultades para ver el interior de un framework de caja negra ahora tienen un sandbox donde las matemáticas son código literal.
Qué falta y hacia dónde podría dirigirse el proyecto
Debido a que la implementación es deliberadamente mínima, mantiene el código legible pero limita la escalabilidad.
Qué observar a continuación
El repositorio ya es público en GitHub.
Conclusión: Al reducir un transformador a JavaScript puro, Sekretov ha convertido una tecnología notoriamente opaca en un script legible y editable. La desventaja es la velocidad, pero la ventaja es la comprensión: ahora cualquiera puede observar cómo un modelo de lenguaje aprende, olvida y vuelve a aprender, escalar por escalar.
