rukh · lab

// M4 · lección 09

Lo que salió: cinco mediciones y cuatro criterios

Lo que salió al cerrar el hito: la cabecera dejó de ser ruido y se ve sin jugar una partida, el Elo por condición no cumple el criterio y la aritmética dice por qué, el afinado de maestros ensancha el repertorio arriba y lo hunde abajo, los adaptadores de 1,6 MB no cuestan nada, y Qwen3-0.6B pierde 160 partidas de 160.

  • tiempo de trabajo40 min
  • nivel medio
  • actualizado el23 de septiembre de 2026

Lección 9 de 10 del módulo «Fine-tuning e instrucción». Viene de «El selector en la demo» y cierra con los labs. Todo lo que se mide aquí lo produce el código de las lecciones 2 a 7; esta lección no añade ninguna pieza, solo lee las cinco mediciones y los cuatro criterios del hito.

Lo que salió

Las cifras son las del cierre del hito; la tabla del proyecto lleva las de una segunda medición hecha en M6, dentro de los mismos intervalos. El balance, para leer el resto sabiendo a dónde va:

Pregunta Respuesta
¿La cabecera de Elo cambia algo? Sí: el repertorio, ordenado en las seis condiciones. La fuerza, no de forma medible.
¿El afinado de maestros juega mejor? 79 puntos más, dentro del ruido. Ensancha el repertorio arriba y estropea las cabeceras bajas.
¿Un adaptador de 1,6 MB cambia el estilo sin coste? Sí: la probabilidad de 1. e4 sube al 99,85 %, sin perder una décima en ninguna otra métrica.
¿Merecía la pena escribir un modelo propio? Sí: Qwen3-0.6B afinado con las mismas partidas pierde 160 de 160, y una de cada tres respuestas es ilegal.
¿Se cumplen los criterios del hito? Tres de cuatro. El que falla, el Elo por condición, es el que deja las tres herramientas de medida del módulo.

En una frase: el comportamiento se mueve del todo y la competencia no se mueve nada.

La cabecera dejó de ser ruido, y se ve sin jugar una partida

La primera medida no necesita ni una partida: la entropía, en bits, de la softmax del modelo sobre las veinte primeras jugadas legales. Sin muestreo no hay varianza entre tiradas, y tampoco depende de Stockfish ni de la escalera: mide una propiedad de los pesos y solo eso.

Cabecera medium-v4 medium-elo
<w1200> 2,8556 bits 1,5955
<w1500> 2,9369 1,6470
<w1800> 1,7695 1,7408
<w2000> 1,8694 1,8406
<w2100> 1,9033 1,8809
<w2400> 2,0104 1,9916

Ahí hay tres cosas.

La huella del suelo del corpus está en los pesos. En medium-v4 hay un escalón de 1,17 bits entre <w1500> y <w1800>, justo donde min_elo: 1800 cortaba los datos. Y por debajo del suelo el modelo está menos decidido que en cualquier cabecera que conoce. Eso no es debilidad, porque un jugador débil tiene un repertorio estrecho; es ruido en la entrada.

Después del afinado, el eje es monótono y con el signo correcto: 1,5955 → 1,6470 → 1,7408 → 1,8406 → 1,8809 → 1,9916 bits, seis de seis. Un jugador de club abre 1. e4 o 1. d4 y poco más (66,9 % de e2e4 a 1200); el repertorio se ensancha con la fuerza (47,2 % a 2400). El modelo reproduce esa forma sin que el objetivo de entrenamiento mencione la entropía por ninguna parte.

Por encima de 1800, los dos modelos coinciden: el afinado llenó lo que faltaba sin deshacer lo que había. Si la escalera de Elo sale ambigua, y en este módulo sale, esta medida sigue siendo evidencia de que la cabecera dejó de ser ruido.

// Ejercicio 01¿Qué entropía esperas en la cabecera 800, y por qué no la que sugiere la tabla?

La tabla de arriba es monótona de 1200 a 2400: 1,5955 → 1,9916 bits. Si prolongaras esa recta hacia abajo, <w0800> saldría por debajo de 1,6. Antes de creértelo, mira de dónde sale el corpus del afinado (min_bin: 1000 en pipeline-low.yaml) y el filtro del preentrenamiento (min_elo: 1800). ¿Qué ha visto ese token? ¿Qué firma esperas, y a qué fila de la tabla se parece más? ¿Por qué el selector de la demo no lo ofrece?

// SoluciónVer la solución

Ninguno de los dos corpus contiene una sola partida con <w0800>: el preentrenamiento cortaba en 1800 y el corpus plano empieza en 1000. Su embedding sigue siendo el vector aleatorio de media cero y desviación 0,02 que dejó la inicialización, así que la firma esperada no es la de un jugador muy flojo (repertorio estrecho, entropía por debajo de los 1,5955 de <w1200>) sino la del ruido en la entrada: una distribución menos decidida que la de cualquier cabecera entrenada, como los 2,86 y 2,94 bits que medium-v4 daba en <w1200> y <w1500> antes del afinado. Se parece a la columna izquierda de la tabla, no a la derecha. El número exacto no se puede predecir (el afinado de maestros enseña más abajo que un token sin gradiente se mueve igualmente, de 2,856 a 3,307 bits, porque el resto del modelo cambia debajo de él), pero el signo de la anomalía sí: un escalón hacia arriba entre <w1000> y <w0900>, donde vuelve a cortar el corpus. Y por eso el selector ofrece seis condiciones medidas y no veintisiete: ofrecer <w0800> sería prometer un jugador de 800 y entregar un vector aleatorio.

El Elo por condición: el criterio que no se cumple, y por qué no es cuestión de partidas

Ahora la medida cara: seis condiciones, la suite entera en cada una y 160 partidas por fila contra los ocho peldaños de Stockfish. Solo cambian los dos tokens de la cabecera.

Cabecera Elo IC 95 %
<w1200> 1425 1361 – 1479
<w1500> 1549 1481 – 1609
<w1800> 1498 1435 – 1552
<w2000> 1538 1479 – 1597
<w2100> 1606 1543 – 1670
<w2400> 1644 1578 – 1707

Elo medido pidiéndole al modelo que juegue a cada nivel

Una fila por condición. La barra es el intervalo de confianza del 95 %; la marca, la estimación. Todo lo demás de la medición es idéntico entre filas: mismos rivales, mismas posiciones, misma semilla, misma temperatura.

Pedido 1200: 1425 Elo, intervalo 1361 a 1479. Pedido 1500: 1549 Elo, intervalo 1481 a 1609. Pedido 1800: 1498 Elo, intervalo 1435 a 1552. Pedido 2000: 1538 Elo, intervalo 1479 a 1597. Pedido 2100: 1606 Elo, intervalo 1543 a 1670. Pedido 2400: 1644 Elo, intervalo 1578 a 1707.130014001500160017001800<w1200><w1500><w1800><w2000><w2100><w2400>
  • 1200 → 1500: los intervalos se separan
  • 1500 → 1800: los intervalos se solapan
  • 1800 → 2000: los intervalos se solapan
  • 2000 → 2100: los intervalos se solapan
  • 2100 → 2400: los intervalos se solapan
Elo medido
1644 (IC 1578–1707)
Legales sin máscara
99.70 %
Top-1
53.30 %
Puzles
38.08 %

Estimaciones no monótonas · intervalos no separados · 219 Elo entre extremos

El recorrido no es mérito del condicionamiento por sí solo: el modelo sin afinar cubre 161 de esos puntos con una cabecera que nunca entrenó. La diferencia entre los dos está en las otras columnas, no en el Elo.

medium-elo · 115.120.128 parámetros · 2026-09-20

El criterio del hito es literal: Elo(<w1500>) < Elo(<w2000>) < Elo(<w2400>), con intervalos. No se cumple. El primer par va del revés (1549 contra 1538) y ninguno de los intervalos que nombra el criterio se separa del siguiente.

«No separado» tiene dos causas que en el informe se escriben igual: faltan partidas o no hay diferencia. Distinguirlas es aritmética y cuesta un segundo en vez de una noche de máquina.

Cuántas partidas harían falta

Lo que la escalera mide es una tasa de puntos (victorias más medio empate, entre partidas jugadas), y el Elo es una transformación de esa tasa. Una tasa es una proporción: su error típico es sqrt(p(1-p)/n), y dos intervalos del 95 % dejan de tocarse cuando la distancia entre las tasas supera 1,96 (se₁ + se₂). Despejando, para proporciones cerca de la mitad: n > 3,84 / (Δp)² partidas por condición. La derivación paso a paso, con una moneda, está en la estadística justa de M2.

Piensa en dos monedas. Una cae cara el 46 % de las veces y la otra el 45 %: para distinguirlas hacen falta decenas de miles de lanzamientos. Si una cae cara el 46 % y la otra el 60 %, bastan unas decenas. Lo que dispara la cuenta es el cuadrado de la diferencia en el denominador.

Con los números de la tabla (labs/m4/games_needed.py, lab 6):

Par tasa Δ partidas por condición
<w1500> → <w2000> 0,466 → 0,453 −0,013 24 420
<w2000> → <w2400> 0,453 → 0,569 +0,116 284
<w1500> → <w2400> 0,466 → 0,569 +0,103 357
<w1200> → <w2400> 0,331 → 0,569 +0,238 64 · ya separado
no hay diferencia<w1500>1549<w2000>153824 420 partidas por condiciónfaltan partidas<w2000>1538<w2400>1644284 partidas por condición15001550160016501700Elo medido
Los cuatro intervalos se estrechan al mismo ritmo, que es lo único que compran más partidas. El par de abajo (2000 y 2400, a 106 puntos) se separa con 284 partidas por condición; el de arriba (1500 y 2000, a once puntos y del revés) no se separa nunca, porque un intervalo no puede estrecharse más allá de su propio centro.

Las dos primeras filas dicen «no separado» en el informe y significan lo contrario. 284 partidas son una hora de máquina: un problema de medición que se arregla midiendo más. 24 420 son sesenta horas de Stockfish para estrechar el intervalo alrededor de una diferencia que no está: eso es un resultado, y medir más no lo cambia.

Así que el criterio se declara no cumplido y no se vuelve a pagar por <w2000>; sí por el par exterior, con 400 partidas por condición. Lo que sí está medido es que los extremos del eje se separan y que el eje mueve 219 puntos de Elo de punta a punta. El criterio se queda como estaba escrito: no se reescribe cuando sale que no.

// Ejercicio 02¿Qué diferencia puede ver este instrumento?

Dale la vuelta a la fórmula. Con 160 partidas por condición, lo que jugó el barrido, ¿cuál es la diferencia de tasa de puntos más pequeña que dos intervalos del 95 % pueden separar? ¿Y con 1 000? Convierte las dos a puntos de Elo alrededor de una tasa de 0,5 (400 · log₁₀(p / (1 − p))) y compáralas con las distancias entre condiciones contiguas del barrido, en orden de cabecera: 124, 51, 40, 68 y 38 puntos.

// SoluciónVer la solución

De n > 3,84 / (Δp)² sale Δp > sqrt(3,84 / n). Con n = 160: sqrt(0,024) = 0,155. Con n = 1 000: sqrt(0,00384) = 0,062. En Elo, una tasa de 0,655 frente a 0,5 son 400 · log₁₀(0,655 / 0,345) = 111 puntos (los «unos 110» del lab 6) y una de 0,562 frente a 0,5 son 400 · log₁₀(0,562 / 0,438) = 43. O sea: el barrido de 160 partidas no puede separar nada por debajo de unos 110 puntos, y cuatro de las cinco distancias contiguas están por debajo; solo 1200→1500 (124) lo supera, y es la única pareja contigua cuyos intervalos se separan (1479 frente a 1481). Con 1 000 partidas por condición (seis veces más máquina, cerca de tres horas por fila) el umbral bajaría a unos 43 y alguna distancia contigua más lo superaría sobre el papel, siempre que se mantuviera al medir más, que es justo lo que una tirada de 160 no puede prometer. Y aun así chocaría con el suelo de reproducibilidad del apartado siguiente, unos 40 puntos de una sigma: más partidas estrechan lo que mide nuestro muestreo, no lo que mueve Stockfish. Un resultado negativo sin esta frase («habría visto cualquier efecto mayor de X») no es un resultado.

Lo mismo, medido dos veces, se mueve 60 puntos

Hay un número más que decide cómo leer toda la tabla. medium-elo a <w1800> se midió dos veces, en el barrido y en la evaluación canónica de la etapa, con la misma configuración en todo lo que afecta a las partidas, incluida la semilla.

tasa Elo IC 95 %
tirada A (barrido) 0,409 1498 1435 – 1552
tirada B (canónica) 0,475 1558 1500 – 1609

Sesenta puntos entre dos tiradas del mismo modelo con la misma semilla, y no es un fallo: la semilla fija nuestro muestreo, no el de Stockfish, que juega por tiempo y aleatoriza a propósito para acertar el Elo que se le pide. La diferencia de tasa, 0,0656, frente a un error típico de la diferencia de sqrt(2p(1-p)/160) = 0,0555, son 1,18 σ: ruido de manual.

Es pesar una maleta dos veces en la báscula del baño y leer 22,4 y 23,1 kg. Antes de decidir si la maleta B pesa más que la A hay que saber que la báscula se mueve casi un kilo sin que nadie toque nada; cualquier diferencia entre maletas más pequeña que eso no es una diferencia entre maletas.

Comparar dentro de una tirada es válido; entre tiradas, no. Por eso la tabla del proyecto lleva la canónica (1558) y el barrido la suya, y cada número dice de qué ejecución sale.

El control que impide cantar victoria

Hay un número que sí sale bien y no significa lo que parece. De <w1200> a <w2100> el modelo condicionado va de 1425 a 1606, con los intervalos separados. Leído solo, eso es «el condicionamiento da fuerza», y habría sido el titular del hito.

La otra explicación es que cualquier modelo puntúe menos con una cabecera baja. Se comprueba corriendo el mismo barrido sobre el modelo base, para el que <w1200> es un vector de la inicialización. Es el grupo de control de un ensayo clínico: una parte de los pacientes mejora sin el fármaco, y al fármaco solo se le atribuye lo que mejora por encima de eso.

Cabecera Modelo Elo IC 95 %
<w1200> medium-v4 (base) 1419 1358 – 1479
<w1200> medium-elo 1425 1361 – 1479
<w2100> medium-v4 (base) 1580 1512 – 1649
<w2100> medium-elo 1606 1543 – 1670
140015001600Elo medido (IC 95 %)+161 · medium-v4 (base)+181 · medium-elo<w1200><w2100>cabecera pedida
fig. 01La ejecución de control, dibujada. El modelo sin afinar recorre 161 de los 219 puntos del eje con una cabecera baja que nunca entrenó; el afinado añade veinte, y en las dos cabeceras los intervalos de los dos modelos se solapan.

El modelo sin afinar también recorre el eje: 161 puntos, con los intervalos separados, y no puede ser condicionamiento porque su <w1200> nunca recibió un gradiente. Un prefijo desconocido le estorba, y eso cuesta unos 160 puntos. El afinado mueve 181, dentro del ruido de esos 161.

La evidencia está en las otras columnas de la misma tirada. A la misma cabecera y con el mismo Elo, los dos modelos no se parecen en nada más:

<w1200> legal top-1 puzles entropía 1.ª
medium-v4 (base) 99,60 % 49,80 % 36,42 % 2,856
medium-elo 100,00 % 51,40 % 37,02 % 1,596

Cero jugadas ilegales contra cuatro de mil, punto y medio más de top-1 y 1,26 bits menos de entropía de primera jugada. El afinado convirtió «ruido en la entrada» en «un jugador de club decidido», y eso se ve en todo menos en el resultado contra Stockfish. A <w2100>, en cambio, los dos modelos coinciden en todas las columnas: esa cabecera siempre estuvo entrenada, y que el afinado no la tocara es la prueba de que no hubo olvido catastróficoOlvido catastróficoCuando afinar un modelo con datos nuevos le hace perder lo que sabía. No avisa: la pérdida sobre los datos nuevos baja mientras la capacidad vieja se deshace. La defensa no es una técnica sino una medición: se afina con tasa baja, pocos pasos, y se vuelve a medir contra el listón anterior. En M4 el listón es el Elo del modelo base; si el afinado por Elo lo hundiera, el eje habría salido caro..

Entonces, ¿qué mueve la cabecera?

Las otras tres columnas de la misma tirada lo dicen, y ninguna es el Elo.

Cabecera legal argmax top-1 puzles
<w1200> 100,00 51,40 % 37,0 %
<w1500> 100,00 53,90 % 37,7 %
<w1800> 99,80 % 54,10 % 38,2 %
<w2000> 99,70 % 54,00 % 38,0 %
<w2100> 99,70 % 53,40 % 38,1 %
<w2400> 99,70 % 53,30 % 38,1 %

Los puzles no se mueven: 1,2 puntos de rango sobre 6 000 puzles, sin orden. Un puzle mide táctica, y la táctica del modelo es la misma le pidas lo que le pidas. El top-1 parece tener un máximo en <w1800> (las posiciones de validación son partidas de media cercana a 1800), pero con 1 000 posiciones por fila el error típico es de ±1,6 puntos y el recorrido entero, 2,8, no llega a dos sigmas. Y la legalidad baja tres jugadas de mil al subir la cabecera: un repertorio más ancho sale más a menudo de las líneas trilladas.

Las tres columnas, más la entropía monótona, cuentan la misma historia: la cabecera mueve el estilo, no la fuerza táctica.

La moda y la cola: una segunda explicación, contrastada

Fíjate en qué parte de la distribución lee cada columna:

Columna Qué lee de la distribución Resultado
entropía de 1.ª jugada la softmax entera monótona 6/6
top-1 contra jugada humana la moda se mueve 2,8 puntos, dentro de ±1,6 σ
puzles la moda plano
Elo la moda plano

Todo lo que mide la distribución completa se ordena; lo que mide solo la moda, no. Y podría no ser casualidad: la suite juega siempre la jugada más probable (top_k: 1), y la diferencia entre un 1200 y un 2400 quizá no está en la moda (los dos hacen la recaptura obvia) sino en la cola, en cada cuánto eligen algo malo. Si fuera eso, bastaría con dejar de jugar el pico. Se contrastó con la misma escalera a temperatura 1,0 y top-k 20, el ajuste de la demo, en las dos puntas del eje.

<w1200> <w2400> brecha ÷ anchura media del IC
moda (greedy) 1425 (1361–1479) 1644 (1578–1707) 1,78
muestreado (T=1,0) 1002 (866–1109) 1272 (1193–1340) 1,38

La última columna dice cuántos intervalos caben en la brecha. En Elo la brecha se ensancha, de 219 a 270 puntos, pero los intervalos se ensanchan más, y el cociente baja de 1,78 a 1,38. En la tasa de puntos, donde de verdad se mide, la diferencia se encoge: de 0,2375 (4,40 σ) a 0,1375 (3,85 σ). No era eso.

Muestrear a temperatura 1,0 le cuesta al modelo unos 400 puntos de Elo y lo tira por debajo del rango en el que la escalera está calibrada: a <w1200> gana cinco partidas de 160, aplastado contra el suelo. En un rincón no se distinguen dos cosas mejor que en el medio.

Quedan dos ideas que valen fuera del ajedrez. Un instrumento tiene un rango, y un tratamiento que saca al sujeto de ese rango esconde el efecto en vez de revelarlo. Y un modelo son sus pesos más cómo se decodifican: aquí el decodificador vale 400 puntos de Elo, más que todo lo que separa a las seis condiciones. Con un LLM, dos temperaturas sobre los mismos pesos son dos modelos distintos.

El afinado de maestros: el corpus estrecho se nota en los dos extremos

El otro afinado le da al mismo medium-v4 3 800 pasos más sobre partidas de élite. El diseño predecía «sube el Elo, baja la diversidad», y la segunda mitad sale del revés.

Cabecera medium-v4 medium-masters
<w1200> 2,8556 bits 3,3067 ↑↑
<w1500> 2,9369 3,3340 ↑↑
<w1800> 1,7695 1,8850
<w2000> 1,8694 1,9680
<w2100> 1,9033 1,9871
<w2400> 2,0104 1,9972

Arriba, el repertorio se ensancha: a <w1800> la entropía sube de 1,7695 a 1,8850 bits. La élite juega más aperturas distintas que el jugador medio de 1800; la intuición de que «afinar concentra» venía de pensar en el modelo, no en los datos.

Abajo, el agujero se hace más hondo: a <w1200> la entropía pasa de 2,856 a 3,307 bits. Este afinado tampoco entrenó las cabeceras bajas y movió todo lo que las rodea: un token sin gradiente no se queda quieto, porque las capas que atraviesa son las mismas que usan todos los demás.

Y arriba del todo se le acaba el eje: entre <w2100> y <w2400> el base separa 0,107 bits y el de maestros solo 0,010. Para un modelo entrenado solo con élite, «2100» y «2400» quieren decir casi lo mismo.

¿Y la primera mitad de la predicción, la de que sube el Elo? Sube, y no lo suficiente como para poder decirlo:

Elo IC 95 % top-1 puzles
medium-v4 (base) 1504 1446 – 1558 54,4 % 37,5 %
medium-masters 1583 1525 – 1641 54,9 % 38,0 %
medium-elo 1558 1500 – 1609 54,9 % 37,8 %

Setenta y nueve puntos con los intervalos solapados y un suelo de reproducibilidad de unos 40: dos sigmas, sugerente pero no establecido. Ninguno de los dos afinados mueve la fuerza de forma demostrable, y los dos mueven cosas que sí se ven: el de maestros ensancha el repertorio y estrecha el eje; el condicionado ordena el repertorio y arregla la mitad que era ruido. Ninguno enseña táctica, porque la táctica no estaba en el objetivo de entrenamiento.

Los adaptadores: 1,6 MB que fijan una decisión y no cuestan nada

Cada adaptador de estilo son 1 578 824 bytes sobre unos pesos de 460 MB que no se tocan. Lo que hacen, medido sobre la distribución de la primera jugada, sin muestreo:

Modelo entropía e2e4 d2d4
medium-v4 1,7695 59,64 % 26,68 %
con lora-e4 0,0209 99,85 % 0,06 %
con lora-d4 0,0160 0,06 % 99,88 %

Unas pocas notas adhesivas, y el libro abre siempre por la misma página. ¿Qué costó? Medido con la misma suite, salvo la escalera:

legales sin máscara top-1 puzles
medium-v4 99,80 % 54,40 % 37,50 %
con lora-e4 99,80 % 54,70 % 37,80 %

Nada. El 0,34 % del modelo que se movió cambió por completo una decisión y dejó intacto todo lo demás. La otra métrica de diversidad dice lo contrario que la primera, y también tiene razón:

entropía de 1.ª jugada líneas distintas entropía de líneas
con lora-e4 0,021 bits 199 de 200 7,634 de 7,644 bits

Con la primera jugada clavada en 1. e4, doscientas auto-partidas de doce pliesPly (media jugada)Una jugada de un solo bando. 1. e4 e5 son dos plies y una jugada completa. Los filtros del recorte y las longitudes de secuencia del modelo se cuentan en plies porque es lo que ve el modelo: un token por ply. produjeron 199 líneas distintas: el adaptador fijó el primer movimiento y no tocó los once siguientes.

Un límite: el corte first_move: e2e4 es un corpus de una sola clase, y el adaptador aprendió lo único que se podía aprender de él, «aquí siempre se juega 1. e4». Enseñar un repertorio exigiría cortar por jugador y no por jugada. Con un LLM pasa lo mismo: un conjunto de SFT donde todas las respuestas empiezan igual enseña esa muletilla antes que cualquier otra cosa.

Qwen3 contra el decoder: la pregunta que el curso llevaba tres módulos sin contestar

Mismas partidas, mismo harness, mismos rivales; solo cambia la representación. Y el presupuesto es generoso con Qwen: 600 millones de parámetros que ya saben hablar, r = 16 sobre las cuatro proyecciones de atención y unos 24 M de tokens de ajedrez. Pierde por mucho.

Métrica medium-v4 (decoder) qwen3-pgn-qlora
Parámetros 115 120 128 600 637 440
Jugadas legales sin máscara 99,8 % 62,50 %
Top-1 contra jugada humana 54,4 % 12,5 %
Puzles resueltos 37,5 % 0,9 %
Elo estimado 1504 (1446–1558) < 807

Ese último número es una cota: Qwen perdió las 160 partidas, incluidas las veinte contra el peldaño más flojo, y cuando no se gana ni una no hay curva que ajustar. Y la columna que el decoder no puede ni tener:

Cómo falló la respuesta Cuota
legal 62,50 %
ilegal aquí 33,70 %
no es una jugada 2,90 %
SAN ambigua 0,90 %
no escribió nada 0,00 %

Una de cada tres respuestas es una jugada bien escrita que esa posición no permite, y casi cuatro de cada cien ni siquiera son una jugada. El decoder no puede cometer esos errores: su vocabulario es el conjunto de jugadas. El afinado en sí fue barato, el 0,76 % de los parámetros, y los cuatro bits apenas ahorraron memoria a esta escala.

Los cuatro criterios, uno por uno

El plan escribió cuatro condiciones para este hito antes de medir nada. Así quedan.

  1. Elo por condición monótono (1500 < 2000 < 2400 con IC): no se cumple. Falla ya en su primer par (1549 contra 1538). No es falta de partidas (harían falta 24 420 por condición), ni el instrumento roto (el modelo sin afinar recorre el mismo eje), ni mala suerte de una tirada. Es que la cabecera no mueve la fuerza. Se publica incumplido, con los números.
  2. Tabla comparativa con Qwen afinado con QLoRA sobre el mismo recorte: se cumple. Está arriba.
  3. Publicados con card los cinco artefactos: se cumple. Son seis repos del Hub: los cinco artefactos entrenados (medium-elo, medium-masters, lora-e4, lora-d4 y qwen3-pgn-qlora) y rukh-medium-lora, el grafo adaptable de la base sobre el que se montan los adaptadores. Al cerrar el hito quedaron preparados en seco y la subida esperó al visto bueno del proyecto; hoy están todos en chorcat/. Cada card se genera de su propia ejecución, con la paridad ONNX al lado; la de un adaptador dice lo que cambió y lo que costó.
  4. En la demo, el selector de Elo y los adaptadores intercambiables: se cumple. Seis condiciones medidas y ninguna más, y un solo .onnx descargado en toda la prueba de navegador.

La lección que cierra el módulo son los labs que producen cada número de esta página. Sigue en «Los labs del afinado».