chatGPT: o que está debaixo do capô?
O chatGPT está deslumbrando todo mundo. Mas, como ele surgiu? Qual é sua arquitetura? Creio que é importante entendermos o que está dentro de um sistema desses, para termos melhor compreensão do que ele pode ou o que não pode fazer. Juntei aqui uma coletânea de papers que ajudam a compreender melhor o seu funcionamento.
O chatGPT pertence a um grupo de modelos de linguagem, que são um tipo de rede neural que foi treinada em muitos e muitos textos. As redes neurais são softwares inspirados na maneira como os neurônios nos cérebros dos animais sinalizam uns aos outros. Ele faz parte de um ramo da IA, chamado de NLP (Natural Language Processing), que veem se aperfeiçoando ao longo do tempo. Como o texto é composto de sequências de letras e palavras de comprimentos variados, os modelos de linguagem requerem um tipo de rede neural que possa dar sentido a esse tipo de dados. As redes neurais recorrentes (RNN), inventadas na década de 1980, podem lidar com sequências de palavras, mas são lentas para treinar e podem esquecer palavras anteriores em uma sequência.
Em 1997, os cientistas da computação Sepp Hochreiter e Jürgen Schmidhuber criaram as redes LSTM (Long Short-Term Memory), redes neurais recorrentes com componentes especiais que permitiam que os dados passados em uma sequência de entrada fossem retidos por mais tempo. Os LSTMs podiam lidar com strings de texto com várias centenas de palavras, mas suas habilidades linguísticas ainda eram limitadas.
O avanço por trás da geração atual dos grandes modelos de linguagem (LLM) ocorreu quando uma equipe de pesquisadores do Google inventou os transformadores, uma espécie de rede neural que pode rastrear onde cada palavra ou frase aparece em uma sequência. O significado das palavras geralmente depende do significado de outras palavras que vêm antes ou depois. Ao rastrear essas informações contextuais, os transformadores podem lidar com cadeias de texto mais longas e capturar os significados das palavras com mais precisão. Recomendo dar uma lida no paper da proposta sobre os transformers: “Attention Is All You Need”. Quem quiser ir mais a fundo, recomendo dois livros:
O chatGPT é resultado de evolução da série de projetos GPT (Generative Pre Trainer Transformer). A OpenAI lançou primeiro o GPT-1, cujo paper descritivo é “Improving Language Understanding by Generative Pre-Training”.
O GPT-1 é principalmente um conjunto de 12 blocos de decodificadores Transformer colocados um após o outro. Os dados de texto são codificados usando uma codificação de par de bytes (“Neural Machine Translation of Rare Words with Subword Units”) . O posicionamento da palavra é aprendida em vez da típica senoidal estática. O comprimento máximo para tokens consecutivos é 512. Em cima temos uma função softmax adaptada à tarefa de aprendizagem específica, com 117 milhões de parâmetros.
O GPT-2 foi uma evolução do GPT-1, tendo basicamente a mesma arquitetura, mas é um modelo maior com 48 blocos transformadores. A segunda camada de normalização é movida para a primeira posição em um bloco e o último bloco contém uma camada de normalização adicional. Os pesos são inicializados de forma ligeiramente diferente e o tamanho do vocabulário é aumentado. O número de tokens consecutivos é aumentado para 1024 com 1,5 bilhão de parâmetros “Language Models are Unsupervised Multitask Learners”.
O GPT-3 tem a mesma arquitetura do GPT-2, mas o número de blocos aumentou para 96 e o tamanho do contexto (número de tokens consecutivos) aumentou para 2.048. As camadas de atenção alternam-se entre densos e esparsos “Generating Long Sequences with Sparse Transformers “. Passou a ter 175 bilhões de parâmetros (“Language Models are Few-Shot Learners”)
O grande desafio de criar esses sistemas e colocá-los em funcionamento é o treinamento dos algoritmos. Como vemos, o GPT-1, GPT-2 e GPT-3 são muito semelhantes em termos de arquitetura e diferem principalmente nos dados e no tamanho usado para treinamento e no número de blocos transformadores com o número de tokens recebidos.
O GPT-1 foi treinado de maneira auto-supervisionada (aprende a prever a próxima palavra em dados de texto) e ajustado de maneira supervisionada. O GPT-2 é treinado de forma totalmente auto supervisionada, com foco na transferência zero-shot e o GPT-3 é pré-treinado de forma auto supervisionada explorando um pouco mais os ajustes finos. O GPT-1 usou o conjunto de dados BooksCorpus, contendo aproximadamente 7.000 livros totalizando aproximadamente 5 GB de dados: https://huggingface.co/datasets/bookcorpus .
O GPT-2 foi pré-treinado usando o conjunto de dados WebText, que é um conjunto mais diversificado de dados da Internet contendo cerca de 8 milhões de documentos com cerca de 40 GB de dados: https://huggingface.co/datasets/openwebtext .
O GPT-3 usa uma versão expandida do conjunto de dados WebText, dois corpora de livros baseados na Internet que não são divulgados e a Wikipedia em inglês que constituiu 600 GB de dados.
O chatGPT usa a mesma arquitetura do GPT-3, mas aprimorou o processo de ajuste com a técnica RLHF (Reinforcement Learning from Human Feedback). Esse paper descreve a técnica em detalhes: “Illustrating Reinforcement Learning from Human Feedback (RLHF) . Além disso, criou “guard rails” para mitigar o efeito comum nos sistemas LLM, de gerarem textos problemáticos, como racistas e homofóbicos. O artigo “How to make a chatbot that isn’t racist or sexist” mostra as preocupações que surgiram com o uso desses modelos. A OpenAI tentou reduzir a quantidade de desinformação e textos ofensivos que o GPT-3 produzia usando o aprendizado por reforço para treinar uma versão do modelo com testadores humanos. O resultado, InstructGPT, foi melhor em seguir as instruções das pessoas que o usavam — conhecido como “alinhamento” no jargão da IA – e produziu linguagem menos ofensiva, menos desinformação e menos erros em geral. O chatGPT é um upgrade do InstructGPT.
Quem quiser ver o código do GPT-2, da OpenAI, em TensorFlow, acesse https://github.com/openai/gpt-2/blob/master/src/model.py .
Assim, quando abrimos o capô do chatGPT, o que vemos? Ao iniciar o sistema, você insere uma frase ou pergunta. O chatGPT AI examina computacionalmente sua solicitação. As várias relações estatísticas entre as palavras que você inseriu são usadas na rede matemática para tentar determinar qual texto viria a seguir. A partir de uma única linha que você escreve, pode ser que toda uma história ou narrativa possa ser gerada.
Mas, por que o resultado parece tão bom? Com um conjunto de dados grande o suficiente para treinamento e com imensa capacidade computacional de computador suficiente para processá-lo extensivamente, a saída produzida por uma IA generativa pode ser incrivelmente impressionante. Até acreditamos que a narrativa gerada foi escrita diretamente por um humano. É como se sua sentença ou pergunta tivesse sido entregue a um humano, escondido nos bastidores, e eles rapidamente escrevem para você uma resposta inteira que corresponde quase totalmente ao que estamos buscando. É assim que a matemática e os fundamentos computacionais se tornaram bons geradores de textos. Mas, a inteligência está nos algoritmos criados pelos humanos. Não esqueçam que embora aparente possuir inteligência, o chatGPT não entende nada do que está escrevendo. Ou seja, não compreende o sentido das frases que produz, embora, para nós aquele conjunto de palavras, bem sequenciadas, faça sentido. O estudo “SolidGoldMagikarp (plus, prompt generation)” mostra isso.
O chatGPT é uma boa ferramenta, que se bem explorada, dentro de seus limites, poderá ajudar em muita coisa. Indiscutivelmente que os “generative AI” são um grande avanço na IA, mas não vamos esquecer que as coisas não são mágicas. São tecnologias de software com grandes potencialidades, mas também muitas limitações.