Este artigo ou parte dele incorpora textos gerados por inteligência artificial.

Uma arquitetura transformer padrão, mostrando à esquerda um codificador e à direita um decodificador. Nota: usa a convenção pre-LN, que é diferente da convenção post-LN usada no transformer original de 2017

No aprendizado profundo, o transformer ou transformador é uma arquitetura de rede neural artificial baseada no mecanismo de atenção multicabeça (multi-head), em que o texto é convertido em representações numéricas chamadas tokens, e cada token é convertido num vetor através da procura numa tabela de embedding de palavras.[1] Em cada camada, cada token é então contextualizado dentro do escopo da janela de contexto com outros tokens (não mascarados) através de um mecanismo de atenção multicabeça paralelo, permitindo que o sinal dos tokens-chave seja amplificado e o dos tokens menos importantes seja diminuído.

Os transformers têm a vantagem de não terem unidades recorrentes, necessitando por isso de menos tempo de treinamento do que as arquiteturas neurais recorrentes (RNNs) anteriores, como a LSTM.[2] Variações posteriores têm sido amplamente adotadas para o treinamento de grandes modelos de linguagem (LLMs) em grandes conjuntos de dados (de linguagem).[3]

A versão moderna do transformer foi proposta no artigo de 2017 "Attention Is All You Need" por investigadores da Google.[1] Os antecessores dos transformers foram desenvolvidos como uma melhoria em relação às arquiteturas anteriores para tradução automática,[4][5] mas desde então têm encontrado muitas aplicações. São utilizados no processamento de linguagem natural em larga escala, em visão computacional (Transformer de Visão), na aprendizagem por reforço,[6][7] em áudio,[8] na aprendizagem multimodal, na robótica,[9] e para jogar xadrez.[10] Também levaram ao desenvolvimento de sistemas pré-treinados, tais como os transformers pré-treinados generativos (GPTs)[11] e o BERT[12] (representações de codificador bidirecional de transformers).

História

editar

Antecessores

editar

Durante muitos anos, a modelagem e geração de sequências foi feita usando redes neurais recorrentes (RNNs) simples. Um exemplo inicial muito citado foi a Rede de Elman (1990). Em teoria, a informação de um token pode propagar-se arbitrariamente ao longo da sequência, mas, na prática, o problema do desvanecimento do gradiente deixa o estado do modelo, no final de uma frase longa, sem informações precisas e extraíveis sobre os tokens anteriores.

Um avanço fundamental foi a LSTM (1995),[nota 1] uma RNN que utilizou várias inovações para superar o problema do desvanecimento do gradiente, permitindo a aprendizagem eficiente na modelagem de sequências longas. Uma inovação fundamental foi o uso de um mecanismo de atenção que utilizava neurônios que multiplicam as saídas de outros neurônios, as chamadas unidades multiplicativas.[13] Redes neurais usando unidades multiplicativas foram mais tarde chamadas de redes sigma-pi[14] ou redes de ordem superior.[15] A LSTM tornou-se a arquitetura padrão para modelagem de sequências longas até à publicação dos transformers em 2017. No entanto, a LSTM ainda usava processamento sequencial, como a maioria das outras RNNs.[nota 2] Especificamente, as RNNs operam um token de cada vez, do primeiro ao último; elas não podem operar em paralelo sobre todos os tokens de uma sequência.

Os transformers modernos superam este problema, mas, ao contrário das RNNs, exigem um tempo de computação que é uma função quadrática do tamanho da janela de contexto. O controlador de pesos rápidos de escala linear (1992) aprende a calcular uma matriz de pesos para processamento adicional, dependendo da entrada.[16] Uma das suas duas redes tem "pesos rápidos" ou "links dinâmicos" (1981).[17][18][19] Uma rede neural lenta aprende por descida de gradiente a gerar chaves e valores para calcular as mudanças de peso da rede neural rápida que calcula respostas a consultas.[16] Mais tarde, demonstrou-se que isso era equivalente ao transformer linear não normalizado.[20][21]

Atenção com seq2seq

editar

A ideia de transdução de sequência codificador-decodificador foi desenvolvida no início da década de 2010; comumente citados como os originadores que produziram seq2seq estão dois artigos publicados simultaneamente em 2014.[22][23]

Um modelo de 380 milhões de parâmetros para tradução automática utiliza duas memórias curtas de longo prazo (LSTM).[23] A sua arquitetura consiste em duas partes. O codificador é uma LSTM que recebe uma sequência de tokens e transforma-a num vetor. O decodificador é outra LSTM que converte o vetor numa sequência de tokens. Da mesma forma, outro modelo de 130 milhões de parâmetros utilizou unidades recorrentes bloqueadas (GRU) em vez de LSTM.[22] Pesquisas posteriores mostraram que as GRUs não são nem melhores nem piores do que as LSTMs para seq2seq.[24][25]

Estes primeiros modelos seq2seq não possuíam mecanismo de atenção e o vetor de estado só é acessível após o processamento da última palavra do texto de origem. Embora, em teoria, esse vetor retenha a informação sobre toda a frase original, na prática a informação é mal preservada. Isso ocorre porque a entrada é processada sequencialmente por uma rede recorrente num vetor de saída de tamanho fixo, que é então processado por outra rede recorrente numa saída. Se a entrada for longa, o vetor de saída não seria capaz de conter todas as informações relevantes, degradando a saída. Como evidência, a inversão da frase de entrada melhorou a tradução seq2seq.[26]

O modelo RNN search introduziu um mecanismo de atenção ao seq2seq para a tradução automática, a fim de resolver o problema de estrangulamento (bottleneck) (do vetor de saída de tamanho fixo), permitindo ao modelo processar dependências de longa distância com mais facilidade. O nome deve-se ao fato de que ele "emula a pesquisa através de uma frase de origem durante a decodificação de uma tradução".[4]

Os desempenhos relativos foram comparados entre as arquiteturas do modelo de atenção global (a do RNN search) e local (janela deslizante) para tradução automática, concluindo-se que a atenção mista apresentava maior qualidade do que a atenção global, ao passo que a atenção local reduzia o tempo de tradução.[27]

Em 2016, o Google Tradutor foi remodelado para a Tradução Automática Neural do Google, o que substituiu o modelo anterior baseado na tradução automática estatística. O novo modelo era um modelo seq2seq em que o codificador e o decodificador eram ambos compostos por 8 camadas de LSTM bidirecional.[28] Demorou nove meses a ser desenvolvido, e superou a abordagem estatística, que demorou dez anos a ser desenvolvida.[29]

Paralelizando a atenção

editar

Os modelos seq2seq com atenção (incluindo a autoatenção) continuavam a sofrer do mesmo problema das redes recorrentes: são difíceis de paralelizar, o que os impedia de serem acelerados em GPUs. Em 2016, a atenção decomponível aplicou um mecanismo de autoatenção às redes feedforward, que são fáceis de paralelizar, e alcançou um resultado no estado da arte em implicação textual com uma ordem de grandeza de parâmetros menor do que as LSTMs.[30] Um de seus autores, Jakob Uszkoreit, suspeitava que a atenção sem recorrência seria suficiente para a tradução de idiomas, daí o título "a atenção é tudo o que você precisa".[31] Essa hipótese ia contra o conhecimento convencional da época, e até o seu pai, Hans Uszkoreit, um linguista computacional conhecido, estava cético.[31] No mesmo ano, propôs-se a autoatenção (chamada intra-atenção ou atenção intra-frase) para LSTMs.[32]

Em 2017, o modelo original codificador-decodificador de transformer (de tamanho 100M) foi proposto no artigo "Attention Is All You Need". Na altura, o foco da pesquisa incidia sobre a melhoria da seq2seq para a tradução automática, removendo a sua recorrência para processar todos os tokens em paralelo, mas preservando o seu mecanismo de atenção de produto escalar (dot-product) para manter o seu desempenho no processamento de texto.[1] Isso levou à introdução de um modelo de atenção multicabeça (multi-head) que era mais fácil de paralelizar devido ao uso de cabeças independentes e à ausência de recorrência. A sua capacidade de paralelização foi um fator importante para o seu uso generalizado em grandes redes neurais.[33]

Era do boom da IA

editar

Já na primavera de 2017, mesmo antes de o pré-print "Attention is all you need" ser publicado, um dos coautores aplicou a variação "somente-decodificador" (decoder-only) da arquitetura para gerar artigos fictícios da Wikipédia.[34] A arquitetura Transformer é agora usada juntamente com muitos modelos generativos que contribuem para o atual boom da IA.

Na modelagem de linguagem, o ELMo (2018) era uma LSTM bidirecional que produzia embeddings de palavras contextualizados, melhorando a linha de pesquisa a partir de saco de palavras e word2vec. Foi seguido pelo BERT (2018), um modelo transformer apenas de codificador.[35] Em outubro de 2019, o Google começou a utilizar o BERT para processar consultas de pesquisa.[36] Em 2020, o Google Tradutor substituiu o modelo anterior de codificador RNN-decodificador RNN por um modelo codificador transformer-decodificador RNN.[37]

A partir de 2018, a série GPT da OpenAI, de transformers apenas decodificadores, tornou-se o estado da arte em geração de linguagem natural. No final de 2022, um chatbot baseado no GPT-3, o ChatGPT, tornou-se inesperadamente[38] popular, desencadeando um boom em torno de grandes modelos de linguagem.[39][40]

Desde 2020, os transformers têm sido aplicados em modalidades além do texto, incluindo o transformer de visão,[41] reconhecimento de fala,[42] robótica[6] e de forma multimodal.[43] O transformer de visão, por sua vez, estimulou novos desenvolvimentos nas redes neurais convolucionais.[44] Geradores de imagem e vídeo como DALL-E (2021), Stable Diffusion 3 (2024)[45] e Sora (2024), usam transformers para analisar dados de entrada (como prompts de texto) ao dividi-los em "tokens" e, em seguida, calculando a relevância entre cada token usando autoatenção, o que ajuda o modelo a compreender o contexto e os relacionamentos dentro dos dados.

Treinamento

editar

Métodos para estabilizar o treinamento

editar

A arquitetura transformer simples tinha dificuldade em convergir. No artigo original,[1] os autores recomendaram o uso de aquecimento (warmup) da taxa de aprendizagem. Ou seja, a taxa de aprendizagem deve aumentar linearmente de 0 até ao valor máximo durante a primeira parte do treinamento (geralmente recomendado como sendo **2%** do número total de passos de treinamento), antes de decair novamente.

Um artigo de 2020 descobriu que o uso de normalização de camada antes (em vez de depois) da atenção multicabeça e das camadas feedforward estabiliza o treinamento, não exigindo o aquecimento da taxa de aprendizagem.[46] Este é o "Transformer pre-LN" e é mais comumente usado, em comparação com o original "Transformer post-LN".

Pré-treinamento e ajuste fino

editar

Os transformers são normalmente pré-treinados primeiro por aprendizagem autosupervisionada num grande conjunto de dados genérico, seguido por um ajuste fino supervisionado num pequeno conjunto de dados específico da tarefa. O conjunto de dados de pré-treinamento é normalmente um grande corpus não rotulado, como The Pile. As tarefas para pré-treinamento e ajuste fino incluem frequentemente:

O relatório do transformer T5[47] documenta um grande número de tarefas de pré-treinamento em linguagem natural. Alguns exemplos são:

  • restauração ou reparação de texto incompleto ou corrompido. Por exemplo, a entrada, "Obrigado ___ mim para a sua festa ___ semana", poderia gerar a saída, "Obrigado por convidar-mim para a sua festa na última semana".
  • tradução entre linguagens naturais (tradução automática)
  • julgar a aceitabilidade pragmática da linguagem natural. Por exemplo, a seguinte frase pode ser julgada como "não aceitável",[48] porque, mesmo sendo sintaticamente bem formada, é improvável no uso humano comum: O curso está a saltar bem.

Note que, embora cada uma destas tarefas seja trivial ou óbvia para falantes nativos humanos do idioma (ou idiomas), elas normalmente provaram ser desafiadoras para as gerações anteriores de arquiteturas de aprendizado de máquina.

Tarefas

editar

Em geral, existem 3 classes de tarefas de modelagem de linguagem: "mascarada" (masked),[49] "autorregressiva",[50] e "prefixLM".[51] Estas classes são independentes de uma arquitetura de modelagem específica, como o transformer, mas são frequentemente discutidas no contexto do transformer.

Numa tarefa mascarada,[49] um ou mais dos tokens são mascarados, e o modelo produziria uma distribuição de probabilidade prevendo quais são os tokens mascarados com base no contexto. A função de perda para a tarefa é tipicamente a soma das log-perplexidades para os tokens mascarados: e o modelo é treinado para minimizar esta função de perda. A série de modelos BERT é treinada para a previsão de tokens mascarados e para uma outra tarefa.

Numa tarefa autorregressiva,[50] toda a sequência é mascarada no início, e o modelo produz uma distribuição de probabilidade para o primeiro token. Depois, o primeiro token é revelado e o modelo prevê o segundo token, e assim por diante. A função de perda para a tarefa continua a ser tipicamente a mesma. A série de modelos GPT é treinada por tarefas autorregressivas.

Numa tarefa prefixLM,[51] a sequência é dividida em duas partes. A primeira parte é apresentada como contexto, e o modelo prevê o primeiro token da segunda parte. Depois, este seria revelado, e o modelo prevê o segundo token, e assim por diante. A função de perda para a tarefa continua a ser tipicamente a mesma. A série de modelos T5 é treinada por tarefas prefixLM.

Note que "mascarada" (masked) como em "modelagem de linguagem mascarada" não é "mascarada" como em "atenção mascarada", e "prefixLM" como em "modelagem de linguagem de prefixo" não é "prefixLM" como em "modelo de linguagem de prefixo".

Arquitetura

editar

Todos os transformers têm os mesmos componentes principais:

  • Tokenizadores (Tokenizers), que convertem texto em tokens.
  • Camada de embedding, que converte tokens e as posições dos tokens em representações vetoriais.
  • Camadas do transformer, que realizam transformações repetidas nas representações vetoriais, extraindo cada vez mais informações linguísticas. Estas consistem em camadas alternadas de atenção e feedforward (alimentação direta). Existem dois tipos principais de camadas de transformer: camadas codificadoras (encoder) e camadas decodificadoras (decoder), com outras variantes.
  • Camada de des-embedding (Un-embedding), que converte as representações vetoriais finais de volta numa distribuição de probabilidade sobre os tokens.

A descrição a seguir segue exatamente o transformer conforme descrito no artigo original. Existem variantes, descritas na seção seguinte.

Por convenção, escrevemos todos os vetores como vetores linha. Por exemplo, passar um vetor por uma camada linear significa multiplicá-lo por uma matriz de pesos à direita, como .

Tokenização

editar

Como a arquitetura transformer consiste nativamente em operações sobre números (multiplicações de matrizes, produtos escalares, funções de ativação) em vez de texto, deve haver primeiro um mapeamento de qualquer texto de entrada para alguma representação numérica. Isso ocorre em três etapas.

Primeiro, o texto de entrada é tratado por um pré-processador, que realiza transformações textuais e divide o texto em segmentos de granulação grossa chamados pré-tokens. Este último processo é referido como pré-tokenização. Em segundo lugar, cada pré-token é segmentado ainda mais em tokens por um tokenizador que espera ver apenas pré-tokens emitidos pelo seu pré-processador. Cada token que ele produz é uma cadeia (string) de um ou mais caracteres pertencentes a um conjunto finito de cadeias chamado de vocabulário . Em terceiro lugar, como o vocabulário é finito e conhecido de antemão, cada token pode receber um identificador inteiro, e este mapeamento é aplicado à sequência de tokens para representar qualquer texto de entrada como uma sequência numérica. Como este mapeamento é bijetivo, o lado de saída pode produzir uma sequência de identificadores inteiros que podem então ser transformados de volta em tokens. Após desfazer parte do pré-processamento, o resultado é novamente um texto legível.

Treinar um tokenizador (às vezes referido como vocabularização) significa encontrar um vocabulário adequado , mas também aprender como usá-lo, uma vez que qualquer cadeia dada de comprimento tem segmentações hipotéticas, algumas das quais contendo segmentos que não estão no vocabulário. O hiperparâmetro mais importante durante a vocabularização é o tamanho do vocabulário : quando é pequeno, o vocabulário aprendido geralmente consiste em caracteres e cadeias menores, e as palavras serão segmentadas em muitos tokens. Em tamanhos maiores, torna-se acessível dedicar tokens a palavras completas, embora, dependendo do pré-processador e do tokenizador, não seja necessariamente o caso de que grandes vocabulários usarão sempre o(s) maior(es) token(s) disponível(eis) para segmentar uma palavra.

Como os tokens nem sempre são palavras completas, eles também podem ser chamados de subpalavras (subwords) e os algoritmos de tokenização podem ser referidos como tokenizadores de subpalavras. Isso também serve para diferenciar estes sistemas da terminologia tradicional usada em sistemas mais antigos de recuperação de informação e processamento de linguagem natural, onde a "tokenização" era usada para denotar o que hoje é chamado de "pré-tokenização" (muito rudemente: divisão em palavras). Nos tokenizadores que produzem tokens que não fazem parte do vocabulário, um token especial que pertence ao vocabulário é usado como um substituto genérico, escrito como "[UNK]" para "unknown" (desconhecido). Em princípio, qualquer cadeia poderia ser ocultada por um [UNK] desse tipo. De fato, na recuperação de informação, os pré-tokenizadores eram eles próprios usados como tokenizadores (e também chamados de "tokenizadores") com um vocabulário ao nível da palavra que continha um [UNK].

Os algoritmos de tokenização de subpalavras comumente usados são a codificação de pares de bytes (BPE) e o modelo de linguagem unigrama (ULM), que incluem, cada um, um algoritmo de vocabularização e um algoritmo de segmentação dedicado. Também existem vários algoritmos de segmentação que não requerem aprendizagem e podem ser aplicados dado um vocabulário (produzido por BPE ou ULM, por exemplo), como reconhecer gulosamente (greedily) tokens num pré-token movendo-se através dele da esquerda para a direita. Implementações de software bem conhecidas de tokenizadores de subpalavras são o pacote Python tokenizers da Hugging Face implementado em Rust, e o pacote Python sentencepiece implementado em C++. Este último pacote tem esse nome porque uma das suas opções de configuração permite desativar o pré-tokenizador integrado, tornando efetivamente frases inteiras um pré-token e, assim, fazendo com que o tokenizador veja frases inteiras, em vez de palavras individuais.

Embedding

editar

Cada identificador de token inteiro é convertido num vetor de embedding através de uma tabela de pesquisa (lookup table). De forma equivalente, multiplica uma representação one-hot do identificador do token por uma matriz de embedding . Por exemplo, se o identificador do token de entrada é , então a representação one-hot é , e o seu vetor de embedding é: Os vetores de embedding de tokens são adicionados aos seus respetivos vetores de codificação posicional (ver abaixo), produzindo a sequência de vetores de entrada.

A dimensão de um vetor de embedding é chamada de tamanho oculto (hidden size) ou tamanho do embedding e escrita como .[35] Este tamanho é escrito como no artigo original do transformer.[1]

Des-embedding

editar

Uma camada de des-embedding (un-embedding) é quase o inverso de uma camada de embedding. Enquanto uma camada de embedding converte um identificador de token num vetor, uma camada de des-embedding converte um vetor numa distribuição de probabilidade sobre os tokens.

Uma ilustração das 16 principais probabilidades de tokens à temperatura 1, para cada token de saída na resposta de cadeia de pensamento (chain-of-thought), com a cor representando como essa saída difere do mesmo prompt, mas à temperatura 0

A camada de des-embedding é uma camada linear-softmax: A matriz tem formato . Algumas arquiteturas usam a transposta da matriz de embedding como a matriz de des-embedding para evitar a necessidade de duplicar a quantidade de parâmetros relacionados com o embedding e para evitar a divergência durante o treinamento. Esta prática é chamada de amarração de pesos (weight tying).[52]

Codificação posicional

editar
Ilustração da codificação posicional (absoluta) com parâmetros

Uma codificação posicional é uma representação vetorial de tamanho fixo das posições relativas dos tokens dentro de uma sequência: ela fornece ao modelo transformer informações sobre onde as palavras estão na sequência de entrada. Isso induz um viés indutivo em relação à ordem da sequência de entrada, de modo que, por exemplo, a sequência de entrada "o cão morde o homem" é processada de forma diferente de "o homem morde o cão".

A codificação posicional é definida como uma função do tipo , onde é um inteiro positivo e par. A codificação posicional completa definida no artigo original[1] é: onde .

Aqui, é um parâmetro livre que deve ser significativamente maior do que o maior que seria inserido na função de codificação posicional. O artigo original usa .

A função fica numa forma mais simples quando escrita como uma função complexa do tipo onde .

A principal razão para usar esta função de codificação posicional é que, com ela, os deslocamentos (shifts) são transformações lineares: onde é a distância que se deseja deslocar. Isso permite que o transformer pegue em qualquer posição codificada e encontre a codificação da posição n-passos-à-frente ou n-passos-atrás, através de uma multiplicação de matrizes.

Ao fazer uma soma linear, qualquer convolução também pode ser implementada como transformações lineares: para quaisquer constantes . Isso permite que o transformer pegue em qualquer posição codificada e encontre uma soma linear das localizações codificadas dos seus vizinhos. Esta soma de posições codificadas, quando alimentada no mecanismo de atenção, criaria pesos de atenção nos seus vizinhos, de forma muito semelhante ao que acontece num modelo de linguagem de rede neural convolucional. Nas palavras dos autores, "nós hipotetizámos que isso permitiria ao modelo aprender facilmente a atender por posição relativa."

Em implementações típicas, todas as operações são feitas sobre os números reais, não os números complexos, mas como a multiplicação complexa pode ser implementada como multiplicação de matrizes reais 2 por 2, esta é uma mera diferença notacional.

Codificador-decodificador (visão geral)

editar
Um bloco codificador-decodificador
Um transformer é composto por camadas de codificador e camadas de decodificador empilhadas

Como os modelos seq2seq anteriores, o modelo transformer original usava uma arquitetura de codificador-decodificador. O codificador consiste em camadas de codificação que processam todos os tokens de entrada juntos, uma camada após a outra, enquanto o decodificador consiste em camadas de decodificação que processam iterativamente a saída do codificador e os tokens de saída do decodificador até ao momento.

O propósito de cada camada codificadora é criar representações contextualizadas dos tokens, onde cada representação corresponde a um token que "mistura" informações de outros tokens de entrada através do mecanismo de autoatenção. Cada camada decodificadora contém duas subcamadas de atenção: (1) atenção cruzada (cross-attention) para incorporar a saída do codificador (representações contextualizadas de tokens de entrada), e (2) autoatenção (self-attention) para "misturar" informações entre os tokens de entrada para o decodificador (ou seja, os tokens gerados até ao momento durante o tempo de inferência).[53][54]

Tanto as camadas do codificador quanto as do decodificador possuem uma rede neural feedforward para processamento adicional das suas saídas e contêm conexões residuais e etapas de normalização de camada.[54] Estas camadas feedforward contêm a maior parte dos parâmetros num modelo transformer.

Rede feedforward

editar

O módulo de rede feedforward. É uma rede de duas camadas que mapeia vetores -dimensionais noutros vetores -dimensionais

Os módulos de rede feedforward (FFN) num transformer são perceptrons multicamadas de 2 camadas: onde e são matrizes de pesos e e são vetores de viés (bias), e é a sua função de ativação. O transformer original usou a ativação ReLU.

O número de neurônios na camada intermediária é chamado de tamanho intermediário (GPT),[55] tamanho do filtro (BERT),[35] ou tamanho do feedforward (BERT).[35] Ele é tipicamente maior que o tamanho do embedding. Por exemplo, tanto na série GPT-2 quanto na série BERT, o tamanho intermediário de um modelo é 4 vezes o seu tamanho de embedding: .

Atenção de produto escalar escalonado

editar

Cabeça de atenção

editar
Atenção de produto escalar escalonado, diagrama de blocos
Contagens exatas de dimensões dentro de um módulo de cabeça de atenção

O mecanismo de atenção usado na arquitetura transformer são unidades de atenção de produto escalar escalonado. Para cada unidade, o modelo transformer aprende três matrizes de pesos: os pesos de consulta (query) , os pesos de chave (key) e os pesos de valor (value) .

O módulo recebe três sequências: uma sequência de consulta, uma sequência de chave e uma sequência de valor. A sequência de consulta é uma sequência de comprimento , e cada entrada é um vetor de dimensão . O mesmo se aplica às sequências de chave e de valor.

Para cada vetor na sequência de consulta, ele é multiplicado por uma matriz para produzir um vetor de consulta . A matriz de todos os vetores de consulta é a matriz de consulta: Da mesma forma, construímos a matriz de chaves e a matriz de valores .

Geralmente, todos os são matrizes quadradas, o que significa que , etc.

Os pesos de atenção são calculados usando os vetores de consulta e chave: o peso de atenção do token para o token é o produto escalar entre e . Os pesos de atenção são divididos pela raiz quadrada da dimensão dos vetores de chave, , o que estabiliza os gradientes durante o treinamento, e passados por uma softmax que normaliza os pesos. O facto de que e são matrizes diferentes permite que a atenção seja não simétrica: se o token atende ao token (ou seja, é grande), isso não significa necessariamente que o token atenderá ao token (ou seja, pode ser pequeno). A saída da unidade de atenção para o token é a soma ponderada dos vetores de valor de todos os tokens, ponderada por , a atenção do token para cada token.

O cálculo de atenção para todos os tokens pode ser expresso como um grande cálculo de matriz usando a função softmax, o que é útil para o treinamento devido a otimizações de operações matriciais computacionais que calculam rapidamente as operações de matriz. As matrizes , e são definidas como as matrizes onde as -ésimas linhas são os vetores , e , respetivamente. Então podemos representar a atenção como:

onde a softmax é aplicada sobre cada uma das linhas da matriz.

O número de dimensões num vetor de consulta é o tamanho da consulta e da mesma forma para o tamanho da chave e tamanho do valor . A dimensão de saída de uma cabeça de atenção é a sua dimensão da cabeça . O mecanismo de atenção requer que as seguintes três igualdades sejam válidas: mas de resto não tem restrições.

Se a cabeça de atenção for usada no modo de autoatenção, então . Se a cabeça de atenção for usada no modo de atenção cruzada, então geralmente . É teoricamente possível que os três sejam diferentes, mas isso raramente acontece na prática.

Atenção multicabeça

editar
Atenção multicabeça, diagrama de blocos
Contagens exatas de dimensões dentro de um módulo de atenção multicabeça

Um conjunto de matrizes é chamado de cabeça de atenção (attention head), e cada camada num modelo transformer possui múltiplas cabeças de atenção. Enquanto cada cabeça de atenção atende aos tokens que são relevantes para cada token, múltiplas cabeças de atenção permitem que o modelo faça isso para diferentes definições de "relevância". Especificamente, as matrizes de projeção de consulta e chave, e , que estão envolvidas no cálculo da pontuação de atenção, definem a "relevância". Entretanto, a matriz de projeção de valor , em combinação com a parte da matriz de projeção de saída , determina como os tokens atendidos influenciam quais informações são passadas para as camadas subsequentes e, finalmente, para os logits de saída. Além disso, o escopo da atenção, ou a gama de relacionamentos entre tokens capturada por cada cabeça de atenção, pode expandir-se à medida que os tokens passam por camadas sucessivas. Isso permite que o modelo capture dependências mais complexas e de longo alcance em camadas mais profundas. Muitas cabeças de atenção do transformer codificam relações de relevância que são significativas para os humanos. Por exemplo, algumas cabeças de atenção podem atender principalmente à próxima palavra, enquanto outras atendem principalmente de verbos para os seus objetos diretos.[56] Os cálculos para cada cabeça de atenção podem ser realizados em paralelo, o que permite um processamento rápido. As saídas da camada de atenção são concatenadas para passar para as camadas da rede neural feedforward.

Concretamente, sejam as múltiplas cabeças de atenção indexadas por , então temos: onde a matriz é a concatenação de embeddings de palavras, e as matrizes são "matrizes de projeção" pertencentes à cabeça de atenção individual , e é uma matriz de projeção final pertencente a toda a cabeça de atenção multicabeça.

É teoricamente possível que cada cabeça de atenção tenha uma dimensão de cabeça diferente, mas isso raramente acontece na prática.

Como exemplo, no menor modelo GPT-2, existem apenas mecanismos de autoatenção. Ele tem as seguintes dimensões: Como , a sua matriz de projeção de saída é uma matriz quadrada.

Atenção mascarada

editar

A arquitetura transformer é construída para calcular tokens de saída iterativamente. Assumindo que refere-se ao cálculo do primeiro token de saída , para o passo , o token de saída deve permanecer constante. Isso garante propriedades do modelo semelhantes aos modelos autorregressivos.[1] Portanto, em cada passo de tempo , o cálculo para todas as saídas não deve ter acesso a tokens na posição para (como é naturalmente o caso para o passo de tempo , quando os tokens ainda não foram calculados). Esse comportamento pode ser alcançado antes do estágio softmax adicionando uma matriz de máscara que é nas entradas onde o link de atenção deve ser cortado, e em outros lugares: A seguinte matriz é comumente usada em módulos de autoatenção do decodificador, chamada de "mascaramento causal" (causal masking):

Em palavras, isso significa que cada token pode prestar atenção a si mesmo, e a todos os tokens antes dele, mas não a nenhum depois dele. Um módulo de atenção não mascarado pode ser pensado como um módulo de atenção mascarado onde a máscara tem todas as entradas iguais a zero. Como exemplo de um uso incomum de matriz de máscara, o XLNet considera todas as máscaras da forma , onde é uma matriz de permutação aleatória.[57]

Codificador

editar
Uma camada codificadora

Um codificador consiste numa camada de embedding, seguida por múltiplas camadas codificadoras.

Cada camada codificadora consiste em dois componentes principais: um mecanismo de autoatenção e uma camada feedforward. Ele recebe uma entrada como uma sequência de vetores de entrada, aplica o mecanismo de autoatenção para produzir uma sequência intermediária de vetores, depois aplica a camada feedforward para cada vetor individualmente. Esquematicamente, temos:

onde significa "rede feedforward". Podemos escrevê-lo de forma mais sucinta como: com a convenção implícita de que a é aplicada a cada linha da matriz individualmente.

As camadas codificadoras são empilhadas. A primeira camada codificadora obtém a sequência de vetores de entrada da camada de embedding, produzindo uma sequência de vetores. Essa sequência de vetores é processada pelo segundo codificador, e assim por diante. A saída da camada codificadora final é então usada pelo decodificador.

Como o codificador processa toda a entrada de uma só vez, cada token pode atender a todos os outros tokens (atenção todos-para-todos), de modo que não há necessidade de mascaramento causal.

Decodificador

editar
Uma camada decodificadora

Um decodificador consiste numa camada de embedding, seguida por múltiplas camadas decodificadoras, seguidas por uma camada de des-embedding.

Cada decodificador consiste em três componentes principais: um mecanismo de autoatenção mascarado causalmente, um mecanismo de atenção cruzada e uma rede neural feedforward. O decodificador funciona de forma semelhante ao codificador, mas um mecanismo de atenção adicional é inserido, o qual extrai informações relevantes das codificações geradas pelos codificadores. Esse mecanismo também pode ser chamado de atenção codificador-decodificador.[1][54]

Assim como o primeiro codificador, o primeiro decodificador recebe informações posicionais e embeddings da sequência de saída como sua entrada, em vez de codificações. O transformer não deve usar a saída atual ou futura para prever uma saída, portanto, a sequência de saída deve ser parcialmente mascarada para evitar esse fluxo reverso de informações.[1] Isso permite a geração de texto autorregressiva. Para a decodificação, a atenção todos-para-todos é inadequada, pois um token não pode atender a tokens ainda não gerados. Assim, o módulo de autoatenção no decodificador é mascarado causalmente.

Em contraste, o mecanismo de atenção cruzada atende aos vetores de saída do codificador, que são calculados antes de o decodificador começar a decodificar. Consequentemente, não há necessidade de mascaramento no mecanismo de atenção cruzada.

Esquematicamente, temos: onde é a matriz com linhas sendo os vetores de saída do codificador.

O último decodificador é seguido por uma camada de des-embedding final para produzir as probabilidades de saída sobre o vocabulário. Então, um dos tokens é amostrado de acordo com a probabilidade, e o decodificador pode ser executado novamente para produzir o próximo token, etc., gerando o texto de saída autorregressivamente.

Arquitetura completa do transformer

editar

Subcamadas

editar
(a) Uma camada codificadora e uma camada decodificadora. (b) Duas camadas codificadoras e duas camadas decodificadoras. As subcamadas também estão rotuladas

Cada camada codificadora contém 2 subcamadas: a autoatenção (self-attention) e a rede feedforward. Cada camada decodificadora contém 3 subcamadas: a autoatenção mascarada causalmente, a atenção cruzada (cross-attention) e a rede feedforward.

Codificador transformer com norm-first (norma-primeiro) e norm-last (norma-último)
Decodificador transformer com norm-first e norm-last
Diagrama de blocos para a arquitetura completa do transformer
Hierarquia de objetos esquemática para a arquitetura completa do transformer, no estilo de programação orientada a objetos

Os pontos finais de detalhe são as conexões residuais e a normalização de camada (denotada como "LayerNorm", ou "LN" no texto a seguir), que embora conceitualmente desnecessárias, são necessárias para a estabilidade numérica e convergência.

A conexão residual, que é introduzida para evitar problemas de desvanecimento do gradiente e estabilizar o processo de treinamento, pode ser expressa da seguinte forma: y = F(x) + x. A expressão indica que uma saída y é a soma da transformação da entrada x (F(x)) e da própria entrada (x). Adicionar a entrada x pode preservar a informação de entrada e evitar problemas quando o gradiente de F(x) está próximo de zero.

De forma semelhante à maneira como os módulos de rede feedforward são aplicados individualmente a cada vetor, a LayerNorm também é aplicada individualmente a cada vetor.

Existem duas convenções comuns em uso: a convenção post-LN (pós-LN) e a pre-LN (pré-LN). Na convenção post-LN, a saída de cada subcamada é onde é a função implementada pela própria subcamada.

Na convenção pre-LN, a saída de cada subcamada é O transformer original de 2017 usava a convenção post-LN. Era difícil de treinar e exigia um ajuste cuidadoso de hiperparâmetros e um "aquecimento" (warm-up) na taxa de aprendizagem, onde esta começa pequena e aumenta gradualmente. A convenção pre-LN, proposta várias vezes em 2018,[58] revelou-se mais fácil de treinar, não exigindo aquecimento, levando a uma convergência mais rápida.[46]

Pseudocódigo

editar

A seguir está o pseudocódigo para um transformer codificador-decodificador pre-LN padrão, adaptado de Formal Algorithms for Transformers[59]

 '''input:''' Entrada do codificador t_e
        Entrada do decodificador t_d
 '''output:''' Matriz de distribuições de probabilidade, com formato (tamanho do vocabulário do decodificador x comprimento(sequência de saída do decodificador))

 /* codificador */
 z_e ← encoder.tokenizer(t_e)

 '''for''' '''each''' t '''in''' 1:length(z_e) '''do'''
     z_e[t] ← encoder.embedding(z_e[t]) + encoder.positional_embedding(t)

 '''for''' '''each''' l '''in''' 1:length(encoder.layers) '''do'''
     layer ← encoder.layers[l]

     /* primeira subcamada */
     z_e_copy ← copy(z_e)
     '''for each''' t '''in''' 1:length(z_e) '''do'''
         z_e[t] ← layer.layer_norm(z_e[t])
     z_e ← layer.multihead_attention(z_e, z_e, z_e)
     '''for each''' t '''in''' 1:length(z_e) '''do'''
         z_e[t] ← z_e[t] + z_e_copy[t]

     /* segunda subcamada */
     z_e_copy ← copy(z_e)
     '''for each''' t '''in''' 1:length(z_e) '''do'''
         z_e[t] ← layer.layer_norm(z_e[t])
     z_e ← layer.feedforward(z_e)
     '''for each''' t '''in''' 1:length(z_e) '''do'''
         z_e[t] ← z_e[t] + z_e_copy[t]

 '''for each''' t '''in''' 1:length(z_e) '''do'''
     z_e[t] ← encoder.final_layer_norm(z_e[t])

 /* decodificador */
 z_d ← decoder.tokenizer(t_d)

 '''for''' '''each''' t '''in''' 1:length(z_d) '''do'''
     z_d[t] ← decoder.embedding(z_d[t]) + decoder.positional_embedding(t)

 '''for''' '''each''' l '''in''' 1:length(decoder.layers) '''do'''
         layer ← decoder.layers[l]

         /* primeira subcamada */
         z_d_copy ← copy(z_d)
         '''for each''' t '''in''' 1:length(z_d) '''do'''
             z_d[t] ← layer.layer_norm(z_d[t])
         z_d ← layer.masked_multihead_attention(z_d, z_d, z_d)
         '''for each''' t '''in''' 1:length(z_d) '''do'''
             z_d[t] ← z_d[t] + z_d_copy[t]

         /* segunda subcamada */
         z_d_copy ← copy(z_d)
         '''for each''' t '''in''' 1:length(z_d) '''do'''
             z_d[t] ← layer.layer_norm(z_d[t])
         z_d ← layer.multihead_attention(z_d, z_e, z_e)
         '''for each''' i '''in''' 1:length(z_d) '''do'''
             z_d[t] ← z_d[t] + z_d_copy[t]

         /* terceira subcamada */
         z_d_copy ← copy(z_d)
         '''for each''' t '''in''' 1:length(z_d) '''do'''
             z_d[t] ← layer.layer_norm(z_d[t])
         z_d ← layer.feedforward(z_d)
         '''for each''' t '''in''' 1:length(z_d) '''do'''
             z_d[t] ← z_d[t] + z_d_copy[t]

 z_d ← decoder.final_layer_norm(z_d)

 output_distributions ← []
 '''for each''' t '''in''' 1:length(z_d) '''do'''
     output_distributions.append(decoder.unembed(z_d[t]))

 '''return''' output_distributions

Terminologia

editar

A arquitetura transformer, por ser modular, permite variações. Diversas variações comuns são descritas aqui.[60]

Um transformer "somente-codificador" (encoder-only) aplica o codificador para mapear um texto de entrada numa sequência de vetores que representam esse texto de entrada. Isso é normalmente usado para embedding de texto e aprendizado de representação para aplicações posteriores (downstream). O BERT é somente-codificador. Eles são menos usados atualmente, pois descobriu-se que não são significativamente melhores do que treinar um transformer codificador-decodificador e depois usar apenas o codificador.[51] Eles também são referidos como "all-to-all" (todos-para-todos) ou "tipo BERT".

Um transformer "somente-decodificador" (decoder-only) não é literalmente apenas um decodificador, uma vez que, sem um codificador, o mecanismo de atenção cruzada não tem nada a que atender. Assim, as camadas decodificadoras num transformer somente-decodificador são compostas por apenas duas subcamadas: a autoatenção mascarada causalmente e a rede feedforward. Isso é normalmente usado para geração de texto e para o seguimento de instruções. Os modelos da série GPT e da série Chinchilla são somente-decodificadores. Eles também são referidos como "autorregressivos" ou "causais".

Um transformer "codificador-decodificador" é geralmente igual ao transformer original, com 2 subcamadas por camada codificadora e 3 subcamadas por camada decodificadora, etc. Eles podem ter pequenas melhorias arquitetônicas, como funções de ativação alternativas, mudança do local de normalização, etc. Isso também é normalmente usado para geração de texto e seguimento de instruções. Os modelos na série T5 são codificador-decodificador.[60]

Um "prefixLM" (modelo de linguagem de prefixo) é uma arquitetura somente-decodificador, mas com mascaramento de prefixo, que é diferente do mascaramento causal. Especificamente, ele tem uma máscara da forma[60]: onde as primeiras colunas correspondem ao "prefixo" e as colunas subsequentes correspondem ao texto gerado autorregressivamente com base no prefixo. Eles assemelham-se a modelos codificador-decodificador, mas têm menos "esparsidade" (sparsity). Tais modelos são raramente usados, embora sejam citados como possibilidades teóricas e em comparações de benchmark.[51]

Também existem modelos seq2seq mistos. Por exemplo, em 2020, o Google Tradutor substituiu o modelo anterior de codificador RNN-decodificador RNN por um modelo codificador transformer-decodificador RNN, pois os decodificadores baseados em transformer não pareciam aumentar significativamente a qualidade, ao contrário do codificador, enquanto o decodificador RNN era muito mais rápido.[37]

Trabalhos subsequentes

editar

Funções de ativação alternativas

editar

O transformer original usa a função de ativação ReLU. Outras funções de ativação foram desenvolvidas. A série Llama e o PaLM usaram SwiGLU;[61] tanto o GPT-1 quanto o BERT[35] usaram GELU.[62]

As funções de ativação alternativas são frequentemente usadas em combinação com unidades lineares bloqueadas (Gated Linear Units) no módulo feedforward.[61]

Normalizações alternativas

editar

A normalização usada no transformer pode ser diferente da LayerNorm. Um exemplo é a RMSNorm,[63] que é usada na série Llama. Outros exemplos incluem CapsuleNorm,[64] ScaleNorm,[65] ou FixNorm.[65]

Codificações posicionais alternativas

editar

Os transformers podem usar outros métodos de codificação posicional que não sejam os sinusoidais.[66]

O artigo original do transformer relatou o uso de uma codificação posicional aprendida,[67] mas concluiu que não era superior à sinusoidal.[1] Mais tarde,[68] descobriram que o próprio mascaramento causal fornece sinal suficiente a um decodificador transformer para que ele possa aprender a realizar a codificação posicional absoluta de forma implícita, sem o módulo de codificação posicional.

RoPE

editar

O RoPE (embedding posicional rotativo),[69] é melhor explicado ao considerar uma lista de vetores bidimensionais . Agora, escolha um ângulo . A codificação RoPE é então: De forma equivalente, se escrevermos os vetores bidimensionais como números complexos , então a codificação RoPE é apenas uma multiplicação por um ângulo: Para uma lista de vetores de dimensões, um codificador RoPE é definido por uma sequência de ângulos . Então, a codificação RoPE é aplicada a cada par de coordenadas.

A vantagem do RoPE é que o produto escalar entre dois vetores depende apenas da sua localização relativa: para qualquer inteiro .

ALiBi

editar

O ALiBi (Attention with Linear Biases — Atenção com Vieses Lineares)[70] não é um substituto para o codificador posicional no transformer original. Em vez disso, é um codificador posicional adicional que está diretamente conectado ao mecanismo de atenção. Especificamente, o mecanismo de atenção ALiBi é: Aqui, é um número real ("escalar"), e é a matriz de viés linear definida por: em outras palavras, . A ideia é que a matriz de viés linear seja uma máscara suavizada. Assim como representa atenção total prestada, e representa nenhuma atenção prestada, a matriz de viés linear aumenta a atenção prestada numa direção e diminui a atenção prestada na outra direção.

O ALiBi permite o pré-treinamento em janelas de contexto curtas, seguido por um ajuste fino (fine-tuning) em janelas de contexto mais longas. Como está diretamente conectado ao mecanismo de atenção, ele pode ser combinado com qualquer codificador posicional que esteja conectado na "base" de toda a rede (que é onde o codificador sinusoidal do transformer original, bem como o RoPE e muitos outros, estão localizados).

Codificações de Posição Relativa

editar

As Codificações de Posição Relativa[71] (Relative Position Encodings) são semelhantes ao ALiBi, mas mais genéricas: onde é uma Matriz de Toeplitz, ou seja, sempre que . Isto contrasta com a codificação posicional sinusoidal original, que é uma "codificação posicional absoluta".[72]

Implementação eficiente

editar

O modelo transformer foi implementado em frameworks (estruturas de software) padrão de aprendizado profundo, como TensorFlow e PyTorch. Transformers é uma biblioteca produzida pela Hugging Face que fornece arquiteturas baseadas em transformers e modelos pré-treinados.[11]

Cache de KV

editar

Quando um transformer autorregressivo é usado para inferência, como na geração de texto, o vetor de consulta é diferente a cada passo, mas os vetores de chave e valor já computados são sempre os mesmos. O método de cache de KV guarda os vetores de chave e valor computados em cada bloco de atenção, de modo que eles não sejam recalculados a cada novo token. A PagedAttention aplica a paginação de memória à cache de KV.[73][74][75]

Se um transformer for usado com um prompt fixo, como ["Você é um agente de suporte ao cliente..."], então os vetores de chave e valor podem ser calculados para o prompt e guardados em disco. A economia em computação é significativa quando o modelo é usado para muitas interações curtas em tempo real, como em chatbots online.

Geralmente, quando um utilizador usa um transformer autorregressivo para gerar uma continuação para uma sequência de tokens, o modelo primeiro executaria uma passagem à frente (forward-pass) nesta sequência, em que as caches de KV sobre esta sequência são computadas. Isto é chamado de preenchimento prévio (prefilling). Provedores de nuvem em larga escala (hyperscalers) que servem modelos Transformer muito grandes podem usar a inferência desagregada, onde o preenchimento prévio e a decodificação são realizados em hardware especializado separadamente.[76]

FlashAttention

editar

FlashAttention[77] é um algoritmo que implementa o mecanismo de atenção do transformer de forma eficiente numa GPU. É um algoritmo que evita a comunicação, o qual realiza multiplicações de matrizes em blocos, de modo que cada bloco caiba na cache de uma GPU e, por meio de um gerenciamento cuidadoso dos blocos, ele minimiza a cópia de dados entre as caches da GPU (visto que a movimentação de dados é lenta). Veja a página sobre a softmax para detalhes.

Uma versão melhorada, FlashAttention-2,[78][79][80] foi desenvolvida para atender à crescente procura por modelos de linguagem capazes de lidar com comprimentos de contexto mais longos. Oferece melhorias no particionamento do trabalho e paralelismo, permitindo que alcance até 230 TFLOPs/s em GPUs A100 (FP16/BF16), um aumento de velocidade de 2x em relação ao FlashAttention original.

Os principais avanços no FlashAttention-2 incluem a redução de FLOPs que não são operações de matriz (non-matmul FLOPs), melhor paralelismo sobre a dimensão do comprimento da sequência, melhor particionamento do trabalho entre as threads (warps) da GPU e suporte adicionado para dimensões de cabeça de até 256 e atenção de múltiplas consultas (MQA) e atenção de consultas agrupadas (GQA).[81]

Benchmarks revelaram que o FlashAttention-2 é até 2x mais rápido do que o FlashAttention e até 9x mais rápido do que uma implementação de atenção padrão em PyTorch. Desenvolvimentos futuros incluem otimização para novos hardwares, como as GPUs H100, e novos tipos de dados, como o FP8.

O FlashAttention-4 foca-se no uso de pipeline para aumentar a taxa de transferência (throughput) de instruções, e foi desenvolvido para ter um desempenho particularmente bom nas GPUs Blackwell.[82]

Atenção Multi-Query

editar

Comparação entre várias formas diferentes de mecanismo de atenção e a quantidade de cache de KV necessária para cada uma

A Atenção de Múltiplas Consultas (Multi-Query Attention - MQA) altera o mecanismo de Atenção Multicabeça (Multihead Attention).[83] Embora normalmente se tenha:

com a Atenção Multi-Query, existe apenas um , resultando em:

Isto tem um efeito neutro na qualidade do modelo e na velocidade de treinamento, mas aumenta a velocidade de inferência.

Mais genericamente, a atenção de consultas agrupadas (Grouped-Query Attention - GQA) particiona as cabeças de atenção em grupos, cada um dos quais partilha o par chave-valor. O MQA é o GQA com um único grupo, enquanto a Atenção Multicabeça padrão é o GQA com o número máximo de grupos.[84]

A arquitetura do V2, mostrando tanto o MLA quanto uma variante da mistura de especialistas[85]:

A Atenção Latente Multicabeça (Multihead Latent Attention - MLA) é uma aproximação de baixo posto à MHA padrão. Especificamente, cada vetor oculto, antes de entrar no mecanismo de atenção, é primeiro projetado em dois espaços de baixa dimensão ("espaço latente"), um para a consulta e outro para chave-valor (vetor KV). Este design minimiza a cache de KV, uma vez que apenas o vetor KV de baixa dimensão precisa ser mantido na cache.[85]

Decodificação especulativa

editar

A decodificação especulativa[86][87] é um método para acelerar a decodificação de tokens. À semelhança da execução especulativa nas CPUs, os tokens futuros são computados rapidamente e depois verificados. Se os tokens computados rapidamente estiverem incorretos, eles são descartados e computados de forma mais lenta e precisa.

O fator chave na decodificação especulativa é que um decodificador transformer pode verificar mais rápido do que pode decodificar, no seguinte sentido.

Suponha que temos dois modelos de transformer, como o GPT-3 e o GPT-3-small (pequeno), ambos com uma janela de contexto de tamanho 512. Para gerar uma janela de contexto inteira de forma autorregressiva com decodificação gulosa (greedy decoding) usando o GPT-3, ele deve ser executado 512 vezes, gerando a cada vez um token , levando um tempo de . No entanto, se tivéssemos algum palpite bem fundamentado (educated guess) para os valores desses tokens, poderíamos verificá-los a todos em paralelo, numa única execução do modelo, verificando se cada é realmente o token com a maior log-verossimilhança na -ésima saída.

Na decodificação especulativa, um modelo menor ou alguma outra heurística simples é usada para gerar alguns tokens especulativos que são subsequentemente verificados pelo modelo maior. Por exemplo, suponha que usamos o GPT-3-small para gerar quatro tokens especulativos: . Isto leva apenas . Estes tokens são então passados pelo GPT-3 maior de uma só vez. Suponha que e sejam verificados pelo GPT-3 como os que ele teria escolhido, então estes são mantidos, mas o não é; portanto, são descartados, e o GPT-3 é executado nestes. Isto levaria , o que pode ser mais curto do que .

Para decodificação não gulosa, aplicam-se ideias semelhantes, exceto que os tokens especulativos são aceites ou rejeitados estocasticamente, de forma a garantir que a distribuição de saída final seja a mesma como se a decodificação especulativa não tivesse sido usada.[86][88]

Previsão de múltiplos tokens

Na Previsão de Múltiplos Tokens (Multi-Token Prediction), uma única passagem à frente (forward pass) cria um vetor de embedding final, que então é des-embedado para uma probabilidade de token. No entanto, esse vetor pode, em seguida, ser processado por outro bloco transformer para prever o próximo token, e assim por diante por tantos passos quanto se desejar no futuro. Isso troca a precisão por velocidade, já que cada novo token custa apenas mais um bloco transformer, e não a pilha inteira.[89][90]

Transformers subquadráticos

editar

O treinamento de arquiteturas baseadas em transformers pode ser caro, especialmente para entradas longas.[91] Muitos métodos foram desenvolvidos numa tentativa de resolver a questão. No domínio da imagem, o Swin transformer é uma arquitetura eficiente que realiza a atenção dentro de janelas móveis (shifting windows).[92] No domínio do áudio, o SepTr desacopla a atenção nos domínios do tempo e da frequência.[93] O benchmark Long Range Arena (2020)[94] é um padrão para comparar o comportamento das arquiteturas de transformers em entradas longas.

Grafos de atenção alternativos

editar

O grafo de atenção padrão é quer todos-para-todos quer causal, e ambos escalam como onde é o número de tokens numa sequência.

O Reformer (2020)[91][95] reduz a carga computacional de para usando hashing sensível à localidade e camadas reversíveis.[96]

A atenção esparsa (sparse attention)[97] usa grafos de atenção que crescem mais lentamente que . Por exemplo, o BigBird (2020)[98] usa redes de mundo pequeno (small-world) aleatórias que crescem como .

Os transformers comuns exigem um tamanho de memória que é quadrático em relação ao tamanho da janela de contexto. Os transformers sem atenção (attention-free transformers)[99] reduzem isto para uma dependência linear enquanto ainda retêm as vantagens de um transformer ao ligar a chave ao valor.

Atenção de Recurso Aleatório

editar

A Atenção de Recurso Aleatório (Random Feature Attention - 2021)[100] usa recursos aleatórios de Fourier: onde são amostras independentes da distribuição normal . Esta escolha de parâmetros satisfaz a propriedade , ou Consequentemente, a atenção de uma cabeça, com uma consulta, pode ser escrita como onde . O mesmo se aplica a consultas múltiplas, e à atenção multicabeça.

Esta aproximação pode ser calculada em tempo linear, já que podemos calcular a matriz primeiro, e depois multiplicá-la pela consulta. Na essência, conseguimos obter uma versão mais precisa de O Performer (2022)[101] usa a mesma Atenção de Recurso Aleatório, mas os pesos são primeiro amostrados independentemente da distribuição normal , e então são processados por Gram-Schmidt.

Multimodalidade

editar

Os transformers também podem ser usados/adaptados para modalidades (de entrada ou de saída) para além do mero texto, normalmente através da descoberta de uma forma de "tokenizar" a modalidade em questão.

Modelos multimodais podem ser treinados quer de raiz quer através do ajuste fino (finetuning). Um estudo de 2022 revelou que transformers pré-treinados apenas em linguagem natural podem ser alvo de um ajuste fino em apenas 0,03% dos parâmetros e tornar-se competitivos em relação a modelos LSTMs numa variedade de tarefas lógicas e visuais, o que demonstra a capacidade da aprendizagem por transferência.[102] O LLaVA consistia num modelo de linguagem visual composto por um modelo de linguagem (Vicuna-13B)[103] e um modelo de visão (ViT-L/14), ligados por intermédio de uma camada linear. Apenas a camada linear é submetida a um ajuste fino.[104]

Os transformers de visão[41] (Vision transformers) adaptam o transformer para a visão computacional ao decompor as imagens de entrada numa série de retalhos (patches), transformando-os em vetores, e tratando-os como um vetor de embedding de tokens num transformer padrão.

O Conformer[42] e mais tarde o Whisper[105] seguem o mesmo padrão para o reconhecimento de fala, transformando primeiro o sinal de fala num espectrograma, que é depois tratado como uma imagem, isto é, decomposto numa série de retalhos, transformados em vetores e tratados como um vetor de embedding de tokens num transformer convencional.

Os perceivers[106][107] são uma variante de transformers desenhados para a multimodalidade.

Para a geração de imagens, destacam-se arquiteturas como o DALL-E 1 (2021), o Parti (2022),[108] o Phenaki (2023)[109] e o Muse (2023).[110] Ao contrário dos modelos mais recentes, o DALL-E não é um modelo de difusão. Em vez disso, ele usa um transformer do tipo somente-decodificador que gera um texto de forma autorregressiva, seguido por uma representação por tokens de uma imagem, que é posteriormente convertida num autocodificador variacional para uma imagem.[111] O Parti é um transformer codificador-decodificador, onde o codificador processa o prompt (estímulo) de texto e o decodificador cria uma representação em formato de tokens de uma imagem.[112] O Muse é um transformer do tipo somente-codificador que foi treinado para inferir tokens de imagem mascarados a partir de tokens de imagem que não estão mascarados. Ao longo da geração, todos os tokens de entrada são mascarados, e as predições com maior nível de confiança integram a iteração seguinte, até que a totalidade dos tokens tenha sido prevista.[110] O Phenaki é um modelo de texto para vídeo. Trata-se de um transformer mascarado bidirecional condicionado em relação a tokens de texto precomputados. Os tokens produzidos são subsequentemente decodificados para dar lugar a um vídeo.[109]

Aplicações

editar

O Transformer obteve grande sucesso no processamento de linguagem natural (PLN). Muitos modelos de linguagem grandes (LLMs), tais como GPT-2, GPT-3, GPT-4, Gemini, AlbertAGPT, Claude, BERT, Grok, XLNet, RoBERTa e ChatGPT, demonstram a capacidade dos Transformers de executar uma ampla variedade de tarefas secundárias relacionadas a PLN e suas aplicações práticas no mundo real, incluindo:

Para além do PLN tradicional, a arquitetura Transformer obteve sucesso em diversas outras aplicações, tais como:

Notas

  1. As Gated recurrent units (2014) reduziram ainda mais a sua complexidade.
  2. Algumas arquiteturas, como RWKV ou modelos de espaço de estado, evitam o problema.

Referências

editar
  1. a b c d e f g h i j k l Ashish Vaswani; Noam Shazeer; Niki Parmar; Jakob Uszkoreit; Llion Jones; Aidan N. Gomez; Łukasz Kaiser; Illia Polosukhin (2017). Attention Is All You Need (PDF). Advances in Neural Information Processing Systems 30 (NeurIPS 2017). 30. Curran Associates, Inc. 
  2. Sepp Hochreiter; Jürgen Schmidhuber (1 de novembro de 1997). «Long Short-Term Memory». Neural Computation. 9 (8): 1735–1780. ISSN 0899-7667. PMID 9377276. doi:10.1162/neco.1997.9.8.1735 
  3. a b «Better Language Models and Their Implications». OpenAI. 14 de fevereiro de 2019. Consultado em 25 de agosto de 2019. Cópia arquivada em 19 de dezembro de 2020 
  4. a b Bahdanau; Cho, Kyunghyun; Bengio, Yoshua (1 de setembro de 2014). «Neural Machine Translation by Jointly Learning to Align and Translate». arXiv:1409.0473Acessível livremente [cs.CL] 
  5. Luong, Minh-Thang; Pham, Hieu; Manning, Christopher D. (17 de agosto de 2015). «Effective Approaches to Attention-based Neural Machine Translation». arXiv:1508.04025Acessível livremente [cs.CL] 
  6. a b Chen, Lili; Lu, Kevin; Rajeswaran, Aravind; Lee, Kimin; Grover, Aditya; Laskin, Michael; Abbeel, Pieter; Srinivas, Aravind; Mordatch, Igor (24 de junho de 2021). «Decision Transformer: Reinforcement Learning via Sequence Modeling». arXiv:2106.01345Acessível livremente 
  7. Parisotto, Emilio; Song, Francis; Rae, Jack; Pascanu, Razvan; Gulcehre, Caglar; Jayakumar, Siddhant; Jaderberg, Max; Kaufman, Raphaël Lopez; Clark, Aidan; Noury, Seb; Botvinick, Matthew; Heess, Nicolas; Hadsell, Raia (21 de novembro de 2020). «Stabilizing Transformers for Reinforcement Learning». PMLR. Proceedings of the 37th International Conference on Machine Learning (em inglês): 7487–7498 
  8. Radford, Alec; Jong Wook Kim; Xu, Tao; Brockman, Greg; McLeavey, Christine; Sutskever, Ilya (2022). «Robust Speech Recognition via Large-Scale Weak Supervision». arXiv:2212.04356Acessível livremente [eess.AS] 
  9. Monastirsky, Maxim; Azulay, Osher; Sintov, Avishai (Fevereiro de 2023). «Learning to Throw With a Handful of Samples Using Decision Transformers». IEEE Robotics and Automation Letters. 8 (2): 576–583. Bibcode:2023IRAL....8..576M. ISSN 2377-3766. doi:10.1109/LRA.2022.3229266 
  10. a b Ruoss, Anian; Delétang, Grégoire; Medapati, Sourabh; Grau-Moya, Jordi; Wenliang, Li; Catt, Elliot; Reid, John; Genewein, Tim (7 de fevereiro de 2024). «Grandmaster-Level Chess Without Search». arXiv:2402.04494v1Acessível livremente [cs.LG] 
  11. a b Wolf, Thomas; Debut, Lysandre; Sanh, Victor; Chaumond, Julien; Delangue, Clement; Moi, Anthony; Cistac, Pierric; Rault, Tim; Louf, Remi; Funtowicz, Morgan; Davison, Joe; Shleifer, Sam; von Platen, Patrick; Ma, Clara; Jernite, Yacine; Plu, Julien; Xu, Canwen; Le Scao, Teven; Gugger, Sylvain; Drame, Mariama; Lhoest, Quentin; Rush, Alexander (2020). «Transformers: State-of-the-Art Natural Language Processing». Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations. [S.l.: s.n.] pp. 38–45. doi:10.18653/v1/2020.emnlp-demos.6 
  12. a b c «Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing». Google AI Blog. 2 de novembro de 2018. Consultado em 25 de agosto de 2019. Cópia arquivada em 13 de janeiro de 2021 
  13. Feldman, J. A.; Ballard, D. H. (1 de julho de 1982). «Connectionist models and their properties». Cognitive Science. 6 (3): 205–254. ISSN 0364-0213. doi:10.1016/S0364-0213(82)80001-3 
  14. Rumelhart, David E.; McClelland, James L.; Hinton, Geoffrey E. (29 de julho de 1987). Parallel Distributed Processing, Volume 1: Explorations in the Microstructure of Cognition: Foundations, Chapter 2 (PDF) (em inglês). Cambridge, Mass: Bradford Books. ISBN 978-0-262-68053-0 
  15. Giles, C. Lee; Maxwell, Tom (1 de dezembro de 1987). «Learning, invariance, and generalization in high-order neural networks». Applied Optics (em inglês). 26 (23): 4972–4978. ISSN 0003-6935. PMID 20523475. doi:10.1364/AO.26.004972 
  16. a b Schmidhuber, Jürgen (1992). «Learning to control fast-weight memories: an alternative to recurrent nets.» (PDF). Neural Computation. 4 (1): 131–139. doi:10.1162/neco.1992.4.1.131  Parâmetro desconhecido |link-autor1= ignorado (ajuda)
  17. Christoph von der Malsburg: The correlation theory of brain function. Internal Report 81-2, MPI Biophysical Chemistry, 1981. http://cogprints.org/1380/1/vdM_correlation.pdf Ver Reimpressão em Models of Neural Networks II, capítulo 2, páginas 95–119. Springer, Berlim, 1994.
  18. Jerome A. Feldman, "Dynamic connections in neural networks," Biological Cybernetics, vol. 46, no. 1, pp. 27–39, Dez. 1982.
  19. Hinton, Geoffrey E.; Plaut, David C. (1987). «Using Fast Weights to Deblur Old Memories». Proceedings of the Annual Meeting of the Cognitive Science Society (em inglês). 9 
  20. Katharopoulos, Angelos; Vyas, Apoorv; Pappas, Nikolaos; Fleuret, François (2020). Transformers are RNNs: Fast autoregressive Transformers with linear attention. ICML 2020. PMLR. pp. 5156–5165 
  21. Schlag, Imanol; Irie, Kazuki; Schmidhuber, Jürgen (2021). Linear Transformers Are Secretly Fast Weight Programmers. ICML 2021. Springer. pp. 9355–9366  Parâmetro desconhecido |link-autor3= ignorado (ajuda)
  22. a b Kyunghyun Cho; Bart van Merriënboer; Caglar Gulcehre; Dzmitry Bahdanau; Fethi Bougares; Holger Schwenk; Yoshua Bengio (2014). Alessandro Moschitti; Bo Pang; Walter Daelemans, eds. Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). Doha, Catar: Association for Computational Linguistics. pp. 1724–1734. arXiv:1406.1078Acessível livremente. doi:10.3115/v1/D14-1179 
  23. a b Sutskever, Ilya; Vinyals, Oriol; Le, Quoc Viet (14 de dez. de 2014). «Sequence to sequence learning with neural networks». arXiv:1409.3215Acessível livremente [cs.CL]  [primeira versão publicada no arXiv em 10 de set. de 2014]
  24. Chung, Junyoung; Gulcehre, Caglar; Cho, KyungHyun; Bengio, Yoshua (2014). «Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling». arXiv:1412.3555Acessível livremente [cs.NE] 
  25. Gruber, N.; Jockisch, A. (2020). «Are GRU cells more specific and LSTM cells more sensitive in motive classification of text?». Frontiers in Artificial Intelligence. 3. PMC 7861254Acessível livremente. PMID 33733157. doi:10.3389/frai.2020.00040  Parâmetro desconhecido |numero-artigo= ignorado (ajuda)
  26. Sutskever, Ilya; Vinyals, Oriol; Le, Quoc V (2014). «Sequence to Sequence Learning with Neural Networks». Curran Associates, Inc. Advances in Neural Information Processing Systems. 27. arXiv:1409.3215Acessível livremente 
  27. Luong, Minh-Thang; Pham, Hieu; Manning, Christopher D. (2015). «Effective Approaches to Attention-based Neural Machine Translation». arXiv:1508.04025Acessível livremente [cs.CL] 
  28. Wu, Yonghui; et al. (1 de setembro de 2016). «Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation». arXiv:1609.08144Acessível livremente [cs.CL] 
  29. Lewis-Kraus, Gideon (14 de dezembro de 2016). «The Great A.I. Awakening». The New York Times. ISSN 0362-4331. Consultado em 22 de junho de 2023. Cópia arquivada em 24 de maio de 2023 
  30. Parikh, Ankur P.; Täckström, Oscar; Das, Dipanjan; Uszkoreit, Jakob (25 de setembro de 2016). «A Decomposable Attention Model for Natural Language Inference». arXiv:1606.01933Acessível livremente [cs.CL] 
  31. a b Levy, Steven. «8 Google Employees Invented Modern AI. Here's the Inside Story». Wired (em inglês). ISSN 1059-1028. Consultado em 6 de agosto de 2024. Cópia arquivada em 20 de mar. de 2024 
  32. Jianpeng Cheng; Li Dong; Mirella Lapata (2016). Jian Su; Kevin Duh; Xavier Carreras, eds. Long Short-Term Memory-Networks for Machine Reading. Proceedings of the 2016 Conference on Empirical Methods in Natural Language Processing. Austin, Texas: Association for Computational Linguistics. pp. 551–561. doi:10.18653/v1/D16-1053 
  33. Peng, Bo; Alcaide, Eric; Anthony, Quentin; Albalak, Alon; Arcadinho, Samuel; Biderman, Stella; Cao, Huanqi; Cheng, Xin; Chung, Michael (10 de dezembro de 2023). «RWKV: Reinventing RNNs for the transformer Era». arXiv:2305.13048Acessível livremente 
  34. Marche, Stephen (23 de agosto de 2024). «Was Linguistic A.I. Created by Accident?». The New Yorker (em inglês). ISSN 0028-792X. Consultado em 27 de agosto de 2024 
  35. a b c d e Devlin, Jacob; Chang, Ming-Wei; Lee, Kenton; Toutanova, Kristina (11 de outubro de 2018). «BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding». arXiv:1810.04805v2Acessível livremente [cs.CL] 
  36. «Google: BERT now used on almost every English query». Search Engine Land. 15 de outubro de 2020. Consultado em 24 de novembro de 2020 
  37. a b Caswell, Isaac; Liang, Bowen (8 de junho de 2020). «Recent Advances in Google Translate». Google Research (em inglês). Consultado em 7 de agosto de 2024. Cópia arquivada em 4 de jul. de 2024 
  38. «The inside story of how ChatGPT was built from the people who made it». MIT Technology Review (em inglês). Consultado em 6 de agosto de 2024 
  39. «Improving language understanding with unsupervised learning». openai.com. 11 de junho de 2018. Consultado em 18 de março de 2023. Cópia arquivada em 18 de março de 2023 
  40. «finetune-transformer-lm». OpenAI. 11 de junho de 2018. Consultado em 1 de maio de 2023 
  41. a b Dosovitskiy, Alexey; Beyer, Lucas; Kolesnikov, Alexander; Weissenborn, Dirk; Zhai, Xiaohua; Unterthiner, Thomas; Dehghani, Mostafa; Minderer, Matthias; Heigold, Georg; Gelly, Sylvain; Uszkoreit, Jakob (3 de junho de 2021). «An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale». arXiv:2010.11929Acessível livremente [cs.CV] 
  42. a b Gulati, Anmol; Qin, James; Chiu, Chung-Cheng; Parmar, Niki; Zhang, Yu; Yu, Jiahui; Han, Wei; Wang, Shibo; Zhang, Zhengdong; Wu, Yonghui; Pang, Ruoming (2020). «Conformer: Convolution-augmented Transformer for Speech Recognition». arXiv:2005.08100Acessível livremente [eess.AS] 
  43. Choromanski, Krzysztof; Likhosherstov, Valerii; Dohan, David; Song, Xingyou; Gane, Andreea; Sarlos, Tamas; Hawkins, Peter; Davis, Jared; Mohiuddin, Afroz (19 de novembro de 2022). «Rethinking Attention with Performers». arXiv:2009.14794Acessível livremente 
  44. Liu, Zhuang; Mao, Hanzi; Wu, Chao-Yuan; Feichtenhofer, Christoph; Darrell, Trevor; Xie, Saining (2022). A ConvNet for the 2020s. Conference on Computer Vision and Pattern Recognition (CVPR) (em inglês). pp. 11976–11986 
  45. Esser, Patrick; Kulal, Sumith; Blattmann, Andreas; Entezari, Rahim; Müller, Jonas; Saini, Harry; Levi, Yam; Lorenz, Dominik; Sauer, Axel (5 de março de 2024). «Scaling Rectified Flow Transformers for High-Resolution Image Synthesis». arXiv:2403.03206Acessível livremente 
  46. a b Xiong, Ruibin; Yang, Yunchang; He, Di; Zheng, Kai; Zheng, Shuxin; Xing, Chen; Zhang, Huishuai; Lan, Yanyan; Wang, Liwei; Liu, Tie-Yan (29 de junho de 2020). «On Layer Normalization in the Transformer Architecture». arXiv:2002.04745Acessível livremente [cs.LG] 
  47. Raffel, Colin; Shazeer, Noam; Roberts, Adam; Lee, Katherine; Narang, Sharan; Matena, Michael; Zhou, Yanqi; Li, Wei; Liu, Peter J. (1 de janeiro de 2020). «Exploring the limits of transfer learning with a unified text-to-text transformer». The Journal of Machine Learning Research. 21 (1): 140:5485–140:5551. ISSN 1532-4435. arXiv:1910.10683Acessível livremente 
  48. Raffel, Colin; Shazeer, Noam; Roberts, Adam; Lee, Katherine; Narang, Sharan; Matena, Michael; Zhou, Yanqi; Li, Wei; Liu, Peter J. (2019). «Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer». arXiv:1910.10683Acessível livremente [cs.LG] 
  49. a b «Masked language modeling». huggingface.co. Consultado em 5 de outubro de 2023 
  50. a b «Causal language modeling». huggingface.co. Consultado em 5 de outubro de 2023 
  51. a b c d Tay, Yi; Dehghani, Mostafa; Tran, Vinh Q.; Garcia, Xavier; Wei, Jason; Wang, Xuezhi; Chung, Hyung Won; Shakeri, Siamak; Bahri, Dara (28 de fevereiro de 2023). «UL2: Unifying Language Learning Paradigms». arXiv:2205.05131Acessível livremente 
  52. Press, Ofir; Wolf, Lior (21 de fevereiro de 2017). «Using the Output Embedding to Improve Language Models». arXiv:1608.05859Acessível livremente 
  53. Lintz, Nathan (18 de abril de 2016). «Sequence Modeling with Neural Networks (Part 2): Attention Models». Indico. Consultado em 15 de outubro de 2019. Cópia arquivada em 21 de outubro de 2020 
  54. a b c Alammar, Jay. «The Illustrated transformer». jalammar.github.io. Consultado em 15 de outubro de 2019. Cópia arquivada em 18 de outubro de 2020 
  55. Team, Keras. «Keras documentation: GPT2Backbone model». keras.io (em inglês). Consultado em 8 de agosto de 2024 
  56. Clark, Kevin; Khandelwal, Urvashi; Levy, Omer; Manning, Christopher D. (Agosto de 2019). «What Does BERT Look at? An Analysis of BERT's Attention». Florença, Itália: Association for Computational Linguistics. Proceedings of the 2019 ACL Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP: 276–286. arXiv:1906.04341Acessível livremente. doi:10.18653/v1/W19-4828Acessível livremente. Consultado em 20 de maio de 2020. Cópia arquivada em 21 de outubro de 2020 
  57. Yang, Zhilin; Dai, Zihang; Yang, Yiming; Carbonell, Jaime; Salakhutdinov, Russ R; Le, Quoc V (2019). «XLNet: Generalized Autoregressive Pretraining for Language Understanding». Curran Associates, Inc. Advances in Neural Information Processing Systems. 32. arXiv:1906.08237Acessível livremente 
  58. Wang, Qiang; Li, Bei; Xiao, Tong; Zhu, Jingbo; Li, Changliang; Wong, Derek F.; Chao, Lidia S. (4 de junho de 2019). «Learning Deep Transformer Models for Machine Translation». arXiv:1906.01787Acessível livremente 
  59. Phuong, Mary; Hutter, Marcus (19 de julho de 2022). «Formal Algorithms for Transformers». arXiv:2207.09238Acessível livremente 
  60. a b c Raffel, Colin; Shazeer, Noam; Roberts, Adam; Lee, Katherine; Narang, Sharan; Matena, Michael; Zhou, Yanqi; Li, Wei; Liu, Peter J. (2020). «Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer». Journal of Machine Learning Research. 21 (140): 1–67. ISSN 1533-7928. arXiv:1910.10683Acessível livremente 
  61. a b Shazeer, Noam (1 de fevereiro de 2020). «GLU Variants Improve Transformer». arXiv:2002.05202Acessível livremente [cs.LG] 
  62. Hendrycks, Dan; Gimpel, Kevin (27 de junho de 2016). «Gaussian Error Linear Units (GELUs)» (em inglês). arXiv:1606.08415v5Acessível livremente [cs.LG] 
  63. Zhang, Biao; Sennrich, Rico (2019). «Root Mean Square Layer Normalization». Curran Associates, Inc. Advances in Neural Information Processing Systems. 32. arXiv:1910.07467Acessível livremente 
  64. Tembine, Hamidou, Manzoor Ahmed Khan, and Issa Bamia. 2024. "Mean-Field-Type Transformers" Mathematics 12, no. 22: 3506. https://doi.org/10.3390/math12223506
  65. a b Toan Q. Nguyen; Julian Salazar (2 de novembro de 2019). Jan Niehues; Rolando Cattoni; Sebastian Stüker; Matteo Negri; Marco Turchi; Thanh-Le Ha; Elizabeth Salesky; Ramon Sanabria; Loïc Barrault, eds. Transformers without Tears: Improving the Normalization of Self-Attention. Proceedings of the 16th International Conference on Spoken Language Translation. Hong Kong: Association for Computational Linguistics. arXiv:1910.05895Acessível livremente. doi:10.5281/zenodo.3525484 
  66. Dufter, Philipp; Schmitt, Martin; Schütze, Hinrich (6 de junho de 2022). «Position Information in transformers: An Overview». Computational Linguistics. 48 (3): 733–763. ISSN 0891-2017. arXiv:2102.11090Acessível livremente. doi:10.1162/coli_a_00445Acessível livremente 
  67. Gehring, Jonas; Auli, Michael; Grangier, David; Yarats, Denis; Dauphin, Yann N. (17 de julho de 2017). «Convolutional Sequence to Sequence Learning». PMLR. Proceedings of the 34th International Conference on Machine Learning (em inglês): 1243–1252 
  68. Haviv, Adi; Ram, Ori; Press, Ofir; Izsak, Peter; Levy, Omer (5 de dezembro de 2022). «Transformer Language Models without Positional Encodings Still Learn Positional Information». arXiv:2203.16634Acessível livremente 
  69. Su, Jianlin; Lu, Yu; Pan, Shengfeng; Murtadha, Ahmed; Wen, Bo; Liu, Yunfeng (1 de abril de 2021). «RoFormer: Enhanced Transformer with Rotary Position Embedding». arXiv:2104.09864Acessível livremente [cs.CL] 
  70. Press, Ofir; Smith, Noah A.; Lewis, Mike (1 de agosto de 2021). «Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation». arXiv:2108.12409Acessível livremente [cs.CL] 
  71. Shaw, Peter; Uszkoreit, Jakob; Vaswani, Ashish (2018). «Self-Attention with Relative Position Representations». arXiv:1803.02155Acessível livremente [cs.CL] 
  72. Ke, Guolin; He, Di; Liu, Tie-Yan (15 de março de 2021). «Rethinking Positional Encoding in Language Pre-training». arXiv:2006.15595Acessível livremente 
  73. Kwon, Woosuk; Li, Zhuohan; Zhuang, Siyuan; Sheng, Ying; Zheng, Lianmin; Yu, Cody Hao; Gonzalez, Joseph; Zhang, Hao; Stoica, Ion (23 de outubro de 2023). «Efficient Memory Management for Large Language Model Serving with PagedAttention». Proceedings of the 29th Symposium on Operating Systems Principles. Col: SOSP '23. New York, NY, EUA: Association for Computing Machinery. pp. 611–626. ISBN 979-8-4007-0229-7. arXiv:2309.06180Acessível livremente. doi:10.1145/3600006.3613165 
  74. «vllm-project/vllm». vLLM. 20 de junho de 2024. Consultado em 20 de junho de 2024 
  75. Zhuohan Li, Woosuk Kwon; Zhuang, Siyuan; Sheng, Ying; Zheng, Lianmin; Yu, Cody; Gonzalez, Joey; Zhang, Hao; Stoica, Ion (20 de junho de 2023). «vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention». vLLM Blog (em inglês). Consultado em 20 de junho de 2024 
  76. Hu, Cunchen; Huang, Heyang; Xu, Liangliang; Chen, Xusheng; Xu, Jiang; Chen, Shuang; Feng, Hao; Wang, Chenxi; Wang, Sa (20 de janeiro de 2024). «Inference without Interference: Disaggregate LLM Inference for Mixed Downstream Workloads». arXiv:2401.11181Acessível livremente. doi:10.48550/arXiv.2401.11181  Parâmetros não válidos no arXiv (ajuda)
  77. Dao, Tri; Fu, Dan; Ermon, Stefano; Rudra, Atri; Ré, Christopher (6 de dezembro de 2022). «FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness». Advances in Neural Information Processing Systems. 35: 16344–16359. arXiv:2205.14135Acessível livremente 
  78. «Stanford CRFM». crfm.stanford.edu. Consultado em 18 de julho de 2023 
  79. «FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning». Princeton NLP. 17 de junho de 2023. Consultado em 18 de julho de 2023 
  80. «Introducing Together AI Chief Scientist Tri Dao, as he releases FlashAttention-2 to speed up model training and inference». TOGETHER. Consultado em 18 de julho de 2023 
  81. Ainslie, Joshua; Lee-Thorp, James; de Jong, Michiel; Zemlyanskiy, Yury; Lebrón, Federico; Sanghai, Sumit (23 de dezembro de 2023). «GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints». arXiv:2305.13245Acessível livremente [cs.CL] 
  82. «We reverse-engineered Flash Attention 4». Modal (em inglês). Consultado em 26 de setembro de 2025 
  83. Chowdhery, Aakanksha; Narang, Sharan; Devlin, Jacob; Bosma, Maarten; Mishra, Gaurav; Roberts, Adam; Barham, Paul; Chung, Hyung Won; Sutton, Charles; Gehrmann, Sebastian; Schuh, Parker; Shi, Kensen; Tsvyashchenko, Sasha; Maynez, Joshua; Rao, Abhishek (1 de abril de 2022). «PaLM: Scaling Language Modeling with Pathways». arXiv:2204.02311Acessível livremente [cs.CL] 
  84. Ainslie, Joshua; Lee-Thorp, James; de Jong, Michiel; Zemlyanskiy, Yury; Lebrón, Federico; Sanghai, Sumit (23 de dezembro de 2023). «GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints». arXiv:2305.13245Acessível livremente 
  85. a b DeepSeek-AI; Liu, Aixin; Feng, Bei; Wang, Bin; Wang, Bingxuan; Liu, Bo; Zhao, Chenggang; Dengr, Chengqi; Ruan, Chong (19 de junho de 2024). «DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model». arXiv:2405.04434Acessível livremente .
  86. a b Leviathan, Yaniv; Kalman, Matan; Matias, Yossi (18 de maio de 2023). «Fast Inference from Transformers via Speculative Decoding». arXiv:2211.17192Acessível livremente 
  87. Fu, Yao (11 de dezembro de 2023). «Towards 100x Speedup: Full Stack Transformer Inference Optimization». yaofu.notion.site 
  88. Chen, Charlie; Borgeaud, Sebastian; Irving, Geoffrey; Lespiau, Jean-Baptiste; Sifre, Laurent; Jumper, John (2 de fevereiro de 2023). «Accelerating Large Language Model Decoding with Speculative Sampling». arXiv:2302.01318Acessível livremente 
  89. Gloeckle, Fabian; Badr Youbi Idrissi; Rozière, Baptiste; Lopez-Paz, David; Synnaeve, Gabriel (2024). «Better & Faster Large Language Models via Multi-token Prediction». arXiv:2404.19737Acessível livremente [cs.CL] 
  90. DeepSeek-AI; et al. (2024). «DeepSeek-V3 Technical Report». arXiv:2412.19437Acessível livremente [cs.CL] 
  91. a b Kitaev, Nikita; Kaiser, Łukasz; Levskaya, Anselm (2020). «Reformer: The Efficient Transformer». arXiv:2001.04451Acessível livremente [cs.LG] 
  92. Liu, Ze; Lin, Yutong; Cao, Yue; Hu, Han; Wei, Yixuan; Zhang, Zheng; Lin, Stephen; Guo, Baining (2021). «Swin Transformer: Hierarchical Vision Transformer using Shifted Windows». 2021 IEEE/CVF International Conference on Computer Vision (ICCV). [S.l.]: IEEE. pp. 9992–10002. ISBN 978-1-6654-2812-5. arXiv:2103.14030Acessível livremente. doi:10.1109/ICCV48922.2021.00986 
  93. Ristea, Nicolaea Catalin; Ionescu, Radu Tudor; Khan, Fahad Shahbaz (18 de setembro de 2022). «SepTr: Separable Transformer for Audio Spectrogram Processing». ISCA. Interspeech (em inglês): 4103–4107. arXiv:2203.09581Acessível livremente. doi:10.21437/Interspeech.2022-249 
  94. Tay, Yi; Dehghani, Mostafa; Abnar, Samira; Shen, Yikang; Bahri, Dara; Pham, Philip; Rao, Jinfeng; Yang, Liu; Ruder, Sebastian; Metzler, Donald (8 de novembro de 2020). «Long Range Arena: A Benchmark for Efficient Transformers». arXiv:2011.04006Acessível livremente [cs.LG] 
  95. «Reformer: The Efficient Transformer». Google AI Blog. 16 de janeiro de 2020. Consultado em 22 de outubro de 2020. Cópia arquivada em 22 de outubro de 2020 
  96. Gomez, Aidan N; Ren, Mengye; Urtasun, Raquel; Grosse, Roger B (2017). «The Reversible Residual Network: Backpropagation Without Storing Activations». Curran Associates, Inc. Advances in Neural Information Processing Systems. 30. arXiv:1707.04585Acessível livremente 
  97. Child, Rewon; Gray, Scott; Radford, Alec; Sutskever, Ilya (23 de abril de 2019). «Generating Long Sequences with Sparse Transformers». arXiv:1904.10509Acessível livremente 
  98. «Constructing Transformers For Longer Sequences with Sparse Attention Methods». Google AI Blog. 25 de março de 2021. Consultado em 28 de maio de 2021. Cópia arquivada em 18 de setembro de 2021 
  99. Zhai, Shuangfei; Talbott, Walter; Srivastava, Nitish; Huang, Chen; Goh, Hanlin; Zhang, Ruixiang; Susskind, Josh (21 de setembro de 2021). «An Attention Free Transformer». arXiv:2105.14103Acessível livremente [cs.LG] 
  100. Peng, Hao; Pappas, Nikolaos; Yogatama, Dani; Schwartz, Roy; Smith, Noah A.; Kong, Lingpeng (19 de março de 2021). «Random Feature Attention». arXiv:2103.02143Acessível livremente [cs.CL] 
  101. Choromanski, Krzysztof; Likhosherstov, Valerii; Dohan, David; Song, Xingyou; Gane, Andreea; Sarlos, Tamas; Hawkins, Peter; Davis, Jared; Belanger, David; Colwell, Lucy; Weller, Adrian (30 de setembro de 2020). «Masked Language Modeling for Proteins via Linearly Scalable Long-Context Transformers». arXiv:2006.03555Acessível livremente [cs.LG] 
  102. Lu, Kevin; Grover, Aditya; Abbeel, Pieter; Mordatch, Igor (28 de junho de 2022). «Frozen Pretrained Transformers as Universal Computation Engines». Proceedings of the AAAI Conference on Artificial Intelligence (em inglês). 36 (7): 7628–7636. ISSN 2374-3468. doi:10.1609/aaai.v36i7.20729 
  103. «Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90%* ChatGPT Quality | LMSYS Org». lmsys.org (em inglês). Consultado em 11 de agosto de 2024 
  104. Liu, Haotian; Li, Chunyuan; Wu, Qingyang; Lee, Yong Jae (15 de dezembro de 2023). «Visual Instruction Tuning». Advances in Neural Information Processing Systems (em inglês). 36: 34892–34916 
  105. Radford, Alec; Kim, Jong Wook; Xu, Tao; Brockman, Greg; McLeavey, Christine; Sutskever, Ilya (2022). «Robust Speech Recognition via Large-Scale Weak Supervision». arXiv:2212.04356Acessível livremente [eess.AS] 
  106. Jaegle, Andrew; Gimeno, Felix; Brock, Andrew; Zisserman, Andrew; Vinyals, Oriol; Carreira, Joao (22 de junho de 2021). «Perceiver: General Perception with Iterative Attention». arXiv:2103.03206Acessível livremente [cs.CV] 
  107. Jaegle, Andrew; Borgeaud, Sebastian; Alayrac, Jean-Baptiste; Doersch, Carl; Ionescu, Catalin; Ding, David; Koppula, Skanda; Zoran, Daniel; Brock, Andrew; Shelhamer, Evan; Hénaff, Olivier (2 de agosto de 2021). «Perceiver IO: A General Architecture for Structured Inputs & Outputs». arXiv:2107.14795Acessível livremente [cs.LG] 
  108. «Parti: Pathways Autoregressive Text-to-Image Model». sites.research.google. Consultado em 9 de agosto de 2024 
  109. a b Villegas, Ruben; Babaeizadeh, Mohammad; Kindermans, Pieter-Jan; Moraldo, Hernan; Zhang, Han; Saffar, Mohammad Taghi; Castro, Santiago; Kunze, Julius; Erhan, Dumitru (29 de setembro de 2022). «Phenaki: Variable Length Video Generation from Open Domain Textual Descriptions» (em inglês). arXiv:2210.02399Acessível livremente [cs.CV] 
  110. a b Chang, Huiwen; Zhang, Han; Barber, Jarred; Maschinot, A. J.; Lezama, Jose; Jiang, Lu; Yang, Ming-Hsuan; Murphy, Kevin; Freeman, William T. (2 de janeiro de 2023). «Muse: Text-To-Image Generation via Masked Generative Transformers». arXiv:2301.00704Acessível livremente [cs.CV]  Parâmetro desconhecido |link-autor7= ignorado (ajuda)
  111. Ramesh, Aditya; Pavlov, Mikhail; Goh, Gabriel; Gray, Scott; Voss, Chelsea; Radford, Alec; Chen, Mark; Sutskever, Ilya (26 de fevereiro de 2021). «Zero-Shot Text-to-Image Generation». arXiv:2102.12092Acessível livremente 
  112. Yu, Jiahui; Xu, Yuanzhong; Koh, Jing Yu; Luong, Thang; Baid, Gunjan; Wang, Zirui; Vasudevan, Vijay; Ku, Alexander; Yang, Yinfei (21 de junho de 2022). «Scaling Autoregressive Models for Content-Rich Text-to-Image Generation». arXiv:2206.10789Acessível livremente 
  113. Kariampuzha, William; Alyea, Gioconda; Qu, Sue; Sanjak, Jaleal; Mathé, Ewy; Sid, Eric (2023). «Precision information extraction for rare disease epidemiology at scale». Journal of Translational Medicine. 21 (1): 157. PMC 9972634Acessível livremente. PMID 36855134. doi:10.1186/s12967-023-04011-y 
  114. Maity, Abhishek (março de 2026). «CrisisSense: Transforming Social Signals into Real-Time Disaster Awareness via Deep Neural Intelligence». 2026 IEEE Madhya Pradesh Section Conference (MPCON): 1501–1506. doi:10.1109/MPCON69668.2026.11508516 

Leitura adicional

editar

📚 Artikel Terkait di Wikipedia

Pré-treinamento contrastivo linguagem-imagem

Unsupervised Multitask Learners». OpenAI  «std and mean for image normalization different from ImageNet · Issue #20 · openai/CLIP». GitHub. Consultado em 19

Manuscrito em folha de palmeira

Venu Govindaraju. «Digital Enhancement of Palm Leaf Manuscript Images using Normalization Techniques» (PDF). Amherst, USA: SUNY at Buffalo. Consultado em

Reconhecimento de Objetos e Teoria dos Geons

Physiology. 195 (1): 215–243. Carandini, M.; Heeger, D. J. (2012). «Normalization as a canonical neural computation». Nature Reviews Neuroscience. 13

Problema do desaparecimento do gradiente

(2018). «How Does Batch Normalization Help Optimization?». Curran Associates, Inc. Advances in Neural Information Processing Systems. 31  J. Schmidhuber