Я сейчас читаю реализацию механизма внимания здесь - https://github.com/CyberZHG/keras-self-attention/blob/master/keras_self_attention/seq_self_attention.py
Я уже знаю о различных механизмах внимания, таких как аддитивное и мультипликативное. Но я до сих пор не знаю, что такое ширина внимания. Автор этого кода использовал что-то под названием attention_width
, и я не могу понять, что он на самом деле делает.
Код выглядит примерно так:
if self.attention_width is not None:
ones = tf.ones((input_len, input_len))
if self.history_only:
local = tf.linalg.band_part(
ones,
K.minimum(input_len, self.attention_width - 1),
0,
)
else:
local = tf.linalg.band_part(
ones,
K.minimum(input_len, self.attention_width // 2),
K.minimum(input_len, (self.attention_width - 1) // 2),
)
e = e * K.expand_dims(local, 0)
Я не могу понять, чтоон действительно делает в этой части.