Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Positional Encoding #2

Open
mariagrandury opened this issue May 10, 2021 · 5 comments
Open

Positional Encoding #2

mariagrandury opened this issue May 10, 2021 · 5 comments

Comments

@mariagrandury
Copy link
Member

Entender, explicar e implementar la pieza "Positional Encoding" de la arquitectura Transformer.

@mariagrandury mariagrandury created this issue from a note in The Annotated Transformer (To Do) May 10, 2021
@mariagrandury mariagrandury self-assigned this May 10, 2021
@mariagrandury mariagrandury moved this from To Do to In Progress in The Annotated Transformer May 10, 2021
@mariagrandury mariagrandury moved this from In Progress to In Review in The Annotated Transformer May 10, 2021
@mariagrandury mariagrandury moved this from In Review to Done in The Annotated Transformer May 10, 2021
@mariagrandury mariagrandury moved this from Done to To Do in The Annotated Transformer May 10, 2021
@mariagrandury
Copy link
Member Author

Ya que empezamos el proyecto en otro repositorio, voy a copiar a continuación los mensajes relevantes para continuar.

@mariagrandury
Copy link
Member Author

Comentario de @IsaacRodgz

Dado que todavía parece no haber un consenso o una prueba contundente sobre si los positional encodings son necesarios o no, creo lo mejor sería hacer que sea un parámetro opcional en el modelo, es decir que por argumentos se pueda decidir si incluirlos o no en el modelo. En cuanto a la implementación, yo propondría dejar la versión orginal, con señales seno y coseno y a lo mejor una opción donde estos sean una matriz Embedding aprendible. ¿Qué opinan?

@mariagrandury
Copy link
Member Author

Comentario de @garbanciton

Totalmente de acuerdo contigo deberíamos poner esa función de positional encoding con opción de ponerla o quitarla. Al final resumiendo mucho ese positional encoding que se suma al embedding, lo que va a hacer es que cuando se haga el coseno similaridad en multi-head attention o el dot product ( que es lo mismo ) van a dar resultados distintos depende de donde estén ubicadas las palabras. Pongo un ejemplo que se ve más claro.

  • oración 1 : "El gato saltó"
  • oración 2 : "El gato que está encima de la mesa saltó"

digamos que "gato" y "saltó" tiene vectores [1,2,3] y [2,3,4] su dot product es:

>> import numpy as np
>> np.dot([1,2,3],[2,3,4])
>> 20

si ahora a estos embeddings sumamos el vector de positional encoding de la oración 1 su dot product será totalmente distinto del de la oración 2, y así es como supuestamente tenemos en cuenta la posición de las palabras.

Personalmente creo que no tiene sentido sumar la información de los embeddings ,si los embeddings son pre-entrenados como puede ser word2vec o glove ,porque son cosas totalmente distintas.

Ahora bien tal y como dicen en el paper:

we use learned embeddings to convert the input tokens and output tokens to vectors of dimension dmodel.

puede tener más sentido sumar aquí, ya que esos embeddings están creándose durante el entrenamiento con la suma del postional encoding. Tengo la intuición de que estos postional encoding al ser senos y cosenos tienen en cuenta la posición relativa entre palabras, es decir, las palabras que aparezcan en la posición 2 y 3, y que esas mismas aparezcan en otro contexto pero en las posiciones 7 y 8 su dot product debería ser el mismo.

Sería interesante ver esta hipótesis una vez hallamos entrenado los embeddings:

  • Calcular dot product para pares de palabras iguales y misma separación en distintas posiciones

@mariagrandury
Copy link
Member Author

Un par de vídeos de ~10mins muy útiles para entender positional encoding:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Development

No branches or pull requests

4 participants