A arquitetura transformer é um tipo de rede neural construída em torno da autoatenção. Em vez de depender principalmente de um processamento passo a passo, ela permite que cada token reúna informações de outros tokens relevantes na sequência.

É por isso que transformers funcionam bem para linguagem e outras tarefas sequenciais. Se uma palavra depende de outra palavra que está muito distante, a atenção dá ao modelo um caminho direto entre elas.

O que significa arquitetura transformer

Um bloco transformer faz mais do que aplicar uma única fórmula, mas a autoatenção é a ideia central. Na autoatenção, cada token produz três vetores:

  • uma query, que representa o que esse token está procurando
  • uma key, que representa o que esse token oferece para correspondência
  • um value, que é a informação que pode ser transmitida

Se as representações dos tokens estiverem organizadas em uma matriz XX, uma cabeça de atenção normalmente forma

Q=XWQ,K=XWK,V=XWVQ = XW_Q, \qquad K = XW_K, \qquad V = XW_V

onde WQW_Q, WKW_K e WVW_V são matrizes aprendidas.

A fórmula padrão da atenção por produto escalar escalado é

Attention(Q,K,V)=softmax ⁣(QKTdk)V\operatorname{Attention}(Q, K, V) = \operatorname{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right)V

Aqui, dkd_k é a dimensão das keys. O escalonamento por dk\sqrt{d_k} ajuda a evitar que os escores brutos do produto escalar fiquem grandes demais à medida que a dimensão cresce.

O softmax é aplicado linha por linha. Cada linha responde à pergunta de um token: "Quanta atenção devo dar aos outros tokens?"

Como a autoatenção funciona em linguagem simples

A autoatenção normalmente não escolhe um token e ignora o resto. Ela constrói uma média ponderada dos vetores de valor.

Se um token corresponde fortemente à key de outro token, esse token recebe um peso maior. Se a correspondência é fraca, o peso é menor. A saída para um token é, portanto, uma mistura de informações da sequência que leva o contexto em conta.

Isso ajuda com concordância entre sujeito e verbo, referência pronominal e outras relações de longo alcance. O modelo não precisa que a informação passe por muitas etapas intermediárias antes de ficar disponível.

Exemplo resolvido de autoatenção

Considere uma query e dois tokens candidatos em uma única cabeça de atenção. Para manter a aritmética simples, use dk=1d_k = 1.

Suponha que o token atual tenha a query

q=[2]q = [2]

e que os dois tokens candidatos tenham

k1=[2],k2=[1]k_1 = [2], \qquad k_2 = [1]

com values

v1=[10],v2=[4].v_1 = [10], \qquad v_2 = [4].

Os escores brutos de atenção são os produtos escalares:

qk1T=4,qk2T=2.qk_1^T = 4, \qquad qk_2^T = 2.

Como dk=1d_k = 1, o fator de escala é 1=1\sqrt{1} = 1, então os escores escalados continuam sendo 44 e 22.

Agora aplique softmax a esses dois escores:

α1=e4e4+e20.881,α2=e2e4+e20.119.\alpha_1 = \frac{e^4}{e^4 + e^2} \approx 0.881, \qquad \alpha_2 = \frac{e^2}{e^4 + e^2} \approx 0.119.

A saída da atenção é a combinação ponderada

α1v1+α2v2=0.881(10)+0.119(4)9.29.\alpha_1 v_1 + \alpha_2 v_2 = 0.881(10) + 0.119(4) \approx 9.29.

A ideia principal é simples: a saída fica mais próxima de v1v_1 porque a query correspondeu a k1k_1 mais fortemente do que a k2k_2.

Esse é o padrão básico dentro de um modelo muito maior. Transformers reais fazem isso em dimensões mais altas e com muitos tokens ao mesmo tempo, mas a ideia aritmética é a mesma.

O que mais existe dentro de um bloco transformer

Um transformer é mais do que uma fórmula de atenção. Um bloco padrão geralmente contém:

  • atenção multi-head, para que o modelo possa aprender vários tipos de relações ao mesmo tempo
  • uma rede feedforward aplicada por posição, que transforma cada representação de token após a atenção
  • conexões residuais, que ajudam a preservar e refinar informações entre camadas
  • normalização de camada, que ajuda a estabilizar o treinamento

Na arquitetura transformer original para tarefas sequência a sequência, o modelo tinha uma pilha de encoder e uma pilha de decoder.

  • O encoder usa autoatenção sobre a sequência de entrada.
  • O decoder usa autoatenção mascarada para que uma posição não possa olhar para tokens futuros da saída.
  • O decoder também pode usar atenção cruzada, em que as queries vêm do decoder e as keys e values vêm da saída do encoder.

Muitos modelos de linguagem modernos usam apenas o lado do decoder. A ideia central de atenção continua presente, mas a arquitetura geral é especializada para prever o próximo token.

Por que transformers precisam de informação posicional

A atenção sozinha é equivariante a permutações em relação aos tokens de entrada. Em linguagem simples, se você aplicar apenas atenção ao mesmo conjunto de vetores de tokens sem adicionar posição, o modelo não sabe inerentemente qual token veio primeiro.

É por isso que transformers adicionam informação posicional, como embeddings de posição aprendidos ou codificações posicionais. Sem esse sinal extra, tarefas sensíveis à ordem, como linguagem, seriam muito mais difíceis de modelar corretamente.

Erros comuns sobre a arquitetura transformer

Pensar que atenção é o transformer inteiro

Ela é a ideia central, mas a arquitetura também depende de camadas feedforward, caminhos residuais, normalização e informação posicional.

Confundir autoatenção com atenção cruzada

Na autoatenção, QQ, KK e VV vêm da mesma sequência. Na atenção cruzada, eles não vêm todos da mesma fonte.

Esquecer o papel do mascaramento

Modelos de linguagem somente com decoder precisam de mascaramento causal durante o treinamento e a inferência para que um token não possa prestar atenção a tokens futuros.

Tratar os pesos de atenção como uma explicação completa

Os pesos de atenção podem ser informativos, mas não são uma prova completa do raciocínio do modelo. O comportamento final também depende dos vetores de valor, das camadas posteriores e de transformações não lineares.

Quando modelos transformer são usados

Transformers são amplamente usados em modelagem de linguagem, tradução, sumarização, geração de código, fala e muitas tarefas de visão computacional. Eles funcionam especialmente bem quando relações ao longo de uma sequência ou conjunto importam mais do que padrões puramente locais.

Eles não são mágicos para qualquer cenário. Para conjuntos de dados muito pequenos, restrições rígidas de tempo real ou problemas em que a estrutura indutiva local importa mais, outra arquitetura ainda pode ser mais adequada.

Tente um problema parecido

Pegue uma frase de três palavras e foque em uma delas. Decida quais das outras palavras devem receber peso alto de atenção e por quê, depois esboce um pequeno exemplo de query-key-value que combine com essa intuição.

Se quiser ir um passo além, calcule manualmente uma pequena saída de atenção. Esse costuma ser o caminho mais rápido para sair de "eu conheço a fórmula" e chegar a "eu entendo o que a arquitetura está fazendo".

Precisa de ajuda com um problema?

Envie sua pergunta e receba uma solução verificada, passo a passo, em segundos.

Abrir GPAI Solver →