Un desarrollador lanzó Demoscener-7B, un modelo de IA que escribe las siguientes líneas de programas en JavaScript pequeños y visualmente llamativos, y afirma que lo ajustó a su propio criterio de lo que se ve bien. El modelo y el conjunto de datos con el que fue entrenado ya están disponibles en Hugging Face.

El proyecto comenzó con una pregunta sencilla. Mientras estudiaba una pieza de demoscene llamada “Memories”, del programador HellMood, el desarrollador notó que algunos de sus efectos visuales podían rastrearse hasta experimentos anteriores y ideas tomadas prestadas. Se preguntó cuántas otras direcciones podrían haber tomado esas mismas ideas. Dwitter.net, un sitio que funciona como Twitter para demos de JavaScript de 140 caracteres, parecía el lugar indicado para probar esa idea. El sitio permite a los usuarios “remezclar” cualquier publicación, por lo que los mismos programas suelen aparecer en varias versiones relacionadas.

Escribir estos programas es difícil, y el desarrollador dijo que le costó trabajo terminar los suyos. Quería un autocompletado que entendiera la sintaxis peculiar de este formato. Los dweets dependen en gran medida de trucos de code golf y de notación matemática abreviada, que rara vez aparecen en el código que ven los modelos de programación de propósito general. Señaló que, incluso con un alfabeto de 64 caracteres, un programa al que se le quitaran los últimos 30 caracteres puede completarse de un número astronómico de maneras. La mayoría de esas completaciones no son válidas o resultan aburridas. Razonó que un modelo de lenguaje podría enfocarse en las continuaciones que realmente son plausibles.

¿Cómo se entrenó el modelo de código de demoscene?

El primer paso fue el de los datos. Intentó generar dweets sintéticos con un gran modelo de lenguaje, pero consideró que los resultados eran estéticamente poco atractivos. En cambio, usó la API de Dwitter para construir un conjunto de datos de 25.000 dweets para el entrenamiento, junto con unos 1.300 más para validación. El modelo base, Qwen2.5-Code-7B, tuvo dificultades para completar la mayoría de los programas de prueba.

Luego realizó un preentrenamiento continuado sobre el corpus. Para medir el efecto, siguió la sorpresa de los tokens individuales antes y después del entrenamiento. En 30 dweets reservados, la perplejidad bajó de 28,63 a 8,57, lo que, según dijo, significaba que el modelo se había vuelto mucho mejor para predecir la estructura de estos programas. Los resultados eran más consistentes, pero consideró que aún carecían de encanto.

¿Cómo ajustó el desarrollador el modelo a su propio gusto?

Para añadir esa cualidad, recurrió a la puntuación de “lo genial” de Dwitter. Ordenó los 5.000 mejores dweets según su puntuación y construyó un currículo que favorecía gradualmente los ejemplos mejor valorados. Durante 400 pasos de entrenamiento, los 1.000 mejores programas alcanzaron cerca del 67 por ciento de la probabilidad de muestreo. Describió esto como un avance, ya que las continuaciones se volvieron notablemente más interesantes visualmente. La perplejidad en un conjunto más amplio de 7.000 dweets también mejoró, incluso en programas que el modelo nunca había muestreado durante el entrenamiento por currículo.

La etapa final fue el aprendizaje por refuerzo, que ejecutó con GRPO y con él mismo como función de recompensa. Para cada dweet inacabado, el modelo muestreó ocho completaciones. Las renderizó lado a lado y eligió la que más le gustó, o descartó el grupo si ninguna le atraía. En unas nueve o 10 rondas de 500 grupos cada una, inspeccionó alrededor de 40.000 animaciones. Dijo que después habría deseado conocer los modelos de visión y lenguaje y HPSv3, un sistema de puntuación de preferencias humanas, que quizás habría hecho el proceso menos manual.

¿Cómo evaluó el desarrollador el modelo?

Para comprobar si su gusto realmente se había transferido, pidió a un amigo que juzgara 400 conjuntos de demos de varios puntos de control, sin saber qué modelo había generado cada uno. El punto de control 4 obtuvo la mejor puntuación, y lo usó para la inferencia en su Mac.

También construyó una pequeña interfaz que genera varias continuaciones a partir del mismo código inicial, las renderiza lado a lado y permite al usuario ramificarse desde cualquier resultado. Los usuarios pueden editar el código, generar nuevas variaciones y seguir explorando. El desarrollador dijo que el proyecto fue financiado con el pago que recibió de GitHub Sponsors, el cual usó para alquilar una GPU para el entrenamiento.

El trabajo es un proyecto personal informal y no una publicación de investigación formal, pero muestra cómo un conjunto de datos pequeño y curado por la comunidad, junto con el criterio de una sola persona, puede orientar un modelo de código hacia un estilo artístico muy específico. Dijo que planea seguir explorando las posibilidades que la herramienta abre.

This article was written with the assistance of AI.
News Factory APP - agentic news to boost your SEO & AEO.