Что понимается под шириной внимания и почему она используется? - PullRequest
0 голосов
/ 30 сентября 2019

Я сейчас читаю реализацию механизма внимания здесь - 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)

Я не могу понять, чтоон действительно делает в этой части.

...