Aula 3, Fine-tuning e instrução

Esta aula trata do que transforma um modelo base, que apenas completa texto, em um assistente que segue instruções. Vamos entender o fine-tuning e o ajuste por instrução, e no projeto do módulo comparar, lado a lado, as respostas de um modelo base e de um modelo de instrução.

O pré-treino entrega um modelo base, que sabe muito sobre a língua e o mundo, mas que tem um comportamento curioso, ele só sabe continuar texto. Se você pergunta a um modelo base qual é a capital da França, ele pode responder com outra pergunta, ou com uma lista de exercícios, porque está apenas prevendo uma continuação plausível, não tentando ajudar. O modelo base é poderoso, mas cru.

Para virar um assistente útil, ele precisa de mais uma etapa de treino. O fine-tuning ajusta um modelo já pré-treinado para uma tarefa ou comportamento específico, usando dados adicionais. O caso mais importante é o ajuste por instrução, em que o modelo aprende, a partir de muitos exemplos de instrução e resposta, a fazer o que é pedido. É essa etapa que separa um modelo que completa texto de um que conversa e ajuda, e nesta aula você vai vê-la em ação comparando os dois.


Objetivos

Ao final desta aula, você deve ser capaz de:

  • Diferenciar um modelo base de um modelo ajustado por instrução.
  • Explicar o que é fine-tuning e por que ele aproveita o pré-treino.
  • Entender o ajuste por instrução e o seu efeito no comportamento.
  • Conhecer, em linhas gerais, o ajuste eficiente com LoRA.

Teoria

O fine-tuning parte de um modelo pré-treinado e continua o treino sobre um conjunto de dados específico, ajustando os pesos para uma tarefa ou estilo. Como o modelo já entende a língua, ele aprende a nova tarefa com muito menos dados do que precisaria do zero, aproveitando tudo o que absorveu no pré-treino. É o mesmo princípio de pré-treinar uma vez e adaptar muitas que vimos no BERT.

O ajuste por instrução é um fine-tuning com um tipo especial de dado, pares de instrução e resposta desejada, cobrindo muitas tarefas. Ao ver milhares de exemplos do tipo resuma este texto seguido de um bom resumo, ou explique este conceito seguido de uma boa explicação, o modelo generaliza e passa a seguir instruções novas. O trabalho do FLAN, de Wei e colegas, mostrou que isso melhora muito a capacidade do modelo de resolver tarefas que nunca viu no ajuste.

flowchart LR
    B[Modelo base<br/>só completa texto] --> I[Ajuste por instrução<br/>pares instrução-resposta]
    I --> A[Modelo de instrução<br/>segue pedidos e ajuda]

Ajustar todos os bilhões de pesos é caro. Por isso surgiram técnicas de ajuste eficiente, como o LoRA, de Hu e colegas, que congela o modelo original e treina apenas um pequeno conjunto de matrizes de baixa dimensão adicionadas a ele. Com uma fração dos parâmetros e da memória, o LoRA alcança resultados próximos aos do fine-tuning completo, o que tornou a adaptação de LLMs acessível mesmo com poucos recursos.

Explicação Intuitiva

Pense no modelo base como um erudito que leu tudo, mas que tem a mania de, quando você fala algo, continuar o seu pensamento em vez de responder. Ele sabe a resposta, só não entendeu que era para respondê-la. O ajuste por instrução é como um treinamento de atendimento, em que esse erudito pratica, milhares de vezes, receber um pedido e atendê-lo, até que isso vire natural.

O LoRA, por sua vez, é como ensinar um truque novo a um especialista sem mandá-lo refazer toda a formação. Em vez de remodelar o cérebro inteiro, você anexa algumas anotações de margem que ajustam o comportamento para a tarefa nova. É barato, rápido, e você pode ter várias dessas anotações, uma para cada tarefa, sem duplicar o modelo inteiro.

Explicação Matemática

No ajuste por instrução, o objetivo continua sendo a previsão da próxima palavra, mas sobre dados formatados como instrução seguida de resposta. O modelo é treinado para maximizar a probabilidade da resposta desejada dado o comando, ou seja, para que a resposta certa seja a continuação mais provável da instrução.

O LoRA muda a forma de ajustar os pesos. Em vez de atualizar uma matriz de pesos $W$ diretamente, ele a mantém congelada e aprende uma correção de baixa dimensão, escrita como o produto de duas matrizes pequenas:

\[W' = W + \Delta W, \qquad \Delta W = A B,\]

em que $A$ e $B$ têm uma dimensão interna $r$ bem pequena. Como só $A$ e $B$ são treinadas, o número de parâmetros ajustados cai drasticamente, mas a expressividade é suficiente para adaptar o comportamento do modelo.

Exemplo Prático

Esta aula tem o projeto que dá sentido a todo o módulo, comparar um modelo base com um modelo de instrução nas mesmas perguntas. Para um conjunto de perguntas educacionais, vamos enviar cada uma aos dois modelos via Ollama e observar a diferença de comportamento. A expectativa é que o modelo base tenda a continuar ou divagar, enquanto o de instrução responda de forma direta e útil.

Como isso depende de ter os dois modelos disponíveis, o notebook lida com a ausência de qualquer um deles de forma graciosa, explicando como obtê-los. O código está no notebook notebooks/modulo-07/03-fine-tuning-instrucao.ipynb, então abra-o ao lado para acompanhar.

Código Comentado

import ollama

# Ajuste os nomes conforme os modelos que você tem no Ollama.
# Um modelo base completa texto; um de instrução segue pedidos.
MODELO_BASE = "llama3.1:text"        # variante base (completa texto)
MODELO_INSTRUCAO = "llama3.1"        # variante de instrução (segue pedidos)

perguntas = [
    "Explique o que é uma função matemática.",
    "Dê um exemplo de uso de derivada no dia a dia.",
]


def responder(modelo, pergunta):
    try:
        r = ollama.chat(model=modelo, messages=[{"role": "user", "content": pergunta}])
        return r["message"]["content"].strip()
    except Exception as erro:
        return f"(modelo {modelo} indisponível: {erro})"


for p in perguntas:
    print("Pergunta:", p)
    print("  Base      :", responder(MODELO_BASE, p)[:200])
    print("  Instrução :", responder(MODELO_INSTRUCAO, p)[:200])
    print()

Ao rodar, com os dois modelos disponíveis, a diferença costuma ser nítida. O modelo de instrução vai direto ao ponto, com uma explicação clara e adequada a um aluno. O modelo base, sem o ajuste por instrução, tende a continuar o texto de forma menos útil, às vezes repetindo a pergunta, listando tópicos soltos ou divagando. É esse contraste que mostra, na prática, o valor do ajuste por instrução, a mesma capacidade bruta, organizada para ajudar.

Exercícios

1) Conceitual: Qual a diferença de comportamento entre um modelo base e um modelo ajustado por instrução diante da mesma pergunta? 2) Conceitual: Por que o fine-tuning precisa de muito menos dados do que treinar um modelo do zero? 3) Prático: Acrescente perguntas de outros tipos, como pedir um resumo ou uma lista, e observe onde a diferença entre os modelos é maior. 4) Prático: Para o modelo de instrução, varie a forma de pedir, mais ou menos detalhada, e veja como a resposta muda. 5) Extensão: Pesquise o LoRA com mais profundidade e explique por que ele é tão usado para adaptar LLMs com pouca memória.

Projeto da Aula e Projeto do Módulo

Este é o projeto que fecha o módulo. A entrega é uma comparação sistemática entre um modelo base e um modelo de instrução, sobre um conjunto de perguntas educacionais. Para cada pergunta, registre as respostas dos dois modelos e classifique a diferença, por exemplo se o modelo de instrução foi mais direto, mais claro ou mais adequado ao aluno.

Considere o projeto pronto quando você tiver uma pequena tabela com as respostas dos dois modelos para algumas perguntas e um parágrafo discutindo o que o ajuste por instrução mudou no comportamento. Se não tiver os dois modelos, descreva o que esperaria de cada um e demonstre ao menos o de instrução. Esse contraste prepara a última aula, sobre o RLHF, que refina ainda mais o alinhamento do modelo com o que as pessoas querem.

Leituras Recomendadas

  • O artigo do FLAN, de Wei e colegas, sobre ajuste por instrução e generalização para tarefas novas.
  • O artigo do LoRA, de Hu e colegas, sobre adaptação eficiente de LLMs.
  • A documentação do Ollama sobre os modelos disponíveis, incluindo variantes base e de instrução.

Referências Científicas

As referências abaixo são reais e estão registradas em references/referencias.bib. As chaves entre parênteses são as do BibTeX.

  • Wei, J., et al. (2022). Finetuned Language Models Are Zero-Shot Learners. ICLR. (wei2022flan)
  • Hu, E. J., et al. (2022). LoRA: Low-Rank Adaptation of Large Language Models. ICLR. (hu2021lora)
  • Ouyang, L., et al. (2022). Training Language Models to Follow Instructions with Human Feedback. NeurIPS. (ouyang2022instructgpt)