Open mariagrandury opened 3 years ago
Ya que empezamos el proyecto en otro repositorio, voy a copiar a continuación los mensajes relevantes para continuar.
Comentario de @IsaacRodgz
Artículos de referencia:
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?
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.
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:
Un par de vídeos de ~10mins muy útiles para entender positional encoding:
Entender, explicar e implementar la pieza "Positional Encoding" de la arquitectura Transformer.