Encoder
- Explica o processo de converter texto em vetores e, em seguida, adicionar informações de posição aos embeddings obtidos.
- O objetivo é gerar embeddings que capturem a informação semântica do texto de entrada.
1. Embeddings de texto
- Converte "Hello World" em vetores para gerar embeddings.
- Atribui valores arbitrários a cada token para criar vetores.
2. Codificação posicional
- Soma a codificação posicional aos embeddings para adicionar informações sobre a posição das palavras.
- Usa vetores fixos para atribuir a cada posição um padrão numérico único e consistente.
3. Combinação de codificação posicional e embeddings
- Soma a codificação posicional e os embeddings para criar uma nova matriz que será usada como entrada do encoder.
Self-attention
- Explica a atenção, um mecanismo que permite ao modelo focar em partes específicas da entrada.
- Com atenção multi-head, é possível focar simultaneamente em informações em diferentes espaços de representação.
4.1 Definição das matrizes
- Define as matrizes K, V e Q para cada cabeça de atenção.
4.2 Cálculo de key, query e value
- Calcula as matrizes de key, query e value multiplicando os embeddings de entrada pelas matrizes de pesos.
4.3 Cálculo da atenção
- Calcula o produto interno entre a query e cada vetor key, e divide o resultado pela raiz quadrada da dimensão dos vetores key.
- Aplica a função softmax para obter os pesos de atenção.
- Multiplica cada vetor value pelos pesos de atenção.
Feed-forward layer
- No encoder, há uma rede neural feed-forward após a camada de self-attention.
- Essa rede usa duas transformações lineares e a função de ativação ReLU.
5.1 Camada feed-forward básica
- A primeira camada linear expande a dimensão da entrada; depois de aplicar a função de ativação ReLU, a segunda camada linear reduz a dimensão de volta ao original.
5.2 Combinando todo o processo do encoder
- Implementa em código um bloco de encoder que inclui atenção multi-head e camada feed-forward.
5.3 Conexões residuais e normalização de camada
- Conexões residuais consistem em somar a entrada da camada à saída, e normalização de camada é uma técnica para normalizar a entrada da camada.
Opinião do GN⁺
- Este texto explica a matemática complexa de forma simplificada para ajudar na compreensão matemática do modelo Transformer.
- Em especial, ajuda a entender como funcionam o mecanismo de self-attention e a rede neural feed-forward.
- Ao mostrar como técnicas como conexões residuais e normalização de camada contribuem para a estabilidade e o desempenho da rede neural, oferece insights sobre como resolver problemas de treinamento em redes neurais profundas.
1 comentários
Opiniões do Hacker News
O “mistério” do transformer é que, em vez de uma sequência linear de pesos e valores estáticos em cada camada, ele usa 3 matrizes diferentes obtidas pelo produto de pesos aprendidos a partir da mesma entrada, e multiplica essas matrizes entre si. Isso permite muito mais processamento em paralelo, mas é bastante limitado porque a fórmula de attention é estática.
Se quiser uma abordagem mais seca, formal e concisa, vale consultar “The Transformer Model in Equations”, de John Thickstun. O conteúdo inteiro cabe em uma única página usando notação matemática padrão.
Ao ler o texto, surgem algumas perguntas.
Gostaria de encontrar um artigo ou paper sobre por que transformers, mesmo funcionando simplesmente como “preditores do próximo token”, conseguem lidar com palavras ou subpalavras/tokens que não estão no conjunto de treino.
Tutoriais de transformers podem ser os novos tutoriais de monads. É um conceito difícil de entender, mas, como em grande parte da ciência da computação, é preciso lutar para compreender e praticar exemplos.
Eu conheço algumas palavras.
Como alguém que já escreveu ANNs do zero sem usar TensorFlow, essa explicação ainda é confusa.
Gosto do site do Quarto. Tenho visto mais usuários de Python usando o Quarto para publicação.
Fico em dúvida se, na etapa 7 do decoder, deveria ser
Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z)em vez deZ_encoder_decoder = layer_norm(Z_encoder_decoder + Z_self_attention), e se está faltando umlayer_normna etapa 8 do decoder.Fico curioso se um LLM usa redes neurais e o que exatamente constitui um “neurônio”. Ou seja, existe alguma estrutura de código por trás dos neurônios, ou é “só” matemática complexa?