Praticamente o mesmo tamanho, menos da metade da perplexidade. Quatro decisões explicam a diferença.
O openai-gpt (GPT-1, junho de 2018) tem 117 milhões de parâmetros. O gpt2 small (fevereiro de 2019) tem 124 milhões. Seis por cento de diferença — praticamente nada.
E no entanto, medido no lab 08 sobre o mesmo parágrafo:
Isso é raro e valioso. Muitos avanços em modelos de linguagem vieram junto com aumento de escala, o que dificulta separar o efeito de cada mudança. Aqui a escala está essencialmente controlada, e podemos atribuir o ganho a decisões de projeto específicas. São quatro.
| GPT-1 | GPT-2 | |
|---|---|---|
| Corpus | BooksCorpus | WebText |
| Conteúdo | ~7 000 livros de ficção não publicados | ~8 milhões de páginas web |
| Tamanho | ~1 GB | ~40 GB |
| Curadoria | livros inteiros | links do Reddit com ≥3 karma |
| Diversidade | baixa — quase só narrativa literária | alta — notícias, fóruns, código, documentação, receitas |
Quarenta vezes mais dados, e — mais importante — dados muito mais variados. O BooksCorpus ensina a escrever prosa de ficção. O WebText ensina a escrever prosa de ficção, notícia, tutorial, comentário de fórum, README e código.
Isso aparece de forma gritante no laboratório. Peça código ao GPT-1 e ele devolve narrativa. Ele nunca viu uma chave de bloco na vida.
Como coletar 40 GB de texto de qualidade da internet sem contratar avaliadores? A OpenAI usou uma pista existente: se um humano achou o link bom o bastante para postar, e outros humanos votaram nele, provavelmente não é lixo. Três votos de karma como filtro de qualidade — barato, escalável e surpreendentemente eficaz.
Vale notar o viés que isso embute: o WebText é, por construção, o retrato dos interesses dos usuários do Reddit em 2017. Majoritariamente em inglês, majoritariamente americano, com temas e vocabulário daquela comunidade. Quando você observar o GPT-2 sendo ruim em português (lab 08: PPL 413), lembre que a causa começa aqui.
| GPT-1 | GPT-2 | |
|---|---|---|
| Algoritmo | BPE sobre caracteres, com pré-processamento por spaCy e ftfy | BPE sobre bytes, sem pré-processamento |
| Vocabulário | 40 478 | 50 257 |
| Caixa | tudo em minúsculo | preservada |
| Desconhecidos | token <unk>: informação perdida | impossível — tudo é byte |
| Pontuação | separada por espaços | preservada como estava |
O GPT-1 lowercaseia tudo. Isso descarta informação real: em inglês, a maiúscula distingue nome próprio de substantivo comum (Bill vs bill, Apple vs apple). E, na saída, o modelo nunca consegue escrever um nome próprio corretamente.
Você vê isso de forma imediata no teste do laboratório. Mesmo prompt, o GPT-1 devolve:
gpt1: "the capital of france is a great city , and the city
is a great city . it is"
gpt2: "The capital of France is the capital of the French
Republic, and the capital of the"
Repare em três coisas na saída do GPT-1: france em minúscula, o espaço antes da vírgula (resíduo do pré-processamento que separava pontuação), e a estrutura de prosa vaga de romance — o eco do BooksCorpus.
Esta você já conhece da apostila 05. O GPT-1 usa Post-LN (LN(x + f(x))); o GPT-2 usa Pre-LN (x + f(LN(x))), e acrescenta o ln_f final.
No GPT-2 small, com 12 camadas, o ganho de qualidade é modesto. O ganho decisivo é de viabilidade: no lab 05 você mede que, numa pilha de 40 camadas, o Pre-LN entrega um gradiente um milhão e meio de vezes maior na primeira camada.
Sem essa mudança, o gpt2-xl com 48 camadas simplesmente não existiria — não em 2019, não sem uma batalha longa contra instabilidade numérica. Post-LN funciona bem até ~20 camadas e depois vira um problema.
Esta é a mudança mais conceitual, e talvez a mais influente das quatro.
O GPT-1 foi apresentado como um método de duas etapas: pré-treinar num corpus grande, depois fine-tunar com dados rotulados para cada tarefa específica. O artigo se chama "Improving Language Understanding by Generative Pre-Training" — o pré-treino é o meio; o fine-tuning é o fim.
O GPT-2 propôs algo mais radical, já no título: "Language Models are Unsupervised Multitask Learners". A tese: se o corpus for grande e variado o bastante, o modelo aprende as tarefas sozinho, porque exemplos de tradução, sumarização e resposta a perguntas já estão naturalmente presentes no texto da internet. Nenhum fine-tuning necessário — basta pedir do jeito certo.
Foi aqui. A ideia de que se especifica a tarefa dentro do texto de entrada, em vez de treinar um modelo separado para ela, nasce no artigo do GPT-2. Quando você escreve "Traduza para o francês:" no começo de um prompt, você está aplicando diretamente essa tese.
No GPT-2 a ideia funcionava mal (você mediu no lab 06: o few-shot ajuda, mas o modelo é pequeno demais para ser confiável). No GPT-3, com 175 bilhões de parâmetros, funcionou tão bem que tornou o fine-tuning dispensável para a maioria das tarefas — e mudou a indústria.
| GPT-1 (2018) | GPT-2 (2019) | |
|---|---|---|
| Parâmetros | 117 M | 124 M — 1 558 M |
| Camadas | 12 | 12 — 48 |
| dmodel | 768 | 768 — 1600 |
| Contexto | 512 | 1024 |
| Vocabulário | 40 478 | 50 257 |
| Tokenizador | BPE de caractere, lowercase | BPE de byte, caixa preservada |
| Corpus | BooksCorpus, 1 GB | WebText, 40 GB |
| LayerNorm | Post-LN | Pre-LN + ln_f |
| Ativação | GELU | GELU |
| Atenção | causal, multi-head | causal, multi-head |
| Weight tying | sim | sim |
| Proposta de uso | pré-treino + fine-tuning por tarefa | zero-shot / few-shot no prompt |
| PPL (nosso teste) | 46,07 | 21,70 |
.venv\Scripts\python.exe lab\09_gpt1_vs_gpt2.py
<unk> em ação: dá ao GPT-1 um emoji e uma palavra em japonês, e mostra a informação sendo perdida.<unk> e o GPT-2 não. Para um corpus só em inglês bem comportado, isso importa muito? Onde a diferença realmente aparece?As fontes primárias dos conceitos deste capítulo. Os números do texto foram medidos no laboratório; as ideias vêm daqui.
Os termos técnicos têm aqui o sentido de aprendizado de máquina. O glossário do curso mostra esse sentido ao lado dos outros que as mesmas palavras têm na TI.
Fechamos o galho decoder: GPT-1 → GPT-2 small → medium → large → XL.
A apostila 10 atravessa para o outro galho da árvore, e tudo o que você aprendeu vai ser reusado — com uma linha invertida.