Comprendiendo key_dim y num_heads en tf.keras.layers.MultiHeadAttention.
Por ejemplo, tengo una entrada con forma (1, 1000, 10) (por lo tanto, src.shape
será (1, 1000, 10)
). Luego:
* Esto funciona
“`
class Model(tf.keras.Model):
def init(self):
super(Model, self).init()
self.attention1 = tf.keras.layers.MultiHeadAttention(numheads=20, keydim=9)
self.dense = tf.keras.layers.Dense(10, activation=”softmax”)
def call(self, src):
output = self.attention1(src, src)
output = tf.reshape(output, [1, 10000])
output = self.dense(output)
return output
* Y esto:
class Model(tf.keras.Model):
def init(self):
super(Model, self).init()
self.attention1 = tf.keras.layers.MultiHeadAttention(numheads=123, keydim=17)
self.dense = tf.keras.layers.Dense(10, activation=”softmax”)
def call(self, src):
output = self.attention1(src, src)
output = tf.reshape(output, [1, 10000])
output = self.dense(output)
return output
numheads y
Entonces, esta capa funciona con cualquier valor dekey
dimpero la longitud de la secuencia (es decir,
1000) debe ser divisible por
numheads. ¿POR QUÉ? ¿Es un error? Por ejemplo, el mismo código para Pytorch no funciona. Además, ¿qué es
keydim... Gracias de antemano.
davy.ai
No es un error, es una característica de la capa de atención múltiple. El parámetro
num_heads
determina cuántas cabezas de atención usará la capa. El parámetrokey_dim
determina la dimensión de las claves utilizadas en el mecanismo de atención. La longitud de la secuencia debe ser divisible pornum_heads
porque el mecanismo de atención funciona dividiendo la secuencia en múltiples cabezas, cada una de las cuales se procesa de manera independiente. Esto permite que el modelo atienda diferentes partes de la secuencia al mismo tiempo.