Nesse post, antes de entendermos a estrutura de um Transformer, vamos entender primeiro como funcionam os modelos autoregressivos. Eles são uma classe de modelos que recebem sequências de dados e geram novas sequências, um elemento por vez. Isso deixará mais simples o entendimento da arquitetura dos Transformers em breve.
Transformers são modelos que realizam transdução de sequências utilizando um processo autoregressivo. Essa característica define como os diferentes componentes do modelo são organizados e combinados ao longo da arquitetura.
Quando um modelo de transdução de sequências é autoregressivo, ele é treinado para modificar a sequência recebida por meio de um processo chamado shift, no qual:
O primeiro elemento é removido.
Todos os elementos são deslocados uma posição para trás.
A última posição é preenchida com um novo elemento gerado pelo modelo.
O modelo gera um novo elemento, que é adicionado ao início da sequência gerada. Em seguida, a sequência pós-shift se torna a nova sequência recebida, e o processo se repete: a cada iteração, um novo elemento é gerado e acrescentado à sequência, até que algum critério de parada seja atingido.
Os critérios de parada podem ser:
Definir um número máximo de iterações.
Encerrar o algoritmo quando o último elemento gerado for igual a um valor especial, como o token <eos>.
O exemplo a seguir mostra como funciona a tradução autoregressiva da palavra “cachorro” em Português para “dog” em Inglês. Os tokens especiais são usados para separar o texto de entrada do texto gerado, formando a sequência <bos>cachorro<eos><bos>dog<eos>.
sequeˆncia recebida123450<bos> c a c h 1 c a c h o 2 a c h o r 3 c h o r r 4 h o r r o 5 o r r o <eos>6 r r o <eos><bos>7 r o <eos><bos> d 8 o <eos><bos> d o 9<eos><bos> d o g ↓Sequeˆncia apoˊs o shift123450 c a c h o 1 a c h o r 2 c h o r r 3 h o r r o 4 o r r o <eos>5 r r o <eos><bos>6 r o <eos><bos> d 7 o <eos><bos> d o 8<eos><bos> d o g 9<bos> d o g <eos>
Observe que, no primeiro shift, o resultado é sempre o mesmo: o token <bos> que está no início do texto é movido para o final. Esse padrão será útil para o treinamento dos Transformers no futuro.
Além disso, observe que o tamanho da sequência gerada depende apenas da quantidade de shifts realizados, e não do tamanho da sequência recebida. Assim, modelos autoregressivos permitem gerar sequências de qualquer comprimento.
Todos os mecanismos de atenção explicados utilizam todos os elementos da sequência recebida para gerar um novo elemento. Assim, o elemento na posição i da sequência gerada pode depender dos elementos nas posições i+1, i+2 e seguintes. Durante o treinamento, isso pode introduzir um viés indesejado no modelo.
Esse viés acontece porque a função de perda compara a sequência pós-shift com a sequência gerada. Ou seja, para todos os elementos, exceto o último, a perda é calculada verificando se o i-ésimo elemento da sequência gerada corresponde ao i+1-ésimo elemento da sequência recebida. Assim, se o modelo puder acessar o i+1-ésimo elemento durante a geração, ele sempre irá copiar esse valor.
Esse padrão causa um vazamento de dados. Se não for corrigido, o modelo pode ter dificuldade para gerar corretamente o último elemento da sequência. Por isso, é importante limitar o acesso do modelo aos elementos posteriores durante a geração, permitindo que ele aprenda os padrões de atenção de forma adequada durante o treinamento.
Essa limitação é feita nos Transformers com o uso de uma attention mask, que zera parte dos pesos para garantir que um novo elemento não seja baseado nos valores dos elementos seguintes.
A aplicação da attention mask é feita somando −∞ aos elementos da matriz triangular superior dos pesos de atenção. Assim, esses elementos se tornam 0 após a aplicação da função Softmax.
SDPA-Mask(Q,K,V,M)=Softmax(dinQTK+M)VPesos de atenc¸a˜o123⋮t−1t16.32−1.81−1.81⋮−0.111.452−1.120.960.06⋮1.55−1.4231.320.89−2.27⋮−0.181.62…………⋱……t−1−2.160.031.01⋮0.952.06t1.921.76−1.32⋮0.95−0.23+Maˊscara de atenc¸a˜o123⋮t−1t1000⋮002−∞00⋮003−∞−∞0⋮00…………⋱……t−1−∞−∞−∞⋮00t−∞−∞−∞⋮−∞0↓Pesos mascarados123⋮t−1t16.32−1.81−1.81⋮−0.111.452−∞0.960.06⋮1.55−1.423−∞−∞−2.27⋮−0.181.62…………⋱……t−1−∞−∞−∞⋮0.952.06t−∞−∞−∞⋮−∞−0.23
Apesar da motivação explicada agora para o seu uso, em alguns casos, esse vazamento não causará problemas. Nesses casos, para compatibilidade, a attention mask aplicada será apenas um tensor nulo.
Pesos de atenc¸a˜o123⋮t−1t16.32−1.81−1.81⋮−0.111.452−1.120.960.06⋮1.55−1.4231.320.89−2.27⋮−0.181.62…………⋱……t−1−2.160.031.01⋮0.952.06t1.921.76−1.32⋮0.95−0.23+Matriz nula123⋮t−1t1000⋮002000⋮003000⋮00…………⋱……t−1000⋮00t000⋮00↓Pesos de atenc¸a˜o123⋮t−1t16.32−1.81−1.81⋮−0.111.452−1.120.960.06⋮1.55−1.4231.320.89−2.27⋮−0.181.62…………⋱……t−1−2.160.031.01⋮0.952.06t1.921.76−1.32⋮0.95−0.23
Você pode obter a attention mask de um tensor arbitrário da seguinte forma:
Usando um processo autogressivo, é possível criar modelos capazes de gerar sequências inteiras de elementos de forma iterativa. Esse é o segredo para criar inteligências artificiais capazes de traduzir textos, responder perguntas, e outras aplicações.
Agora temos todas as peças para montar nosso próprio modelo desse tipo. No próximo post, vamos ver como foi feita a arquitetura do primeiro Transformer, como descrito no artigo original.