← Últimos artículos
🤖 machine learning

Gauge dependence and structured-output corruption in sign-branched repetition penalties: measurements across models, inference stacks, and alternative repetition controls

Este artículo demuestra que la penalización de repetición de ramificación de signo, ampliamente utilizada en los motores de inferencia de LLM, es fundamentalmente defectuosa porque depende del arbitrario punto cero de los logits, lo que causa una inestabilidad masiva en la selección de tokens entre modelos y fallos catastróficos en la salida de JSON estructurado, un problema que se resuelve aplicando la penalización a las log-probabilidades normalizadas en lugar de a los logits brutos.

Autores originales: Peter Hollows

Publicado 2026-07-14
📖 6 min de lectura🧠 Análisis profundo

Autores originales: Peter Hollows

Artículo original bajo licencia CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta es una explicación generada por IA del artículo a continuación. No ha sido escrita ni avalada por los autores. Para mayor precisión técnica, consulte el artículo original. Leer descargo de responsabilidad completo

Imagina que tienes un robot escritor súper inteligente al que le encanta contar historias. A veces, se queda atrapado en un bucle, repitiendo la misma palabra una y otra vez como un disco rayado. Para arreglar esto, los ingenieros le dieron al robot una perilla de "penalización de repetición". La idea es simple: si el robot intenta decir una palabra que acaba de usar, sube la perilla para que esa palabra sea menos probable, obligando al robot a avanzar.

Durante años, casi todos los robots escritores del mundo (desde Hugging Face hasta vLLM o llama.cpp) han estado usando exactamente el mismo tipo de perilla. Pero este artículo revela un secreto impactante: esta perilla específica está rota porque está mirando el número equivocado.

La brújula rota

Para entender el fallo, imagina que el cerebro del robot es un mapa gigante donde cada palabra posible tiene una puntuación. Las puntuaciones positivas significan "realmente quiero decir esto", y las negativas significan "realmente no quiero". El mapa es flexible; el robot puede deslizar todo el mapa hacia la izquierda o hacia la derecha (sumando un número constante a cada puntuación) sin cambiar qué palabra elige después. Es como mover una ciudad entera en un mapa; las calles siguen teniendo el mismo orden relativo entre sí, aunque la ciudad ahora esté en un país diferente.

La perilla rota intenta decidir cuánto castigar una palabra repetida comprobando si su puntuación es positiva o negativa.

  • Si la puntuación es positiva, divide el número por un factor de penalización (haciéndolo más pequeño).
  • Si la puntuación es negativa, multiplica el número por el factor de penalización (haciéndolo aún más negativo).

Aquí está el problema: la línea entre "positivo" y "negativo" es arbitraria. Debido a que el robot puede deslizar todo su mapa hacia la izquierda o la derecha sin cambiar su comportamiento, una palabra que es "positiva" en un robot podría ser "negativa" en otro, o incluso en el mismo robot si se desliza el mapa ligeramente.

El artículo demuestra que este "salto de signo" (comprobar si el número es positivo o negativo) está mirando una coordenada que el entrenamiento del robot nunca fijó realmente. Es como intentar conducir un coche maniobrando basándose en si el tablero está actualmente en la zona "roja" o "azul", cuando todo el tablero puede deslizarse hacia atrás y hacia adelante por su cuenta.

El caos de "Misma perilla, diferentes resultados"

Debido a este mapa deslizante, el mismo ajuste en la perilla (como 1.3) hace cosas completamente diferentes a diferentes robots.

  • En un robot (como gpt2), un ajuste de 1.3 podría castigar el 84% de las palabras repetidas.
  • En otro robot (como Qwen2.5-Coder-7B), ese mismo ajuste de 1.3 podría no castigar casi ninguna de ellas, o castigarlas de una forma totalmente distinta.

Los autores probaron esto tomando un solo robot y deslizando su mapa hacia la izquierda y la derecha. Descubrieron que con un ajuste estándar de 1.3, el robot cambiaba de opinión sobre el 58% al 96% de sus elecciones ¡solo porque el mapa se había deslizado un poco!

  • Si usas una penalización "sustractiva" (solo restar un número), el robot se mantiene igual.
  • Si usas el "salto de signo" multiplicativo estándar, el robot se vuelve loco, cambiando de opinión en casi cada palabra que elige.

Esto significa que si ajustas tu robot para que funcione bien con un ajuste de 1.3, en realidad lo estás ajustando para que funcione con un "punto cero" accidental de ese robot específico. Si mueves ese robot a una computadora diferente o actualizas su software, ese mismo ajuste podría romperlo por completo.

El desastre del JSON

La parte más peligrosa de este error es que destruye la "salida estructurada". Esto es cuando le pides al robot que escriba código o JSON (un formato específico para datos) que debe seguir reglas estrictas, como cerrar cada llave { o añadir una coma ,.

Estas reglas requieren que el robot repita ciertos símbolos. Pero como la penalización mira los números brutos, a menudo confunde una "regcción necesaria" con una "mala repetición".

  • El artículo probó esto en 200 esquemas JSON del mundo real.
  • Con el ajuste estándar de 1.3, la tasa de salidas JSON válidas y funcionales cayó de un 97% a solo un 23%.
  • El robot empezó a romper la gramática, olvidando cerrar corchetes o faltando comas, porque la penalización era demasiado agresiva con los números equivocados.

Esto no fue una suposición de simulación; los autores midieron esto directamente en cinco modelos diferentes, incluyendo modelos especializados en código, y vieron el mismo colapso ocurrir en cada importante pila de software (Hugging Face, vLLM y llama.cpp).

La solución: Normalizar primero

El artículo ofrece una solución simple y probada. En lugar de mirar los números brutos y deslizantes, la penalización debería mirar las probabilidades normalizadas (el porcentaje real de probabilidad de que se elija una palabra).

  • Las probabilidades siempre están entre 0 y 1, por lo que no se deslizan de un lado a otro.
  • Cuando los autores aplicaron la penalización a estos números normalizados en lugar de a los puntajes brutos, el caos desapareció.
  • La "tasa de cambio de opinión" (qué tan seguido el robot cambiaba de opinión solo por un deslizamiento) cayó a 0.00.
  • La tasa de éxito de JSON al 1.3 volvió a subir al 97%.

Hugging Face ya tiene una herramienta llamada LogitNormalization que hace esto, pero está desactivada por defecto y se ejecuta después de la penalización. El artículo sugiere que si la activas y la ejecutas antes de la penalización, obtienes un resultado estable y confiable que funciona de la misma manera en todos los modelos.

La conclusión

La "penalización de repetición multiplicativa" que se distribuye actualmente en casi todos los motores de IA es fundamentalmente defectuosa porque depende de una línea numérica que puede deslizarse. No es un control universal; es un dial roto que te da resultados diferentes en cada máquina.

  • Qué hace: Causa cambios masivos e impredecibles en lo que escribe la IA (cambiando el 58–96% de las elecciones) y rompe formatos estructurados como JSON (cayendo de una validez del 97% al 23%).
  • Qué no es: No es una característica; es un error que se ha copiado a través de la industria durante años.
  • La solución: Normalizar los números primero. Esto elimina el problema del mapa deslizante y hace que la penalización se comporte de manera consistente, sin importar qué robot estés utilizando.

Los autores midieron esto en múltiples modelos y pilas de software, y los resultados son claros: el estándar actual está roto, y la solución está lista para implementarse.

¿Ahogado en artículos de tu campo?

Recibe resúmenes diarios de los artículos más novedosos que coincidan con tus palabras clave de investigación — con resúmenes técnicos, en tu idioma.

Probar Digest →