5 pontos por GN⁺ 2024-01-04 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-01-04
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.

    • Até surgir uma forma de generalizar o grafo computacional para parâmetros treináveis, parece difícil ver mais avanços.
    • Não está claro se isso é possível no sentido tradicional com os métodos de gradiente existentes, por causa de efeitos caóticos em que pequenas mudanças causam grandes variações no desempenho.
    • Talvez algo como algoritmos genéticos ou PSO precise acontecer internamente.
  • 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.

    • Os vetores correspondentes a “Hello” e “World” parecem aleatórios, mas também parecem ter algum padrão.
    • Fico curioso se a repetição do número 2 no vetor tem algum significado, ou se o conjunto inteiro é único.
  • 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.

    • Por exemplo, ao criar uma tabela no pandas com colunas “sdsfs_ff” e “fsdf_value”, ou ao criar exemplos que não existiam no conjunto de treino e pedir a um LLM uma saída parecida.
    • Também seria bom ter links com discussão sobre embeddings posicionais. Ainda não encontrei uma resposta satisfatória sobre o uso de seno/cosseno e sobre (multiplicação vs. comparação).
  • 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.

    • Quando pedi ao ChatGPT para explicar como implementar self-attention modificando uma ANN básica sem usar os termos matriz ou vetor, ele deu uma explicação realmente simples.
    • Prefiro pensar em tudo em termos de nós, pesos e camadas. Matrizes e vetores tornam mais difícil relacionar isso ao que está acontecendo em uma ANN.
    • A forma como estou acostumado a escrever ANNs é com cada nó de entrada sendo um escalar, mas o algoritmo feed forward parece uma multiplicação vetor-matriz, porque multiplica todos os nós de entrada pelos pesos e depois soma tudo.
  • 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 de Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z_self_attention), e se está faltando um layer_norm na 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?