O que está dentro de uma LLM?

Cover Image for O que está dentro de uma LLM?
Wellerson
Wellerson

O que está dentro de uma LLM?

Uma pergunta simples que me levou a entender como a inteligência artificial realmente funciona


Estava usando o Cursor outro dia quando parei no meio de uma linha de código.

Não porque travei. Mas porque o editor tinha acabado de sugerir exatamente o que eu ia digitar. Antes mesmo de eu digitar. E aquilo ficou me incomodando. Não da forma ruim. Da forma que fica quando você percebe que está usando algo que não entende de verdade.

Eu sabia o que uma LLM faz. Mas não sabia o que ela é.

Existe uma diferença enorme entre essas duas coisas.


A matéria-prima: toda a escrita humana em um único lugar

A primeira pergunta que surge quando você decide entender esse processo é quase cômica de tão óbvia: de onde vem o conhecimento de um modelo?

A resposta é: da internet. De livros. De fóruns. De documentações. De conversas. De tudo que humanos escreveram e publicaram ao longo de décadas.

Na prática, isso vira um arquivo de texto imenso: terabytes de linguagem humana, bruta, com ruído, com contradição, com genialidade e com besteira, tudo junto. A curadoria e limpeza desse material já é um trabalho colossal antes de qualquer treinamento começar.

Mas o que me impressionou quando entendi isso não foi a escala. Foi a simplicidade do conceito. No fundo, o ponto de partida de uma das tecnologias mais sofisticadas do nosso tempo é: texto. Igual o que você está lendo agora.


O momento em que o texto vira número

Tem um passo no processo que, para mim, captura melhor do que qualquer outro a distância entre como humanos e máquinas entendem o mundo.

Antes de qualquer treinamento acontecer, todo esse texto precisa ser convertido em algo que o modelo consiga processar. E modelos não leem palavras. Leem números.

Esse processo se chama tokenização.

O algoritmo mais comum, chamado BPE (Byte Pair Encoding), analisa o texto inteiro e identifica quais fragmentos de texto se repetem com mais frequência. Cada fragmento frequente recebe um ID único. O fragmento "ção", por exemplo, aparece em milhares de palavras em português — então vira um token só. A palavra "olá" pode virar um token inteiro. Um espaço em branco pode ser outro.

Se você escrever "Olá, tudo bem?", o tokenizador vai quebrar isso em fragmentos e atribuir um número a cada um. Não palavra por palavra — fragmento por fragmento.

A tokenização é a fronteira entre o mundo humano e o mundo da máquina. Depois desse passo, o modelo nunca mais "vê" texto. Só vê sequências de IDs inteiros.

O vocabulário que emerge desse processo tem em torno de 100 mil tokens únicos. É com esses 100 mil "tijolos" que todo o conhecimento do modelo vai ser construído.

Você pode ver isso acontecendo em tempo real em tiktokenizer.vercel.app — cole qualquer frase e observe como ela se dissolve em fragmentos e números.


Meses aprendendo a adivinhar a próxima palavra

Aqui chegamos na parte que mais me surpreendeu quando entendi de verdade.

O treinamento de uma LLM (o que chamamos de pretraining) é, em essência, um exercício de previsão. O modelo recebe uma sequência de tokens e tenta adivinhar qual vem a seguir. Simples assim.

O componente central desse processo é o Transformer: uma arquitetura matemática que recebe os tokens, processa as relações entre eles, e devolve não uma resposta, mas uma distribuição de probabilidade. Para cada um dos 100 mil tokens do vocabulário, ele atribui uma chance de ser o próximo. O token "?" pode ter 8%. O token "bem" pode ter 10%. O token "avião" pode ter 0,001%.

Quando o modelo erra (e no começo ele erra muito), o erro é medido por uma função chamada loss (geralmente cross-entropy, que compara a distribuição prevista com a resposta correta). Esse valor de erro é então propagado de volta pela rede num processo chamado backpropagation, que ajusta os pesos internos do modelo para que ele erre menos na próxima vez. O ajuste é pequeno a cada vez, mas é repetido bilhões de vezes, sobre bilhões de sequências de texto.

Um detalhe importante nessa equação é o que chamamos de janela de contexto: a quantidade máxima de tokens que o modelo consegue considerar de uma vez. Durante o treino, ela define o tamanho das sequências usadas para aprender. Durante o uso (quando você conversa com o modelo), ela define o quanto da conversa ele consegue "enxergar" ao gerar uma resposta. Se a janela é de 4.096 tokens e sua conversa ultrapassou esse limite, o que veio antes simplesmente não existe para ele.

Esse processo todo roda em supercomputadores por meses. É caro a um nível que a maioria das empresas jamais vai conseguir bancar. É por isso que os modelos de fronteira são domínio quase exclusivo de big techs. Se quiser experimentar GPUs de alto desempenho sem montar sua própria infraestrutura, plataformas como hyperbolic.ai oferecem acesso sob demanda.


O paradoxo do modelo base

Depois de tudo isso (meses de treino, bilhões de ajustes, supercomputadores trabalhando ininterruptamente), você tem o que chamamos de modelo base.

E aí vem o paradoxo.

Esse modelo sabe uma quantidade absurda de coisas. Ele leu mais do que qualquer humano poderia ler em várias vidas. Ele conhece padrões de linguagem, estruturas de raciocínio, fatos históricos, código, poesia.

Mas se você perguntar "Como eu faço deploy de uma aplicação Node.js?", ele pode responder com outra pergunta. Ou continuar o texto em vez de te responder. Ou gerar algo completamente fora de contexto.

É como encontrar alguém que leu todos os livros do mundo, mas nunca teve uma conversa. O conhecimento está lá. Mas o saber se comportar em um diálogo, não.


Ensinando a ser um assistente

A última etapa (pelo menos nessa jornada que estou descrevendo) é o Supervised Fine-tuning.

Aqui, a empresa ou o pesquisador constrói um conjunto de dados novo, menor e muito mais cuidadoso: conversas. Uma pergunta de um humano, uma resposta ideal de um assistente. Novos tokens especiais são introduzidos para demarcar esses papéis: onde começa a pergunta, onde termina a resposta.

O modelo é treinado novamente sobre esse material. Não para aprender novos fatos — o conhecimento já está lá. Mas para aprender a forma. Para entender que quando alguém faz uma pergunta, o papel dele é responder. Para assumir a postura de assistente.

É a diferença entre saber e saber se comportar.

E essa diferença, curiosamente, é o que separa um modelo impressionante de um modelo útil.


Quando voltei ao Cursor depois de entender tudo isso, algo havia mudado.

Não na ferramenta. Em mim.

A sugestão de código continuava aparecendo na tela. Mas agora eu sabia o que estava por trás daquele texto. Bilhões de fragmentos de linguagem humana. Bilhões de previsões erradas e corrigidas. Meses de supercomputadores aprendendo, aos poucos, que depois de "const resultado =" provavelmente vem algo que faz sentido para um desenvolvedor.

O modelo não pensa. Ele aprendeu a prever tão bem que parece que pensa.

E isso, por si só, já é uma coisa fascinante de entender.

O que mais te surpreendeu nesse processo? A escala do pretraining ou o fato de que o fine-tuning é o que transforma tudo isso em algo conversável?