antonio leandro

ia generativa

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

paper · Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova ·

a tese

não é preciso escolher um lado: mascarar 15% do texto e prever o que sumiu treina um transformer bidirecional em todas as camadas, e daí uma única camada de saída basta para onze tarefas

o que fica

  1. Um modelo de linguagem bidirecional comum não treina: em rede profunda, cada token enxerga a si mesmo por caminhos indiretos e a predição vira trivial. Mascarar o alvo é o que contorna esse curto-circuito.
  2. O MLM só produz sinal em 15% dos tokens por batch e converge mais devagar que um modelo da esquerda para a direita, mas passa a ganhar em acurácia quase imediatamente.
  3. BERT BASE e o GPT da época tinham praticamente a mesma arquitetura e o mesmo tamanho; a diferença relevante era a máscara de atenção, e a ablação mostra que é dali que vem a maior parte do ganho.
  4. Substituir o alvo por [MASK] em 100% das vezes quase não muda o resultado do fine-tuning, mas degrada o uso de BERT como extrator de features congelado — daí a mistura 80/10/10.
  5. Aumentar o modelo continuou melhorando tarefas minúsculas, como MRPC com 3.600 exemplos de treino, o que contrariava os resultados anteriores de métodos feature-based.
  6. O pré-treino levou quatro dias de TPU, mas cada uma das onze tarefas é reproduzida com no máximo uma hora de fine-tuning a partir do mesmo checkpoint.

o problema

Em 2018 já estava claro que pré-treinar em texto não rotulado ajudava, mas ninguém sabia colher isso direito. Havia dois caminhos. O feature-based, do ELMo: você roda o modelo pré-treinado, extrai vetores e alimenta uma arquitetura desenhada à mão para cada tarefa — uma para NER, outra para QA, outra para inferência. E o fine-tuning, do GPT: quase nenhum parâmetro novo, treina tudo de novo na tarefa final. Os dois compartilhavam o mesmo objetivo de pré-treino, um modelo de linguagem unidirecional.

E aí está o gargalo. Prever a próxima palavra obriga o token a olhar só para trás. Para classificar uma frase inteira isso já é subótimo; para tarefas em nível de token, como marcar o trecho de um parágrafo que responde a uma pergunta, é destrutivo — a metade direita do contexto simplesmente não entra na representação. O ELMo tentou remediar concatenando um modelo esquerda-para-direita com um direita-para-esquerda, mas eles são treinados independentemente e só se encontram no fim: a bidirecionalidade é rasa. A saída óbvia, treinar um transformer que olha para os dois lados em todas as camadas, não funciona com o objetivo padrão. Numa rede profunda, cada token acabaria vendo a si mesmo através das camadas anteriores, e prever a palavra alvo vira cópia.

a ideia

Troque a tarefa. Em vez de prever a próxima palavra, apague palavras no meio do texto e peça o que estava ali — o teste de Cloze, de 1953. Com o alvo removido da entrada, o modelo pode condicionar em tudo que sobrou, à esquerda e à direita, sem trapaça. Você perde o modelo de linguagem no sentido estrito, que gera texto, e ganha um encoder cujas representações são bidirecionais desde a primeira camada.

O segundo movimento é de engenharia, não de teoria: a mesma rede serve para tudo. Pré-treino e fine-tuning usam a arquitetura idêntica; para cada tarefa nova você pluga uma camada de saída e treina tudo de ponta a ponta.

como funciona

O modelo é o encoder do Transformer, sem alterações. Duas configurações: BASE com 12 camadas, hidden 768, 12 attention heads e 110 milhões de parâmetros; LARGE com 24 camadas, hidden 1024, 16 heads e 340 milhões. Tokenização WordPiece com vocabulário de 30.000.

A entrada é sempre uma sequência, que pode empacotar dois trechos de texto. O primeiro token é sempre [CLS], cujo estado final vira a representação agregada da sequência; [SEP] separa os trechos; e cada token recebe um embedding de segmento indicando se pertence a A ou a B. Token, segmento e posição são somados.

O pré-treino tem dois objetivos ao mesmo tempo. No masked LM, 15% das posições são sorteadas; dessas, 80% viram [MASK], 10% viram um token aleatório e 10% ficam intactas. O truque existe porque [MASK] nunca aparece no fine-tuning, e o encoder não pode saber quais posições serão cobradas — precisa manter representação de todas. No next sentence prediction, metade dos exemplos tem B como continuação real de A e metade tem uma frase aleatória; o modelo classifica isso a partir do [CLS] e acerta 97% a 98%.

Corpus: BooksCorpus com 800 milhões de palavras mais a Wikipédia em inglês com 2,5 bilhões — documentos inteiros, porque frases embaralhadas não dariam contexto longo. Um milhão de steps, batch de 128.000 tokens, Adam com learning rate 1e-4 e warmup de 10.000 steps, quatro dias de TPU. Os primeiros 90% dos steps usam sequência de 128 tokens; só os últimos 10% vão a 512, porque atenção é quadrática no comprimento.

No fine-tuning, classificação sai do [CLS]. Em SQuAD, os únicos parâmetros novos são dois vetores, S e E: o produto escalar de cada token com S dá a probabilidade de ser o início da resposta, com E o fim, e o span vencedor é o de maior soma. Batch 16 ou 32, learning rate entre 2e-5 e 5e-5, 2 a 4 épocas.

Os números: GLUE de 80,5 (7,7 pontos acima do anterior), MNLI 86,7, SQuAD 1.1 test F1 93,2, SQuAD 2.0 test F1 83,1.

o que isso custou

O [MASK] é uma gambiarra assumida: cria um descompasso entre pré-treino e fine-tuning que a mistura 80/10/10 apenas atenua. A ablação mostra que o fine-tuning é surpreendentemente robusto a variações da estratégia de máscara, mas o uso feature-based, com pesos congelados, sente: mascarar 100% das vezes derruba o NER dev de 94,9 para 94,0.

Só 15% dos tokens geram gradiente por batch, então o MLM converge mais devagar que um modelo esquerda-para-direita, e o pré-treino longo não é opcional — ir de 500 mil para 1 milhão de steps ainda rende quase 1% em MNLI.

O fine-tuning do LARGE se mostrou instável em datasets pequenos, e os autores recorreram a random restarts, escolhendo o melhor no dev. Cada tarefa produz um modelo separado; o que se compartilha é o checkpoint inicial. E o objetivo, por construção, não gera texto: o próprio paper reserva a variante causal para isso.

onde isso aparece hoje

O modelo e o código saíram públicos junto com o paper, e é essa combinação — pesos abertos mais uma receita de fine-tuning que roda em uma hora — que fez o padrão pegar. Por alguns anos, a resposta default para qualquer tarefa de classificação de texto passou a ser pegar um checkpoint pré-treinado e colar uma camada linear em cima.

A família de encoders que veio depois nasceu de discutir as escolhas daqui: RoBERTa manteve o MLM e descartou o next sentence prediction, e a linha de destilação encolheu o modelo para caber em produção. A geração de texto seguiu pelo outro ramo, o causal, e é ele que virou base dos LLMs. Mas em busca semântica, reranking e embedding de sentença, encoders bidirecionais no molde do BERT continuam sendo a peça barata que ninguém troca por um modelo autoregressivo sem um bom motivo.

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