O que é supervised fine-tuning?
Supervised fine-tuning, ou SFT, é continuar o treino de um modelo pronto sobre pares de prompt e resposta ideal. O objetivo continua sendo prever o próximo token, como no pré-treino, mas o erro é medido só sobre os tokens da resposta. É o formato mais comum de fine-tuning e a etapa que transforma um modelo base em um modelo que responde a pedidos.
O “supervised” do nome vem daí: alguém escreveu a resposta certa. É a diferença em relação ao pré-treino, que só vê texto corrido e não tem gabarito. E é a diferença em relação aos métodos de alinhamento, que partem de uma comparação entre saídas em vez de uma resposta única.
Praticamente todo modelo que você usa por API passou por essa etapa. O modelo de fundação que sai do pré-treino não sabe que deve responder: ele sabe continuar texto. O SFT é o primeiro degrau que ensina a diferença, e é também o degrau mais acessível quando você vai fazer fine-tuning por conta própria.
O par e onde a perda cai
Uma linha do conjunto de treino tem duas partes: o que o usuário escreveria e o que você quer de volta. Em formato, isso costuma ser uma linha de JSONL por exemplo:
{"messages": [
{"role": "system", "content": "Classifique o ticket. Responda só com o JSON."},
{"role": "user", "content": "Fui cobrado duas vezes na fatura de março."},
{"role": "assistant", "content": "{\"tipo\": \"cobranca\", \"urgencia\": \"alta\"}"}
]}
As três partes são concatenadas numa sequência única, com marcadores que dizem onde termina uma e começa a outra — os mesmos marcadores que a API usa para separar papéis numa conversa. O que o treinador vê não é uma estrutura com campos: é texto com delimitadores, do começo ao fim.
O modelo lê a sequência inteira e, para cada posição da resposta, tenta prever o token seguinte a partir de tudo que veio antes. Errou por alguma margem, essa margem vira gradiente, e os pesos se movem um pouco na direção que reduziria o erro. É exatamente o mesmo mecanismo do pré-treino. O que muda é o recorte.
Esse recorte é a decisão de engenharia mais importante da etapa. Os tokens do prompt costumam ser mascarados: eles entram como condição para a previsão, mas não contam como alvo. A razão é direta — você não quer que o modelo fique melhor em gerar perguntas de usuário. Quer que ele fique melhor em responder.
Duas escolhas mais completam a receita e as duas são conservadoras por bons motivos. A taxa de aprendizado é pequena, tipicamente uma ordem de grandeza abaixo da usada no pré-treino, porque o objetivo é ajustar um modelo bom e não reescrevê-lo. E o número de passagens sobre o conjunto costuma ficar entre uma e três: além disso o modelo começa a decorar os exemplos em vez de aprender o padrão que eles têm em comum.
O sinal de que você passou do ponto é reconhecível. A perda no conjunto de treino continua caindo enquanto a perda no conjunto de validação para de cair ou sobe, e o modelo passa a reproduzir trechos literais dos exemplos em situações que não pediam aquilo. Se você não separou uma fatia de validação antes de começar, não tem como ver isso acontecer — e o primeiro relato vem de um usuário estranhando uma resposta que parece copiada.
Há um detalhe de implementação que vale conhecer porque afeta o resultado. Exemplos curtos são empacotados juntos até encher a janela de treino, para não desperdiçar computação com preenchimento. Se o empacotamento não isolar os exemplos com atenção, o modelo enxerga o final de um exemplo como contexto do seguinte, e aprende transições que não existem. As bibliotecas boas cuidam disso; vale conferir se a sua cuida.
Do modelo base ao modelo que segue instrução
A demonstração mais clara do que o SFT faz é dar a mesma entrada aos dois modelos.
Escreva “liste três causas de churn” para um modelo base. Uma resposta plausível é outra lista de perguntas parecidas, porque em algum lugar do corpus de treino essa frase apareceu numa lista de perguntas. O modelo não está errando. Ele está fazendo o que sempre fez: continuar o texto do jeito mais provável.
O mesmo pedido para o modelo depois do SFT devolve três causas de churn. Nada foi acrescentado em capacidade. O que mudou foi a expectativa que o modelo tem sobre o que vem depois de uma frase com aquela forma, e essa expectativa veio de alguns milhares de exemplos em que o que vinha depois era a resposta.
Vale guardar essa formulação porque ela evita uma confusão cara: SFT não deixa o modelo mais capaz, deixa a capacidade acessível pelo canal que você usa. Um modelo base pode resolver a tarefa se você escrever o prompt no formato de continuação certo. O ajuste dispensa esse truque.
O que o instruction tuning provou
O caso especial mais estudado do SFT é o instruction tuning: em vez de treinar para uma tarefa, você treina sobre muitas tarefas diferentes descritas em linguagem natural, esperando que o modelo generalize para tarefas que não estavam no conjunto.
O primeiro resultado grande é de 2021. Um modelo de 137B foi ajustado sobre mais de 60 tarefas de processamento de linguagem, cada uma expressa em instrução, e depois avaliado em tipos de tarefa que ficaram de fora. Ele superou o GPT-3 de 175B em zero-shot em 20 das 25 tarefas avaliadas1. O modelo menor ganhou do maior porque tinha sido ensinado a entender o pedido.
No mesmo ano, um trabalho paralelo chegou perto pelo outro lado. Convertendo um conjunto grande de datasets supervisionados em formato de prompt, com redações variadas para cada um, os autores ajustaram um modelo encoder-decoder e mediram desempenho em tarefas completamente retidas. O resultado batia modelos de até 16 vezes o tamanho dele em vários datasets padrão2.
Em 2022 veio a versão em escala. Ajustando sobre 1,8 mil tarefas, incluindo dados de cadeia de pensamento, um modelo de 540B ganhou 9,4 pontos percentuais na média sobre a própria versão sem ajuste, e chegou a 75,2% no MMLU com cinco exemplos3. Os autores mediram três eixos separados: número de tarefas, tamanho do modelo e presença de dados de raciocínio no conjunto. Os três importam.
E existe o resultado que puxa na direção contrária, que é o mais útil de todos para quem vai montar um conjunto. O LIMA ajustou um modelo de 65B com mil prompts e respostas escolhidos a mão, sem nenhum aprendizado por reforço, e o resultado competia com assistentes comerciais na avaliação humana dos autores4. Mil exemplos curados contra centenas de milhares raspados. A conclusão que eles tiram é forte e vale ser lida com cuidado: quase todo o conhecimento vem do pré-treino, e o ajuste ensina principalmente qual formato usar.
Mascarar o prompt ou não
Essa é a linha de configuração que quase ninguém revisa e que tem evidência recente contra o piloto automático.
O padrão é mascarar: a perda cai só sobre a resposta. Um trabalho de 2024 testou o contrário, aplicando a perda também sobre a instrução, em 21 benchmarks. O ganho apareceu em dois cenários específicos — conjuntos com instrução longa e resposta curta, e conjuntos pequenos, do tipo que o LIMA popularizou. No caso mais favorável que eles mediram, o desempenho no AlpacaEval 1.0 mais que dobrou5.
A explicação que os autores oferecem é sobreajuste: com resposta curta e conjunto pequeno, há pouco sinal na parte da resposta e o modelo decora o conjunto. Somar a instrução ao cálculo dá mais tokens de onde extrair gradiente.
Não leia isso como “pare de mascarar”. Leia como: a decisão depende da forma do seu conjunto, e a forma do seu conjunto é medível em cinco minutos. Divida o comprimento médio da instrução pelo da resposta e conte as linhas. Se a razão for alta e as linhas forem poucas, vale testar as duas configurações.
Onde o SFT falha
O conjunto vira o produto, e ele costuma ser ruim. Se as saídas do conjunto têm formato inconsistente, o ajuste aprende a inconsistência com a mesma eficiência com que aprenderia o padrão certo. Uma linha ruim em cada dez ensina o modelo a ser ruim uma vez em cada dez.
Fato novo entra mal. O SFT é ótimo para comportamento e ruim para conhecimento que muda. É a mesma limitação do fine-tuning em geral, e o remédio é o mesmo: recuperar o documento em vez de treinar sobre ele.
Uma única resposta certa é uma ficção conveniente. Para “classifique este ticket” existe gabarito. Para “escreva uma resposta ao cliente” existem dezenas de respostas aceitáveis, e o SFT força você a escolher uma e chamá-la de alvo. É exatamente essa limitação que motiva os métodos de alinhamento: em vez de uma resposta única, eles partem de uma comparação entre saídas. O InstructGPT tornou isso concreto ao mostrar que um modelo de 1,3B alinhado dessa forma teve saídas preferidas às do GPT-3 de 175B na avaliação humana deles6.
Regressão fora do domínio. Treinar sobre uma distribuição estreita degrada o desempenho fora dela. O modelo fica ótimo em classificar seus tickets e pior em escrever qualquer outra coisa, e isso só aparece se o conjunto de avaliação incluir tarefas que não são a sua.
Formato de conversa errado. Cada família de modelo tem seus marcadores de papel. Treinar com um formato e servir com outro produz um modelo que parece pior do que é, e o sintoma não se parece com um erro de configuração.
Quanto custa uma rodada
Ordem de grandeza, para dimensionar o projeto, não cotação.
Computação é a menor parte. Quinhentos exemplos de mil tokens dão meio milhão de tokens por época. Nos tamanhos usuais, entre 7B e 14B, com adaptadores, isso são minutos a poucas horas de uma GPU alugada — dezenas de dólares em julho de 2026, contando as tentativas erradas.
O conjunto é onde o orçamento vai. Quinhentos exemplos revisados por alguém que sabe qual é a saída certa levam de uma a três semanas de trabalho de uma pessoa que raramente tem essas semanas livres. Se a saída exigir julgamento, como uma resposta a cliente, o número dobra, porque cada exemplo precisa de um segundo par de olhos.
A avaliação custa mais do que parece porque é refeita a cada rodada, e as rodadas costumam ser cinco ou seis antes de a configuração fechar.
A conta prática: o treino cabe no cartão de crédito de qualquer time, e o resto não cabe na agenda da maioria deles. É por isso que projetos de SFT morrem por falta de gente, não por falta de GPU.
Como montar a primeira rodada
- Escreva 30 casos de avaliação antes de qualquer coisa, com a saída que você aceitaria. Sem eles a rodada não tem como ser julgada.
- Rode o modelo base com o melhor prompt possível e guarde o resultado. É contra esse número que tudo será comparado.
- Monte de 200 a 500 exemplos revisados um a um. Quem revisa precisa saber qual é a resposta certa. O conjunto é o trabalho, não o treino.
- Padronize a saída antes de treinar. Se metade dos exemplos responde em parágrafo e metade em lista, o modelo aprende a escolher no cara ou coroa.
- Use o formato de conversa do modelo base, o mesmo que você vai usar em produção.
- Treine com adaptadores primeiro, uma a três épocas. Se um adaptador não move o ponteiro, o ajuste completo raramente move.
- Meça dentro e fora do domínio. O segundo conjunto é o que revela o preço escondido do primeiro.
O passo 4 é o que mais separa uma rodada que funciona de uma que não funciona, e é o mais entediante. Padronizar quinhentas saídas leva dias e não parece trabalho de aprendizado de máquina. É o trabalho de aprendizado de máquina.
Footnotes
-
Wei et al. (2021) ajustaram um modelo de 137B sobre mais de 60 tarefas expressas em instrução e mediram desempenho em tipos de tarefa retidos, superando o GPT-3 de 175B em zero-shot em 20 de 25 tarefas. ↩
-
Sanh et al. (2021) converteram datasets supervisionados em prompts com redações variadas e mostraram generalização zero-shot para tarefas completamente retidas, batendo modelos de até 16 vezes o tamanho. ↩
-
Chung et al. (2022) escalaram o instruction tuning para 1,8 mil tarefas e mediram três eixos separados — número de tarefas, tamanho do modelo e dados de cadeia de pensamento — com ganho de 9,4 pontos na média em 540B. ↩
-
Zhou et al. (2023) ajustaram um modelo de 65B com mil exemplos curados e sem aprendizado por reforço, argumentando que o ajuste ensina formato mais do que conhecimento. ↩
-
Shi et al. (2024) aplicaram a perda também sobre a instrução em 21 benchmarks, com ganho concentrado em conjuntos de instrução longa e resposta curta, ou de poucos exemplos, e atribuem o efeito a menos sobreajuste. ↩
-
Ouyang et al. (2022) partiram de demonstrações escritas por anotadores e depois treinaram com rankings entre saídas; o modelo de 1,3B resultante teve saídas preferidas às do GPT-3 de 175B na avaliação humana deles. ↩
Perguntas frequentes
- O que é SFT em poucas palavras?
- Supervised fine-tuning é continuar o treino de um modelo pronto sobre pares de prompt e resposta ideal. O objetivo continua sendo prever o próximo token, mas a perda é medida só sobre os tokens da resposta. É o formato mais comum de fine-tuning e a etapa que transforma um modelo base em um que segue instrução.
- Qual a diferença entre SFT e instruction tuning?
- Instruction tuning é um caso de SFT: o conjunto é feito de instruções variadas com a resposta certa, e o objetivo é generalizar para tarefas que não estavam no treino. SFT é o método, instruction tuning é o que você faz com ele. Um conjunto de mil tickets classificados também é SFT, mas não é instruction tuning.
- Como o modelo aprende com pares pergunta e resposta?
- Ele lê o par inteiro e tenta prever cada token da resposta a partir de tudo que veio antes. Cada token errado gera um erro, o erro vira gradiente e os pesos se movem. Os tokens do prompt são mascarados: entram como contexto para a previsão, mas não contam como alvo a ser acertado.
- Quantos exemplos preciso para uma rodada de SFT?
- Para ajustar comportamento, algumas centenas já mostram sinal e mil já foram suficientes num caso famoso de 2023, com um modelo de 65B. Para ensinar uma tarefa difícil de verdade, a escala sobe para dezenas ou centenas de milhares. Exemplo revisado um a um vale mais que exemplo raspado em volume.
- SFT ensina conhecimento novo ao modelo?
- Mal e com efeito colateral. O que o SFT ensina bem é formato, tom e a decisão padrão diante de uma entrada. Fato que muda com o tempo entra devagar no treino e aumenta a alucinação quando entra. Para conhecimento, recuperar o documento e colocá-lo no prompt funciona melhor e atualiza sem treino.
- Preciso mascarar o prompt na hora de calcular a perda?
- Mascarar é o padrão e funciona na maioria dos casos. Um estudo de 2024 mostrou que calcular a perda também sobre a instrução ajuda em dois cenários específicos: instrução longa com resposta curta, e conjunto pequeno. Os autores atribuem o ganho a menos sobreajuste ao próprio conjunto de instruções.
Referências
- Wei, J. et al.. Finetuned Language Models Are Zero-Shot Learners (2021)arXiv:2109.01652
- Sanh, V. et al.. Multitask Prompted Training Enables Zero-Shot Task Generalization (2021)arXiv:2110.08207
- Ouyang, L. et al.. Training language models to follow instructions with human feedback (2022)arXiv:2203.02155
- Chung, H. W. et al.. Scaling Instruction-Finetuned Language Models (2022)arXiv:2210.11416
- Zhou, C. et al.. LIMA: Less Is More for Alignment (2023)arXiv:2305.11206
- Shi, Z. et al.. Instruction Tuning With Loss Over Instructions (2024)arXiv:2405.14394