antonio leandro

ia generativa

Improving Language Understanding by Generative Pre-Training

paper · núcleo · Alec Radford, Karthik Narasimhan, Tim Salimans, Ilya Sutskever ·

a tese

treinar um transformer decoder para prever a próxima palavra em livros e depois ajustar por três épocas bate arquiteturas desenhadas à mão para cada tarefa — e o que muda por tarefa é o formato do input, não o modelo

o que fica

  1. O ganho não vem só do tamanho do corpus: os autores escolheram o BooksCorpus por ter trechos longos de texto contíguo e descartaram um corpus de tamanho parecido que estava embaralhado no nível da frase.
  2. Sem o pré-treino, a mesma arquitetura cai de 74,7 para 59,9 na média das oito tarefas do ablation — o transformer sozinho não explica o resultado.
  3. Trocar o transformer por uma LSTM no mesmo pipeline custa 5,6 pontos de média: o pré-treino ajuda, mas a arquitetura decide quanto dele sobrevive à transferência.
  4. O objetivo auxiliar de language model durante o fine-tuning ajuda datasets grandes e atrapalha os pequenos; na média das tarefas, a versão sem ele ficou à frente da versão completa.
  5. Tarefa estruturada vira uma sequência única com delimitadores, e por isso os únicos parâmetros novos por tarefa são a camada linear de saída e os embeddings dos delimitadores.
  6. Cada camada transferida melhora o resultado, não só os embeddings: a transferência completa vale até 9% no MultiNLI contra transferir menos camadas.

o problema

Em 2018 a receita para uma tarefa de linguagem era: junte dados anotados, desenhe uma arquitetura para aquela tarefa, treine do zero. Dado anotado é caro e escasso; texto cru é abundante. A única ponte que funcionava de verdade entre os dois era o word embedding pré-treinado, que transfere informação no nível da palavra e para aí. Tudo acima disso — a relação entre duas frases, o que um documento responde sobre uma pergunta — o modelo tinha que aprender de novo, em cada tarefa, com os poucos exemplos rotulados que existissem.

O paper enuncia duas perguntas em aberto. A primeira: qual objetivo não supervisionado produz representação que transfere? Language modeling, tradução automática e coerência de discurso tinham cada um vencido em tarefas diferentes, sem consenso. A segunda: como transferir? As respostas da época envolviam arquitetura específica por tarefa empilhada sobre a representação pré-treinada, esquemas de treino elaborados e objetivos auxiliares. Cada uma dessas saídas reintroduz parâmetros novos e trabalho manual por tarefa — exatamente o que o pré-treino deveria eliminar.

a ideia

Duas fases e um modelo só. Primeiro, treine um transformer decoder para prever o próximo token num corpus grande de texto sem rótulo. Depois, para cada tarefa, pegue esse mesmo modelo, ponha uma camada linear sobre a última ativação e ajuste os pesos inteiros com o objetivo supervisionado. Nenhuma arquitetura nova.

O que faz isso caber é o segundo movimento: quando a tarefa tem input estruturado — par premissa/hipótese, trio documento/pergunta/resposta —, quem se dobra é o input, não o modelo. O par vira uma sequência contígua com um delimitador no meio, do jeito que o modelo já sabe ler. A tarefa é reescrita na língua do pré-treino.

como funciona

O modelo é um transformer decoder de 12 camadas com self-attention mascarada, estados de 768 dimensões, 12 attention heads e feed-forward interno de 3.072. GELU como ativação, position embeddings aprendidos em vez dos senoidais, vocabulário BPE com 40.000 merges. O forward é curto de descrever:

h0 = U·We + Wp
hl = transformer_block(h_{l-1})    # 12 vezes
P(u) = softmax(hn · Weᵀ)           # pré-treino: prever o próximo token
P(y) = softmax(hm_l · Wy)          # fine-tuning: rótulo a partir da última ativação

A matriz de saída do pré-treino é a própria matriz de embedding transposta. Pré-treino: BooksCorpus, mais de 7.000 livros, 100 épocas, minibatches de 64 sequências contíguas de 512 tokens, Adam com learning rate máximo de 2,5e-4, aquecimento linear em 2.000 updates e recozimento por cosseno. Perplexidade final de 18,4 no corpus. Fine-tuning: learning rate 6,25e-5, batch 32, três épocas bastam na maioria dos casos, e o objetivo é a soma do supervisionado com o de language model ponderado por λ = 0,5.

As transformações de input seguem um padrão de travessia. Entailment: premissa e hipótese concatenadas com um delimitador $. Similaridade: como não há ordem natural entre as duas frases, o modelo processa as duas ordens de forma independente e soma as representações elemento a elemento antes da camada linear. Question answering e senso comum: monta-se [documento; pergunta; $; resposta_k] para cada alternativa, processa cada sequência separadamente e normaliza com softmax sobre as alternativas. Toda transformação adiciona tokens de início e fim inicializados aleatoriamente.

o que isso custou

O modelo perde onde o dataset é pequeno. No RTE, com 2.490 exemplos de treino, ele faz 56,0% contra 61,7% de um biLSTM treinado em múltiplas tarefas. Os autores admitem que provavelmente se beneficiariam de treino multitarefa e que não exploraram isso.

O objetivo auxiliar de language model no fine-tuning não é ganho grátis: ajuda nas tarefas de NLI e no QQP, atrapalha nos datasets menores, e na média das tarefas do ablation a versão sem ele ficou ligeiramente à frente da versão completa. É um botão a calibrar por tarefa, não uma melhoria universal.

O corpus tem uma exigência que não é de tamanho. O BooksCorpus foi escolhido por conter longos trechos contíguos; o 1B Word Benchmark, de tamanho parecido, está embaralhado no nível da frase, o que destrói a estrutura de longo alcance que o modelo deveria aprender a explorar. Trocar de corpus não é trocar de volume.

E a transferência continua supervisionada: cada tarefa exige seus rótulos, sua rodada de ajuste e sua cópia de pesos. As avaliações sem fine-tuning existem no paper apenas como heurísticas de análise — pontuar por log-probabilidade média de token, restringir a saída a duas palavras —, construídas para investigar o que o pré-treino aprendeu, não como forma de uso.

onde isso aparece hoje

Este é o primeiro modelo da linha GPT, e a receita — transformer decoder-only, pré-treino por previsão do próximo token, adaptação depois — virou a base dela. O BERT chegou logo em seguida com a aposta oposta na direção do contexto, e a discussão entre pré-treino unidirecional e bidirecional se organizou em torno desses dois pontos.

A parte que envelheceu de forma mais interessante é a das transformações de input. Achatar uma tarefa estruturada numa sequência de tokens com delimitadores, em vez de construir uma cabeça específica para ela, é o antepassado direto de descrever tarefa dentro do prompt. E a seção de análise, que mostra as heurísticas sem fine-tuning melhorando de forma estável ao longo dos updates de pré-treino, deixa esse fio à vista antes de alguém puxá-lo.

lido na íntegra por pipeline de llm, revisado por antonio leandro antes de publicar ·