- GPT é um transformer pré-treinado com grandes volumes de dados que prevê a distribuição de probabilidade do próximo trecho de texto e gera frases por meio de amostragem repetida
- A mesma estrutura é usada não só para geração de texto, mas também para reconhecimento de fala, voz sintética, geração de imagens e tradução; aqui, o foco está na previsão do próximo token que serve de base para ferramentas como o ChatGPT
- O texto de entrada é dividido em tokens, transformado em vetores de embedding e passa por blocos de atenção e blocos de perceptron multicamada, absorvendo o contexto ao redor
- O GPT-3 armazena 175 bilhões de parâmetros em cerca de 28.000 matrizes, e só embedding e unembedding ocupam aproximadamente 617 milhões de pesos cada
- O vetor final passa pela matriz de unembedding e pelo softmax para se tornar a distribuição de probabilidade do próximo token, e a temperature ajusta o equilíbrio entre previsibilidade e diversidade
O papel básico do GPT e dos transformadores
- As três palavras de GPT significam Generative, Pretrained e Transformer
- Generative significa que ele gera novo texto
- Pretrained significa que ele é treinado com uma enorme quantidade de dados e depois pode ser ajustado com treinamento adicional para tarefas específicas
- Transformer é a arquitetura de rede neural tratada como a invenção central do atual boom de IA
- Transformadores são usados em vários tipos de modelo
- Modelos que recebem áudio como entrada e geram uma transcrição
- Modelos que criam voz sintética a partir de texto
- Ferramentas como DALL-E e Midjourney, que geram imagens a partir de descrições em texto
- Tradução automática, que era o uso original do transformer apresentado pela primeira vez pelo Google em 2017
- A variante tratada aqui é o modelo de previsão do próximo texto, base de ferramentas como o ChatGPT
- Ele recebe texto e, em alguns casos, também imagens ou sons ao redor, e prevê o que vem a seguir
- A saída é uma distribuição de probabilidade sobre vários trechos de texto possíveis para o próximo passo
Como a previsão do próximo token vira geração
- Prever a próxima palavra e gerar texto parecem objetivos diferentes à primeira vista, mas executar repetidamente um modelo preditivo permite criar textos longos
- Insere-se um texto inicial
- O modelo produz uma distribuição de probabilidade para o próximo trecho
- Um elemento é amostrado aleatoriamente dessa distribuição e anexado ao texto
- O novo texto completo é inserido novamente, repetindo o mesmo processo
- Ao executar o GPT-2 dessa forma em um notebook, aparecem casos em que a história não se sustenta bem
- Ao trocar para a API do GPT-3, que amplia a mesma estrutura básica, é possível gerar histórias mais convincentes
- O processo pelo qual o ChatGPT e outros grandes modelos de linguagem constroem respostas palavra por palavra é, em essência, previsão e amostragem iterativas
- Um ponto de partida simples para transformá-lo em chatbot é estruturar a situação de conversa como texto
- Define-se um system prompt dizendo que um AI assistant útil interage com o usuário
- A pergunta do usuário é inserida como o primeiro trecho da conversa
- O modelo passa a prever o que esse assistant diria em seguida
- Para isso funcionar bem, é necessária uma etapa adicional de treinamento
O fluxo de dados dentro do transformer
- A entrada é dividida em pequenas partes chamadas tokens
- Em texto, um token pode ser uma palavra, parte de uma palavra ou uma combinação frequente de caracteres
- Se houver imagem ou som, patches de imagem ou trechos de áudio também podem se tornar tokens
- Cada token é associado a um vetor, que é uma lista de números
- Esse vetor codifica, de algum modo, o significado daquele trecho
- Se vistos como coordenadas em um espaço de alta dimensão, palavras com significado parecido tendem a ficar próximas entre si
- A sequência de vetores passa primeiro por um bloco de atenção
- O bloco de atenção faz os vetores trocarem informação entre si e atualizarem seus valores
- Isso permite tratar significados que mudam conforme o contexto, como em “a machine learning model” e “a fashion model”
- Ele determina quanto uma palavra é relevante para atualizar o significado de outra e de que forma essa atualização ocorre
- Depois, os vetores passam por um bloco chamado perceptron multicamada ou feed-forward layer
- Nessa etapa, os vetores não “conversam” entre si e passam em paralelo pela mesma operação
- Isso é comparado a fazer uma longa lista de perguntas a cada vetor e atualizá-lo conforme as respostas
- A rede inteira repete blocos de atenção e blocos de perceptron multicamada
- Há também etapas de normalização no meio, mas elas são omitidas na visão de alto nível
- No fim, espera-se que o significado central da frase esteja contido no último vetor da sequência
- Esse último vetor é usado para criar uma distribuição de probabilidade sobre todos os possíveis próximos tokens
O formato do deep learning e a escala de parâmetros do GPT-3
- Deep learning é uma abordagem de machine learning em que os dados determinam o comportamento do modelo
- É usado em problemas que exigem intuição e reconhecimento de padrões, como gerar rótulos para imagens ou prever a próxima palavra em um texto
- Em vez de explicitar o procedimento em código, como nos primeiros sistemas de IA, cria-se uma estrutura flexível com parâmetros ajustáveis e esses valores são calibrados com dados de exemplo
- Regressão linear é o exemplo mais simples de machine learning
- Ela trata casos em que entrada e saída são um único número, como área e preço de uma casa
- Encontra a melhor reta com dois parâmetros contínuos: inclinação e intercepto em y
- O GPT-3 não tem dois, mas 175 bilhões de parâmetros
- Modelos tão grandes podem sofrer overfitting nos dados de treino ou até se tornarem impossíveis de treinar
- Modelos de deep learning são tratados como uma família que demonstrou escalar bem ao longo das últimas décadas
- O algoritmo de treinamento em comum nessa família é a retropropagação
- Para que a retropropagação funcione bem em grande escala, o modelo precisa seguir um formato específico
- A entrada deve ser representada como um arranjo de números reais
- Esse arranjo é continuamente transformado em outros arranjos de números reais ao passar por várias camadas
- A camada final de um modelo de texto é uma lista de números que representa a distribuição de probabilidade sobre todos os próximos tokens possíveis
- Os parâmetros do deep learning geralmente são chamados de pesos
- A forma como esses pesos interagem com os dados é por soma ponderada
- Funções não lineares também entram no meio, mas não dependem dos parâmetros
- Na prática, a representação costuma agrupar isso como multiplicações matriz-vetor, em vez de expor explicitamente as somas ponderadas
- Os 175 bilhões de pesos do GPT-3 estão organizados em cerca de 28.000 matrizes
- Essas matrizes se dividem em 8 categorias
- Os pesos do modelo são o “cérebro” obtido durante o treinamento, enquanto os dados processados em uma execução codificam um caso específico, como o texto de entrada
Embedding, tamanho de contexto e distribuição de probabilidade de saída
- A primeira etapa é dividir o texto de entrada em tokens e transformar cada um em vetor
- Na prática, os tokens podem ser partes de palavras ou sinais de pontuação, mas aqui eles são tratados como palavras para facilitar a explicação
- O modelo já possui previamente uma lista de tokens possíveis, chamada vocabulary
- A matriz de embedding determina em que vetor cada token será transformado
- Ela é indicada por W_E
- Os valores começam aleatórios, mas são definidos por aprendizado baseado em dados
- No GPT-3, o vocabulary tem tamanho 50.257 e a dimensão do embedding é 12.288
- Multiplicando esses números, a matriz de embedding tem cerca de 617 milhões de pesos
- Embeddings de palavras podem ser pensados como pontos em um espaço de alta dimensão
- Palavras com significado parecido tendem a ficar em posições próximas
- À medida que o treinamento avança, os embeddings tendem a se organizar de forma que direções no espaço passem a carregar significado
- Aparecem exemplos como a relação entre woman - man e king - queen, e Italy - Germany + Hitler ficando próximo de Mussolini
- No exemplo de queen, também se observa que o embedding real de queen pode ficar mais distante do que um simples king no feminino
- O produto escalar é uma forma de medir o quanto dois vetores estão alinhados
- Se apontam na mesma direção, o resultado é positivo; se são perpendiculares, é 0; se estão em sentidos opostos, é negativo
- A hipótese de que cats - cat representa uma direção de pluralidade pode ser testada com produto escalar
- Os valores para substantivos no plural tendem a sair mais altos do que para os no singular
- Também aparecem casos em que o produto escalar com palavras como one, two e three aumenta
- Os vetores do transformer não servem apenas para representar uma palavra isolada; eles precisam absorver o contexto
- Os vetores gerados no início carregam apenas o significado do token individual vindo da matriz de embedding
- Ao atravessar a rede, o objetivo é que passem a refletir significados mais específicos, incorporando palavras ao redor e até contexto distante
- O GPT-3 tem context size de 2048, ou seja, foi treinado para processar 2048 vetores de uma vez
- Esse tamanho de contexto limita o comprimento de texto que o modelo consegue considerar ao prever a próxima palavra
- Isso ajuda a explicar por que chatbots iniciais como o primeiro ChatGPT pareciam perder o contexto em conversas longas
- A etapa final é construir a distribuição de probabilidade do próximo token
- O último vetor do contexto final é multiplicado pela matriz de unembedding W_U, gerando uma lista de números do tamanho do vocabulary
- Cada componente dessa saída bruta é chamado de logit da previsão da próxima palavra
- W_U tem uma linha correspondente a cada token do vocabulary, e o comprimento de cada linha é igual à dimensão do embedding
- No GPT-3, W_U também adiciona cerca de 617 milhões de parâmetros
- Somando embedding e unembedding, o total acumulado de parâmetros passa um pouco de 1 bilhão
- O softmax transforma uma lista arbitrária de números em uma distribuição de probabilidade válida
- Cada valor deve ficar entre 0 e 1, e a soma total deve ser 1
- Ele eleva e à potência de cada número de entrada para torná-los positivos e depois normaliza dividindo pela soma total
- Valores grandes de entrada recebem probabilidades altas, próximas de 1, e valores pequenos ficam próximos de 0
- Como é mais suave do que simplesmente escolher o maior valor, números grandes e parecidos ainda podem receber probabilidades significativas
- A temperature controla quão “afiada” é a distribuição do softmax
- Quando T é grande, valores menores recebem mais peso e a distribuição fica mais uniforme
- Quando T é pequeno, os valores maiores passam a dominar com mais força
- T=0 é o extremo em que todo o peso vai para o valor máximo
- Com temperature 0, escolhe-se sempre a palavra mais previsível e, no exemplo, isso gera uma história banal no estilo Goldilocks
- Uma temperature mais alta dá chance a palavras menos prováveis, mas no exemplo a história começa de forma mais criativa e rapidamente perde o sentido
- A API não permite definir temperature acima de 2, e isso não é por motivo matemático, mas por uma limitação arbitrária para evitar resultados excessivamente sem sentido
1 comentários
Comentários do Hacker News
Tenho uma dúvida para quem sabe como o GPT funciona. Eu achava que esses modelos escolhiam a próxima palavra mais plausível, mas isso não poderia levar a situações em que, ao escolher “uma das palavras plausíveis”, a lista de previsões para a palavra seguinte fica muito menos plausível?
Se for computacionalmente viável, parece mais vantajoso rodar candidatos com “duas palavras juntas” e, além disso, expandir para 3, 4, n palavras. Fico curioso se existe algo assim.
Depois de ver o vídeo e ler os comentários, entendi que isso é busca em feixe e que é usada junto com a temperatura, que controla esse comportamento.
Temperatura e
top_ksão parâmetros bastante parecidos entre si, introduzidos para refletir o fato de que cada frase que uma pessoa pode dizer é probabilisticamente imprevisível. Aqui há um exemplo de 2021 que reproduz de forma parecida um gráfico antigo da documentação da Hugging Face de 2018/2019: https://lilianweng.github.io/posts/2021-01-02-controllable-t...Talvez uma busca em feixe com comprimentos muito maiores fosse melhor, ou talvez uma abordagem que combine várias técnicas funcione bem, mas não é assim que vejo. A parte de query-key-value dos transformers se concentra, em vários aspectos, em uma soma única dentro da relação com todo o contexto. A arquitetura em si não é ajustada para unidades mais longas desse tipo, e também não há um sistema básico de “dois tokens”.
Se a maioria dos modelos GPT tem de 50 mil a 100 mil tokens, você passaria a olhar para muito mais parâmetros, como 50 mil*50 mil, e também surgiria um problema de esparsidade de dados. Mesmo sem considerar a complexidade do treinamento, muitos elementos dos modelos GPT são tão focados em extrair a riqueza de um único token ou de um único índice de token que é difícil dizer que foram projetados para esse tipo de busca em feixe.
Técnicas como busca em feixe ajudam, mas só conseguem acrescentar uma melhoria da ordem de um fator constante. Ainda assim, apesar dessas limitações, os grandes modelos de linguagem chegaram ao desempenho atual.
Um exemplo é a busca em feixe: https://www.width.ai/post/what-is-beam-search
Essencialmente, é uma forma de manter uma janela de probabilidades dos tokens previstos para melhorar a qualidade da saída final.
Ao fazer chunking de blocos maiores, todo esse processo se mistura e permite fazer a mesma coisa no espaço conceitual. Por exemplo, se você adotar um método de referência como embeddings de frases, isso se torna o bloco de trabalho para comparação.
Não consigo pensar em alguém melhor para ensinar o mecanismo de atenção ao público geral. Parece um sonho realizado.
Se você ainda não viu os capítulos anteriores, recomendo muito.
Se você gostou disso, o canal do Andrej Karpathy também tem vídeos interessantes explicando redes neurais e seu funcionamento interno. O conteúdo é voltado a quem sabe programar.
Eu também mergulhei direto por ignorância e, embora ele recomendasse assistir a vídeos anteriores, achei erroneamente que conseguiria entender enquanto assistia. Aparecem termos que você precisa necessariamente conhecer para tirar bom proveito.
Depois que desisti, preenchi as lacunas com outros estudos e voltei, os vídeos dele passaram a ter muito mais valor. Para quem quer aprender redes neurais, recomendo fortemente aprender com o meu erro.
É um antídoto inacreditavelmente bom em meio ao conteúdo de 1º de abril. Dá vontade de injetar direto na veia.
Relacionado a isso, esta visualização interativa também vale a pena: https://bbycroft.net/llm
Discussão anterior: https://news.ycombinator.com/item?id=38505211
3B1B é um dos melhores educadores de STEM do YouTube.
Dizem que o próximo token é obtido ao amostrar os logits da última coluna depois do unembedding; então isso não seria simplesmente pegar o último token de novo? Ou, em alguma etapa, o tamanho da matriz muda para N+1?
Estou ansioso pelos próximos vídeos. Desta vez, finalmente acho que vou conseguir entender e internalizar como essas coisas funcionam.