← Últimos artigos
🤖 machine learning

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

Este artigo demonstra que a penalidade de repetição de ramificação de sinal amplamente utilizada em motores de inferência de LLM é fundamentalmente falha porque depende do arbitrário ponto zero do logit, causando uma instabilidade massiva na seleção de tokens entre modelos e falhas catastróficas em saídas JSON estruturadas, um problema que é resolvido ao aplicar a penalidade a log-probabilidades normalizadas em vez de logits brutos.

Autores originais: Peter Hollows

Publicado 2026-07-14
📖 6 min de leitura🧠 Leitura aprofundada

Autores originais: Peter Hollows

Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Imagine que você tem um robô escritor superinteligente que adora contar histórias. Às vezes, ele fica preso em um loop, repetindo a mesma palavra repetidamente como um disco riscado. Para consertar isso, os engenheiros deram ao robô um botão de "penalidade de repetição". A ideia é simples: se o robô tentar dizer uma palavra que acabou de usar, aumente o botão para tornar essa palavra menos provável, forçando o robô a seguir em frente.

Por anos, quase todos os robôs escritores do mundo (de Hugging Face a vLLM a llama.cpp) têm usado exatamente o mesmo tipo de botão. Mas este artigo revela um segredo chocante: este botão específico está quebrado porque está olhando para o número errado.

A Bússola Quebrada

Para entender a falha, imagine que o cérebro do robô é um mapa gigante onde cada palavra possível tem uma pontuação. Pontuações positivas significam "Eu quero muito dizer isso", e pontuações negativas significam "Eu realmente não quero". O mapa é flexível; o robô pode deslizar todo o mapa para a esquerda ou para a direita (adicionando um número constante a cada pontuação) sem mudar qual palavra ele escolhe a seguir. É como mover uma cidade inteira em um mapa; as ruas ainda estão na mesma ordem relativa entre si, mesmo que a cidade agora esteja em um país diferente.

O botão quebrado tenta decidir o quanto punir uma palavra repetida verificando se sua pontuação é positiva ou negativa.

  • Se a pontuação for positiva, ele divide o número por um fator de penalidade (tornando-o menor).
  • Se a pontuação for negativa, ele multiplica o número pelo fator de penalidade (tornando-o ainda mais negativo).

Aqui está o problema: a linha entre "positivo" e "negativo" é arbitrária. Como o robô pode deslizar seu mapa inteiro para a esquerda ou para a direita sem mudar seu comportamento, uma palavra que é "positiva" em um robô pode ser "negativa" em outro, ou até mesmo no mesmo robô se você deslizar o mapa ligeiramente.

O artigo prova que esse "desvio de sinal" (verificar se o número é positivo ou negativo) está olhando para uma coordenada que o treinamento do robô nunca de fato fixou. É como tentar dirigir um carro dirigindo com base em se o painel está atualmente na zona "vermelha" ou "azul", quando todo o painel pode deslizar para frente e para trás por conta própria.

O Caos de "Mesmo Botão, Resultados Diferentes"

Devido a esse mapa deslizante, a mesma configuração no botão (como 1.3) faz coisas completamente diferentes para diferentes robôs.

  • Em um robô (como o gpt2), uma configuração de 1.3 pode punir 84% das palavras repetidas.
  • Em outro (como o Qwen2.5-Coder-7B), essa mesma configuração de 1.3 pode não punir quase nenhuma delas, ou puni-las de uma forma totalmente diferente.

Os autores testaram isso pegando um único robô e deslizando seu mapa para a esquerda e para a direita. Eles descobriram que, com uma configuração padrão de 1.3, o robô mudava de ideia sobre 58% a 96% de suas escolhas apenas porque o mapa deslizou um pouco!

  • Se você usar uma penalidade "subtrativa" (apenas subtraindo um número), o robô permanece o mesmo.
  • Se você usar o "desvio de sinal" multiplicativo padrão, o robô enlouquece, mudando de ideia em quase todas as palavras que escolhe!

Isso significa que, se você ajustar seu robô para funcionar bem com uma configuração de 1.3, você está, na verdade, ajustando-o para um "ponto zero" acidental daquele robô específico. Se você mover esse robô para um computador diferente ou atualizar seu software, essa mesma configuração pode quebrá-lo completamente.

O Desastre do JSON

A parte mais perigosa deste bug é que ele destrói a "saída estruturada". Isso é quando você pede ao robô para escrever código ou JSON (um formato específico para dados) que deve seguir regras estritas, como fechar cada chave { ou adicionar uma vírgula ,.

Essas regras exigem que o robô repita certos símbolos. Mas como a penalidade olha para os números brutos, ela frequentemente confunde uma "regra necessária" com uma "repetição ruim".

  • O artigo testou isso em 200 esquemas de JSON do mundo real.
  • Com a configuração padrão de 1.3, a taxa de saída JSON válida e funcional caiu de 97% para apenas 23%.
  • O robô começou a quebrar a gramática, esquecendo de fechar colchetes ou omitindo vírgulas, porque a penalidade era agressiva demais nos números errados.

Isso não foi um palpite de simulação; os autores mediram isso diretamente em cinco modelos diferentes, incluindo modelos especializados em código, e viram o mesmo colapso acontecer em todas as principais estruturas de software (Hugging Face, vLLM e llama.cpp).

A Solução: Normalizar Primeiro

O artigo oferece uma correção simples e comprovada. Em vez de olhar para os números brutos e deslizantes, a penalidade deve olhar para as probabilidades normalizadas (a porcentagem real de chance de uma palavra ser escolhida).

  • As probabilidades estão sempre entre 0 e 1, portanto não deslizam de um lado para o outro.
  • Quando os autores aplicaram a penalidade a esses números normalizados em vez dos números brutos, o caos desapareceu.
  • A "taxa de inversão" (a frequência com que o robô mudava de ideia apenas devido a um deslizamento) caiu para 0.00.
  • A taxa de sucesso do JSON em 1.3 voltou para 97%.

A Hugging Face já possui uma ferramenta chamada LogitNormalization que faz isso, mas ela está desativada por padrão e roda depois da penalidade. O artigo sugere que, se você a ativar e rodá-la antes da penalidade, você obterá um resultado estável e confiável que funciona da mesma forma em qualquer modelo.

A Conclusão

A "penalidade de repetição multiplicativa" que é atualmente enviada em quase todos os motores de IA é fundamentalmente falha porque depende de uma linha numérica que pode deslizar. Não é um botão universal; é um controle quebrado que dá resultados diferentes em cada máquina.

  • O que ele faz: Causa mudanças massivas e imprevisíveis no que a IA escreve (invertendo 58–96% das escolhas) e quebra formatos estruturados como JSON (fazendo a validade cair de 97% para 23%).
  • O que ele não é: Não é um recurso; é um erro (bug) que foi copiado pela indústria durante anos.
  • A solução: Normalizar os números primeiro. Isso remove o problema do mapa deslizante e faz com que a penalidade se comporte de forma consistente, não importa qual robô você esteja usando.

Os autores mediram isso através de múltiplos modelos e estruturas de software, e os resultados são claros: o padrão atual está quebrado, e a correção está pronta para ser implementada.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →